From 6c0fc0f0017a5adb8102389462a96f7b79e38f1d Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 1 Aug 2024 21:14:27 +0530 Subject: [PATCH 1/2] Fix for LTV crashes [x] Crash fix for ltv-MASA 2TC bitrate switching from 13.2 kbps to 512 kbps, 48kHz in, 48kHz out, EXT out, JBM Prof 5 test case. Scaling issue addressed in ivas_CalcPowerSpecAndDetectTonalComponents_fx [x] Crash fix for Test case - 10dB ltv-OMASA 1Dir1TC 4ISM at 48 kbps, 48kHz in, 48kHz out, BINAURAL_ROOM_REVERB out. Added the missed saturation check in tcx_noise_filling_with_shift. --- lib_com/tcx_utils_fx.c | 2 +- lib_dec/tonalMDCTconcealment_fx.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib_com/tcx_utils_fx.c b/lib_com/tcx_utils_fx.c index e7987d0ce..60f26d303 100644 --- a/lib_com/tcx_utils_fx.c +++ b/lib_com/tcx_utils_fx.c @@ -1857,7 +1857,7 @@ void tcx_noise_filling_with_shift( tmp32 = L_shr( Mpy_32_16_1( tmp32, tmp1 ), 6 ); BASOP_SATURATE_WARNING_OFF_EVS; #ifdef BASOP_NOGLOB - tilt_factor = round_fx( BASOP_Util_InvLog2( tmp32 ) ); + tilt_factor = round_fx_sat( BASOP_Util_InvLog2( tmp32 ) ); #else tilt_factor = round_fx( BASOP_Util_InvLog2( tmp32 ) ); #endif diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index bccb9ea3f..2a1669673 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -841,6 +841,8 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( power_spectrum_q = sub( 31, powerSpectrum_exp ); old_power_spectrum_q = power_spectrum_q; move16(); + Word16 length = 0; + move16(); /* here mdct_shaping() is intentionally used rather then mdct_shaping_16() */ IF( psychParamsCurrent == NULL ) { @@ -853,26 +855,30 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( invScaleFactors_fx[i] = L_shl( invScaleFactors[i], add( 1, invScaleFactors_exp[i] ) ); // Q16 move32(); } - sns_shape_spectrum_fx( powerSpectrum, &power_spectrum_q, psychParamsCurrent, invScaleFactors_fx, 16, hTonalMDCTConc->nSamplesCore, NULL ); + sns_shape_spectrum_fx( powerSpectrum, &power_spectrum_q, psychParamsCurrent, invScaleFactors_fx, 16, hTonalMDCTConc->nSamplesCore, &length ); power_spectrum_q = add( power_spectrum_q, 1 ); // sns_shape_spectrum(powerSpectrum, psychParamsCurrent, invScaleFactors, hTonalMDCTConc->nSamplesCore); // nBands = psychParamsCurrent->nBands; } IF( LT_16( old_power_spectrum_q, power_spectrum_q ) ) { - Scale_sig32( powerSpectrum, hTonalMDCTConc->nSamplesCore, sub( old_power_spectrum_q, power_spectrum_q ) ); + Scale_sig32( powerSpectrum, length, sub( old_power_spectrum_q, power_spectrum_q ) ); } ELSE { - Scale_sig32( powerSpectrum + hTonalMDCTConc->nSamplesCore, sub( nSamples, hTonalMDCTConc->nSamplesCore ), sub( power_spectrum_q, old_power_spectrum_q ) ); + Scale_sig32( powerSpectrum + length, sub( nSamples, length ), sub( power_spectrum_q, old_power_spectrum_q ) ); powerSpectrum_exp = sub( 31, power_spectrum_q ); } Scale_sig32( powerSpectrum, nSamples, -3 ); /*Adding guard bits*/ powerSpectrum_exp = add( powerSpectrum_exp, 3 ); FOR( i = hTonalMDCTConc->nSamplesCore; i < nSamples; i++ ) { - powerSpectrum[i] = L_shl( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); - move32(); +#ifdef BASOP_NOGLOB + powerSpectrum[i] = L_shl_sat( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); +#else + powerSpectrum[i] = L_shl( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); +#endif + move32(); } /* 16 bits are now enough for storing the power spectrum */ -- GitLab From fa88f1c046b35cb6658c17b9e77ef652b3040236 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 1 Aug 2024 21:37:01 +0530 Subject: [PATCH 2/2] clang formatting changes --- lib_dec/tonalMDCTconcealment_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 2a1669673..ef4d0ff73 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -874,11 +874,11 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( FOR( i = hTonalMDCTConc->nSamplesCore; i < nSamples; i++ ) { #ifdef BASOP_NOGLOB - powerSpectrum[i] = L_shl_sat( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); + powerSpectrum[i] = L_shl_sat( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); #else - powerSpectrum[i] = L_shl( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); + powerSpectrum[i] = L_shl( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[FDNS_NPTS - 1] ), invScaleFactors_exp[FDNS_NPTS - 1] ); #endif - move32(); + move32(); } /* 16 bits are now enough for storing the power spectrum */ -- GitLab