Commit 138cd28e authored by Jan Kiene's avatar Jan Kiene
Browse files

Accept HARMONIZE_2553_TonalConceal_Apply

parent 5d57d684
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -92,7 +92,6 @@
#define NONBE_FIX_ISSUE_2206_AVOID_OVERFLOW_MSVQ_Interpol_Tran_fx /* FhG: Fix saturation crash in MSVQ_Interpol_Tran_fx() */
#define NONBE_FIX_ISSUE_2206_SWB_EXPERIMENT_FIX_2527    /* Fix crash from issue #2527 */
#define FIX_FLOAT_1539_G192_FORMAT_SWITCH               /* VA/Nokia: reintroduce format switching for g192 bitstreams */
#define HARMONIZE_2553_TonalConceal_Apply               /* FhG: Harmonize TonalMDCTConceal_Apply with its ivas derivate */
#define HARMONIZE_2553_TonalConceal_Init                /* FhG: Harmonize TonalMDCTConceal_Init with its ivas derivate */
#define HARMONIZE_2553_TonalConceal_SaveFreqSignal      /* FhG: Harmonize TonalConceal_SaveFreqSignal with its ivas derivate */
#define HARMONIZE_2553_TonalConceal_SaveTimeSignal      /* FhG: Harmonize TonalConceal_SaveTimeSignal with its ivas derivate */
+0 −11
Original line number Diff line number Diff line
@@ -5604,21 +5604,10 @@ 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(
#endif
    const TonalMDCTConcealPtr hTonalMDCTConc, /*IN    */
    Word32 *mdctSpectrum,                     /*IN/OUT*/
    Word16 mdctSpectrum_exp,                  /*IN    */
+0 −8
Original line number Diff line number Diff line
@@ -973,11 +973,7 @@ 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 );
@@ -5212,11 +5208,7 @@ 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. */
    }
+0 −4
Original line number Diff line number Diff line
@@ -1724,11 +1724,7 @@ 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();
+0 −125
Original line number Diff line number Diff line
@@ -2523,112 +2523,16 @@ 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*/
    Word16 *mdctSpectrum_exp                  /*IN */
)
{
    Word16 i, l, exp;
    Word16 *phaseDiff, *pCurrentPhase;
    Word32 phaseToAdd, currentPhase;
    Word32 powerSpectrum[L_FRAME_MAX];
    Word16 nSamples;


    IF( s_and( hTonalMDCTConc->lastBlockData.blockIsValid, hTonalMDCTConc->secondLastBlockData.blockIsValid ) )
    {
        assert( hTonalMDCTConc->pTCI->numIndexes > 0 );

        nSamples = hTonalMDCTConc->nNonZeroSamples;
        move16();
        assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples );

        {

            mdct_shaping_16( hTonalMDCTConc->secondLastPowerSpectrum, hTonalMDCTConc->nSamplesCore, nSamples,
                             hTonalMDCTConc->secondLastBlockData.scaleFactors, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp,
                             hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e, powerSpectrum );
        }
        phaseDiff = hTonalMDCTConc->pTCI->phaseDiff; /* if multiple frame loss occurs use the phase from the last frame and continue rotating */
        pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted;

        exp = sub( *mdctSpectrum_exp, add( add( hTonalMDCTConc->secondLastPowerSpectrum_exp, add( hTonalMDCTConc->secondLastBlockData.gain_tcx_exp, 1 ) ), hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e ) );

        IF( !hTonalMDCTConc->lastBlockData.blockIsConcealed )
        {
            if ( hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive != 0 )
            {
                hTonalMDCTConc->nFramesLost = add( hTonalMDCTConc->nFramesLost, 2 ); /*Q1*/
                move16();
            }
            if ( hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive == 0 )
            {
                hTonalMDCTConc->nFramesLost = 3; /*Q1*/
                move16();
            }
        }
        /* for each index group */
        FOR( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ )
        {
            /*phaseToAdd = hTonalMDCTConc->nFramesLost*phaseDiff[i];     */
            phaseToAdd = L_mult0( hTonalMDCTConc->nFramesLost, phaseDiff[i] ); /*Q1*3Q12=2Q13*/
            /* Move phaseToAdd to range -PI..PI */

            WHILE( GT_32( phaseToAdd, 25736l /*EVS_PI Q13*/ ) )
            {
                phaseToAdd = L_sub( phaseToAdd, 51472l /*2*EVS_PI Q13*/ );
            }
            WHILE( LT_32( phaseToAdd, -25736l /*-EVS_PI Q13*/ ) )
            {
                phaseToAdd = L_add( phaseToAdd, 51472l /*2*EVS_PI Q13*/ );
            }

            FOR( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ )
            {
                /* *pCurrentPhase and phaseToAdd are in range -PI..PI */
                currentPhase = L_mac0( phaseToAdd, ( *pCurrentPhase++ ), 1 ); /*2Q13+2Q13=3Q13*/

                if ( GT_32( currentPhase, 25736l /*EVS_PI Q13*/ ) )
                {
                    currentPhase = L_sub( currentPhase, 51472l /*2*EVS_PI Q13*/ );
                }
                if ( LT_32( currentPhase, -25736l /*-EVS_PI Q13*/ ) )
                {
                    currentPhase = L_add( currentPhase, 51472l /*2*EVS_PI Q13*/ );
                }
                /* getCosWord16 returns 1Q14*/
                mdctSpectrum[l] = Mpy_32_16_1( powerSpectrum[l], getCosWord16( extract_l( currentPhase ) ) );
                move32();
                mdctSpectrum[l] = L_shr( mdctSpectrum[l], exp );
                move32();
            }
        }
    }

    hTonalMDCTConc->nFramesLost = add( hTonalMDCTConc->nFramesLost, 2 ); /*Q1*/
    move16();

    return;
}
#endif

#ifdef HARMONIZE_2553_TonalConceal_Apply
void TonalMDCTConceal_Apply_fx(
    Word16 element_mode,
#else
void TonalMDCTConceal_Apply_ivas_fx(
#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;
@@ -2638,16 +2542,7 @@ 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 );
@@ -2666,24 +2561,14 @@ 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;
@@ -2739,11 +2624,7 @@ 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();
@@ -2763,7 +2644,6 @@ void TonalMDCTConceal_Apply_ivas_fx(
            powerSpectrum_exp = max_e;
            move16();
        }
#ifdef HARMONIZE_2553_TonalConceal_Apply
        ELSE
        {

@@ -2775,7 +2655,6 @@ void TonalMDCTConceal_Apply_ivas_fx(
            powerSpectrum_exp = add( add( hTonalMDCTConc->secondLastPowerSpectrum_exp, hTonalMDCTConc->secondLastBlockData.gain_tcx_exp ), hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e );
        }
        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;

@@ -2824,12 +2703,8 @@ 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
            }
        }
    }