From da0920353d6faf0cf4cab3d422578fe0379f386c Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Mon, 3 Feb 2025 14:22:54 -0500 Subject: [PATCH 1/2] possible fix to 1257, issue in icBWE --- lib_com/options.h | 3 +++ lib_enc/ivas_stereo_icbwe_enc.c | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index d5314dd12..3b4d90889 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -148,4 +148,7 @@ #define FIX_11_1_IVAS_SPAR_DEC_UPMIXER_SF_RND_COEFFS /* FhG ivas_spar_com.c: Zeroes very small negative coeffs via L_shr_r (was L_shr) */ #define FIX_ISSUE_1237 /* VA: replacement of Copy_Scale_sig_16_32_DEPREC() that are doing 16 bits left shift by Copy_Scale_sig_16_32_no_sat() */ #define FIX_ISSUE_1237_KEEP_EVS_BE /* VA: Fix to keep EVS bitexactness to 26.444 */ + +#define FIX1257_POSSIBLE_FIX_TO_EXTRACT_L /* VA: possible fix that prevent BWE to disappear */ + #endif diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c index cc5f8453a..c3d507f11 100644 --- a/lib_enc/ivas_stereo_icbwe_enc.c +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -216,9 +216,11 @@ static Word16 ic_bwe_enc_specMapping_ivas_fx( b_e = BASOP_Util_Add_MantExp( tmp1, sub( add( Txx1_e, T_desired_e ), 1 ), negate( tmp ), exp, &b_fx ); /* Q15-b_fx */ c_e = BASOP_Util_Add_MantExp( T_desired_fx, T_desired_e, negate( Txx1_fx ), Txx1_e, &c_fx ); /* Q15-c_fx */ - +#ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L + u_fx = extract_h( *specMapping_fx ); // specMapping_fx is in Q31, I don't see how extract_l can be used without causing issues, maybe I miss something +#else u_fx = extract_l( *specMapping_fx ); - +#endif tmp = mult( b_fx, b_fx ); // b_e + b_e; tmp1 = mult( a_fx, c_fx ); // a_e + c_e + 2 @@ -374,7 +376,11 @@ static Word16 ic_bwe_enc_gsMapping_ivas_fx( /* quantize the IC-BWE GS mapping*/ IF( EQ_16( element_mode, IVAS_CPE_TD ) ) { +#ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L + temp2_fx = extract_h( L_shl_sat( temp2_fx32, Q16 - Q10 ) ); // Q15 +#else temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 +#endif gsMapping_fx16 = 0; move16(); idx = squant_fx( temp2_fx, &gsMapping_fx16, icbwe_gsMapping_tbl_fx, ( 1 << STEREO_ICBWE_GSBITS ) ); // Q12 @@ -382,7 +388,11 @@ static Word16 ic_bwe_enc_gsMapping_ivas_fx( } ELSE { +#ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L + temp2_fx = extract_h( L_shl_sat( temp2_fx32, 16-Q10 ) ); // Q15 +#else temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 +#endif gsMapping_fx16 = 0; move16(); idx = squant_fx( temp2_fx, &gsMapping_fx16, icbwe_gsMappingDFT_tbl_fx, ( 1 << STEREO_ICBWE_GSBITS ) ); // Q12 @@ -732,7 +742,11 @@ void stereo_icBWE_enc_ivas_fx( tmp = shr( tmp, sub( Q15, exp ) ); /* Q0 */ FOR( j = 0; j < tmp; ( j++, k++ ) ) { +#ifndef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L excSHB_nonref_fx[k] = extract_l( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), add( temp1_e, hStereoICBWE->nlExc16k_e ), Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), add( temp2_e, hStereoICBWE->mixExc16k_e ), &exp_buf[k] ) ); /* Q31-exp_buf */ +#else + excSHB_nonref_fx[k] = extract_h( L_shl_sat(BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), add( temp1_e, hStereoICBWE->nlExc16k_e ), Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), add( temp2_e, hStereoICBWE->mixExc16k_e ), &exp_buf[k] ), 16 ) ); /* Q31-exp_buf */ +#endif move32(); } } @@ -955,7 +969,11 @@ void stereo_icBWE_enc_ivas_fx( FOR( j = 0; j < ( L_FRAME16k / nbSubFr ); ( j++, k++ ) ) { +#ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L + excSHB_nonref_fx[k] = extract_h(L_shl_sat( BASOP_Util_Add_Mant32Exp(Mpy_32_32(temp1_fx, hStereoICBWE->nlExc16k_fx[k]), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32(temp2_fx, hStereoICBWE->mixExc16k_fx[k]), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k]), 16 ) ); /* Q31-exp_buf */ +#else excSHB_nonref_fx[k] = extract_l( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k] ) ); /* Q31-exp_buf */ +#endif move32(); } } -- GitLab From f033494d15670870c728804feb0226c098356714 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Mon, 3 Feb 2025 14:26:52 -0500 Subject: [PATCH 2/2] Clang format --- lib_enc/ivas_stereo_icbwe_enc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c index c3d507f11..83e8ce0eb 100644 --- a/lib_enc/ivas_stereo_icbwe_enc.c +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -217,7 +217,7 @@ static Word16 ic_bwe_enc_specMapping_ivas_fx( c_e = BASOP_Util_Add_MantExp( T_desired_fx, T_desired_e, negate( Txx1_fx ), Txx1_e, &c_fx ); /* Q15-c_fx */ #ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L - u_fx = extract_h( *specMapping_fx ); // specMapping_fx is in Q31, I don't see how extract_l can be used without causing issues, maybe I miss something + u_fx = extract_h( *specMapping_fx ); // specMapping_fx is in Q31, I don't see how extract_l can be used without causing issues, maybe I miss something #else u_fx = extract_l( *specMapping_fx ); #endif @@ -379,7 +379,7 @@ static Word16 ic_bwe_enc_gsMapping_ivas_fx( #ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L temp2_fx = extract_h( L_shl_sat( temp2_fx32, Q16 - Q10 ) ); // Q15 #else - temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 + temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 #endif gsMapping_fx16 = 0; move16(); @@ -389,9 +389,9 @@ static Word16 ic_bwe_enc_gsMapping_ivas_fx( ELSE { #ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L - temp2_fx = extract_h( L_shl_sat( temp2_fx32, 16-Q10 ) ); // Q15 + temp2_fx = extract_h( L_shl_sat( temp2_fx32, 16 - Q10 ) ); // Q15 #else - temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 + temp2_fx = extract_l( L_shr( temp2_fx32, Q10 ) ); // Q15 #endif gsMapping_fx16 = 0; move16(); @@ -745,7 +745,7 @@ void stereo_icBWE_enc_ivas_fx( #ifndef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L excSHB_nonref_fx[k] = extract_l( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), add( temp1_e, hStereoICBWE->nlExc16k_e ), Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), add( temp2_e, hStereoICBWE->mixExc16k_e ), &exp_buf[k] ) ); /* Q31-exp_buf */ #else - excSHB_nonref_fx[k] = extract_h( L_shl_sat(BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), add( temp1_e, hStereoICBWE->nlExc16k_e ), Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), add( temp2_e, hStereoICBWE->mixExc16k_e ), &exp_buf[k] ), 16 ) ); /* Q31-exp_buf */ + excSHB_nonref_fx[k] = extract_h( L_shl_sat( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), add( temp1_e, hStereoICBWE->nlExc16k_e ), Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), add( temp2_e, hStereoICBWE->mixExc16k_e ), &exp_buf[k] ), 16 ) ); /* Q31-exp_buf */ #endif move32(); } @@ -807,7 +807,7 @@ void stereo_icBWE_enc_ivas_fx( #ifdef FIX_ISSUE_1237 Copy_Scale_sig_16_32_no_sat( hStereoICBWE->mem_shb_speech_ref_fx, shb_frame_ref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); // mem_shb_speech_ref_e #else - Copy_Scale_sig_16_32_DEPREC( hStereoICBWE->mem_shb_speech_ref_fx, shb_frame_ref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); // mem_shb_speech_ref_e + Copy_Scale_sig_16_32_DEPREC( hStereoICBWE->mem_shb_speech_ref_fx, shb_frame_ref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); // mem_shb_speech_ref_e #endif hStereoICBWE->mem_shb_speech_ref_e = max_e; shb_frame_ref_e = max_e; @@ -825,7 +825,7 @@ void stereo_icBWE_enc_ivas_fx( #ifdef FIX_ISSUE_1237 Copy_Scale_sig_16_32_no_sat( hStereoICBWE->mem_shb_speech_nonref_fx, shb_frame_nonref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_nonref_e ) ), Q16 ) ); // mem_shb_speech_ref_e #else - Copy_Scale_sig_16_32_DEPREC( hStereoICBWE->mem_shb_speech_nonref_fx, shb_frame_nonref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_nonref_e ) ), Q16 ) ); // mem_shb_speech_ref_e + Copy_Scale_sig_16_32_DEPREC( hStereoICBWE->mem_shb_speech_nonref_fx, shb_frame_nonref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_nonref_e ) ), Q16 ) ); // mem_shb_speech_ref_e #endif hStereoICBWE->mem_shb_speech_nonref_e = max_e; shb_frame_nonref_e = max_e; @@ -970,9 +970,9 @@ void stereo_icBWE_enc_ivas_fx( FOR( j = 0; j < ( L_FRAME16k / nbSubFr ); ( j++, k++ ) ) { #ifdef FIX1257_POSSIBLE_FIX_TO_EXTRACT_L - excSHB_nonref_fx[k] = extract_h(L_shl_sat( BASOP_Util_Add_Mant32Exp(Mpy_32_32(temp1_fx, hStereoICBWE->nlExc16k_fx[k]), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32(temp2_fx, hStereoICBWE->mixExc16k_fx[k]), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k]), 16 ) ); /* Q31-exp_buf */ + excSHB_nonref_fx[k] = extract_h( L_shl_sat( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k] ), 16 ) ); /* Q31-exp_buf */ #else - excSHB_nonref_fx[k] = extract_l( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k] ) ); /* Q31-exp_buf */ + excSHB_nonref_fx[k] = extract_l( BASOP_Util_Add_Mant32Exp( Mpy_32_32( temp1_fx, hStereoICBWE->nlExc16k_fx[k] ), temp1_e + hStereoICBWE->nlExc16k_e, Mpy_32_32( temp2_fx, hStereoICBWE->mixExc16k_fx[k] ), temp2_e + hStereoICBWE->mixExc16k_e, &exp_buf[k] ) ); /* Q31-exp_buf */ #endif move32(); } -- GitLab