From 0ebae41961d7ccceda7692f4ccbaa0c3254b313a Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 10 Jul 2025 10:59:09 +0530 Subject: [PATCH] Fix for 3GPP issue 1805: Regression, spike in BASOP decoder MASA LTV at 64 kbps and 16 kHz input Link #1805 --- lib_dec/ivas_mdct_core_dec_fx.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 2baa31d22..27148f380 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1814,10 +1814,10 @@ void ivas_mdct_core_tns_ns_fx( length = L_spec[ch]; move16(); } - Scale_sig32( &x_fx[ch][k][0], length, -5 ); + Scale_sig32( &x_fx[ch][k][0], s_max( length, L_frameTCX[ch] ), -5 ); decoder_tcx_tns_fx( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x_fx[ch][k], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 1, &length ); norm_x = getScaleFactor32( &x_fx[ch][k][0], length ); - Scale_sig32( &x_fx[ch][k][0], length, norm_x ); + Scale_sig32( &x_fx[ch][k][0], s_max( length, L_frameTCX[ch] ), norm_x ); q_x = add( q_x, norm_x ); #ifndef OPT_SBA_DEC_V2_NBE x_e[ch][k] = sub( 31, q_x ); @@ -1856,10 +1856,13 @@ void ivas_mdct_core_tns_ns_fx( v_multc_fixed( x_fx[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, sns_int_scf_fx[FDNS_NPTS - 1], x_fx[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, sub( L_spec[ch], st->hTcxCfg->psychParamsCurrent->nBins ) ); - q_2 = sub( add( q_x, q_sns_int_scf ), 31 ); - Scale_sig32( &x_fx[ch][k][0], st->hTcxCfg->psychParamsCurrent->nBins, sub( q_2, q_x ) ); - q_x = q_2; - move16(); + IF( NE_16( L_spec[ch], st->hTcxCfg->psychParamsCurrent->nBins ) ) + { + q_2 = sub( add( q_x, q_sns_int_scf ), 31 ); + Scale_sig32( &x_fx[ch][k][0], st->hTcxCfg->psychParamsCurrent->nBins, sub( q_2, q_x ) ); + q_x = q_2; + move16(); + } #ifndef OPT_SBA_DEC_V2_NBE x_e[ch][k] = sub( 31, q_x ); move16(); @@ -1878,7 +1881,7 @@ void ivas_mdct_core_tns_ns_fx( length = L_spec[ch]; move16(); } - Scale_sig32( &x_fx[ch][k][0], length, -5 ); + Scale_sig32( &x_fx[ch][k][0], s_max( length, L_frameTCX[ch] ), -5 ); decoder_tcx_tns_fx( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x_fx[ch][k][0], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 0, &length ); #ifndef OPT_SBA_DEC_V2_NBE norm_x = getScaleFactor32( &x_fx[ch][k][0], length ); @@ -1887,7 +1890,7 @@ void ivas_mdct_core_tns_ns_fx( x_e[ch][k] = sub( 31, q_x ); move16(); #else /* OPT_SBA_DEC_V2_NBE */ - Scale_sig32( &x_fx[ch][k][0], length, sub( sub( 31, q_x ), x_e ) ); + Scale_sig32( &x_fx[ch][k][0], s_max( length, L_frameTCX[ch] ), sub( sub( 31, q_x ), x_e ) ); #endif /* OPT_SBA_DEC_V2_NBE */ } -- GitLab