Loading lib_com/prot.h +1 −0 Original line number Diff line number Diff line Loading @@ -9571,6 +9571,7 @@ void TonalMDCTConceal_InsertNoise( const float crossfadeGain, #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE const float concealment_noise[L_FRAME48k], const float cngLevelBackgroundTrace_bfi, #endif const int16_t crossOverFreq ); Loading lib_dec/dec_tcx.c +2 −2 Original line number Diff line number Diff line Loading @@ -1316,11 +1316,11 @@ void decoder_tcx_noisefilling( #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE if ( st->element_mode == IVAS_CPE_MDCT && !isMCT ) { TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, infoIGFStartLine ); TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, st->hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); } else { TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, infoIGFStartLine ); TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); } #else TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, infoIGFStartLine ); Loading lib_dec/stat_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -208,12 +208,12 @@ typedef struct float scaleFactorsBackground[FDNS_NPTS]; float scf_fadeout; PsychoacousticParameters *psychParams; /* could be stored only once, since the same for all channels (always at 16Khz fs) */ PsychoacousticParameters psychParamsTCX20; PsychoacousticParameters psychParamsTCX10; float last_block_nrg; float curr_noise_nrg; float faded_signal_nrg; #endif float nFramesLost; Loading lib_dec/tonalMDCTconcealment.c +24 −2 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ ivas_error TonalMDCTConceal_Init( hTonalMDCTConc->last_block_nrg = 0.0f; hTonalMDCTConc->curr_noise_nrg = 0.0f; hTonalMDCTConc->faded_signal_nrg = 0.0f; #endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when Loading Loading @@ -503,6 +504,7 @@ void TonalMDCTConceal_InsertNoise( const float crossfadeGain, #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE const float concealment_noise[L_FRAME48k], const float cngLevelBackgroundTrace_bfi, #endif const int16_t crossOverFreq ) { Loading @@ -510,6 +512,9 @@ void TonalMDCTConceal_InsertNoise( float x, y; Word16 rnd; float g, nrgNoiseInLastFrame, nrgWhiteNoise, tiltFactor, tilt; #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE float last_block_nrg_correct; #endif wmops_sub_start( "InsertNoise" ); Loading @@ -534,6 +539,8 @@ void TonalMDCTConceal_InsertNoise( tilt = 1.0f; nrgNoiseInLastFrame = 0.0f; nrgWhiteNoise = 0.0f; hTonalMDCTConc->faded_signal_nrg = 0.0f; last_block_nrg_correct = 0.0f; #endif if ( !hTonalMDCTConc->lastBlockData.blockIsValid ) Loading Loading @@ -569,7 +576,7 @@ void TonalMDCTConceal_InsertNoise( /* actual fadeout is done in this case */ else { g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg ); for ( i = 0; i < crossOverFreq; i++ ) { Loading @@ -584,6 +591,8 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[i] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) { Loading @@ -603,7 +612,9 @@ void TonalMDCTConceal_InsertNoise( { for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) { last_block_nrg_correct += hTonalMDCTConc->lastBlockData.spectralData[l] * hTonalMDCTConc->lastBlockData.spectralData[l]; mdctSpectrum[l] = 0; hTonalMDCTConc->curr_noise_nrg -= concealment_noise[l] * concealment_noise[l]; } } Loading Loading @@ -656,7 +667,7 @@ void TonalMDCTConceal_InsertNoise( /* actual fadeout is done in this case */ else { g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg ); for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) { Loading @@ -671,6 +682,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) { Loading @@ -687,6 +699,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } } Loading @@ -703,6 +716,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) Loading @@ -711,6 +725,14 @@ void TonalMDCTConceal_InsertNoise( } } } if ( hTonalMDCTConc->faded_signal_nrg > 0.0f ) { float nrg_corr_factor; nrg_corr_factor = sqrtf( ( hTonalMDCTConc->last_block_nrg - last_block_nrg_correct ) / hTonalMDCTConc->faded_signal_nrg ); v_multc( mdctSpectrum, nrg_corr_factor, mdctSpectrum, crossOverFreq ); } } #endif else Loading Loading
lib_com/prot.h +1 −0 Original line number Diff line number Diff line Loading @@ -9571,6 +9571,7 @@ void TonalMDCTConceal_InsertNoise( const float crossfadeGain, #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE const float concealment_noise[L_FRAME48k], const float cngLevelBackgroundTrace_bfi, #endif const int16_t crossOverFreq ); Loading
lib_dec/dec_tcx.c +2 −2 Original line number Diff line number Diff line Loading @@ -1316,11 +1316,11 @@ void decoder_tcx_noisefilling( #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE if ( st->element_mode == IVAS_CPE_MDCT && !isMCT ) { TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, infoIGFStartLine ); TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, st->hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); } else { TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, infoIGFStartLine ); TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); } #else TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, infoIGFStartLine ); Loading
lib_dec/stat_dec.h +1 −1 Original line number Diff line number Diff line Loading @@ -208,12 +208,12 @@ typedef struct float scaleFactorsBackground[FDNS_NPTS]; float scf_fadeout; PsychoacousticParameters *psychParams; /* could be stored only once, since the same for all channels (always at 16Khz fs) */ PsychoacousticParameters psychParamsTCX20; PsychoacousticParameters psychParamsTCX10; float last_block_nrg; float curr_noise_nrg; float faded_signal_nrg; #endif float nFramesLost; Loading
lib_dec/tonalMDCTconcealment.c +24 −2 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ ivas_error TonalMDCTConceal_Init( hTonalMDCTConc->last_block_nrg = 0.0f; hTonalMDCTConc->curr_noise_nrg = 0.0f; hTonalMDCTConc->faded_signal_nrg = 0.0f; #endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when Loading Loading @@ -503,6 +504,7 @@ void TonalMDCTConceal_InsertNoise( const float crossfadeGain, #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE const float concealment_noise[L_FRAME48k], const float cngLevelBackgroundTrace_bfi, #endif const int16_t crossOverFreq ) { Loading @@ -510,6 +512,9 @@ void TonalMDCTConceal_InsertNoise( float x, y; Word16 rnd; float g, nrgNoiseInLastFrame, nrgWhiteNoise, tiltFactor, tilt; #ifdef MDCT_STEREO_PLC_FADE_2_BG_NOISE float last_block_nrg_correct; #endif wmops_sub_start( "InsertNoise" ); Loading @@ -534,6 +539,8 @@ void TonalMDCTConceal_InsertNoise( tilt = 1.0f; nrgNoiseInLastFrame = 0.0f; nrgWhiteNoise = 0.0f; hTonalMDCTConc->faded_signal_nrg = 0.0f; last_block_nrg_correct = 0.0f; #endif if ( !hTonalMDCTConc->lastBlockData.blockIsValid ) Loading Loading @@ -569,7 +576,7 @@ void TonalMDCTConceal_InsertNoise( /* actual fadeout is done in this case */ else { g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg ); for ( i = 0; i < crossOverFreq; i++ ) { Loading @@ -584,6 +591,8 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[i] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) { Loading @@ -603,7 +612,9 @@ void TonalMDCTConceal_InsertNoise( { for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) { last_block_nrg_correct += hTonalMDCTConc->lastBlockData.spectralData[l] * hTonalMDCTConc->lastBlockData.spectralData[l]; mdctSpectrum[l] = 0; hTonalMDCTConc->curr_noise_nrg -= concealment_noise[l] * concealment_noise[l]; } } Loading Loading @@ -656,7 +667,7 @@ void TonalMDCTConceal_InsertNoise( /* actual fadeout is done in this case */ else { g *= (float) sqrt( hTonalMDCTConc->last_block_nrg / hTonalMDCTConc->curr_noise_nrg ); g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg ); for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) { Loading @@ -671,6 +682,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) { Loading @@ -687,6 +699,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } } Loading @@ -703,6 +716,7 @@ void TonalMDCTConceal_InsertNoise( { mdctSpectrum[l] = g * y - crossfadeGain * x; } hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i]; } for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) Loading @@ -711,6 +725,14 @@ void TonalMDCTConceal_InsertNoise( } } } if ( hTonalMDCTConc->faded_signal_nrg > 0.0f ) { float nrg_corr_factor; nrg_corr_factor = sqrtf( ( hTonalMDCTConc->last_block_nrg - last_block_nrg_correct ) / hTonalMDCTConc->faded_signal_nrg ); v_multc( mdctSpectrum, nrg_corr_factor, mdctSpectrum, crossOverFreq ); } } #endif else Loading