Commit 422d06a3 authored by Vladimir Malenovsky's avatar Vladimir Malenovsky
Browse files

use length parameter instead of a fixed constant

parent 9db396b3
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@
#define FIX_FLOAT_1578_OMASA_REND_SPIKES                /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */
#define FIX_1521_SBA_LOUDNESS_STEREO                    /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */
#define FIX_1559                                        /* Eri/FhG: fix for Issue 1559 in FD CNG with bitrate/bw switching */
#define FIX_NONBE_2580_USE_LENGTH_NOT_CONSTANT          /* Dolby: fix 2580: use dynamic length denominator for average energy in unclr_calc_corr_features_fx() */

/* ##################### End NON-BE switches ########################### */

+23 −0
Original line number Diff line number Diff line
@@ -2220,7 +2220,13 @@ static void unclr_calc_corr_features_fx(
    Word16 *corrEst_ncorr_exp )
{
    Word16 i, corrLagMax, d_corrLagMax, tempLen, k;
#ifdef FIX_NONBE_2580_USE_LENGTH_NOT_CONSTANT
    Word16 inv_len_exp;
#endif
    Word32 num, den;
#ifdef FIX_NONBE_2580_USE_LENGTH_NOT_CONSTANT
    Word32 inv_len;
#endif
    Word32 corrL, corrR, ener, ener_side, mono_i, side_i, ic_Lm, ic_Rm, tdm_es_em, m_corrL_corrR, d_corrL_corrR;
    Word32 sum_prod, corrEstMax;
    Word16 corrL_exp, corrR_exp, ener_exp, ener_side_exp, sum_prod_exp, exp, exp1, exp2, num_exp, den_exp;
@@ -2268,6 +2274,18 @@ static void unclr_calc_corr_features_fx(
    }

    /* average energy of L and R channels */
#ifdef FIX_NONBE_2580_USE_LENGTH_NOT_CONSTANT
    inv_len = BASOP_Util_Divide3232_Scale_newton( ONE_IN_Q31, L_deposit_l( length ), &inv_len_exp ); /* Q31-inv_len_exp */

    hStereoClassif->ave_ener_L_fx = Mpy_32_32( hStereoTCA->E1_mem_fx, inv_len ); /* Q31-hStereoClassif->ave_ener_L_fx_e */
    move32();
    hStereoClassif->ave_ener_L_fx_e = add( hStereoTCA->E1_mem_exp, inv_len_exp );
    move16();
    hStereoClassif->ave_ener_R_fx = Mpy_32_32( hStereoTCA->E2_mem_fx, inv_len ); /* Q31-hStereoClassif->ave_ener_R_fx_e */
    move32();
    hStereoClassif->ave_ener_R_fx_e = add( hStereoTCA->E2_mem_exp, inv_len_exp );
    move16();
#else
    hStereoClassif->ave_ener_L_fx = Mpy_32_32( hStereoTCA->E1_mem_fx, 13421772 /* 1/length in Q31*/ ); /* Q31-hStereoClassif->ave_ener_L_fx_e */
    move32();
    hStereoClassif->ave_ener_L_fx_e = hStereoTCA->E1_mem_exp;
@@ -2276,6 +2294,7 @@ static void unclr_calc_corr_features_fx(
    move32();
    hStereoClassif->ave_ener_R_fx_e = hStereoTCA->E2_mem_exp;
    move16();
#endif

    /* unnormalized L/R correlation */
    IF( sum_prod )
@@ -2314,7 +2333,11 @@ static void unclr_calc_corr_features_fx(
    move32();

    /* L/R correlation values (zero lag, maximum) */
#ifndef FIX_NONBE_2579_INCORRECT_LAG_CALCULATION
    corrLagMax = maximum_l( corrEst, sub( lagSearchRange[1], add( lagSearchRange[0], 1 ) ), &corrEstMax );
#else
    corrLagMax = maximum_l( corrEst, add( sub( lagSearchRange[1], lagSearchRange[0] ), 1 ), &corrEstMax );
#endif
    d_corrLagMax = sub( corrLagMax, hStereoClassif->unclr_corrLagMax_prev );

    hStereoClassif->unclr_fv_fx[E_d_corrLagMax] = L_shl( d_corrLagMax, 15 );