Commit ff33a2f0 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch 'division_optimizations_fxd' into 'main'

Removed usage of division and used multiplication at points possible.

See merge request !411
parents 592eb2cc 44acc3d2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -575,7 +575,7 @@ enum
#define FRAMES_PER_SEC                      50
#ifdef IVAS_FLOAT_FIXED
#define MAX_PARAM_SPATIAL_SUB_FRAMES_PER_SEC              200 //(FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES)
#define ONE_BY_FRAMES_PER_SEC_Q31           ((Word32)(0x028F5C29))
#define ONE_BY_FRAMES_PER_SEC_Q31           ( 42949673 )
#define FRAMES_PER_SEC_BY_2                 (FRAMES_PER_SEC >> 1)
#endif
#define INV_FRAME_PER_SEC_Q15               656
@@ -607,6 +607,7 @@ enum

#define N_WS2N_FRAMES                       40                                  /* number of frames for attenuation during the band-width switching */
#define N_NS2W_FRAMES                       20                                  /* number of frames for attenuation during the band-width switching */
#define ONE_BY_N_NS2W_FRAMES_Q15           ( 1638 )

/*----------------------------------------------------------------------------------*
 * Coder types (only for ACELP core when not running in AMR-WB IO mode)
+2 −0
Original line number Diff line number Diff line
@@ -1681,6 +1681,8 @@ typedef enum
#define DEG_360_IN_Q22                          (360 << Q22)
#define DEG_180_IN_Q22                          (180 << Q22)
#define DEG_90_IN_Q22                           (90 << Q22)
#define ONE_BY_360_Q31                          ( 5965232 )
#define ONE_BY_180_Q31                          ( 11930465 )

/* ----- Enums - TD Renderer ----- */

+3 −4
Original line number Diff line number Diff line
@@ -639,10 +639,9 @@ void ivas_get_dirac_sba_max_md_bits_fx(
    }
    ELSE
    {
        //*bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC );
        Word16 tmp_exp = 0, tmp;
        tmp = BASOP_Util_Divide3232_Scale( sba_total_brate, FRAMES_PER_SEC, &tmp_exp );
        *bits_frame_nominal = shr( tmp, 15 - tmp_exp );
        /* *bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); */
        *bits_frame_nominal = extract_l( Mpy_32_32( sba_total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
        move16();
        *metadata_max_bits = MAX16B; /* no limit */
    }
    Word32 var1 = L_mult0( *metadata_max_bits, nbands );
+7 −6
Original line number Diff line number Diff line
@@ -53,7 +53,10 @@
#define BITS_ISM_INACTIVE ( BRATE_ISM_INACTIVE / FRAMES_PER_SEC )

#define BETA_ISM_LOW_IMP             0.6f
#define BETA_ISM_LOW_IMP_Q31         ( 1288490189 )
#define BETA_ISM_MEDIUM_IMP          0.8f
#define BETA_ISM_MEDIUM_IMP_Q31      ( 1717986918 )
#define BETA_ISM_MEDIUM_IMP_BY_8_Q31 ( 214748365 )

#define MAX_BRATE_TCX_32k            48000
#define BITS_IVAS_512k               ( IVAS_512k / FRAMES_PER_SEC )
@@ -585,15 +588,13 @@ ivas_error ivas_ism_config_fx(
            ELSE IF( EQ_16( ism_imp[ch], ISM_LOW_IMP ) )
            {
                // tmp = (Word16) ( BETA_ISM_LOW_IMP * bits_CoreCoder[ch] );
                tmp1 = BASOP_Util_Divide1616_Scale( bits_CoreCoder[ch], 5, &exp );
                tmp = shr( mult( tmp1, 24576 ), ( 15 - exp + 13 ) - 15 );
                tmp = extract_l( Mpy_32_32( BETA_ISM_LOW_IMP_Q31, bits_CoreCoder[ch] ) );
                tmp = s_max( limit, tmp );
            }
            ELSE IF( EQ_16( ism_imp[ch], ISM_MEDIUM_IMP ) )
            {
                // tmp = (Word16) ( BETA_ISM_MEDIUM_IMP * bits_CoreCoder[ch] );
                tmp1 = BASOP_Util_Divide1616_Scale( bits_CoreCoder[ch], 5, &exp );
                tmp = shr( mult( tmp1, 16384 ), ( 15 - exp + 12 ) - 15 );
                tmp = extract_l( Mpy_32_32( BETA_ISM_MEDIUM_IMP_BY_8_Q31, L_shl( bits_CoreCoder[ch], Q3 ) ) );
                tmp = s_max( limit, tmp );
            }
            ELSE /* ism_imp[ch] == ISM_HIGH_IMP */
+5 −5
Original line number Diff line number Diff line
@@ -179,7 +179,7 @@ void ivas_masa_set_elements_fx(
    const Word32 ism_total_brate      /* i  : initial ISM total bitrate               */
)
{
    Word16 tmp, tmp_e;
    Word16 tmp;

    IF( EQ_16( nchan_transport, 2 ) )
    {
@@ -232,12 +232,12 @@ void ivas_masa_set_elements_fx(
                move16();
            }
        }
        tmp = BASOP_Util_Divide3216_Scale( ivas_total_brate, FRAMES_PER_SEC, &tmp_e );
        hQMetaData->bits_frame_nominal = shr( tmp, negate( add( 1, tmp_e ) ) ); // Q0
        /* hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); */
        hQMetaData->bits_frame_nominal = extract_l( Mpy_32_32( ivas_total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
        IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) && ( EQ_16( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_16( ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_16( ism_mode, ISM_MASA_MODE_DISC ) ) )
        {
            tmp = BASOP_Util_Divide3216_Scale( ism_total_brate, FRAMES_PER_SEC, &tmp_e );
            tmp = shr( tmp, negate( add( 1, tmp_e ) ) ); // Q0
            /* hQMetaData->bits_frame_nominal -= (int16_t) ( ism_total_brate / FRAMES_PER_SEC ); */
            tmp = extract_l( Mpy_32_32( ism_total_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) );
            hQMetaData->bits_frame_nominal = sub( hQMetaData->bits_frame_nominal, tmp );
        }
    }
Loading