Commit 701c7e23 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

LTV test with optimizations enabled

parent d3fbdc6b
Loading
Loading
Loading
Loading
Loading
+21 −64
Original line number Diff line number Diff line
@@ -458,14 +458,8 @@ void hp20_fx_32(
{
    Word16 i;
    Word32 a1_fx, a2_fx, b1_fx, b2_fx;
#ifdef OPT_STEREO_32KBPS_V1
    Word16 Qy1, Qy2, Qmin;
    Word64 y0_fx64, y1_fx64, y2_fx64;
    Word32 x0, x1, x2;
#else  /* OPT_STEREO_32KBPS_V1 */
    Word16 Qx0, Qx1, Qx2, Qy1, Qprev_y1, Qy2, Qprev_y2, Qmin;
    Word64 x0_fx64, x1_fx64, x2_fx64, y0_fx64, y1_fx64, y2_fx64, R1, R2, R3, R4, R5;
#endif /* OPT_STEREO_32KBPS_V1 */

    IF( EQ_32( Fs, 8000 ) )
    {
@@ -516,64 +510,16 @@ void hp20_fx_32(
    move32();
    move32();

#ifdef OPT_STEREO_32KBPS_V1
    y1_fx64 = W_add( W_deposit32_l( mem_fx[0] ), W_deposit32_h( mem_fx[1] ) );
    y2_fx64 = W_add( W_deposit32_l( mem_fx[2] ), W_deposit32_h( mem_fx[3] ) );

    x0 = mem_fx[4];
    move32();
    x1 = mem_fx[5];
    move32();
#else  /* OPT_STEREO_32KBPS_V1 */
    Qprev_y1 = extract_l( mem_fx[4] );
    Qprev_y2 = extract_l( mem_fx[5] );
    y1_fx64 = W_deposit32_l( mem_fx[0] );
    y2_fx64 = W_deposit32_l( mem_fx[1] );
    x0_fx64 = W_deposit32_l( mem_fx[2] );
    x1_fx64 = W_deposit32_l( mem_fx[3] );
#endif /* OPT_STEREO_32KBPS_V1 */

    FOR( i = 0; i < lg; i++ )
    {
#ifdef OPT_STEREO_32KBPS_V1
        x2 = x1;
        move32();
        x1 = x0;
        move32();
        x0 = signal_fx[i];
        move32();

        Qy1 = W_norm( y1_fx64 );
        if ( y1_fx64 == 0 )
        {
            Qy1 = 62;
            move16();
        }

        Qy2 = W_norm( y2_fx64 );
        if ( y2_fx64 == 0 )
        {
            Qy2 = 62;
            move16();
        }

        Qmin = s_min( Qy1, Qy2 );

        Qmin = sub( Qmin, 34 );

        y0_fx64 = W_mac_32_32( W_mult_32_32( W_shl_sat_l( y1_fx64, Qmin ), a1_fx ), W_shl_sat_l( y2_fx64, Qmin ), a2_fx ); // Qmin + Q29 + Q30 + 1

        Word64 temp = W_mac_32_32( W_mac_32_32( W_mult_32_32( x2, b2_fx ), x1, b1_fx ), x0, b2_fx ); // Q30
        Word64 y0_fx = W_shr( y0_fx64, add( Qmin, Q30 ) );                                           // Q30
        y0_fx64 = W_add( temp, y0_fx );                                                              // Q30
        signal_fx[i] = W_shl_sat_l( y0_fx64, -Q30 );
        move32();

        y2_fx64 = y1_fx64;
        move64();
        y1_fx64 = y0_fx64;
        move64();
#else  /* OPT_STEREO_32KBPS_V1 */
        x2_fx64 = x1_fx64;
        move64();
        x1_fx64 = x0_fx64;
@@ -587,7 +533,11 @@ void hp20_fx_32(
            move16();
        }
        Qy1 = sub( Qy1, 34 );
#ifdef OPT_STEREO_32KBPS_V1
        R1 = W_mult0_32_32( W_shl_sat_l( y1_fx64, Qy1 ), a1_fx );
#else  /* OPT_STEREO_32KBPS_V1 */
        R1 = W_mult0_32_32( W_extract_l( W_shl( y1_fx64, Qy1 ) ), a1_fx );
#endif /* OPT_STEREO_32KBPS_V1 */
        Qy1 = add( Qy1, Qprev_y1 );

        Qy2 = W_norm( y2_fx64 );
@@ -597,7 +547,11 @@ void hp20_fx_32(
            move16();
        }
        Qy2 = sub( Qy2, 34 );
#ifdef OPT_STEREO_32KBPS_V1
        R2 = W_mult0_32_32( W_shl_sat_l( y2_fx64, Qy2 ), a2_fx );
#else  /* OPT_STEREO_32KBPS_V1 */
        R2 = W_mult0_32_32( W_extract_l( W_shl( y2_fx64, Qy2 ) ), a2_fx );
#endif /* OPT_STEREO_32KBPS_V1 */
        Qy2 = add( Qy2, Qprev_y2 );

        Qx0 = W_norm( x0_fx64 );
@@ -607,7 +561,11 @@ void hp20_fx_32(
            move16();
        }
        Qx0 = sub( Qx0, 34 );
#ifdef OPT_STEREO_32KBPS_V1
        R3 = W_mult0_32_32( W_shl_sat_l( x0_fx64, Qx0 ), b2_fx );
#else  /* OPT_STEREO_32KBPS_V1 */
        R3 = W_mult0_32_32( W_extract_l( W_shl( x0_fx64, Qx0 ) ), b2_fx );
#endif /* OPT_STEREO_32KBPS_V1 */

        Qx1 = W_norm( x1_fx64 );
        if ( x1_fx64 == 0 )
@@ -616,7 +574,11 @@ void hp20_fx_32(
            move16();
        }
        Qx1 = sub( Qx1, 34 );
#ifdef OPT_STEREO_32KBPS_V1
        R4 = W_mult0_32_32( W_shl_sat_l( x1_fx64, Qx1 ), b1_fx );
#else  /* OPT_STEREO_32KBPS_V1 */
        R4 = W_mult0_32_32( W_extract_l( W_shl( x1_fx64, Qx1 ) ), b1_fx );
#endif /* OPT_STEREO_32KBPS_V1 */

        Qx2 = W_norm( x2_fx64 );
        if ( x2_fx64 == 0 )
@@ -625,7 +587,11 @@ void hp20_fx_32(
            move16();
        }
        Qx2 = sub( Qx2, 34 );
#ifdef OPT_STEREO_32KBPS_V1
        R5 = W_mult0_32_32( W_shl_sat_l( x2_fx64, Qx2 ), b2_fx );
#else  /* OPT_STEREO_32KBPS_V1 */
        R5 = W_mult0_32_32( W_extract_l( W_shl( x2_fx64, Qx2 ) ), b2_fx );
#endif /* OPT_STEREO_32KBPS_V1 */

        Qmin = s_min( Qy1, Qy2 );

@@ -641,6 +607,7 @@ void hp20_fx_32(

        signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) );
        move32();

        IF( signal_fx[i] < 0 )
        {
            signal_fx[i] = L_add( signal_fx[i], 1 );
@@ -655,17 +622,8 @@ void hp20_fx_32(
        move64();
        move16();
        move16();
#endif /* OPT_STEREO_32KBPS_V1 */
    }

#ifdef OPT_STEREO_32KBPS_V1
    mem_fx[0] = W_extract_l( y1_fx64 );
    mem_fx[1] = W_extract_h( y1_fx64 );
    mem_fx[2] = W_extract_l( y2_fx64 );
    mem_fx[3] = W_extract_h( y2_fx64 );
    mem_fx[4] = x0;
    mem_fx[5] = x1;
#else  /* OPT_STEREO_32KBPS_V1 */
    Qy1 = W_norm( y1_fx64 );
    test();
    IF( y1_fx64 != 0 && LT_16( Qy1, 32 ) )
@@ -688,7 +646,6 @@ void hp20_fx_32(
    mem_fx[3] = W_extract_l( x1_fx64 );
    mem_fx[4] = Qprev_y1;
    mem_fx[5] = Qprev_y2;
#endif /* OPT_STEREO_32KBPS_V1 */

    move32();
    move32();
+23 −8
Original line number Diff line number Diff line
@@ -128,18 +128,26 @@ void init_lvq_fx(
    FOR( i = 0; i < MAX_NO_MODES; i++ )
    {
#ifdef OPT_STEREO_32KBPS_V1
        FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) )
        FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; j++ )
        {
            if ( ( no_lead_fx[i][j] <= 0 ) )
            if ( no_lead_fx[i][j] > 0 )
            {
                j = MAX_NO_SCALES;
                k++;
            }
            if ( no_lead_fx[i][j] <= 0 )
            {
                j = MAX_NO_SCALES - 1;
            }
        }
        no_scales[i][0] = k;
        move16();

        FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) )
        FOR( k = 0; j < MAX_NO_SCALES << 1; j++ )
        {
            if ( no_lead_fx[i][j] > 0 )
            {
                k++;
            }
            if ( no_lead_fx[i][j] <= 0 )
            {
                j = MAX_NO_SCALES << 1;
@@ -172,19 +180,26 @@ void init_lvq_fx(
    FOR( i = 0; i < MAX_NO_MODES_p; i++ )
    {
#ifdef OPT_STEREO_32KBPS_V1
        FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) )
        FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; j++ )
        {

            if ( no_lead_p_fx[i][j] > 0 )
            {
                k++;
            }
            if ( ( no_lead_p_fx[i][j] <= 0 ) )
            {
                j = MAX_NO_SCALES;
                j = MAX_NO_SCALES - 1;
            }
        }
        no_scales_p[i][0] = k;
        move16();

        FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) )
        FOR( k = 0; j < MAX_NO_SCALES << 1; j++ )
        {
            if ( no_lead_p_fx[i][j] > 0 )
            {
                k++;
            }

            if ( ( no_lead_p_fx[i][j] <= 0 ) )
            {
+3 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@
#endif

/* Note: each compile switch (FIX_1101_...) is independent from the other ones */
//#define OPT_STEREO_32KBPS_V1                    /* Optimization made in stereo decoding path for 32kbps decoding */
#define OPT_STEREO_32KBPS_V1                    /* Optimization made in stereo decoding path for 32kbps decoding */
#define OPT_AVOID_STATE_BUF_RESCALE             /* Optimization made to avoid rescale of synth state buffer */
#define FIX_1310_SPEEDUP_ivas_dirac_dec_get_response_fx                 /*FhG: WMOPS tuning, nonbe*/
#define FIX_1310_SPEEDUP_ivas_dirac_dec_output_synthesis_process_slot   /*FhG: WMOPS tuning, nonbe*/
@@ -78,4 +78,6 @@
#define HARM_PUSH_BIT
#define HARM_ENC_INIT
//#define HARM_SCE_INIT
#define OPT_STEREO_32KBPS_V1
//#define OPT_STEREO_32KBPS_V1
#endif
+63 −62
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@

#define POW_EXC16k_WHTND                    1.14e11f   /* power of random excitation, length 320 samples, uniform distribution */
#define POW_EXC16k_WHTND_FX_INV_SQRT        6360       // Q31
#define POW_EXC16k_WHTND_FX_INV_SQRT_IN_Q49 1667313793 // Q49
#define POW_EXC16k_WHTND_FX                 178125000  // Q-6
#define THR_ENV_ERROR_PLOSIVE               200.0f     /* threshold for envelope error used in plosive detection */
#define THR_ENV_ERROR_PLOSIVE_FX            200        /* threshold for envelope error used in plosive detection Q0 */
@@ -3958,7 +3959,7 @@ void GenShapedSHBExcitation_ivas_dec_fx(
    Word16 exc32k[L_FRAME32k], exc16k[L_FRAME16k];
    Word32 pow1, pow22;
    Word16 scale, temp1, temp2, temp3;

    Word16 Q_White_exc16k;
    Word16 excTmp2[L_FRAME16k];
    Word16 *White_exc16k;
    Word16 excNoisyEnv[L_FRAME16k];
@@ -3989,12 +3990,13 @@ void GenShapedSHBExcitation_ivas_dec_fx(
    Word32 White_exc16k_32[L_FRAME16k];
    Word16 White_exc16k_tmp[L_FRAME16k];
    Word16 Q_temp;
    Word16 prev_Q_bwe_exc_fb;
    Word16 chk1, chk2;
    Word16 prev_Q_bwe_exc_fb, Q_exc16kWhtnd;
    Word16 chk1;
    Word32 chk2;
    chk1 = 0;
    chk2 = 0;
    move16();
    move16();
    move32();

#if 1 // def ADD_IVAS_TBE_CODE
    Word16 alpha, step, mem_csfilt_left, mem_csfilt_right, excNoisyEnvLeft[L_FRAME16k], excNoisyEnvRight[L_FRAME16k];
@@ -4262,7 +4264,7 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        }

        /* normalize the amplitude of the gaussian excitation to that of the LB exc. */
        Word32 pow22_inv = POW_EXC16k_WHTND_FX_INV_SQRT;
        Word32 pow22_inv = POW_EXC16k_WHTND_FX_INV_SQRT_IN_Q49;
        move32();
        move32();
        pow22 = POW_EXC16k_WHTND_FX;
@@ -4271,21 +4273,23 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        // v_multc(White_exc16k, (float)sqrt(pow1 / pow22), White_exc16k, L_FRAME16k);
        Word16 pow1_exp = sub( Q31, Q_pow1 );
        Word32 temp_pow = Sqrt32( pow1, &pow1_exp );
        temp_pow = L_shl( Mpy_32_32( temp_pow, pow22_inv ), pow1_exp );
        temp_pow = Mpy_32_32( temp_pow, pow22_inv );
        /*Word16 out_exp;
        Word32 temp_pow1 = root_a_over_b_fx(pow1, Q_pow1, pow22, Q_pow22, &out_exp);
        temp_pow1 = L_shl(temp_pow1, out_exp);*/
        // v_multc_fixed_16_16(White_exc16k, round_fx(temp_pow), White_exc16k, L_FRAME16k);
        L_tmp = 0;
        move32();
        shift = getScaleFactor16( White_exc16k, L_FRAME16k );
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] );
            move32();
            White_exc16k[k] = round_fx( L_shl( White_exc16k_32[k], sub( *Q_bwe_exc, NOISE_QADJ ) ) ); //  Q_bwe_exc - NOISE_QADJ
            White_exc16k[k] = round_fx( L_shl( White_exc16k_32[k], shift ) ); // Q_White_exc16k
            move16();
            L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) );
        }
        Q_White_exc16k = add( shift, sub( 49 - 31, pow1_exp ) );
        Q_temp = norm_l( L_tmp );
        IF( L_tmp == 0 )
        {
@@ -4323,22 +4327,24 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        /* calculate pow22 */
        /* pow22=0.00001f */
        tmp = sub( shl( sub( *Q_bwe_exc, NOISE_QADJ ), 1 ), 31 );
        pow22 = L_shl( 21475l /*0.00001f Q31*/, tmp ); /* 0.00001f in 2*(*Q_bwe_exc-NOISE_QADJ) */
        Word64 sum = W_shl( 21475l /*0.00001f Q31*/, tmp ); /* 0.00001f in 2*(*Q_bwe_exc-NOISE_QADJ) */
        Q_White_exc16k = getScaleFactor32( White_exc16k_32, L_FRAME16k );
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            /* White_exc16k[k] *= excNoisyEnv[k]; */
            White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], 1 ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9
            move16();
            chk2 = s_or( chk2, White_exc16k[k] );

            White_exc16k[k] = extract_h( L_shl( White_exc16k_32[k], Q_White_exc16k ) ); // Q_excTmp2 + 6 + Q_White_exc16k - 16 ==> Q_excTmp2 + Q_White_exc16k - 10
            chk2 = L_or( chk2, White_exc16k_32[k] );
            /* i: excNoisyEnv in (Q_excTmp2)     */
            /* i: White_exc16k  in Q6               */
            /* o: White_exc16k in (Q_bwe_exc-NOISE_QADJ)  */
            /* o: White_exc16k in (Q_White_exc16k)  */
            /* pow22 += White_exc16k[k] * White_exc16k[k]; */
            pow22 = L_mac0_sat( pow22, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_excTmp2-NOISE_QADJ)*/
            sum = W_mac0_16_16( sum, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_excTmp2 + Q_White_exc16k - 10)*/
            move16();
        }
        /*Q_pow22 = sub( shl(*Q_bwe_exc,1), 18 );*/
        Q_pow22 = shl( sub( Q_excTmp2, NOISE_QADJ ), 1 );
        Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_excTmp2 ) );
        Q_pow22 = W_norm( sum );
        pow22 = W_extract_h( W_shl( sum, Q_pow22 ) ); // 2*(Q_excTmp2 + Q_White_exc16k - 10)+Q_pow22-32
        Q_pow22 = sub( add( Q_pow22, shl( sub( add( Q_White_exc16k, Q_excTmp2 ), 10 ), 1 ) ), 32 );
        Q_White_exc16k = add( Q_White_exc16k, sub( Q_excTmp2, 10 ) );
    }

