Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ #define FIX_BASOP_2546_HARMONIZE_TCX_SCALAR /* FhG: Fix issue 2546 Harmonize function tcx_scalar_quantization_rateloop*/ #define FIX_BASOP_2532_cx_e /* FhG: Fix issue 2532 about additional exponent variable*/ #define HARMONIZE_2553_TonalConceal_Apply /* FhG: Harmonize TonalMDCTConceal_Apply with its ivas derivate */ /* #################### End BE switches ################################## */ Loading lib_com/prot_fx.h +11 −4 Original line number Diff line number Diff line Loading @@ -5687,15 +5687,22 @@ void TonalMDCTConceal_UpdateState_fx( const Word16 badBlock, const Word8 tonalConcealmentActive ); #ifndef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*IN/OUT*/ Word16 *mdctSpectrum_exp /*IN */ ); #endif #ifdef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( Word16 element_mode, #else void TonalMDCTConceal_Apply_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ #endif const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*IN/OUT*/ Word16 mdctSpectrum_exp, /*IN */ const PsychoacousticParameters *psychParamsCurrent ); Loading lib_dec/dec_tcx_fx.c +8 −0 Original line number Diff line number Diff line Loading @@ -969,7 +969,11 @@ void decoder_tcx_fx( test(); IF( bfi && st->tonal_mdct_plc_active ) { #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x, x_e, NULL ); #else TonalMDCTConceal_Apply_fx( st->hTonalMDCTConc, x, &x_e ); #endif } tmp32 = L_deposit_h( 0 ); Loading Loading @@ -5200,7 +5204,11 @@ void decoder_tcx_noiseshaping_igf_fx( test(); IF( bfi && st->tonal_mdct_plc_active && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) { #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x_fx, *x_e, st->hTcxCfg->psychParamsCurrent ); #else TonalMDCTConceal_Apply_ivas_fx( st->hTonalMDCTConc, x_fx, *x_e, st->hTcxCfg->psychParamsCurrent ); #endif /* If exponent has been updated after TonalMDCTConceal_Apply, then shift the spectrum to common exponent. */ } Loading lib_dec/ivas_mdct_core_dec_fx.c +4 −1 Original line number Diff line number Diff line Loading @@ -1715,8 +1715,11 @@ void ivas_mdct_core_tns_ns_fx( { st->hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e = s_max( st->hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, st->hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[i] ); } #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x_fx[ch][0], x_e, st->hTcxCfg->psychParamsCurrent ); #else TonalMDCTConceal_Apply_ivas_fx( st->hTonalMDCTConc, x_fx[ch][0], x_e, st->hTcxCfg->psychParamsCurrent ); #endif } test(); Loading lib_dec/tonalMDCTconcealment_fx.c +122 −72 Original line number Diff line number Diff line Loading @@ -2324,6 +2324,7 @@ void TonalMDCTConceal_InsertNoise_fx( return; } #ifndef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ Loading Loading @@ -2412,14 +2413,23 @@ void TonalMDCTConceal_Apply_fx( return; } #endif #ifdef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( Word16 element_mode, #else void TonalMDCTConceal_Apply_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ #endif const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ Word16 mdctSpectrum_exp, /*IN */ const PsychoacousticParameters *psychParamsCurrent ) { #ifdef HARMONIZE_2553_TonalConceal_Apply Word16 exp; #endif Word16 i, l; Word16 *phaseDiff, *pCurrentPhase; Word32 phaseToAdd; Loading @@ -2429,12 +2439,17 @@ void TonalMDCTConceal_Apply_ivas_fx( Word16 nSamples; Word16 nBands; #ifndef HARMONIZE_2553_TonalConceal_Apply Word16 *tmp_secondLastPowerSpectrum = hTonalMDCTConc->secondLastPowerSpectrum; Word16 tmp_secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastPowerSpectrum_exp; move16(); Word16 max_nSamples = s_max( hTonalMDCTConc->nNonZeroSamples, hTonalMDCTConc->nSamplesCore ); #else IF( GT_16( element_mode, EVS_MONO ) ) #endif { // To avoid garbage values set32_fx( powerSpectrum, 0, L_FRAME_MAX ); Loading @@ -2444,7 +2459,7 @@ void TonalMDCTConceal_Apply_ivas_fx( scaleFactors[i] = L_shr( L_deposit_h( hTonalMDCTConc->secondLastBlockData.scaleFactors[i] ), sub( hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[i] ) ); // Q31- scaleFactors_max_e+scaleFactors_exp[i] move32(); } } IF( s_and( hTonalMDCTConc->lastBlockData.blockIsValid, hTonalMDCTConc->secondLastBlockData.blockIsValid ) ) { assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); Loading @@ -2452,13 +2467,24 @@ void TonalMDCTConceal_Apply_ivas_fx( nSamples = hTonalMDCTConc->nNonZeroSamples; move16(); assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples ); #ifdef HARMONIZE_2553_TonalConceal_Apply IF( GT_16( element_mode, EVS_MONO ) ) #endif { FOR( i = 0; i < nSamples; i++ ) { #ifdef HARMONIZE_2553_TonalConceal_Apply powerSpectrum[i] = L_deposit_h( hTonalMDCTConc->secondLastPowerSpectrum[i] ); // Q31 - secondLastPowerSpectrum_exp #else powerSpectrum[i] = L_deposit_h( tmp_secondLastPowerSpectrum[i] ); // Q31 - secondLastPowerSpectrum_exp #endif move16(); } #ifdef HARMONIZE_2553_TonalConceal_Apply powerSpectrum_exp = hTonalMDCTConc->secondLastPowerSpectrum_exp; #else powerSpectrum_exp = tmp_secondLastPowerSpectrum_exp; #endif move16(); Word16 exp1 = powerSpectrum_exp; Loading Loading @@ -2514,7 +2540,11 @@ void TonalMDCTConceal_Apply_ivas_fx( exp_right = add( exp_right, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[nBands - 1] ); Word16 max_e = s_max( exp_right, exp_left ); #ifdef HARMONIZE_2553_TonalConceal_Apply FOR( Word16 c = 0; c < s_max( hTonalMDCTConc->nNonZeroSamples, hTonalMDCTConc->nSamplesCore ); c++ ) #else FOR( Word16 c = 0; c < max_nSamples; c++ ) #endif { test(); test(); Loading @@ -2533,7 +2563,22 @@ void TonalMDCTConceal_Apply_ivas_fx( } powerSpectrum_exp = max_e; move16(); } #ifdef HARMONIZE_2553_TonalConceal_Apply ELSE #endif { mdct_shaping_16( hTonalMDCTConc->secondLastPowerSpectrum, hTonalMDCTConc->nSamplesCore, nSamples, hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp, hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, powerSpectrum ); powerSpectrum_exp = add( add( hTonalMDCTConc->secondLastPowerSpectrum_exp, hTonalMDCTConc->secondLastBlockData.gain_tcx_exp ), hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e ); } #ifdef HARMONIZE_2553_TonalConceal_Apply exp = sub( mdctSpectrum_exp, add( powerSpectrum_exp, 1 ) ); #endif phaseDiff = hTonalMDCTConc->pTCI->phaseDiff; /* if multiple frame loss occurs use the phase from the last frame and continue rotating */ pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted; Loading Loading @@ -2582,7 +2627,12 @@ void TonalMDCTConceal_Apply_ivas_fx( /* getCosWord16 returns 1Q14*/ mdctSpectrum[l] = Mpy_32_16_1( powerSpectrum[l], getCosWord16( extract_l( currentPhase ) ) ); move32(); #ifdef HARMONIZE_2553_TonalConceal_Apply mdctSpectrum[l] = L_shr( mdctSpectrum[l], exp ); move32(); #else mdctSpectrum[l] = L_shr( mdctSpectrum[l], sub( mdctSpectrum_exp, add( powerSpectrum_exp, 1 ) ) ); #endif } } } Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,7 @@ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ #define FIX_BASOP_2546_HARMONIZE_TCX_SCALAR /* FhG: Fix issue 2546 Harmonize function tcx_scalar_quantization_rateloop*/ #define FIX_BASOP_2532_cx_e /* FhG: Fix issue 2532 about additional exponent variable*/ #define HARMONIZE_2553_TonalConceal_Apply /* FhG: Harmonize TonalMDCTConceal_Apply with its ivas derivate */ /* #################### End BE switches ################################## */ Loading
lib_com/prot_fx.h +11 −4 Original line number Diff line number Diff line Loading @@ -5687,15 +5687,22 @@ void TonalMDCTConceal_UpdateState_fx( const Word16 badBlock, const Word8 tonalConcealmentActive ); #ifndef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*IN/OUT*/ Word16 *mdctSpectrum_exp /*IN */ ); #endif #ifdef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( Word16 element_mode, #else void TonalMDCTConceal_Apply_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ #endif const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*IN/OUT*/ Word16 mdctSpectrum_exp, /*IN */ const PsychoacousticParameters *psychParamsCurrent ); Loading
lib_dec/dec_tcx_fx.c +8 −0 Original line number Diff line number Diff line Loading @@ -969,7 +969,11 @@ void decoder_tcx_fx( test(); IF( bfi && st->tonal_mdct_plc_active ) { #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x, x_e, NULL ); #else TonalMDCTConceal_Apply_fx( st->hTonalMDCTConc, x, &x_e ); #endif } tmp32 = L_deposit_h( 0 ); Loading Loading @@ -5200,7 +5204,11 @@ void decoder_tcx_noiseshaping_igf_fx( test(); IF( bfi && st->tonal_mdct_plc_active && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) { #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x_fx, *x_e, st->hTcxCfg->psychParamsCurrent ); #else TonalMDCTConceal_Apply_ivas_fx( st->hTonalMDCTConc, x_fx, *x_e, st->hTcxCfg->psychParamsCurrent ); #endif /* If exponent has been updated after TonalMDCTConceal_Apply, then shift the spectrum to common exponent. */ } Loading
lib_dec/ivas_mdct_core_dec_fx.c +4 −1 Original line number Diff line number Diff line Loading @@ -1715,8 +1715,11 @@ void ivas_mdct_core_tns_ns_fx( { st->hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e = s_max( st->hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, st->hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[i] ); } #ifdef HARMONIZE_2553_TonalConceal_Apply TonalMDCTConceal_Apply_fx( st->element_mode, st->hTonalMDCTConc, x_fx[ch][0], x_e, st->hTcxCfg->psychParamsCurrent ); #else TonalMDCTConceal_Apply_ivas_fx( st->hTonalMDCTConc, x_fx[ch][0], x_e, st->hTcxCfg->psychParamsCurrent ); #endif } test(); Loading
lib_dec/tonalMDCTconcealment_fx.c +122 −72 Original line number Diff line number Diff line Loading @@ -2324,6 +2324,7 @@ void TonalMDCTConceal_InsertNoise_fx( return; } #ifndef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ Loading Loading @@ -2412,14 +2413,23 @@ void TonalMDCTConceal_Apply_fx( return; } #endif #ifdef HARMONIZE_2553_TonalConceal_Apply void TonalMDCTConceal_Apply_fx( Word16 element_mode, #else void TonalMDCTConceal_Apply_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ #endif const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ Word16 mdctSpectrum_exp, /*IN */ const PsychoacousticParameters *psychParamsCurrent ) { #ifdef HARMONIZE_2553_TonalConceal_Apply Word16 exp; #endif Word16 i, l; Word16 *phaseDiff, *pCurrentPhase; Word32 phaseToAdd; Loading @@ -2429,12 +2439,17 @@ void TonalMDCTConceal_Apply_ivas_fx( Word16 nSamples; Word16 nBands; #ifndef HARMONIZE_2553_TonalConceal_Apply Word16 *tmp_secondLastPowerSpectrum = hTonalMDCTConc->secondLastPowerSpectrum; Word16 tmp_secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastPowerSpectrum_exp; move16(); Word16 max_nSamples = s_max( hTonalMDCTConc->nNonZeroSamples, hTonalMDCTConc->nSamplesCore ); #else IF( GT_16( element_mode, EVS_MONO ) ) #endif { // To avoid garbage values set32_fx( powerSpectrum, 0, L_FRAME_MAX ); Loading @@ -2444,7 +2459,7 @@ void TonalMDCTConceal_Apply_ivas_fx( scaleFactors[i] = L_shr( L_deposit_h( hTonalMDCTConc->secondLastBlockData.scaleFactors[i] ), sub( hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[i] ) ); // Q31- scaleFactors_max_e+scaleFactors_exp[i] move32(); } } IF( s_and( hTonalMDCTConc->lastBlockData.blockIsValid, hTonalMDCTConc->secondLastBlockData.blockIsValid ) ) { assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); Loading @@ -2452,13 +2467,24 @@ void TonalMDCTConceal_Apply_ivas_fx( nSamples = hTonalMDCTConc->nNonZeroSamples; move16(); assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples ); #ifdef HARMONIZE_2553_TonalConceal_Apply IF( GT_16( element_mode, EVS_MONO ) ) #endif { FOR( i = 0; i < nSamples; i++ ) { #ifdef HARMONIZE_2553_TonalConceal_Apply powerSpectrum[i] = L_deposit_h( hTonalMDCTConc->secondLastPowerSpectrum[i] ); // Q31 - secondLastPowerSpectrum_exp #else powerSpectrum[i] = L_deposit_h( tmp_secondLastPowerSpectrum[i] ); // Q31 - secondLastPowerSpectrum_exp #endif move16(); } #ifdef HARMONIZE_2553_TonalConceal_Apply powerSpectrum_exp = hTonalMDCTConc->secondLastPowerSpectrum_exp; #else powerSpectrum_exp = tmp_secondLastPowerSpectrum_exp; #endif move16(); Word16 exp1 = powerSpectrum_exp; Loading Loading @@ -2514,7 +2540,11 @@ void TonalMDCTConceal_Apply_ivas_fx( exp_right = add( exp_right, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[nBands - 1] ); Word16 max_e = s_max( exp_right, exp_left ); #ifdef HARMONIZE_2553_TonalConceal_Apply FOR( Word16 c = 0; c < s_max( hTonalMDCTConc->nNonZeroSamples, hTonalMDCTConc->nSamplesCore ); c++ ) #else FOR( Word16 c = 0; c < max_nSamples; c++ ) #endif { test(); test(); Loading @@ -2533,7 +2563,22 @@ void TonalMDCTConceal_Apply_ivas_fx( } powerSpectrum_exp = max_e; move16(); } #ifdef HARMONIZE_2553_TonalConceal_Apply ELSE #endif { mdct_shaping_16( hTonalMDCTConc->secondLastPowerSpectrum, hTonalMDCTConc->nSamplesCore, nSamples, hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp, hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, powerSpectrum ); powerSpectrum_exp = add( add( hTonalMDCTConc->secondLastPowerSpectrum_exp, hTonalMDCTConc->secondLastBlockData.gain_tcx_exp ), hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e ); } #ifdef HARMONIZE_2553_TonalConceal_Apply exp = sub( mdctSpectrum_exp, add( powerSpectrum_exp, 1 ) ); #endif phaseDiff = hTonalMDCTConc->pTCI->phaseDiff; /* if multiple frame loss occurs use the phase from the last frame and continue rotating */ pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted; Loading Loading @@ -2582,7 +2627,12 @@ void TonalMDCTConceal_Apply_ivas_fx( /* getCosWord16 returns 1Q14*/ mdctSpectrum[l] = Mpy_32_16_1( powerSpectrum[l], getCosWord16( extract_l( currentPhase ) ) ); move32(); #ifdef HARMONIZE_2553_TonalConceal_Apply mdctSpectrum[l] = L_shr( mdctSpectrum[l], exp ); move32(); #else mdctSpectrum[l] = L_shr( mdctSpectrum[l], sub( mdctSpectrum_exp, add( powerSpectrum_exp, 1 ) ) ); #endif } } } Loading