Commit c5187bff authored by Fabian Bauer's avatar Fabian Bauer
Browse files

aded macro HARMONIZE_2553_TonalConceal_Apply and code

parent b69cc3e2
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 ################################## */

+11 −4
Original line number Diff line number Diff line
@@ -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 );
+8 −0
Original line number Diff line number Diff line
@@ -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 );
@@ -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. */
    }
+4 −1
Original line number Diff line number Diff line
@@ -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();
+122 −72
Original line number Diff line number Diff line
@@ -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*/
@@ -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;
@@ -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 );

@@ -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 );
@@ -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;
@@ -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();
@@ -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;

@@ -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
            }
        }
    }