#if 1 // def ADD_IVAS_TBE_CODE
@@ -4625,7 +4631,6 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            move16();
        }
    }
#if 1 // def ADD_IVAS_TBE_CODE
    test();
    IF( GE_16( element_mode, IVAS_CPE_DFT ) && nlExc16k != NULL )
    {
@@ -4638,29 +4643,42 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        temp_fac = Sqrt16(temp_fac, &temp_fac_exp);*/
        L_tmp = root_a_over_b_fx( pow1, Q_pow1, pow22, Q_pow22, &exp );
        Word16 temp_fac = round_fx_sat( L_shl_sat( L_tmp, exp ) ); // Q15
        shift = sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k );
        // v_multc_fixed_16_16(White_exc16k,shr(temp_fac, temp_fac_exp) , mixExc16k, L_FRAME16k);
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            mixExc16k[k] = mult_r( White_exc16k[k], temp_fac );
            mixExc16k[k] = mult_r( shl_sat( White_exc16k[k], shift ), temp_fac );
            move16();
        }
    }
#endif

    tmp = sub( Q_temp, 3 );
    FOR( k = 0; k < L_FRAME16k; k++ )
    {
        White_exc16k_FB[k] = White_exc16k[k]; /* Q_bwe_exc-NOISE_QADJ */
        White_exc16k_FB[k] = White_exc16k[k]; /* Q_White_exc16k */
    }
    prev_Q_bwe_exc_fb = *Q_bwe_exc_fb;
    move16();
    *Q_bwe_exc_fb = sub( *Q_bwe_exc, NOISE_QADJ );
    *Q_bwe_exc_fb = Q_White_exc16k;
    move16();
    *tbe_demph = shl_sat( *tbe_demph, sub( Q_White_exc16k, sub( *Q_bwe_exc, NOISE_QADJ ) ) );
    deemph_fx( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph );
    /* i/o: White_exc16k (Q_bwe_exc-NOISE_QADJ) */
    /* i: tbe_demph (Q_bwe_exc-NOISE_QADJ) */
    *tbe_demph = shl_sat( *tbe_demph, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );

