Commit 4ac16bb1 authored by Jan Kiene's avatar Jan Kiene
Browse files

do correct scalign also for tonal PLC

parent 25a154f2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 );

+2 −2
Original line number Diff line number Diff line
@@ -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 );
+1 −1
Original line number Diff line number Diff line
@@ -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;
+24 −2
Original line number Diff line number Diff line
@@ -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
@@ -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 )
{
@@ -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" );

@@ -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 )
@@ -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++ )
                {
@@ -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++ )
                {
@@ -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];
                }
            }

@@ -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++ )
                {
@@ -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++ )
                {
@@ -687,6 +699,7 @@ void TonalMDCTConceal_InsertNoise(
                        {
                            mdctSpectrum[l] = g * y - crossfadeGain * x;
                        }
                        hTonalMDCTConc->faded_signal_nrg += mdctSpectrum[i] * mdctSpectrum[i];
                    }
                }

@@ -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++ )
@@ -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