From 0e1a65b425889f909cdc21f2bd65402bd8f52d27 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Sun, 20 Oct 2024 08:17:43 +0530 Subject: [PATCH] Fix for 3GPP issue 933: Decoder: High MLD for ParamISM, 32 kbps, DTX off --- lib_com/swb_tbe_com_fx.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib_com/swb_tbe_com_fx.c b/lib_com/swb_tbe_com_fx.c index f70b82875..00d5682d5 100644 --- a/lib_com/swb_tbe_com_fx.c +++ b/lib_com/swb_tbe_com_fx.c @@ -2863,7 +2863,6 @@ void GenShapedSHBExcitation_ivas_fx( #endif set16_fx( zero_mem, 0, LPC_SHB_ORDER ); set16_fx( wht_fil_mem, 0, LPC_WHTN_ORDER ); - FOR( i = 0; i < L_FRAME32k; i = i + 2 ) { exc32k[i] = negate( bwe_exc_extended[i] ); // Q_bwe_exc @@ -3036,7 +3035,11 @@ void GenShapedSHBExcitation_ivas_fx( White_exc16k = exc16k; move16(); - Word16 Q_excTmp2 = sub( add( s_min( getScaleFactor16( excTmp2, L_FRAME16k ), norm_l( *mem_csfilt ) ), *Q_bwe_exc ), 1 ); + Word16 Q_excTmp2 = add( getScaleFactor16( excTmp2, L_FRAME16k ), *Q_bwe_exc ); + IF( *mem_csfilt ) + { + Q_excTmp2 = s_min( Q_excTmp2, sub( add( norm_l( *mem_csfilt ), *Q_bwe_exc ), 1 ) ); + } test(); /* Track the low band envelope */ IF( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) @@ -3148,8 +3151,8 @@ void GenShapedSHBExcitation_ivas_fx( tmp = add( *Q_bwe_exc, 1 ); FOR( k = 0; k < L_FRAME16k; k++ ) { - L_tmp4 = L_mult( shr( excNoisyEnv[k], sub( Q_excTmp2, *Q_bwe_exc ) ), White_exc16k[k] ); /* (Q_excTmp2) +5 +1*/ - White_exc16k_32[k] = L_tmp4; /* (Q_excTmp2) +5 +1*/ + L_tmp4 = L_mult( excNoisyEnv[k], White_exc16k[k] ); /* (Q_excTmp2) +5 +1*/ + White_exc16k_32[k] = L_tmp4; /* (Q_excTmp2) +5 +1*/ move32(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } @@ -3166,11 +3169,10 @@ void GenShapedSHBExcitation_ivas_fx( /* pow22=0.00001f */ tmp = sub( shl( sub( *Q_bwe_exc, NOISE_QADJ ), 1 ), 31 ); pow22 = L_shl( 21475l /*0.00001f Q31*/, tmp ); /* 0.00001f in 2*(*Q_bwe_exc-NOISE_QADJ) */ - tmp = sub( NOISE_QFAC, 5 ); FOR( k = 0; k < L_FRAME16k; k++ ) { /* White_exc16k[k] *= excNoisyEnv[k]; */ - White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], tmp ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9 + White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], 1 ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9 move16(); chk2 = s_or( chk2, White_exc16k[k] ); /* i: excNoisyEnv in (Q_excTmp2) */ @@ -3178,7 +3180,7 @@ void GenShapedSHBExcitation_ivas_fx( /* o: White_exc16k in (Q_bwe_exc-NOISE_QADJ) */ /* pow22 += White_exc16k[k] * White_exc16k[k]; */ #ifdef BASOP_NOGLOB - pow22 = L_mac0_sat( pow22, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_bwe_exc-NOISE_QADJ)*/ + pow22 = L_mac0_sat( pow22, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_excTmp2-NOISE_QADJ)*/ #else pow22 = L_mac0( pow22, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_bwe_exc-NOISE_QADJ)*/ #endif @@ -3504,6 +3506,7 @@ void GenShapedSHBExcitation_ivas_fx( deemph_fx( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph ); /* i/o: White_exc16k (Q_bwe_exc-NOISE_QADJ) */ /* i: tbe_demph (Q_bwe_exc-NOISE_QADJ) */ + #if 1 // def ADD_IVAS_TBE_CODE test(); IF( EQ_32( extl_brate, SWB_TBE_1k10 ) || EQ_32( extl_brate, SWB_TBE_1k75 ) ) @@ -3644,7 +3647,7 @@ void GenShapedSHBExcitation_ivas_fx( tempQ15 = mult_r( SWB_NOISE_MIX_FAC_FX, formant_fac ); /* vf_tmp = voice_factors[i] * (1.0f - vf_tmp); */ vf_tmp = sub( MAX_16, tempQ15 ); - vf_tmp = mult_r( voice_factors[i], vf_tmp ); + vf_tmp = mult( voice_factors[i], vf_tmp ); exp = 0; move16(); -- GitLab