Commit 532a648e authored by lefort's avatar lefort
Browse files

Stereo DMX formal issues fixed.

parent f0a3fcda
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -163,7 +163,8 @@
#define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER                    /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/
#define NONBE_FIX_943_RECONFIG_IGF_AFTER_SETTING_BW           /* FhG: issue 943: fix crash in BW switchin from WB in MDCT-Stereo core encoder */

#define NONBE_FIX_947_STEREO_DMX_EVS_WODBL                    /* Orange: Double removed */   
#define BE_FIX_567_DOUBLE_STEREO_DMX                          /* NTT: Fix formal issues */   
#define NONBE_FIX_567_DOUBLE_STEREO_DMX                       /* Orange: Double-precision replaced by single-precision */   
#define NONBE_FIX_947_STEREO_DMX_EVS_POC                      /* Orange: Fix clicks on POC */  
#define NONBE_FIX_947_STEREO_DMX_EVS_PHA                      /* Orange: Fix issues on PHA */                                                                                        

+18 −9
Original line number Diff line number Diff line
@@ -58,7 +58,11 @@
#define STEREO_DMX_EVS_POC_FORGETTING        0.78f
#define STEREO_DMX_EVS_TARGET_POC_FORGETTING 0.79f
#define STEREO_DMX_EVS_POC_W_FORGETTING      0.875f
#ifdef BE_FIX_567_DOUBLE_STEREO_DMX
#define STEREO_DMX_EVS_SHIFT_LIMIT    STEREO_DFT_ZP_NS_ENC
#else
#define STEREO_DMX_EVS_SHIFT_LIMIT           5.625f /* ms */
#endif

#define STEREO_DMX_EVS_DMX_EGY_FORGETTING 0.25f
#define STEREO_DMX_EVS_CORR_FORGETTING    0.78f
@@ -525,7 +529,7 @@ static void calc_poc(
            tPi += IPDi;

            /* ICCr */
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
            Pn = 1.0f / sqrtf( ( IPDr * IPDr + IPDi * IPDi ) + EPSILON );
#else
            Pn = (float) inv_sqrt_( ( IPDr * IPDr + IPDi * IPDi ) + EPSILON );
@@ -542,7 +546,7 @@ static void calc_poc(
            eneL += ( specLr[i] * specLr[i] + specLi[i] * specLi[i] );
            eneR += ( specRr[i] * specRr[i] + specRi[i] * specRi[i] );
        }
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
        Pn = (float) ( 1.0 / sqrtf( ( ( tPr * tPr + tPi * tPi ) + EPSILON ) ) );
#else
        Pn = (float) inv_sqrt( ( tPr * tPr + tPi * tPi ) + EPSILON );
@@ -555,7 +559,7 @@ static void calc_poc(

        Pr[n] = ipd_ff[n] * Pr[n] + ( 1.0f - ipd_ff[n] ) * tPr;
        Pi[n] = ipd_ff[n] * Pi[n] + ( 1.0f - ipd_ff[n] ) * tPi;
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
        Pn = (float) ( 1.0 / sqrtf( ( Pr[n] * Pr[n] + Pi[n] * Pi[n] ) + EPSILON ) );
#else
        Pn = (float) inv_sqrt( ( Pr[n] * Pr[n] + Pi[n] * Pi[n] ) + EPSILON );
@@ -568,7 +572,7 @@ static void calc_poc(
        {
            Pr[n] = ipd_ff[n] * Pr[n] + ( 1.0f - ipd_ff[n] ) * tPr;
            Pi[n] = ipd_ff[n] * Pi[n] + ( 1.0f - ipd_ff[n] ) * tPi;
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
            Pn = (float) ( 1.0 / sqrtf( ( Pr[n] * Pr[n] + Pi[n] * Pi[n] ) + EPSILON ) );
#else
            Pn = (float) inv_sqrt( ( Pr[n] * Pr[n] + Pi[n] * Pi[n] ) + EPSILON );
@@ -599,7 +603,7 @@ static void calc_poc(
    }
#endif

#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
    ICCr = sqrtf( ( Nr * Nr + Ni * Ni ) / ( eneL * eneR + EPSILON ) );
#else
    ICCr = (float) sqrt( ( Nr * Nr + Ni * Ni ) / ( eneL * eneR + EPSILON ) );
@@ -788,7 +792,7 @@ static void calc_poc(
        isd_rate = (float) isd_cnt_l / freq_8k;
        for ( i = 1; i < nsbd; i++ )
        {
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
            rfft_pha_buf[i * 2] = sqrtf( ( 1.0f + Pr[i] ) / 2.0f );
            rfft_pha_buf[i * 2 + 1] = sqrtf( ( 1.0f - Pr[i] ) / 2.0f ) * sign( Pi[i] );
            if ( isd_rate > STEREO_DMX_EVS_ISD_DIST_THRES_IPD )
@@ -898,7 +902,7 @@ static void calc_poc(
            isd_rate = (float) isd_cnt_l / freq_8k;
            for ( i = 1; i < nsbd; i++ )
            {
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
                rfft_pha_buf[i * 2] = sqrtf( ( 1.0f + Pr[i] ) / 2.0f );
                rfft_pha_buf[i * 2 + 1] = sqrtf( ( 1.0f - Pr[i] ) / 2.0f ) * sign( Pi[i] );
                if ( isd_rate > STEREO_DMX_EVS_ISD_DIST_THRES_IPD )
@@ -972,8 +976,8 @@ static void calc_poc(
            {
                energy += hPHA->p_curr_taps[n][i] * hPHA->p_curr_taps[n][i];
            }
#ifdef NONBE_FIX_947_STEREO_DMX_EVS_WODBL
            energy = (float) ( 1.0 / sqrtf( energy + EPSILON ) );
#ifdef NONBE_FIX_567_DOUBLE_STEREO_DMX
            energy = inv_sqrt( energy + EPSILON );
#else
            energy = (float) inv_sqrt( energy + EPSILON );
#endif
@@ -2165,7 +2169,12 @@ ivas_error stereo_dmx_evs_init_encoder(
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) );
    }

#ifdef BE_FIX_567_DOUBLE_STEREO_DMX
    hStereoDmxEVS->hPOC->shift_limit = NS2SA(input_Fs, STEREO_DMX_EVS_SHIFT_LIMIT );
#else
    hStereoDmxEVS->hPOC->shift_limit = (int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 );
#endif

    for ( n = 0; n < CPE_CHANNELS; n++ )
    {
        hStereoDmxEVS->hPOC->peakQ[n] = 0.0f;