Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ #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() */ #define FIX_1942_ASSERTION_LOWSHELF /* FhG: Modified the target_gains_db_fx calculation in compute_t60_coeffs_fx() */ #define FIX_1944_CRASH_FOR_STEREO /* FhG: improve TonalMDCTConceal_InsertNoise calculation precision */ /* #################### Start BASOP porting switches ############################ */ #define FIX_1372_ISAR_POST_REND Loading lib_dec/ivas_core_dec_fx.c +5 −1 Original line number Diff line number Diff line Loading @@ -751,9 +751,13 @@ ivas_error ivas_core_dec_fx( move16(); sts[1]->hHQ_core->Q_old_wtda = sub( 15, sts[1]->hHQ_core->exp_old_out ); move16(); #ifdef FIX_1944_CRASH_FOR_STEREO shift1 = getScaleFactor16( sts[0]->hHQ_core->old_out_fx, L_FRAME48k ); shift2 = getScaleFactor16( sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); #else shift1 = norm_arr( sts[0]->hHQ_core->old_out_fx, L_FRAME48k ); shift2 = norm_arr( sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); #endif scale_sig( sts[0]->hHQ_core->old_out_fx, L_FRAME48k, shift1 ); scale_sig( sts[1]->hHQ_core->old_out_fx, L_FRAME48k, shift2 ); sts[0]->hHQ_core->Q_old_wtda = add( sts[0]->hHQ_core->Q_old_wtda, shift1 ); Loading lib_dec/tonalMDCTconcealment_fx.c +53 −5 Original line number Diff line number Diff line Loading @@ -1326,8 +1326,11 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( { Word16 i, l, ld, fac; Word16 rnd; #ifdef FIX_1944_CRASH_FOR_STEREO Word16 tmp, g, tilt, exp_last, exp_noise, tiltFactor, crossfadeGain, e_crossfadeGain, scaleFactor; #else Word16 tmp, g, tilt, exp_last, exp_noise, tiltFactor, crossfadeGain, e_crossfadeGain; #endif Word32 L_tmp, L_tmp1, L_tmp2, nrgNoiseInLastFrame, nrgWhiteNoise; Word16 inv_exp, inv_samples, exp; Word32 last_block_nrg_correct; Loading Loading @@ -1505,9 +1508,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[i] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[i], mdctSpectrum[i] ) ); // Q31- faded_signal_nrg_exp move32(); #endif } FOR( i = crossOverFreq; i < hTonalMDCTConc->lastBlockData.nSamples; i++ ) { Loading @@ -1516,7 +1520,28 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } *mdctSpectrum_exp = sub( add( e_crossfadeGain, hTonalMDCTConc->lastBlockData.spectralData_exp ), exp ); move16(); #ifdef FIX_1944_CRASH_FOR_STEREO scaleFactor = getScaleFactor32( mdctSpectrum, crossOverFreq ); IF( scaleFactor > 8 ) { scaleFactor = sub( scaleFactor, 8 ); // add headroom } ELSE { scaleFactor = 0; move16(); } FOR( i = 0; i < crossOverFreq; i++ ) { Word32 mdctSpectrumScaled = L_shl( mdctSpectrum[i], scaleFactor ); hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrumScaled, mdctSpectrumScaled ) ); } move32(); hTonalMDCTConc->faded_signal_nrg_exp = shl( sub( *mdctSpectrum_exp, scaleFactor ), 1 ); #else hTonalMDCTConc->faded_signal_nrg_exp = shl( *mdctSpectrum_exp, 1 ); #endif move16(); } } Loading Loading @@ -1680,9 +1705,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31 - 2*mdctSpectrum_exp move32(); #endif } FOR( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) Loading @@ -1702,8 +1728,9 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31- 2*mdctSpectrum_exp #endif } } Loading @@ -1722,9 +1749,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31- 2*mdctSpectrum_exp move32(); #endif } FOR( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) Loading @@ -1732,8 +1760,28 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( mdctSpectrum[l] = L_deposit_h( 0 ); move32(); } #ifdef FIX_1944_CRASH_FOR_STEREO scaleFactor = getScaleFactor32( mdctSpectrum, crossOverFreq ); IF( scaleFactor > 8 ) { scaleFactor = sub( scaleFactor, 8 ); // add headroom } ELSE { scaleFactor = 0; move16(); } FOR( i = 0; i < crossOverFreq; i++ ) { Word32 mdctSpectrumScaled = L_shl( mdctSpectrum[i], scaleFactor ); hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrumScaled, mdctSpectrumScaled ) ); } move32(); hTonalMDCTConc->faded_signal_nrg_exp = shl( sub( *mdctSpectrum_exp, scaleFactor ), 1 ); #else hTonalMDCTConc->faded_signal_nrg_exp = shl( *mdctSpectrum_exp, 1 ); #endif move16(); } } Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ #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() */ #define FIX_1942_ASSERTION_LOWSHELF /* FhG: Modified the target_gains_db_fx calculation in compute_t60_coeffs_fx() */ #define FIX_1944_CRASH_FOR_STEREO /* FhG: improve TonalMDCTConceal_InsertNoise calculation precision */ /* #################### Start BASOP porting switches ############################ */ #define FIX_1372_ISAR_POST_REND Loading
lib_dec/ivas_core_dec_fx.c +5 −1 Original line number Diff line number Diff line Loading @@ -751,9 +751,13 @@ ivas_error ivas_core_dec_fx( move16(); sts[1]->hHQ_core->Q_old_wtda = sub( 15, sts[1]->hHQ_core->exp_old_out ); move16(); #ifdef FIX_1944_CRASH_FOR_STEREO shift1 = getScaleFactor16( sts[0]->hHQ_core->old_out_fx, L_FRAME48k ); shift2 = getScaleFactor16( sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); #else shift1 = norm_arr( sts[0]->hHQ_core->old_out_fx, L_FRAME48k ); shift2 = norm_arr( sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); #endif scale_sig( sts[0]->hHQ_core->old_out_fx, L_FRAME48k, shift1 ); scale_sig( sts[1]->hHQ_core->old_out_fx, L_FRAME48k, shift2 ); sts[0]->hHQ_core->Q_old_wtda = add( sts[0]->hHQ_core->Q_old_wtda, shift1 ); Loading
lib_dec/tonalMDCTconcealment_fx.c +53 −5 Original line number Diff line number Diff line Loading @@ -1326,8 +1326,11 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( { Word16 i, l, ld, fac; Word16 rnd; #ifdef FIX_1944_CRASH_FOR_STEREO Word16 tmp, g, tilt, exp_last, exp_noise, tiltFactor, crossfadeGain, e_crossfadeGain, scaleFactor; #else Word16 tmp, g, tilt, exp_last, exp_noise, tiltFactor, crossfadeGain, e_crossfadeGain; #endif Word32 L_tmp, L_tmp1, L_tmp2, nrgNoiseInLastFrame, nrgWhiteNoise; Word16 inv_exp, inv_samples, exp; Word32 last_block_nrg_correct; Loading Loading @@ -1505,9 +1508,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[i] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[i], mdctSpectrum[i] ) ); // Q31- faded_signal_nrg_exp move32(); #endif } FOR( i = crossOverFreq; i < hTonalMDCTConc->lastBlockData.nSamples; i++ ) { Loading @@ -1516,7 +1520,28 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } *mdctSpectrum_exp = sub( add( e_crossfadeGain, hTonalMDCTConc->lastBlockData.spectralData_exp ), exp ); move16(); #ifdef FIX_1944_CRASH_FOR_STEREO scaleFactor = getScaleFactor32( mdctSpectrum, crossOverFreq ); IF( scaleFactor > 8 ) { scaleFactor = sub( scaleFactor, 8 ); // add headroom } ELSE { scaleFactor = 0; move16(); } FOR( i = 0; i < crossOverFreq; i++ ) { Word32 mdctSpectrumScaled = L_shl( mdctSpectrum[i], scaleFactor ); hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrumScaled, mdctSpectrumScaled ) ); } move32(); hTonalMDCTConc->faded_signal_nrg_exp = shl( sub( *mdctSpectrum_exp, scaleFactor ), 1 ); #else hTonalMDCTConc->faded_signal_nrg_exp = shl( *mdctSpectrum_exp, 1 ); #endif move16(); } } Loading Loading @@ -1680,9 +1705,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31 - 2*mdctSpectrum_exp move32(); #endif } FOR( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) Loading @@ -1702,8 +1728,9 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31- 2*mdctSpectrum_exp #endif } } Loading @@ -1722,9 +1749,10 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( } mdctSpectrum[l] = L_shl( L_tmp2, exp ); // Q15 - e_crossfadeGain + Q15 - spectralData_exp + exp move32(); #ifndef FIX_1944_CRASH_FOR_STEREO hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrum[l], mdctSpectrum[l] ) ); // Q31- 2*mdctSpectrum_exp move32(); #endif } FOR( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) Loading @@ -1732,8 +1760,28 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( mdctSpectrum[l] = L_deposit_h( 0 ); move32(); } #ifdef FIX_1944_CRASH_FOR_STEREO scaleFactor = getScaleFactor32( mdctSpectrum, crossOverFreq ); IF( scaleFactor > 8 ) { scaleFactor = sub( scaleFactor, 8 ); // add headroom } ELSE { scaleFactor = 0; move16(); } FOR( i = 0; i < crossOverFreq; i++ ) { Word32 mdctSpectrumScaled = L_shl( mdctSpectrum[i], scaleFactor ); hTonalMDCTConc->faded_signal_nrg = L_add( hTonalMDCTConc->faded_signal_nrg, Mpy_32_32( mdctSpectrumScaled, mdctSpectrumScaled ) ); } move32(); hTonalMDCTConc->faded_signal_nrg_exp = shl( sub( *mdctSpectrum_exp, scaleFactor ), 1 ); #else hTonalMDCTConc->faded_signal_nrg_exp = shl( *mdctSpectrum_exp, 1 ); #endif move16(); } } Loading