From 07d4ec1aa402adb6dee7cc66d1e87882b731dedb Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Fri, 27 Jun 2025 09:43:17 +0900 Subject: [PATCH 1/7] Updated the renormalization and fixed redundant codes --- lib_com/options.h | 2 + lib_enc/ivas_stereo_dmx_evs_fx.c | 78 ++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 662fb2be2..953b01cfe 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -131,6 +131,8 @@ #define NONBE_FIX_987_PARAMC_BINAURAL_REVERB_RENDERING /* FhG: issue 987: solution b: downmix HOA3 to stereo a input for the reverberator */ #define NONBE_FIX_1006_PAST_DMX_NRG_ERROR /* Eri/FhG: Issue 1006: Bug fix in ivas_stereo_dft_dec not replicated in ivas_stereo_dft_dec_dmx */ +#define FIX_1764_RENORM /* NTT: update renorm for ivas_stereo_dmx_evs */ +#define FIX_1764_ABS /* NTT: use abs in ivas_stereo_dmx_evs */ /* #################### End BASOP porting switches ############################ */ diff --git a/lib_enc/ivas_stereo_dmx_evs_fx.c b/lib_enc/ivas_stereo_dmx_evs_fx.c index e2500aeef..58dcb93d1 100644 --- a/lib_enc/ivas_stereo_dmx_evs_fx.c +++ b/lib_enc/ivas_stereo_dmx_evs_fx.c @@ -98,8 +98,13 @@ #define STEREO_DMX_EVS_TRNS_EGY_FORGETTING_Q15 24576 +#ifdef FIX_1764_RENORM +#define STEREO_DMX_EVS_POC_RENORM_TH 1048576 // 65536 * 16 +#define STEREO_DMX_EVS_POC_RENORM_SHIFT 10 +#else #define STEREO_DMX_EVS_POC_RENORM_TH 33554432 // 65536 << 9 #define STEREO_DMX_EVS_POC_RENORM_SHIFT 3 +#endif #define STEREO_DMX_EVS_FAD_R 3 #define STEREO_DMX_EVS_FAD_IR 10923 /* 1/3 in Q15 */ @@ -227,6 +232,12 @@ static Word32 spectral_flatness_fx( const Word16 *sig_fx_e, /* i : input signal (exponent) - can be NULL */ const Word16 sig_length /* i : input signal length */ ); +#ifdef FIX_1764_RENORM +static void renorm_poc_fx( + Word32 *real, /* i/o real-part*/ + Word32 *imag /* i/o imaginary-part */ +); +#endif /*-------------------------------------------------------------------* * estimate_itd_wnd_fft() * @@ -437,6 +448,10 @@ static void calc_poc_fx( Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) ); Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); +#ifdef FIX_1764_RENORM + renorm_poc_fx(&Lr, &Li); + renorm_poc_fx(&Rr, &Ri); +#else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -447,6 +462,7 @@ static void calc_poc_fx( Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT ); Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT ); } +#endif specPOr[i] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); // 2*spec_e move32(); @@ -460,6 +476,10 @@ static void calc_poc_fx( Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) ); Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); +#ifdef FIX_1764_RENORM + renorm_poc_fx(&Lr, &Li); + renorm_poc_fx(&Rr, &Ri); +#else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -470,6 +490,7 @@ static void calc_poc_fx( Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT ); Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT ); } +#endif specPOr[j] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); // 2*spec_e move32(); @@ -492,6 +513,10 @@ static void calc_poc_fx( Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) ); Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); +#ifdef FIX_1764_RENORM + renorm_poc_fx(&Lr, &Li); + renorm_poc_fx(&Rr, &Ri); +#else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -502,6 +527,7 @@ static void calc_poc_fx( Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT ); Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT ); } +#endif specPOr[i] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); // 2*spec_e move32(); @@ -514,6 +540,10 @@ static void calc_poc_fx( Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) ); Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); +#ifdef FIX_1764_RENORM + renorm_poc_fx(&Lr, &Li); + renorm_poc_fx(&Rr, &Ri); +#else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Rr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -524,6 +554,7 @@ static void calc_poc_fx( Rr = L_shl( Rr, STEREO_DMX_EVS_POC_RENORM_SHIFT ); Ri = L_shl( Ri, STEREO_DMX_EVS_POC_RENORM_SHIFT ); } +#endif specPOr[j] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); // 2*spec_e move32(); @@ -537,6 +568,11 @@ static void calc_poc_fx( Li = L_sub( specLi[i], Mpy_32_32_r( specRr[i], EPS ) ); Rr = L_add( specRr[i], Mpy_32_32_r( specLi[i], EPS ) ); Ri = L_sub( specRi[i], Mpy_32_32_r( specLr[i], EPS ) ); + +#ifdef FIX_1764_RENORM + renorm_poc_fx(&Lr, &Li); + renorm_poc_fx(&Rr, &Ri); +#endif specPOr[i] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); move32(); specPOi[i] = L_sub( Mpy_32_32_r( Lr, Ri ), Mpy_32_32_r( Li, Rr ) ); @@ -568,7 +604,11 @@ static void calc_poc_fx( { tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 +#ifdef FIX_1764_ABS + IF(GT_32(L_abs(specPOr[i]), L_abs(specPOi[i]))) +#else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) +#endif { specPOr[i] = Mpy_32_16_1( tmp1, imult1616( sign_fx( specPOr[i] ), /*0.923880f*/ s[120 * mult_angle] ) ); /* cos(PI/8) Q31*/ move32(); @@ -587,9 +627,17 @@ static void calc_poc_fx( FOR( ; i < end; i++ ) /* binary search from 16 angles */ { tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 +#ifdef FIX_1764_ABS + IF(GT_32(L_abs(specPOr[i]), L_abs(specPOi[i]))) +#else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) +#endif { +#ifdef FIX_1764_ABS + IF(GT_32(L_abs(Mpy_32_16_1(specPOr[i], 13573 /*0.414213f*/)), L_abs(specPOi[i]))) /*tan(PI/8)*/ +#else IF( W_mult0_32_32( L_sub( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ), L_add( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ) ) > 0 ) /*tan(PI/8)*/ +#endif { specPOr[i] = Mpy_32_16_1( tmp1 /*0.980785f */, imult1616( sign_fx( specPOr[i] ), s[140 * mult_angle] ) ); /* cos(PI/16) Q31*/ move32(); @@ -606,7 +654,11 @@ static void calc_poc_fx( } ELSE { +#ifdef FIX_1764_ABS + IF(GT_32(L_abs(Mpy_32_16_1(specPOi[i], 13573 /*0.414213f*/)), L_abs(specPOr[i]))) /*tan(PI/8)*/ +#else IF( W_mult0_32_32( L_sub( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ), L_add( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) > 0 ) /*tan(PI/8)*/ +#endif { specPOr[i] = Mpy_32_16_1( tmp1 /** 0.555570f*/, imult1616( sign_fx( specPOr[i] ), s[60 * mult_angle] ) ); /*cos(PI*5/16) Q31*/ move32(); @@ -1822,6 +1874,32 @@ static Word32 spectral_flatness_fx( return L_shl_sat( L_deposit_h( sf ), L_tmp_e ); } +#ifdef FIX_1764_RENORM +/*-------------------------------------------------------------------* + * renorm_poc_fx() + * + * two-stage renormalization of a complex number + *-------------------------------------------------------------------*/ +static void renorm_poc_fx( + Word32 *real, /* i/o real-part*/ + Word32 *imag /* i/o imaginary-part */ +) +{ + IF((LT_32(L_abs(*real), STEREO_DMX_EVS_POC_RENORM_TH)) && + (LT_32(L_abs(*imag), STEREO_DMX_EVS_POC_RENORM_TH))) + { + *real = L_shl(*real, STEREO_DMX_EVS_POC_RENORM_SHIFT); + *imag = L_shl(*imag, STEREO_DMX_EVS_POC_RENORM_SHIFT); + IF((LT_32(L_abs(*real), STEREO_DMX_EVS_POC_RENORM_TH)) && + (LT_32(L_abs(*imag), STEREO_DMX_EVS_POC_RENORM_TH))) + { + *real = L_shl(*real, STEREO_DMX_EVS_POC_RENORM_SHIFT); + *imag = L_shl(*imag, STEREO_DMX_EVS_POC_RENORM_SHIFT); + } + } +} +#endif + /*-------------------------------------------------------------------* * calc_energy() * -- GitLab From 729bdcc95d3fcc0a407ce915711b709fcfaf8111 Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Fri, 4 Jul 2025 13:23:27 +0900 Subject: [PATCH 2/7] Fixed the abs bug --- lib_enc/ivas_stereo_dmx_evs_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_stereo_dmx_evs_fx.c b/lib_enc/ivas_stereo_dmx_evs_fx.c index 58dcb93d1..6cf7cf8de 100644 --- a/lib_enc/ivas_stereo_dmx_evs_fx.c +++ b/lib_enc/ivas_stereo_dmx_evs_fx.c @@ -655,7 +655,7 @@ static void calc_poc_fx( ELSE { #ifdef FIX_1764_ABS - IF(GT_32(L_abs(Mpy_32_16_1(specPOi[i], 13573 /*0.414213f*/)), L_abs(specPOr[i]))) /*tan(PI/8)*/ + IF(GT_32(L_abs(specPOr[i]), L_abs(Mpy_32_16_1(specPOi[i], 13573 /*0.414213f*/)))) /*tan(PI/8)*/ #else IF( W_mult0_32_32( L_sub( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ), L_add( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) > 0 ) /*tan(PI/8)*/ #endif -- GitLab From a82c9aa77ca4ca6c38d0048d0e40ae89b32ef096 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Wed, 23 Jul 2025 10:32:11 +0200 Subject: [PATCH 3/7] Format (clang), typo, indices,... corrected. --- lib_enc/ivas_stereo_dmx_evs_fx.c | 77 +++++++++++++++----------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/lib_enc/ivas_stereo_dmx_evs_fx.c b/lib_enc/ivas_stereo_dmx_evs_fx.c index 6cf7cf8de..a2e451906 100644 --- a/lib_enc/ivas_stereo_dmx_evs_fx.c +++ b/lib_enc/ivas_stereo_dmx_evs_fx.c @@ -234,8 +234,8 @@ static Word32 spectral_flatness_fx( ); #ifdef FIX_1764_RENORM static void renorm_poc_fx( - Word32 *real, /* i/o real-part*/ - Word32 *imag /* i/o imaginary-part */ + Word32 *real, /* i/o real-part*/ + Word32 *imag /* i/o imaginary-part */ ); #endif /*-------------------------------------------------------------------* @@ -420,7 +420,7 @@ static void calc_poc_fx( mult_angle = 2; /*****/ move16(); } - if ( EQ_16( input_frame, L_FRAME32k ) ) + ELSE IF( EQ_16( input_frame, L_FRAME32k ) ) { mult_angle = 2; move16(); @@ -449,8 +449,8 @@ static void calc_poc_fx( Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); #ifdef FIX_1764_RENORM - renorm_poc_fx(&Lr, &Li); - renorm_poc_fx(&Rr, &Ri); + renorm_poc_fx( &Lr, &Li ); + renorm_poc_fx( &Rr, &Ri ); #else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -477,8 +477,8 @@ static void calc_poc_fx( Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); #ifdef FIX_1764_RENORM - renorm_poc_fx(&Lr, &Li); - renorm_poc_fx(&Rr, &Ri); + renorm_poc_fx( &Lr, &Li ); + renorm_poc_fx( &Rr, &Ri ); #else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -514,8 +514,8 @@ static void calc_poc_fx( Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); #ifdef FIX_1764_RENORM - renorm_poc_fx(&Lr, &Li); - renorm_poc_fx(&Rr, &Ri); + renorm_poc_fx( &Lr, &Li ); + renorm_poc_fx( &Rr, &Ri ); #else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -541,8 +541,8 @@ static void calc_poc_fx( Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); #ifdef FIX_1764_RENORM - renorm_poc_fx(&Lr, &Li); - renorm_poc_fx(&Rr, &Ri); + renorm_poc_fx( &Lr, &Li ); + renorm_poc_fx( &Rr, &Ri ); #else IF( ( LT_32( L_abs( Lr ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && ( LT_32( L_abs( Li ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && @@ -570,8 +570,8 @@ static void calc_poc_fx( Ri = L_sub( specRi[i], Mpy_32_32_r( specLr[i], EPS ) ); #ifdef FIX_1764_RENORM - renorm_poc_fx(&Lr, &Li); - renorm_poc_fx(&Rr, &Ri); + renorm_poc_fx( &Lr, &Li ); + renorm_poc_fx( &Rr, &Ri ); #endif specPOr[i] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); move32(); @@ -605,7 +605,7 @@ static void calc_poc_fx( tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 #ifdef FIX_1764_ABS - IF(GT_32(L_abs(specPOr[i]), L_abs(specPOi[i]))) + IF( GT_32( L_abs( specPOr[i] ), L_abs( specPOi[i] ) ) ) #else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) #endif @@ -628,13 +628,13 @@ static void calc_poc_fx( { tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 #ifdef FIX_1764_ABS - IF(GT_32(L_abs(specPOr[i]), L_abs(specPOi[i]))) + IF( GT_32( L_abs( specPOr[i] ), L_abs( specPOi[i] ) ) ) #else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) #endif { #ifdef FIX_1764_ABS - IF(GT_32(L_abs(Mpy_32_16_1(specPOr[i], 13573 /*0.414213f*/)), L_abs(specPOi[i]))) /*tan(PI/8)*/ + IF( GT_32( L_abs( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ) ), L_abs( specPOi[i] ) ) ) /*tan(PI/8)*/ #else IF( W_mult0_32_32( L_sub( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ), L_add( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ) ) > 0 ) /*tan(PI/8)*/ #endif @@ -655,7 +655,7 @@ static void calc_poc_fx( ELSE { #ifdef FIX_1764_ABS - IF(GT_32(L_abs(specPOr[i]), L_abs(Mpy_32_16_1(specPOi[i], 13573 /*0.414213f*/)))) /*tan(PI/8)*/ + IF( GT_32( L_abs( specPOr[i] ), L_abs( Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) ) /*tan(PI/8)*/ #else IF( W_mult0_32_32( L_sub( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ), L_add( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) > 0 ) /*tan(PI/8)*/ #endif @@ -754,7 +754,7 @@ static void calc_poc_fx( move16(); } - if ( GE_32( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) + IF( GE_32( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) { hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD; move32(); @@ -779,7 +779,7 @@ static void calc_poc_fx( move16(); } - if ( GE_16( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) + IF( GE_16( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) { hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD2; move32(); @@ -1673,9 +1673,6 @@ static Word32 find_poc_peak_fx( { Q_fx[i] = L_shr( Q_fx[i], negate( Q_e[i] ) ); // Q31 move32(); - } - FOR( i = 0; i < CPE_CHANNELS; i++ ) - { peakQ_fx[i] = L_shr( peakQ_fx[i], sub( 15, peakQ_e[i] ) ); // Q16 move32(); } @@ -1881,22 +1878,22 @@ static Word32 spectral_flatness_fx( * two-stage renormalization of a complex number *-------------------------------------------------------------------*/ static void renorm_poc_fx( - Word32 *real, /* i/o real-part*/ - Word32 *imag /* i/o imaginary-part */ + Word32 *real, /* i/o real-part*/ + Word32 *imag /* i/o imaginary-part */ ) { - IF((LT_32(L_abs(*real), STEREO_DMX_EVS_POC_RENORM_TH)) && - (LT_32(L_abs(*imag), STEREO_DMX_EVS_POC_RENORM_TH))) - { - *real = L_shl(*real, STEREO_DMX_EVS_POC_RENORM_SHIFT); - *imag = L_shl(*imag, STEREO_DMX_EVS_POC_RENORM_SHIFT); - IF((LT_32(L_abs(*real), STEREO_DMX_EVS_POC_RENORM_TH)) && - (LT_32(L_abs(*imag), STEREO_DMX_EVS_POC_RENORM_TH))) - { - *real = L_shl(*real, STEREO_DMX_EVS_POC_RENORM_SHIFT); - *imag = L_shl(*imag, STEREO_DMX_EVS_POC_RENORM_SHIFT); - } - } + IF( ( LT_32( L_abs( *real ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && + ( LT_32( L_abs( *imag ), STEREO_DMX_EVS_POC_RENORM_TH ) ) ) + { + *real = L_shl( *real, STEREO_DMX_EVS_POC_RENORM_SHIFT ); + *imag = L_shl( *imag, STEREO_DMX_EVS_POC_RENORM_SHIFT ); + IF( ( LT_32( L_abs( *real ), STEREO_DMX_EVS_POC_RENORM_TH ) ) && + ( LT_32( L_abs( *imag ), STEREO_DMX_EVS_POC_RENORM_TH ) ) ) + { + *real = L_shl( *real, STEREO_DMX_EVS_POC_RENORM_SHIFT ); + *imag = L_shl( *imag, STEREO_DMX_EVS_POC_RENORM_SHIFT ); + } + } } #endif @@ -2417,7 +2414,7 @@ void stereo_dmx_evs_enc_fx( FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { // ftmp += p_data_mem[n - m] * p_prev_taps[m]; - fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[sub( n, m )], p_prev_taps[m] ) ); // Q25 + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_prev_taps[m] ) ); // Q25 } fx_tmp = L_shl( fx_tmp, 1 ); // Q26 mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); @@ -2442,7 +2439,7 @@ void stereo_dmx_evs_enc_fx( FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { // ftmp += p_data_mem[n - m] * p_curr_taps[m]; - fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[sub( n, m )], p_curr_taps[m] ) ); // Q25 + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_curr_taps[m] ) ); // Q25 } fx_tmp = L_shl( fx_tmp, 1 ); // Q26 // dmx_pha_data[n] += ftmp * INV_SQRT_2; @@ -2489,7 +2486,7 @@ void stereo_dmx_evs_enc_fx( move16(); } - if ( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) + IF( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) { hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; move32(); @@ -2513,7 +2510,7 @@ void stereo_dmx_evs_enc_fx( move16(); } - if ( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) + IF( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) { hPHA->curr_prc = STEREO_DMX_EVS_PRC_PHA; move32(); -- GitLab From 25636173360a3e7ec49e614b06768c2288c61d9c Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Fri, 1 Aug 2025 11:16:32 +0200 Subject: [PATCH 4/7] Switches for fix 1764 added. --- lib_com/options.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 5257a5d6a..6089908dd 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -148,6 +148,9 @@ #define FIX_1824 #define FIX_1822 +#define FIX_1764_RENORM /* NTT: update renorm for ivas_stereo_dmx_evs */ +#define FIX_1764_ABS /* NTT: use abs in ivas_stereo_dmx_evs */ + /* #################### Start BASOP porting switches ############################ */ #define FIX_1372_ISAR_POST_REND -- GitLab From 9ffe41591a22c0fbb011af141bdf44350ed5be12 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Fri, 1 Aug 2025 11:43:32 +0200 Subject: [PATCH 5/7] Switches for fix 1764 renamed. --- lib_com/options.h | 3 +- lib_enc/ivas_stereo_dmx_evs_fx.c | 60 ++++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 6089908dd..cad219b1a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -148,8 +148,7 @@ #define FIX_1824 #define FIX_1822 -#define FIX_1764_RENORM /* NTT: update renorm for ivas_stereo_dmx_evs */ -#define FIX_1764_ABS /* NTT: use abs in ivas_stereo_dmx_evs */ +#define FIX_ISSUE_1764 /* NTT: update renorm and use abs */ /* #################### Start BASOP porting switches ############################ */ diff --git a/lib_enc/ivas_stereo_dmx_evs_fx.c b/lib_enc/ivas_stereo_dmx_evs_fx.c index 7a3ed6fa7..6c2a79e86 100644 --- a/lib_enc/ivas_stereo_dmx_evs_fx.c +++ b/lib_enc/ivas_stereo_dmx_evs_fx.c @@ -98,7 +98,7 @@ #define STEREO_DMX_EVS_TRNS_EGY_FORGETTING_Q15 24576 -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 #define STEREO_DMX_EVS_POC_RENORM_TH 1048576 // 65536 * 16 #define STEREO_DMX_EVS_POC_RENORM_SHIFT 10 #else @@ -232,7 +232,7 @@ static Word32 spectral_flatness_fx( const Word16 *sig_fx_e, /* i : input signal (exponent) - can be NULL */ const Word16 sig_length /* i : input signal length */ ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 static void renorm_poc_fx( Word32 *real, /* i/o real-part*/ Word32 *imag /* i/o imaginary-part */ @@ -420,7 +420,11 @@ static void calc_poc_fx( mult_angle = 2; /*****/ move16(); } +#ifdef FIX_ISSUE_1764 ELSE IF( EQ_16( input_frame, L_FRAME32k ) ) +#else + if ( EQ_16( input_frame, L_FRAME32k ) ) +#endif { mult_angle = 2; move16(); @@ -448,7 +452,7 @@ static void calc_poc_fx( Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) ); Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #else @@ -476,7 +480,7 @@ static void calc_poc_fx( Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) ); Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #else @@ -513,7 +517,7 @@ static void calc_poc_fx( Rr = L_add( L_add( specRr[i], Mpy_32_32_r( specLr[i], eps_cos ) ), Mpy_32_32_r( specLi[i], eps_sin ) ); Ri = L_add( L_sub( specRi[i], Mpy_32_32_r( specLr[i], eps_sin ) ), Mpy_32_32_r( specLi[i], eps_cos ) ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #else @@ -540,7 +544,7 @@ static void calc_poc_fx( Rr = L_add( L_sub( specRr[j], Mpy_32_32_r( specLr[j], eps_cos ) ), Mpy_32_32_r( specLi[j], eps_sin ) ); Ri = L_sub( L_sub( specRi[j], Mpy_32_32_r( specLr[j], eps_sin ) ), Mpy_32_32_r( specLi[j], eps_cos ) ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #else @@ -569,7 +573,7 @@ static void calc_poc_fx( Rr = L_add( specRr[i], Mpy_32_32_r( specLi[i], EPS ) ); Ri = L_sub( specRi[i], Mpy_32_32_r( specLr[i], EPS ) ); -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #endif @@ -604,7 +608,7 @@ static void calc_poc_fx( { tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 -#ifdef FIX_1764_ABS +#ifdef FIX_ISSUE_1764 IF( GT_32( L_abs( specPOr[i] ), L_abs( specPOi[i] ) ) ) #else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) @@ -627,13 +631,13 @@ static void calc_poc_fx( FOR( ; i < end; i++ ) /* binary search from 16 angles */ { tmp1 = Mpy_32_32_r( wnd[i * step + bias], gamma ); // Q31 -#ifdef FIX_1764_ABS +#ifdef FIX_ISSUE_1764 IF( GT_32( L_abs( specPOr[i] ), L_abs( specPOi[i] ) ) ) #else IF( W_mult0_32_32( L_sub( specPOr[i], specPOi[i] ), L_add( specPOr[i], specPOi[i] ) ) > 0 ) #endif { -#ifdef FIX_1764_ABS +#ifdef FIX_ISSUE_1764 IF( GT_32( L_abs( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ) ), L_abs( specPOi[i] ) ) ) /*tan(PI/8)*/ #else IF( W_mult0_32_32( L_sub( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ), L_add( Mpy_32_16_1( specPOr[i], 13573 /*0.414213f*/ ), specPOi[i] ) ) > 0 ) /*tan(PI/8)*/ @@ -654,7 +658,7 @@ static void calc_poc_fx( } ELSE { -#ifdef FIX_1764_ABS +#ifdef FIX_ISSUE_1764 IF( GT_32( L_abs( specPOr[i] ), L_abs( Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) ) /*tan(PI/8)*/ #else IF( W_mult0_32_32( L_sub( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ), L_add( specPOr[i], Mpy_32_16_1( specPOi[i], 13573 /*0.414213f*/ ) ) ) > 0 ) /*tan(PI/8)*/ @@ -753,8 +757,11 @@ static void calc_poc_fx( hPHA->pha_hys_cnt = 0; move16(); } - +#ifdef FIX_ISSUE_1764 IF( GE_32( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) +#else + if ( GE_32( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) +#endif { hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD; move32(); @@ -778,8 +785,11 @@ static void calc_poc_fx( hPHA->pha_hys_cnt = 0; move16(); } - +#ifdef FIX_ISSUE_1764 IF( GE_16( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) +#else + if ( GE_16( hPHA->pha_hys_cnt, STEREO_DMX_EVS_SWTCH_HYS_THRES ) ) +#endif { hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD2; move32(); @@ -1674,6 +1684,11 @@ static Word32 find_poc_peak_fx( { Q_fx[i] = L_shr( Q_fx[i], negate( Q_e[i] ) ); // Q31 move32(); +#ifndef FIX_ISSUE_1764 + } + FOR( i = 0; i < CPE_CHANNELS; i++ ) + { +#endif peakQ_fx[i] = L_shr( peakQ_fx[i], sub( 15, peakQ_e[i] ) ); // Q16 move32(); } @@ -1873,7 +1888,7 @@ static Word32 spectral_flatness_fx( return L_shl_sat( L_deposit_h( sf ), L_tmp_e ); } -#ifdef FIX_1764_RENORM +#ifdef FIX_ISSUE_1764 /*-------------------------------------------------------------------* * renorm_poc_fx() * @@ -2419,7 +2434,11 @@ void stereo_dmx_evs_enc_fx( FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { // ftmp += p_data_mem[n - m] * p_prev_taps[m]; +#ifdef FIX_ISSUE_1764 fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_prev_taps[m] ) ); // Q25 +#else + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[sub( n, m )], p_prev_taps[m] ) ); // Q25 +#endif } fx_tmp = L_shl( fx_tmp, 1 ); // Q26 mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); @@ -2444,7 +2463,11 @@ void stereo_dmx_evs_enc_fx( FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { // ftmp += p_data_mem[n - m] * p_curr_taps[m]; +#ifdef FIX_ISSUE_1764 fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_curr_taps[m] ) ); // Q25 +#else + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[sub( n, m )], p_curr_taps[m] ) ); // Q25 +#endif } fx_tmp = L_shl( fx_tmp, 1 ); // Q26 // dmx_pha_data[n] += ftmp * INV_SQRT_2; @@ -2490,8 +2513,11 @@ void stereo_dmx_evs_enc_fx( hPHA->prc_hys_cnt = 0; move16(); } - +#ifdef FIX_ISSUE_1764 IF( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) +#else + if ( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) +#endif { hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; move32(); @@ -2515,7 +2541,11 @@ void stereo_dmx_evs_enc_fx( move16(); } +#ifdef FIX_ISSUE_1764 IF( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) +#else + if ( GE_16( hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) +#endif { hPHA->curr_prc = STEREO_DMX_EVS_PRC_PHA; move32(); -- GitLab From 3aaa50b91aaf33e6fa750da3cb0b2648c6348579 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Fri, 1 Aug 2025 17:47:36 +0200 Subject: [PATCH 6/7] Dummy. --- lib_enc/ivas_stereo_dmx_evs_fx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_enc/ivas_stereo_dmx_evs_fx.c b/lib_enc/ivas_stereo_dmx_evs_fx.c index 6c2a79e86..59f00bd90 100644 --- a/lib_enc/ivas_stereo_dmx_evs_fx.c +++ b/lib_enc/ivas_stereo_dmx_evs_fx.c @@ -577,6 +577,7 @@ static void calc_poc_fx( renorm_poc_fx( &Lr, &Li ); renorm_poc_fx( &Rr, &Ri ); #endif + specPOr[i] = L_add( Mpy_32_32_r( Lr, Rr ), Mpy_32_32_r( Li, Ri ) ); move32(); specPOi[i] = L_sub( Mpy_32_32_r( Lr, Ri ), Mpy_32_32_r( Li, Rr ) ); -- GitLab From acb251a949a6f89256837cbc01c060700966ca5e Mon Sep 17 00:00:00 2001 From: "@ragot" Date: Thu, 7 Aug 2025 20:51:08 +0200 Subject: [PATCH 7/7] fix options.h --- lib_com/options.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index d17452ffe..d1e0bcee2 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -90,10 +90,7 @@ #define FIX_1824 #define FIX_1822 -<<<<<<< HEAD #define FIX_ISSUE_1764 /* NTT: update renorm and use abs */ -======= ->>>>>>> 84312b808372d2e7c5f93cecaf09bc3b61427149 #define FIX_ISSUE_1817_REPLACE_CARRY_OVERFLOW /* FhG: bit-exact, replace carry and overflow operations by 64-bit operations, MR 1931 */ #define FIX_1844_MISSING_FREE /* FhG: add missing free in ivas_binRenderer_convModuleClose_fx() */ -- GitLab