#if 1 // def ADD_IVAS_TBE_CODE
    Q_exc16kWhtnd = getScaleFactor16( exc16kWhtnd, L_FRAME16k );
    Q_exc16kWhtnd = add( Q_exc16kWhtnd, *Q_bwe_exc );

    shift = getScaleFactor16( White_exc16k, L_FRAME16k );

    shift = s_min( Q_exc16kWhtnd, add( shift, Q_White_exc16k ) );
    scale_sig( exc16kWhtnd, L_FRAME16k, sub( shift, *Q_bwe_exc ) );
    scale_sig( White_exc16k, L_FRAME16k, sub( shift, Q_White_exc16k ) );

    Q_exc16kWhtnd = Q_White_exc16k = shift;
    move16();
    move16();
    *tbe_premph = shl_sat( *tbe_premph, sub( Q_White_exc16k, sub( *Q_bwe_exc, NOISE_QADJ ) ) );
    move16();
    test();
    IF( EQ_32( extl_brate, SWB_TBE_1k10 ) || EQ_32( extl_brate, SWB_TBE_1k75 ) )
    {
@@ -4693,11 +4711,8 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            /* mixing of LB and gaussian excitation in the first half of the frame */
            FOR( k = 0; k < L_FRAME16k / 2; k++ )
            {
                // exc16kWhtnd[k] = (float)fact * (White_exc16k[k] * scale) + (float)(1 - fact) * exc16kWhtnd[k];
                // exc16kWhtnd[k] = add(mult_r(fact, mult(shl(White_exc16k[k], *Q_bwe_exc), scale)), mult_r(sub(32767, fact), exc16kWhtnd[k]));
                L_tmp = L_add( L_shl( L_mult( fact, mult_r( White_exc16k[k], scale ) ), NOISE_QADJ ),
                               L_mult( sub( 32767, fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc
                exc16kWhtnd[k] = round_fx( L_tmp );
                exc16kWhtnd[k] = mac_r( L_mult( fact, mult_r( White_exc16k[k], scale ) ),
                                        sub( 32767, fact ), exc16kWhtnd[k] ); // Q_exc16kWhtnd
                move16();
                fact = add_sat( fact, step );
                scale = add_sat( scale, step_scale );
@@ -4706,11 +4721,8 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            /* mixing of LB and gaussian excitation in the second half of the frame */
            FOR( ; k < L_FRAME16k; k++ )
            {
                // exc16kWhtnd[k] = (float)new_fact * White_exc16k[k] + (float)(1 - new_fact) * exc16kWhtnd[k];
                // exc16kWhtnd[k] = add(mult_r(new_fact, shl(White_exc16k[k], *Q_bwe_exc)), mult_r(sub(32767, new_fact), exc16kWhtnd[k]));
                L_tmp = L_add( L_shl( L_mult( new_fact, White_exc16k[k] ), NOISE_QADJ ),
                               mult_r( sub( 32767, new_fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc
                exc16kWhtnd[k] = round_fx( L_tmp );
                exc16kWhtnd[k] = mac_r( L_mult( new_fact, White_exc16k[k] ),
                                        sub( 32767, new_fact ), exc16kWhtnd[k] ); // Q_exc16kWhtnd
                move16();
            }
        }
@@ -4718,14 +4730,9 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph );
    }
    ELSE
#endif
    {
#if 1 // def ADD_IVAS_TBE_CODE
        test();
        IF( EQ_16( coder_type, UNVOICED ) || EQ_16( MSFlag, 1 ) )
#else
        IF( EQ_16( coder_type, UNVOICED ) )
#endif
        {
            L_tmp = root_a_over_b_fx( pow1, Q_pow1, pow22, Q_pow22, &exp );
            test();
@@ -4737,16 +4744,12 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            scale = round_fx_sat( L_shl_sat( L_tmp, exp ) ); /*Q15 */
            FOR( k = 0; k < L_FRAME16k; k++ )
            {
                /* White_exc16k: (Q_bwe_exc-NOISE_QADJ), scale: Q15 */
                L_tmp = L_mult( White_exc16k[k], scale );
                /* L_tmp: (Q_bwe_exc-NOISE_QADJ) + 15 + 1 */
                exc16kWhtnd[k] = round_fx_sat( L_shl_sat( L_tmp, NOISE_QADJ ) );
                exc16kWhtnd[k] = mult_r_sat( White_exc16k[k], scale );
                move16();
                /* exc16kWhtnd:  Q_bwe_exc */
            }
            PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph );
            /* i/o: exc16kWhtnd  (Q_bwe_exc) */
            /* i/o: tbe_premph (Q_bwe_exc) */
            /* i/o: exc16kWhtnd  (Q_exc16kWhtnd) */
            /* i/o: tbe_premph (Q_exc16kWhtnd) */
        }
        ELSE
        {
@@ -4809,11 +4812,10 @@ void GenShapedSHBExcitation_ivas_dec_fx(
                FOR( j = 0; j < lSubFr; j++ )
                {
                    /*exc16kWhtnd[k+j] = temp1 * exc16kWhtnd[k+j] + temp2 * White_exc16k[k+j]; */
                    L_tmp = L_mult( temp2, White_exc16k[k + j] ); /* 16+(Q_bwe_exc-NOISE_QADJ)*/
                    L_tmp = L_shl_sat( L_tmp, NOISE_QADJ );       /* 16+(Q_bwe_exc) */
                    L_tmp = L_mult( temp2, White_exc16k[k + j] );
                    exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] );
                    move16();
                    /* Q_bwe_exc */
                    /* Q_exc16kWhtnd */
                }
                k = add( k, lSubFr );

@@ -4827,19 +4829,18 @@ void GenShapedSHBExcitation_ivas_dec_fx(
                temp2 = add( temp, shl( temp1, -1 ) ); /* shift right by 1 to avoid overflow */
                temp = div_s( temp, temp2 );           /* Q15 */
                temp = mult_r( PREEMPH_FAC, temp );

                PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph );
                /* exc16kWhtnd: Q_bwe_exc;
                   tbe_premph: Q_bwe_exc*/
                /* exc16kWhtnd: Q_exc16kWhtnd;
                   tbe_premph: Q_exc16kWhtnd*/
            }
        }
    }
    *tbe_premph = shl_sat( *tbe_premph, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );
    move16();
    Scale_sig( White_exc16k, L_FRAME16k, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );
    Scale_sig( exc16kWhtnd, L_FRAME16k, sub( *Q_bwe_exc, Q_White_exc16k ) );

#if 1 // def ADD_IVAS_TBE_CODE
    IF( LT_32( extl_brate, SWB_TBE_2k8 ) )
#else
    IF( LT_32( bitrate, ACELP_24k40 ) )
#endif
    {
        Syn_filt_s( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 );
        /* i: exc16kWhtnd in Q_bwe_exc */
+2 −2
Original line number Diff line number Diff line
@@ -3579,8 +3579,8 @@ Word16 erb_diff_search_fx( Word16 *prev_erb, const Word16 *curr_erb, Word16 *dif
            }
            ELSE
            {
                dh = sub( dif_erb[i + offset], cb_fx[j * cb_dim + i] ); /* Q13 */
                Ltemp1 = L_mult( dh, dh );                              /* Q27 */
                dh = sub_sat( dif_erb[i + offset], cb_fx[j * cb_dim + i] ); /* Q13 */
                Ltemp1 = L_mult_sat( dh, dh );                              /* Q27 */
                dh = extract_h( Ltemp1 );
                dl = extract_l( Ltemp1 );

Loading