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

CPE encoder functions updates

[x] Modified acelp_fast_fx
[x] Integerated smc_gmm in pre_proc_front_ivas_fx and resolve the high mld issues
parent a69930c0
Loading
Loading
Loading
Loading
Loading
+168 −99
Original line number Diff line number Diff line
@@ -140,25 +140,25 @@ static Word16 find_best_pulse_fx(
    const Word16 L_subfr,
    const Word16 nb_tracks,
    const Word16 track,
    const Word16 dn[],
    const Word32 dn[],
    const Word16 sign[],
    Word16 *s )
{
    Word16 m, i;
    Word16 temp, max_val;
    Word32 temp, max_val;

    max_val = MIN_16;
    move16();
    max_val = MIN_32;
    move32();
    m = track;
    move16();
    FOR( i = track; i < L_subfr; i += nb_tracks )
    {
        temp = i_mult( dn[i], sign[i] );
        temp = imult3216( dn[i], sign[i] );

        IF( GE_16( temp, max_val ) )
        IF( GE_32( temp, max_val ) )
        {
            max_val = temp;
            move16();
            move32();
            m = i;
            move16();
        }
@@ -841,16 +841,23 @@ void acelp_fast_fx(
    Word16 m[MAX_PULSES_STEREO], s[MAX_PULSES_STEREO], m_max[MAX_PULSES_STEREO], s_max[MAX_PULSES_STEREO];
    Word16 track_order[NB_TRACK_FCB_4T * MAX_NUM_INTER], m0_track[NB_TRACK_FCB_4T];
    Word16 ind_stream[NPMAXPT * NB_TRACK_FCB_4T], idx;
    Word16 G, G1, G2, G3, Gn, Gd, dn[L_SUBFR_MAX];
    Word16 tmpF, y_tmp[L_SUBFR_MAX];
    Word32 crit_num, crit_den, crit_num_max, crit_den_max;
    Word16 G, G1, G2, G3, Gn, Gd;
    Word16 y_tmp[L_SUBFR_MAX];
    Word32 dn[L_SUBFR_MAX];
    Word32 crit_num, crit_den, crit_num_max, crit_den_max, L_tmp1, L_tmp2;
    Word16 q_crit_num, q_crit_den, q_crit_num_max, q_crit_den_max;
    Word16 h_buf[4 * L_SUBFR_MAX], *h, *h_inv, *p_hn, alp_buf[2 * L_SUBFR_MAX], *alp, *alp_pos0, *alp_pos1, *alp_pos2, *alp_pos3;
    Word32 dndn_fx, cncn_fx, cncn_track[NB_TRACK_FCB_4T];
    Word16 dndn_e, cncn_e, cncn_track_e[NB_TRACK_FCB_4T];
    Word16 s_coef_fx, bn_orig_fx[L_SUBFR_MAX];
    Word16 max_val_fx, temp_fx, sign_fx[L_SUBFR_MAX], max_track[MAX_NUM_INTER];
    Word16 s_coef_fx;
    Word32 bn_orig_fx[L_SUBFR_MAX];
    Word32 max_val_fx, temp_fx, max_track[MAX_NUM_INTER];
    Word16 sign_fx[L_SUBFR_MAX];
    Word16 beta1_fx, beta2_fx;
    Word16 exp;
    Word16 exp, exp1, shift, q_H;
    Word64 s64;
    Word16 flag = 0;
    move16();

    /*-----------------------------------------------------------------*
     * Initialization
@@ -993,6 +1000,8 @@ void acelp_fast_fx(
        dndn_fx = BASOP_Util_Add_Mant32Exp( dndn_fx, dndn_e, L_mult0( dn_orig[i], dn_orig[i] ), exp, &dndn_e ); // Q(dndn_e)
    }

    exp1 = sub( Q31, shl( sub( Q_dn, 1 ), 1 ) );

    cncn_fx = 214748365 /* 0.1f in Q31 */;
    move32();
    cncn_e = 0;
@@ -1007,7 +1016,7 @@ void acelp_fast_fx(

        FOR( i = 0; i < L_subfr; i += nb_tracks )
        {
            cncn_track[q] = BASOP_Util_Add_Mant32Exp( cncn_track[q], cncn_track_e[q], L_mult0( cn[i + q], cn[i + q] ), exp, &cncn_track_e[q] ); // Q(cncn_track_e[q])
            cncn_track[q] = BASOP_Util_Add_Mant32Exp( cncn_track[q], cncn_track_e[q], L_mult0( cn[i + q], cn[i + q] ), exp1, &cncn_track_e[q] ); // Q(cncn_track_e[q])
            move16();
        }
        cncn_fx = BASOP_Util_Add_Mant32Exp( cncn_fx, cncn_e, cncn_track[q], cncn_track_e[q], &cncn_e ); // Q(cncn_e)
@@ -1016,13 +1025,13 @@ void acelp_fast_fx(
    Word16 tmp;
    s_coef_fx = BASOP_Util_Divide3232_Scale( dndn_fx, cncn_fx, &tmp );
    tmp = add( tmp, sub( dndn_e, cncn_e ) );
    s_coef_fx = Sqrt16( s_coef_fx, &tmp ); // Q(tmp)
    s_coef_fx = Sqrt16( s_coef_fx, &tmp ); // Q(15 - tmp)


    FOR( i = 0; i < L_subfr; i++ )
    {
        bn_orig_fx[i] = add( mult( s_coef_fx, cn[i] ), shr( i_mult_sat( beta1_fx, dn_orig[i] ), tmp ) ); // Q_dn - tmp
        move16();
        bn_orig_fx[i] = L_mac0( L_shr( L_mult( s_coef_fx, cn[i] ), sub( 15, tmp ) ), beta1_fx, dn_orig[i] ); // Q_dn
        move32();

        IF( bn_orig_fx[i] >= 0 )
        {
@@ -1061,20 +1070,23 @@ void acelp_fast_fx(
    /*-----------------------------------------------------------------*
     * Approximate FI[i][j] by alp[abs(i-j)] and compute buffer alp_buf[].
     *-----------------------------------------------------------------*/
    Word16 shift = add( shl( add( norm_s( H[0] ), 1 ), 1 ), 1 );
    q_H = sub( 14, norm_s( H[0] ) );
    shift = sub( shl( q_H, 1 ), 6 );

    alp = alp_buf + L_subfr;

    FOR( i = 0; i < L_subfr; i++ )
    {
        *alp = 0;
        move16();
        s64 = 0;
        move64();

        FOR( j = i; j < L_subfr; j++ )
        {
            *alp = shr( add( *alp, mult( H[j], H[j - i] ) ), 1 );
            move16();
            s64 = W_mac0_16_16( s64, H[j], H[j - i] ); /* Q = shift + 6*/
        }
        alp_buf[L_subfr - i] = *alp++;
        *alp = extract_l( W_extract_l( W_shr( s64, shift ) ) ); /*Q6*/
        move16();
        alp_buf[L_subfr - i] = *alp++; /*Q6*/
        move16();
    }

@@ -1083,16 +1095,16 @@ void acelp_fast_fx(
    FOR( q = 0; q < nb_tracks; q++ )
    {
        max_track[q] = 0;
        move16();
        move32();

        FOR( i = q; i < L_subfr; i += nb_tracks )
        {
            temp_fx = i_mult( bn_orig_fx[i], sign_fx[i] ); // Q_dn - tmp
            temp_fx = imult3216( bn_orig_fx[i], sign_fx[i] ); // Q_dn

            IF( GE_16( temp_fx, shr( max_track[q], tmp ) ) )
            IF( GE_32( temp_fx, max_track[q] ) )
            {
                max_track[q] = temp_fx; // Q_dn
                move16();
                move32();
                m0_track[q] = i;
                move16();
            }
@@ -1121,25 +1133,24 @@ void acelp_fast_fx(
        /* skip certain tracks if number of pulses is lower than number of tracks */
        IF( EQ_16( nb_pulse, 2 ) && EQ_16( nb_tracks, NB_TRACK_FCB_4T ) )
        {
            max_track[NB_TRACK_FCB_4T - 3] = shl( -1, Q_dn ); // Q_dn
            move16();
            max_track[NB_TRACK_FCB_4T - 1] = shl( -1, Q_dn ); // Q_dn
            move16();
            max_track[NB_TRACK_FCB_4T - 3] = L_shl( -1, Q_dn ); // Q_dn
            move32();
            max_track[NB_TRACK_FCB_4T - 1] = L_shl( -1, Q_dn ); // Q_dn
            move32();
        }
        ELSE IF( EQ_16( nb_pulse, 3 ) && EQ_16( codetrackpos, TRACKPOS_FIXED_FIRST ) )
        {
            max_track[NB_TRACK_FCB_4T - 1] = shl( -1, Q_dn ); // Q_dn
            move16();
            max_track[NB_TRACK_FCB_4T - 1] = L_shl( -1, Q_dn ); // Q_dn
            move32();
        }

        FOR( q = 0; q < nb_tracks; q++ )
        {
            i = maximum_fx( max_track, nb_tracks, &tmpF );
            move16();
            i = maximum_32_fx( max_track, nb_tracks, &L_tmp1 );
            track_order[q] = i;
            move16();
            max_track[i] = shl( -1, Q_dn ); // Q_dn
            move16();
            max_track[i] = L_shl( -1, Q_dn ); // Q_dn
            move32();
        }

        track_order[4] = track_order[1]; // Q0
@@ -1206,9 +1217,13 @@ void acelp_fast_fx(
     * Main searching loop
     *-----------------------------------------------------------------*/

    crit_num_max = -32768;
    crit_num_max = MIN_32; // Q31
    move32();
    q_crit_num_max = Q31;
    move16();
    crit_den_max = 32767;
    crit_den_max = MAX_32; // Q31
    move32();
    q_crit_den_max = Q31;
    move16();
    skip_track_max = -1;
    move16();
@@ -1232,12 +1247,12 @@ void acelp_fast_fx(

        IF( EQ_16( nb_tracks, NB_TRACK_FCB_2T ) )
        {
            Gn = i_mult( s[0], dn_orig[m[0]] ); // Q_dn
            Gn = i_mult( s[0], shr( dn_orig[m[0]], 1 ) ); // Q_dn - 1
            Gd = alp[0];                                  // Q6
            move16();
            Gd = alp[0]; // exp(shift)
            move16();
            G = div_s( Gn, Gd ); // Q_dn - shift
            G = i_mult( G, s[0] );
            G = BASOP_Util_Divide1616_Scale( Gn, Gd, &exp1 ); // Q_dn -1 - 6 + 15 - exp1 = Q_dn - 6 + 14 - exp1
            G = i_mult( G, s[0] );                            // Q_dn - 6 + 14 - exp1
            shift = sub( 14, exp1 );

            track = track_order[q * nb_tracks + 1]; // Q0
            move16();
@@ -1245,8 +1260,8 @@ void acelp_fast_fx(

            FOR( i = track; i < L_subfr; i += NB_TRACK_FCB_2T )
            {
                dn[i] = sub( dn_orig[i], shl( mult( G, *alp_pos0 ), shift ) ); // Q_dn
                move16();
                dn[i] = L_sub( L_deposit_l( dn_orig[i] ), L_shr( L_mult0( G, *alp_pos0 ), shift ) ); // Q_dn
                move32();
                alp_pos0 = alp_pos0 + NB_TRACK_FCB_2T;
            }

@@ -1255,12 +1270,12 @@ void acelp_fast_fx(
        }
        ELSE
        {
            Gn = i_mult( s[0], dn_orig[m[0]] ); // Q_dn
            Gd = alp[0];                        // exp(shift)
            Gn = i_mult( s[0], shr( dn_orig[m[0]], 1 ) ); // Q_dn - 1
            Gd = alp[0];                                  // Q6
            move16();
            G = Gn; // Q_dn
            G = Gn; // Q_dn - 1
            move16();
            G = i_mult( G, s[0] );
            G = i_mult( G, s[0] ); // Q_dn - 1

            track = track_order[q * nb_tracks + 1]; // Q0
            move16();
@@ -1271,29 +1286,34 @@ void acelp_fast_fx(
            dndn_e = 0;
            move16();

            s64 = 0;

            FOR( i = track; i < L_subfr; i += nb_tracks )
            {
                dn[i] = sub( mult( Gd, dn_orig[i] ), mult( G, *alp_pos0 ) ); // Q_dn - shift
                move16();
                dn[i] = L_shr( L_msu( L_mult0( Gd, dn_orig[i] ), G, *alp_pos0 ), 6 ); // Q_dn
                move32();
                alp_pos0 += nb_tracks;
                dndn_fx = BASOP_Util_Add_Mant32Exp( dndn_fx, dndn_e, L_mult0( dn[i], dn[i] ), add( exp, shl( shift, 1 ) ), &dndn_e ); // exp(dndn_e)
                s64 = W_mac_32_32( s64, dn[i], dn[i] ); // 2 * Q_dn + 1
            }
            exp1 = W_norm( s64 );
            dndn_fx = W_extract_h( W_shl( s64, exp1 ) ); // 2 * Q_dyn + exp1 - 31
            dndn_e = sub( 31, sub( add( shl( Q_dn, 1 ), exp ), 31 ) );

            s_coef_fx = BASOP_Util_Divide3232_Scale( dndn_fx, cncn_track[track], &tmp ); // exp(tmp)
            tmp = add( tmp, sub( dndn_e, cncn_track_e[track] ) );
            s_coef_fx = Sqrt16( s_coef_fx, &tmp ); // exp(tmp)
            tmp = sub( tmp, shift );
            s_coef_fx = BASOP_Util_Divide3232_Scale( dndn_fx, cncn_track[track], &exp1 );
            exp1 = add( exp1, sub( dndn_e, cncn_track_e[track] ) );
            s_coef_fx = Sqrt16( s_coef_fx, &exp1 );
            exp1 = sub( exp1, shift );
            max_val_fx = MIN_16;
            move16();
            m[1] = track; // Q0
            move16();
            FOR( i = track; i < L_subfr; i += nb_tracks )
            {
                dn[i] = add( shl( mult( s_coef_fx, cn[i] ), tmp ), i_mult( beta2_fx, shr( dn[i], 2 ) ) ); // Q_dn
                move16();
                temp_fx = i_mult( dn[i], sign_fx[i] ); // Q_dn
                dn[i] = L_add( L_shr( L_mult( s_coef_fx, cn[i] ), sub( 15, exp1 ) ), L_shr( imult3216( dn[i], beta2_fx ), 2 ) ); // Q_dn
                move32();
                temp_fx = imult3216( dn[i], sign_fx[i] ); // Q_dn

                IF( GE_16( temp_fx, max_val_fx ) )
                IF( GE_32( temp_fx, max_val_fx ) )
                {
                    max_val_fx = temp_fx; // Q_dn
                    move16();
@@ -1312,12 +1332,12 @@ void acelp_fast_fx(

        IF( GE_16( nb_pulse, 3 ) )
        {
            Gn = add( Gn, i_mult( s[1], dn_orig[m[1]] ) );                                                // Q_dn
            Gd = add( Gd, add( alp[0], i_mult( i_mult( i_mult( 2, s[0] ), s[1] ), alp[m[0] - m[1]] ) ) ); // exp(shift)
            G = Gn;                                                                                       // Q_dn
            Gn = add( Gn, i_mult( s[1], shr( dn_orig[m[1]], 1 ) ) );                                   // Q_dn -1
            Gd = add( Gd, add( alp[0], i_mult( i_mult( shl( s[0], 1 ), s[1] ), alp[m[0] - m[1]] ) ) ); // Q6
            G = Gn;                                                                                    // Q_dn - 1
            move16();
            G1 = i_mult( G, s[1] ); // Q_dn
            G = i_mult( G, s[0] );  // Q_dn
            G1 = i_mult( G, s[1] ); // Q_dn-1
            G = i_mult( G, s[0] );  // Q_dn-1

            track = track_order[q * nb_tracks + 2]; // Q0
            move16();
@@ -1326,8 +1346,8 @@ void acelp_fast_fx(

            FOR( i = track; i < L_subfr; i += nb_tracks )
            {
                dn[i] = sub( sub( mult( Gd, dn_orig[i] ), mult( G, *alp_pos0 ) ), mult( G1, *alp_pos1 ) ); // Q_dn - shift
                move16();
                dn[i] = L_shr( L_msu( L_msu0( L_mult0( Gd, dn_orig[i] ), G, *alp_pos0 ), G1, *alp_pos1 ), 6 ); // Q_dn
                move32();
                alp_pos0 += nb_tracks;
                alp_pos1 += nb_tracks;
            }
@@ -1342,13 +1362,13 @@ void acelp_fast_fx(

        IF( GE_16( nb_pulse, 4 ) )
        {
            Gn = add( Gn, i_mult( s[2], dn_orig[m[2]] ) );                                                                                                                      // Q_dn
            Gd = add( Gd, add( add( alp[0], i_mult( i_mult( i_mult( 2, s[0] ), s[2] ), alp[m[0] - m[2]] ) ), i_mult( i_mult( i_mult( 2, s[1] ), s[2] ), alp[m[1] - m[2]] ) ) ); // exp(shift)
            G = Gn;
            Gn = add( Gn, i_mult( s[2], shr( dn_orig[m[2]], 1 ) ) );                                                                                                      // Q_dn-1
            Gd = add( Gd, add( add( alp[0], i_mult( i_mult( shl( s[0], 1 ), s[2] ), alp[m[0] - m[2]] ) ), i_mult( i_mult( shl( s[1], 1 ), s[2] ), alp[m[1] - m[2]] ) ) ); // Q6
            G = Gn;                                                                                                                                                       // Q_dn-1
            move16();
            G1 = i_mult( G, s[1] );
            G2 = i_mult( G, s[2] );
            G = i_mult( G, s[0] );
            G1 = i_mult( G, s[1] ); // Q_dn-1
            G2 = i_mult( G, s[2] ); // Q_dn-1
            G = i_mult( G, s[0] );  // Q_dn-1

            track = track_order[q * nb_tracks + 3];
            move16();
@@ -1358,8 +1378,8 @@ void acelp_fast_fx(

            FOR( i = track; i < L_subfr; i += nb_tracks )
            {
                dn[i] = sub( sub( sub( mult( Gd, dn_orig[i] ), mult( G, *alp_pos0 ) ), mult( G1, *alp_pos1 ) ), mult( G2, *alp_pos2 ) ); // Q_dn - shift
                move16();
                dn[i] = L_shr( L_msu( L_msu( L_msu( L_mult0( Gd, dn_orig[i] ), G, *alp_pos0 ), G1, *alp_pos1 ), G2, *alp_pos2 ), 6 ); // Q_dn
                move32();
                alp_pos0 += nb_tracks;
                alp_pos1 += nb_tracks;
                alp_pos2 += nb_tracks;
@@ -1380,13 +1400,13 @@ void acelp_fast_fx(

        IF( GE_16( nb_pulse, 5 ) )
        {
            Gn = add( Gn, i_mult( s[3], dn_orig[m[3]] ) );                                                                                                                                                                                            // Q_dn
            Gd = add( Gd, add( add( add( alp[0], i_mult( i_mult( i_mult( 2, s[0] ), s[3] ), alp[m[0] - m[3]] ) ), i_mult( i_mult( i_mult( 2, s[1] ), s[3] ), alp[m[1] - m[3]] ) ), i_mult( i_mult( i_mult( 2, s[2] ), s[3] ), alp[m[2] - m[3]] ) ) ); // Q_dn - shift
            G = Gn;
            G1 = i_mult( G, s[1] ); // Q_dn
            G2 = i_mult( G, s[2] ); // Q_dn
            G3 = i_mult( G, s[3] ); // Q_dn
            G = i_mult( G, s[0] );  // Q_dn
            Gn = add( Gn, i_mult( s[3], shr( dn_orig[m[3]], 1 ) ) );                                                                                                                                                                         // Q_dn-1
            Gd = add( Gd, add( add( add( alp[0], i_mult( i_mult( shl( s[0], 1 ), s[3] ), alp[m[0] - m[3]] ) ), i_mult( i_mult( shl( s[1], 1 ), s[3] ), alp[m[1] - m[3]] ) ), i_mult( i_mult( shl( s[2], 1 ), s[3] ), alp[m[2] - m[3]] ) ) ); // Q6
            G = Gn;                                                                                                                                                                                                                          // Q_dn-1
            G1 = i_mult( G, s[1] );                                                                                                                                                                                                          // Q_dn-1
            G2 = i_mult( G, s[2] );                                                                                                                                                                                                          // Q_dn-1
            G3 = i_mult( G, s[3] );                                                                                                                                                                                                          // Q_dn-1
            G = i_mult( G, s[0] );                                                                                                                                                                                                           // Q_dn-1

            IF( EQ_16( cdk_index, 6 ) )
            {
@@ -1400,8 +1420,8 @@ void acelp_fast_fx(

                FOR( i = track; i < L_subfr; i += nb_tracks )
                {
                    dn[i] = sub( sub( sub( sub( mult( Gd, dn_orig[i] ), mult( G, *alp_pos0 ) ), mult( G1, *alp_pos1 ) ), mult( G2, *alp_pos2 ) ), mult( G3, *alp_pos3 ) ); // Q_dn - shift
                    move16();
                    dn[i] = L_shr( L_msu( L_msu( L_msu( L_msu( L_mult0( Gd, dn_orig[i] ), G, *alp_pos0 ), G1, *alp_pos1 ), G2, *alp_pos2 ), G3, *alp_pos3 ), 6 ); // Q_dn
                    move32();
                    alp_pos0 += nb_tracks;
                    alp_pos1 += nb_tracks;
                    alp_pos2 += nb_tracks;
@@ -1420,7 +1440,7 @@ void acelp_fast_fx(

                FOR( i = 0; i < L_subfr; i++ )
                {
                    dn[i] = sub( sub( sub( sub( mult( Gd, dn_orig[i] ), mult( G, *alp_pos0 ) ), mult( G1, *alp_pos1 ) ), mult( G2, *alp_pos2 ) ), mult( G3, *alp_pos3 ) );
                    dn[i] = L_shr( L_msu( L_msu( L_msu( L_msu( L_mult0( Gd, dn_orig[i] ), G, *alp_pos0 ), G1, *alp_pos1 ), G2, *alp_pos2 ), G3, *alp_pos3 ), 6 ); /*Q_dn*/
                    move16();
                    alp_pos0++;
                    alp_pos1++;
@@ -1428,8 +1448,7 @@ void acelp_fast_fx(
                    alp_pos3++;
                }

                Word32 L_tmp;
                i = emaximum_fx( 0, dn, L_subfr, &L_tmp );
                i = emaximum_32fx( Q_dn, dn, L_subfr, &L_tmp1 );
                track = i % nb_tracks;
                move16();

@@ -1462,22 +1481,72 @@ void acelp_fast_fx(

            FOR( i = 0; i < L_subfr; i++ )
            {
                y_tmp[i] = add( y_tmp[i], *p_hn++ ); // exp(shift)
                y_tmp[i] = add( y_tmp[i], *p_hn++ ); // q_H
                move16();
            }

            crit_num = L_add( crit_num, L_mult0( s[j], dn_orig[m[j]] ) ); // Q_dn
            crit_num = L_mac0( crit_num, s[j], dn_orig[m[j]] ); // Q_dn
        }

        s64 = W_mult0_32_32( crit_num, crit_num ); // 2*Q_dn
        exp = W_norm( s64 );
        crit_num = W_extract_h( W_shl( s64, exp ) ); // 2*Q_dn + exp - 32
        q_crit_num = add( shl( Q_dn, 1 ), sub( exp, 32 ) );

        // crit_den = sum2_fx( y_tmp, L_subfr );                          // 2*q_H
        s64 = 0;
        move64();
        FOR( i = 0; i < L_subfr; i++ )
        {
            s64 = W_mac0_16_16( s64, y_tmp[i], y_tmp[i] );
        }
        exp1 = W_norm( s64 );
        crit_den = W_extract_h( W_shl( s64, exp1 ) ); // 2*q_H + exp1 - 32
        q_crit_den = add( shl( q_H, 1 ), sub( exp1, 32 ) );

        L_tmp1 = Mpy_32_32( crit_num, crit_den_max );
        exp = sub( add( q_crit_num, q_crit_den_max ), 31 );
        L_tmp2 = Mpy_32_32( crit_den, crit_num_max );
        exp1 = sub( add( q_crit_den, q_crit_num_max ), 31 );

        IF( GT_16( exp, exp1 ) )
        {
            IF( GE_32( L_shr( L_tmp1, sub( exp, exp1 ) ), L_tmp2 ) )
            {
                flag = 1;
                move16();
            }
            ELSE
            {
                flag = 0;
                move16();
            }
        }
        ELSE
        {
            IF( GE_32( L_tmp1, L_shr( L_tmp2, sub( exp1, exp ) ) ) )
            {
                flag = 1;
                move16();
            }
            ELSE
            {
                flag = 0;
                move16();
            }
        }

        crit_num = W_extract_l( W_mult_32_32( crit_num, crit_num ) ); // 2*Q_dn+1
        crit_den = sum2_fx( y_tmp, L_subfr );                         // 2*exp(shift)

        IF( GE_32( Mpy_32_32( crit_num, crit_den_max ), Mpy_32_32( crit_den, crit_num_max ) ) )
        IF( flag )
        {
            crit_num_max = crit_num;
            move32();
            q_crit_num_max = q_crit_num;
            move16();
            crit_den_max = crit_den;
            move32();
            q_crit_den_max = q_crit_den;
            move16();

            FOR( j = 0; j < nb_pulse; j++ )
            {
@@ -1487,7 +1556,7 @@ void acelp_fast_fx(
                move16();
            }

            Copy( y_tmp, y, L_subfr ); // exp(shift)
            Copy( y_tmp, y, L_subfr ); // q_H
            skip_track_max = skip_track[q];
            move16();
        }
@@ -1504,7 +1573,7 @@ void acelp_fast_fx(
        code[m_max[q]] = add( code[m_max[q]], s_max[q] ); // Q0
        move16();
    }

    test();
    IF( EQ_16( bits, 12 ) || EQ_16( bits, 14 ) )
    {
        /* 12 bits, 2 pulses, 2 tracks  11 used all tracks */
@@ -1606,7 +1675,7 @@ void acelp_fast_fx(
                IF( NE_16( ind_stream[j], -1 ) )
                {
                    idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, add( bits_track, 1 ) );
                }
            }
        }
@@ -1618,12 +1687,12 @@ void acelp_fast_fx(
                IF( EQ_16( q, skip_track_max ) )
                {
                    idx = quant_2p_2N1( ind_stream[j], ind_stream[j + 1], bits_track );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, ( 2 * bits_track ) + 1 );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, add( shl( bits_track, 1 ), 1 ) );
                }
                ELSE
                {
                    idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 );
                    push_indice( hBstr, IND_ALG_CDBK_4T64, idx, add( bits_track, 1 ) );
                }
            }
        }
+67 −3

File changed.

Preview size limit exceeded, changes collapsed.

+26 −17

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -2416,7 +2416,7 @@ void stereo_tca_enc(
#endif
                utilCrossCorr_fx( ptrChanL_fx, ptrChanL_q, ptrChanR_fx, ptrChanR_q, NULL, &tempF1_fx, &tempF1_exp, tempLag, input_frame, 0 );
#ifdef IVAS_FLOAT_FIXED_CONVERSIONS
                tempF1 = fixedToFloat_32( tempF1_fx, Q31 - tempF1_exp );
                tempF1 = fixedToFloat( tempF1_fx, Q31 - tempF1_exp );
#endif
#else
                utilCrossCorr( ptrChanL, ptrChanR, NULL, &tempF1, tempLag, input_frame, 0 );
+77 −30

File changed.

Preview size limit exceeded, changes collapsed.