Commit bc608051 authored by vaillancour's avatar vaillancour
Browse files

proposed fix for 874

parent 183c1f13
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -180,6 +180,9 @@
#define FIX_869_WRONG_UVGAIN_STEP               /* VA: Fix wrong decoding of uv gain quantizer for td-stereo*/

#define FIX_871_REMOVE_UNNECESSARY_CONDITION    /* VA: remove a condition that is not needed and prevented correct frame classification of the secondary channel of the TD stereo */

#define FIX_874_INCREASE_ITD_PRECISION          /*VA : Fix issue 874 by increasing ITD precision already when decoding index */
#define FIX_874_INCREASE_ITD_PRECISION_A        /*VA : Fix a possible issue where 2*PI should be used instead of PI (to be confirmed)  */
/* ################## End DEVELOPMENT switches ######################### */

/* clang-format on */
+22 −1
Original line number Diff line number Diff line
@@ -926,7 +926,11 @@ void stereo_dft_dec_smooth_parameters_fx(
                Word16 q_val;
                IF( GT_32( L_sub( hStereoDft->gipd_fx[add( k, k_offset )], hStereoDft->ipd_xfade_prev_fx ), EVS_PI_FX_Q27 ) )
                {
#ifdef FIX_874_INCREASE_ITD_PRECISION_A
                    hStereoDft->ipd_xfade_target_fx = L_sub( hStereoDft->gipd_fx[add( k, k_offset )], EVS_PI_FX_Q27 << 1 );
#else
                    hStereoDft->ipd_xfade_target_fx = L_sub( hStereoDft->gipd_fx[add( k, k_offset )], EVS_PI_FX_Q27 );
#endif
                    move32();
                    hStereoDft->ipd_xfade_step_fx = BASOP_Util_Divide3232_Scale( L_sub( hStereoDft->ipd_xfade_target_fx, hStereoDft->ipd_xfade_prev_fx ), L_shl( L_sub( STEREO_DFT_ITD_CNG_XFADE, hStereoDft->ipd_xfade_counter ), Q24 ), &q_val );
                    move32();
@@ -2450,12 +2454,16 @@ static void stereo_dft_compute_td_stefi_params_fx(
static void stereo_dft_dequantize_ipd_fx(
    Word16 *ind,
    Word32 *out_fx,
#ifndef FIX_874_INCREASE_ITD_PRECISION
    const Word16 N,
#endif
    const Word16 bits )
{
    Word16 i;
    Word16 delta_fx;
#ifndef FIX_874_INCREASE_ITD_PRECISION
    Word16 i;
    Word32 temp_out;
#endif
    IF( EQ_16( bits, 2 ) ) /* 2-bit phase quantization for the highest frequency band only */
    {
        delta_fx = ( EVS_PI_FX ) >> 1;
@@ -2478,12 +2486,17 @@ static void stereo_dft_dequantize_ipd_fx(
        assert( 0 );
    }

#ifndef FIX_874_INCREASE_ITD_PRECISION
    FOR( i = 0; i < N; i++ )
    {
        temp_out = L_sub( L_mult0( ind[i], delta_fx ), ( EVS_PI_FX ) );
        *out_fx = L_shl( temp_out, 14 );
        move32();
    }
#else
    *out_fx = L_sub( W_sat_l( W_mult_32_16( L_shl( ind[0], 13 ), delta_fx ) ), EVS_PI_FX_Q27 );
    move32();
#endif
    return;
}

@@ -3782,7 +3795,11 @@ void stereo_dft_dec_read_BS_fx(
                    move16();
                    nb = add( nb, STEREO_DFT_GIPD_NBITS );
                    n_bits = add( n_bits, STEREO_DFT_GIPD_NBITS );
#ifndef FIX_874_INCREASE_ITD_PRECISION
                    stereo_dft_dequantize_ipd_fx( &ind1_ipd[0], hStereoDft->gipd_fx + add( k, k_offset ), 1, STEREO_DFT_GIPD_NBITS );
#else
                    stereo_dft_dequantize_ipd_fx( &ind1_ipd[0], hStereoDft->gipd_fx + add( k, k_offset ), STEREO_DFT_GIPD_NBITS );
#endif
                }
            }
            ELSE IF( LE_16( *nb_bits, ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - STEREO_DFT_FLAG_BITS - STEREO_DFT_SID_GIPD_NBITS - SID_FORMAT_NBITS ) ) )
@@ -3798,7 +3815,11 @@ void stereo_dft_dec_read_BS_fx(
                    move16();
                    nb = add( nb, STEREO_DFT_SID_GIPD_NBITS );
                    n_bits = add( n_bits, STEREO_DFT_SID_GIPD_NBITS );
#ifndef FIX_874_INCREASE_ITD_PRECISION
                    stereo_dft_dequantize_ipd_fx( &ind1_ipd[0], hStereoDft->gipd_fx + add( k, k_offset ), 1, STEREO_DFT_SID_GIPD_NBITS );
#else
                    stereo_dft_dequantize_ipd_fx( &ind1_ipd[0], hStereoDft->gipd_fx + add( k, k_offset ), STEREO_DFT_SID_GIPD_NBITS );
#endif
                }
            }
            ELSE