Commit 2e84f3f4 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Fix for 3GPP issue 986: Stereo decoding, 16-20 kHz difference

Link #986

Differences existed due to an addition with a factor (0.001f) missing in fixed point code. Changes added to address the same.
parent a246ccfe
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -6935,7 +6935,10 @@ void synthesise_fb_high_band_fx(
    Word32 temp1;
    Word32 ratio2;
    Word32 L_tmp;
    Word16 tmp3, tmp1, tmp2, exp, exp2, exp_tmp;
    Word16 tmp3, tmp1, tmp2, exp, exp2, exp_tmp, sft, t_Q /* to store temporary Q for computations */;
    Word64 P_ONE = 33; /* 0.001f in Q15 */
    move64();
    Word64 W_temp;

    /* Interpolate the white energy shaped gaussian excitation from 16 kHz to 48 kHz with zeros */
    j = 0;
@@ -6982,17 +6985,28 @@ void synthesise_fb_high_band_fx(
        elliptic_bpf_48k_generic_fx( excitation_in_interp3, &exp_tmp, tmp, bpf_memory, bpf_memory_Q, full_band_bpf_1_fx );
#endif
    }
    /* temp1 = sum2_f( tmp, L_FRAME48k ) + 0.001f */
    temp1 = sum2_fx_mod( tmp, L_FRAME48k );

    t_Q = sub( shl( exp_tmp, 1 ), 8 );
    P_ONE = W_shl( P_ONE, sub( t_Q, 15 ) );

    W_temp = W_add( P_ONE, temp1 );

    sft = W_norm( W_temp );
    W_temp = W_shl( W_temp, sft );

    temp1 = W_extract_h( W_temp );
    t_Q = sub( add( t_Q, sft ), 32 );

    L_tmp = L_max( 1, fb_exc_energy ); /*Q(2*Q_fb_exc + 1)*/
    exp = norm_l( L_tmp );
    tmp3 = extract_h( L_shl( L_tmp, exp ) );
    tmp1 = sub( add( Q_fb_exc, Q_fb_exc ), 8 ); /* 1-9*/
    exp = sub( sub( 31, tmp1 ), exp );

    exp2 = norm_l( temp1 );
    tmp2 = extract_h( L_shl( temp1, exp2 ) );
    exp2 = sub( sub( 31, sub( shl( exp_tmp, 1 ), 8 ) ), exp2 ); /* in Q15 (temp1 in Q9)*/
    tmp2 = extract_h( temp1 );
    exp2 = sub( 31, t_Q );

    exp = sub( exp2, exp ); /* Denormalize and substract */
    IF( GT_16( tmp2, tmp3 ) )