From c5187bffb8353da59ac4679683034b33348a06c4 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 22 Apr 2026 08:21:13 +0200 Subject: [PATCH 01/25] aded macro HARMONIZE_2553_TonalConceal_Apply and code --- lib_com/options.h | 1 + lib_com/prot_fx.h | 15 ++- lib_dec/dec_tcx_fx.c | 8 ++ lib_dec/ivas_mdct_core_dec_fx.c | 5 +- lib_dec/tonalMDCTconcealment_fx.c | 194 +++++++++++++++++++----------- 5 files changed, 146 insertions(+), 77 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 372927ac5..712528fe8 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -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 ################################## */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 54eb3d51a..43cc7d68b 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5687,17 +5687,24 @@ 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 */ - Word32 *mdctSpectrum, /*IN/OUT*/ - Word16 mdctSpectrum_exp, /*IN */ +#endif + const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + Word32 *mdctSpectrum, /*IN/OUT*/ + Word16 mdctSpectrum_exp, /*IN */ const PsychoacousticParameters *psychParamsCurrent ); void TonalMDCTConceal_InsertNoise_ivas_fx( diff --git a/lib_dec/dec_tcx_fx.c b/lib_dec/dec_tcx_fx.c index f48ae67d8..873dd09b5 100644 --- a/lib_dec/dec_tcx_fx.c +++ b/lib_dec/dec_tcx_fx.c @@ -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. */ } diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 9dfdddda1..527658ece 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -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(); diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index e45aac27c..8bed4e4c6 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -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 */ - Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ - Word16 mdctSpectrum_exp, /*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,22 +2439,27 @@ 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 ); - // To avoid garbage values - set32_fx( powerSpectrum, 0, L_FRAME_MAX ); - - /* Creating 32-bit scaleFactors with common exponent. */ - FOR( i = 0; i < FDNS_NPTS; i++ ) +#else + IF( GT_16( element_mode, EVS_MONO ) ) +#endif { - 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(); - } + // To avoid garbage values + set32_fx( powerSpectrum, 0, L_FRAME_MAX ); + /* Creating 32-bit scaleFactors with common exponent. */ + FOR( i = 0; i < FDNS_NPTS; i++ ) + { + 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,88 +2467,118 @@ void TonalMDCTConceal_Apply_ivas_fx( nSamples = hTonalMDCTConc->nNonZeroSamples; move16(); assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples ); - - FOR( i = 0; i < nSamples; i++ ) +#ifdef HARMONIZE_2553_TonalConceal_Apply + IF( GT_16( element_mode, EVS_MONO ) ) +#endif { - powerSpectrum[i] = L_deposit_h( tmp_secondLastPowerSpectrum[i] ); // Q31 - secondLastPowerSpectrum_exp + 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(); - } - powerSpectrum_exp = tmp_secondLastPowerSpectrum_exp; - move16(); - - Word16 exp1 = powerSpectrum_exp; - move16(); - IF( psychParamsCurrent == NULL ) - { - nBands = FDNS_NPTS; + Word16 exp1 = powerSpectrum_exp; move16(); - mdct_noiseShaping_ivas_fx( powerSpectrum, &powerSpectrum_exp, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors, - hTonalMDCTConc->secondLastBlockData.scaleFactors_exp ); - } - ELSE - { - Word16 q_ps, q_sf; - q_ps = sub( 31, powerSpectrum_exp ); - q_sf = sub( 31, hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e ); - /* adding guard bit */ - q_ps = sub( q_ps, 1 ); - FOR( Word16 c = 0; c < hTonalMDCTConc->nSamplesCore; c++ ) + IF( psychParamsCurrent == NULL ) { - powerSpectrum[c] = L_shr( powerSpectrum[c], 1 ); // q_ps -1 - move32(); + nBands = FDNS_NPTS; + move16(); + mdct_noiseShaping_ivas_fx( powerSpectrum, &powerSpectrum_exp, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors, + hTonalMDCTConc->secondLastBlockData.scaleFactors_exp ); } - - /* adding guard bit */ - q_sf = sub( q_sf, 1 ); - FOR( Word16 c = 0; c < FDNS_NPTS; c++ ) + ELSE { - scaleFactors[c] = L_shr( scaleFactors[c], 1 ); // q_sf - 1 - move32(); - } + Word16 q_ps, q_sf; + q_ps = sub( 31, powerSpectrum_exp ); + q_sf = sub( 31, hTonalMDCTConc->secondLastBlockData.scaleFactors_max_e ); - sns_shape_spectrum_fx( powerSpectrum, &q_ps, psychParamsCurrent, scaleFactors, q_sf, hTonalMDCTConc->nSamplesCore, NULL ); + /* adding guard bit */ + q_ps = sub( q_ps, 1 ); + FOR( Word16 c = 0; c < hTonalMDCTConc->nSamplesCore; c++ ) + { + powerSpectrum[c] = L_shr( powerSpectrum[c], 1 ); // q_ps -1 + move32(); + } + + /* adding guard bit */ + q_sf = sub( q_sf, 1 ); + FOR( Word16 c = 0; c < FDNS_NPTS; c++ ) + { + scaleFactors[c] = L_shr( scaleFactors[c], 1 ); // q_sf - 1 + move32(); + } - powerSpectrum_exp = sub( 31, add( q_ps, 1 ) ); + sns_shape_spectrum_fx( powerSpectrum, &q_ps, psychParamsCurrent, scaleFactors, q_sf, hTonalMDCTConc->nSamplesCore, NULL ); - nBands = psychParamsCurrent->nBands; - move16(); - } + powerSpectrum_exp = sub( 31, add( q_ps, 1 ) ); - Word16 exp_left = powerSpectrum_exp; - move16(); - Word16 exp_right = exp1; - move16(); + nBands = psychParamsCurrent->nBands; + move16(); + } - FOR( Word16 c = hTonalMDCTConc->nSamplesCore; c < nSamples; c++ ) - { - powerSpectrum[c] = Mpy_32_16_1( powerSpectrum[c], hTonalMDCTConc->secondLastBlockData.scaleFactors[nBands - 1] ); // Q31 -(exp_right + scaleFactors_exp[]) - move32(); - } - exp_right = add( exp_right, hTonalMDCTConc->secondLastBlockData.scaleFactors_exp[nBands - 1] ); + Word16 exp_left = powerSpectrum_exp; + move16(); + Word16 exp_right = exp1; + move16(); - Word16 max_e = s_max( exp_right, exp_left ); - FOR( Word16 c = 0; c < max_nSamples; c++ ) - { - test(); - test(); - test(); - test(); - IF( GE_16( c, hTonalMDCTConc->nSamplesCore ) && LT_16( c, nSamples ) && GT_16( max_e, exp_right ) ) + FOR( Word16 c = hTonalMDCTConc->nSamplesCore; c < nSamples; c++ ) { - powerSpectrum[c] = L_shr( powerSpectrum[c], sub( max_e, exp_right ) ); // Q31-max_e + powerSpectrum[c] = Mpy_32_16_1( powerSpectrum[c], hTonalMDCTConc->secondLastBlockData.scaleFactors[nBands - 1] ); // Q31 -(exp_right + scaleFactors_exp[]) move32(); } - ELSE IF( ( LT_16( c, hTonalMDCTConc->nSamplesCore ) || GT_16( c, nSamples ) ) && GT_16( max_e, exp_left ) ) + 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 { - powerSpectrum[c] = L_shr( powerSpectrum[c], sub( max_e, exp_left ) ); // Q31-max_e - move32(); + test(); + test(); + test(); + test(); + IF( GE_16( c, hTonalMDCTConc->nSamplesCore ) && LT_16( c, nSamples ) && GT_16( max_e, exp_right ) ) + { + powerSpectrum[c] = L_shr( powerSpectrum[c], sub( max_e, exp_right ) ); // Q31-max_e + move32(); + } + ELSE IF( ( LT_16( c, hTonalMDCTConc->nSamplesCore ) || GT_16( c, nSamples ) ) && GT_16( max_e, exp_left ) ) + { + powerSpectrum[c] = L_shr( powerSpectrum[c], sub( max_e, exp_left ) ); // Q31-max_e + move32(); + } } + powerSpectrum_exp = max_e; + move16(); } - 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 } } } -- GitLab From f18f1d14a86394575b8b2cca33f12516e25d6a1b Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 22 Apr 2026 09:12:07 +0200 Subject: [PATCH 02/25] fixed conflict --- lib_com/options.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index e7a34f1f0..79f03cb83 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -97,15 +97,12 @@ #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*/ -<<<<<<< HEAD #define HARMONIZE_2553_TonalConceal_Apply /* FhG: Harmonize TonalMDCTConceal_Apply with its ivas derivate */ -======= #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ #define HARMONIZE_2537_GetTCXMaxenergyChange /* FhG: Harmonize GetTCXMaxenergyChange */ #define HARMONIZE_2508_InitTransientDetection /* FhG: harmonize GetAttackForTCXDecision derivates for evs/ivas */ ->>>>>>> 387619a8bfc0565d9cee80a5363566403e32f107 /* #################### End BE switches ################################## */ -- GitLab From b9836c5a740912aa01cc8bb64273f0859d46efe7 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 22 Apr 2026 11:06:02 +0200 Subject: [PATCH 03/25] add macro HARMONIZE_2553_TonalConceal_Init and code --- lib_com/options.h | 5 +-- lib_com/prot_fx.h | 10 ++++-- lib_dec/core_dec_init_fx.c | 8 +++++ lib_dec/tonalMDCTconcealment_fx.c | 55 ++++++++++++++++++++++++++++++- 4 files changed, 73 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 79f03cb83..44321d81e 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -98,11 +98,12 @@ #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 */ +#define HARMONIZE_2553_TonalConceal_Init /* FhG: Harmonize TonalMDCTConceal_Init with its ivas derivate */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ -#define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ +#define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ #define HARMONIZE_2537_GetTCXMaxenergyChange /* FhG: Harmonize GetTCXMaxenergyChange */ -#define HARMONIZE_2508_InitTransientDetection /* FhG: harmonize GetAttackForTCXDecision derivates for evs/ivas */ +#define HARMONIZE_2508_InitTransientDetection /* FhG: harmonize GetAttackForTCXDecision derivates for evs/ivas */ /* #################### End BE switches ################################## */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 43cc7d68b..5066370a4 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5642,6 +5642,7 @@ void RefineTonalComponents_fx( const Word16 element_mode, const PsychoacousticParameters *psychParamsCurrent ); +#ifndef HARMONIZE_2553_TonalConceal_Init ivas_error TonalMDCTConceal_Init_fx( TonalMDCTConcealPtr self, const Word16 nSamples, @@ -5649,14 +5650,19 @@ ivas_error TonalMDCTConceal_Init_fx( const Word16 nScaleFactors, TCX_CONFIG_HANDLE hTcxCfg /* TCX config */ ); +#endif +#ifdef HARMONIZE_2553_TonalConceal_Init +ivas_error TonalMDCTConceal_Init_fx( + Word16 element_mode, +#else ivas_error TonalMDCTConceal_Init_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, const UWord16 nSamples, const UWord16 nSamplesCore, const UWord16 nScaleFactors, - TCX_CONFIG_HANDLE hTcxCfg /* TCX config */ -); + TCX_CONFIG_HANDLE hTcxCfg ); /* Must be called only when a good frame is recieved - concealment is inactive */ void TonalMDCTConceal_SaveFreqSignal_fx( diff --git a/lib_dec/core_dec_init_fx.c b/lib_dec/core_dec_init_fx.c index dbffbcc02..c58e41ccd 100644 --- a/lib_dec/core_dec_init_fx.c +++ b/lib_dec/core_dec_init_fx.c @@ -907,7 +907,11 @@ void open_decoder_LPD_fx( st->hTonalMDCTConc->lastBlockData.nSamples = 0; move16(); +#ifdef HARMONIZE_2553_TonalConceal_Init + TonalMDCTConceal_Init_fx( st->element_mode, st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); +#else TonalMDCTConceal_Init_fx( st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); +#endif } st->last_tns_active = 0; move16(); @@ -1962,7 +1966,11 @@ void open_decoder_LPD_ivas_fx( move16(); st->hTonalMDCTConc->lastBlockData.nSamples = 0; move16(); +#ifdef HARMONIZE_2553_TonalConceal_Init + TonalMDCTConceal_Init_fx( st->element_mode, st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); +#else TonalMDCTConceal_Init_ivas_fx( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); +#endif } st->last_tns_active = 0; diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 586b5d7ab..e25b4dd08 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -30,6 +30,7 @@ static void FindPhaseDifferences( TonalMDCTConcealPtr const hTonalMDCTConc, Word /*-------------- public functions -------------------- */ /*******************************************************/ +#ifndef HARMONIZE_2553_TonalConceal_Init ivas_error TonalMDCTConceal_Init_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word16 nSamples, @@ -112,9 +113,15 @@ ivas_error TonalMDCTConceal_Init_fx( return IVAS_ERR_OK; } +#endif +#ifdef HARMONIZE_2553_TonalConceal_Init +ivas_error TonalMDCTConceal_Init_fx( + Word16 element_mode, +#else ivas_error TonalMDCTConceal_Init_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, const UWord16 nSamples, const UWord16 nSamplesCore, @@ -132,6 +139,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( hTonalMDCTConc->tcx_cfg = hTcxCfg; hTonalMDCTConc->lastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[0]; +#ifndef HARMONIZE_2553_TonalConceal_Init set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); move16(); hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; @@ -147,6 +155,26 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); move16(); +#else + IF( GT_16( element_mode, EVS_MONO ) ) + { + set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + set16_fx( hTonalMDCTConc->secondLastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + hTonalMDCTConc->secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastBlockData.spectralData_exp; + move16(); + set16_fx( hTonalMDCTConc->lastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); + } + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + move16(); + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; +#endif hTonalMDCTConc->lastBlockData.scaleFactors_exp = hTonalMDCTConc->scaleFactorsBuffers_exp[0]; move16(); hTonalMDCTConc->secondLastBlockData.scaleFactors_exp = hTonalMDCTConc->scaleFactorsBuffers_exp[1]; @@ -183,6 +211,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->nScaleFactors = nScaleFactors; move16(); +#ifndef HARMONIZE_2553_TonalConceal_Init set32_fx( hTonalMDCTConc->scaleFactorsBackground_fx, 0, FDNS_NPTS ); hTonalMDCTConc->scf_fadeout = 16384 /*1.000000 Q14*/; @@ -202,14 +231,39 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->faded_signal_nrg_exp = 0; move16(); +#else + IF( GT_16( element_mode, EVS_MONO ) ) + { + set32_fx( hTonalMDCTConc->scaleFactorsBackground_fx, 0, FDNS_NPTS ); + hTonalMDCTConc->scf_fadeout = 16384 /*1.000000 Q14*/; + PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); + PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); + hTonalMDCTConc->psychParams = NULL; + hTonalMDCTConc->last_block_nrg = 0; + move16(); + hTonalMDCTConc->last_block_nrg_exp = 0; + move16(); + hTonalMDCTConc->curr_noise_nrg = 0; + move16(); + hTonalMDCTConc->curr_noise_nrg_exp = 0; + move16(); + hTonalMDCTConc->faded_signal_nrg = 0; + move16(); + hTonalMDCTConc->faded_signal_nrg_exp = 0; + move16(); + set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); + } +#endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when new time samples are stored in lastPcmOut */ move16(); move16(); /* just the second half of the second last pcm output is needed */ +#ifndef HARMONIZE_2553_TonalConceal_Init set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); +#endif hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ @@ -218,7 +272,6 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( return IVAS_ERR_OK; } - void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, // Q31-mdctSpectrum_exp -- GitLab From 6ae4cefd6da3372286572d3f2d1fa173d76d04f9 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 23 Apr 2026 08:29:47 +0200 Subject: [PATCH 04/25] fix init for bith paths, evs and ivas --- lib_dec/tonalMDCTconcealment_fx.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index e25b4dd08..16382f0b1 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -156,24 +156,23 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); move16(); #else + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + move16(); + move16(); + move16(); IF( GT_16( element_mode, EVS_MONO ) ) { set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); - move16(); set16_fx( hTonalMDCTConc->secondLastBlockData.spectralData, 0, L_FRAME_MAX ); - move16(); hTonalMDCTConc->secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastBlockData.spectralData_exp; move16(); set16_fx( hTonalMDCTConc->lastBlockData.scaleFactors, 0, FDNS_NPTS ); - move16(); - hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); - move16(); } - hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; move16(); - hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; #endif hTonalMDCTConc->lastBlockData.scaleFactors_exp = hTonalMDCTConc->scaleFactorsBuffers_exp[0]; move16(); @@ -1630,7 +1629,8 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( *mdctSpectrum_exp = add( *mdctSpectrum_exp, exp ); } } - ELSE{ + ELSE + { IF( tonalConcealmentActive == 0 ){ sum1 = 0; sum2 = 0; -- GitLab From 57b4eb12b0362954bbdcd2e919c2b405f842d5dd Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 23 Apr 2026 08:38:39 +0200 Subject: [PATCH 05/25] clang format patch --- lib_dec/tonalMDCTconcealment_fx.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 16382f0b1..ce4b9c376 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -1629,8 +1629,7 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( *mdctSpectrum_exp = add( *mdctSpectrum_exp, exp ); } } - ELSE - { + ELSE{ IF( tonalConcealmentActive == 0 ){ sum1 = 0; sum2 = 0; -- GitLab From e7fa98eea5527a5d3caf415281cee7d20f339546 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 23 Apr 2026 09:38:00 +0200 Subject: [PATCH 06/25] deactivated HARMONIZE_2553_TonalConceal_Init, added macro HARMONIZE_2553_TonalConceal_SaveFreqSignal and code --- lib_com/options.h | 3 +- lib_com/prot_fx.h | 7 ++++ lib_dec/dec_tcx_fx.c | 8 ++++ lib_dec/ivas_mdct_core_dec_fx.c | 4 ++ lib_dec/ivas_stereo_mdct_core_dec_fx.c | 4 ++ lib_dec/tonalMDCTconcealment_fx.c | 56 +++++++++++++++++++++++++- 6 files changed, 80 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 02c8c71de..23858129f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -98,7 +98,8 @@ #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 */ -#define HARMONIZE_2553_TonalConceal_Init /* FhG: Harmonize TonalMDCTConceal_Init 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_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 5066370a4..d80fe3d77 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5665,6 +5665,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( TCX_CONFIG_HANDLE hTcxCfg ); /* Must be called only when a good frame is recieved - concealment is inactive */ +#ifndef HARMONIZE_2553_TonalConceal_SaveFreqSignal void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr self, const Word32 *mdctSpectrum, @@ -5674,8 +5675,14 @@ void TonalMDCTConceal_SaveFreqSignal_fx( const Word16 *scaleFactors, const Word16 *scaleFactors_exp, const Word16 gain_tcx_exp ); +#endif +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal +void TonalMDCTConceal_SaveFreqSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveFreqSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, const Word16 mdctSpectrum_exp, diff --git a/lib_dec/dec_tcx_fx.c b/lib_dec/dec_tcx_fx.c index 873dd09b5..dc3696f8b 100644 --- a/lib_dec/dec_tcx_fx.c +++ b/lib_dec/dec_tcx_fx.c @@ -814,7 +814,11 @@ void decoder_tcx_fx( IF( bfi == 0 ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + TonalMDCTConceal_SaveFreqSignal_fx( st->element_mode, st->hTonalMDCTConc, x, x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e, 0 ); +#else TonalMDCTConceal_SaveFreqSignal_fx( st->hTonalMDCTConc, x, x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e ); +#endif } ELSE { @@ -4883,7 +4887,11 @@ void decoder_tcx_noisefilling_fx( test(); IF( bfi == 0 && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + TonalMDCTConceal_SaveFreqSignal_fx( st->element_mode, st->hTonalMDCTConc, x, *x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e, infoIGFStartLine ); +#else TonalMDCTConceal_SaveFreqSignal_ivas_fx( st->hTonalMDCTConc, x, *x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e, infoIGFStartLine ); +#endif } ELSE IF( bfi ) { diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 527658ece..37a9350a1 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1588,7 +1588,11 @@ void ivas_mdct_core_tns_ns_fx( scf_e[ind] = sub( 15, q_shift ); move16(); } +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + TonalMDCTConceal_SaveFreqSignal_fx( st->element_mode, st->hTonalMDCTConc, x_fx[ch][k], x_e, L_frameTCX[ch], L_frame[ch], &scf_fx[0], scf_e, 0, get_igf_startline_fx( st, L_frame[ch], L_frameTCX[ch] ) ); +#else TonalMDCTConceal_SaveFreqSignal_ivas_fx( st->hTonalMDCTConc, x_fx[ch][k], x_e, L_frameTCX[ch], L_frame[ch], &scf_fx[0], scf_e, 0, get_igf_startline_fx( st, L_frame[ch], L_frameTCX[ch] ) ); +#endif } } ELSE diff --git a/lib_dec/ivas_stereo_mdct_core_dec_fx.c b/lib_dec/ivas_stereo_mdct_core_dec_fx.c index d40505a35..00a4e2b33 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec_fx.c +++ b/lib_dec/ivas_stereo_mdct_core_dec_fx.c @@ -418,7 +418,11 @@ void stereo_mdct_core_dec_fx( } Word16 s = getScaleFactor32( x_fx[ch][k], L_frameTCX[ch] ); Scale_sig32( x_fx[ch][k], L_frameTCX[ch], s ); /* exp(x_e + 31 - s) */ +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + TonalMDCTConceal_SaveFreqSignal_fx( 1 /*signal non-EVS*/, st->hTonalMDCTConc, x_fx[ch][k], sub( x_e[ch][k], s ), L_frameTCX[ch], L_frame[ch], &scf_fx[0], scf_e, 0, get_igf_startline_fx( st, L_frame[ch], L_frameTCX[ch] ) ); +#else TonalMDCTConceal_SaveFreqSignal_ivas_fx( st->hTonalMDCTConc, x_fx[ch][k], sub( x_e[ch][k], s ), L_frameTCX[ch], L_frame[ch], &scf_fx[0], scf_e, 0, get_igf_startline_fx( st, L_frame[ch], L_frameTCX[ch] ) ); +#endif Scale_sig32( x_fx[ch][k], L_frameTCX[ch], negate( s ) ); /* exp(x_e) */ } } diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index ce4b9c376..bd7c0f2b4 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -271,6 +271,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( return IVAS_ERR_OK; } +#ifndef HARMONIZE_2553_TonalConceal_SaveFreqSignal void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, // Q31-mdctSpectrum_exp @@ -400,9 +401,14 @@ void TonalMDCTConceal_SaveFreqSignal_fx( return; } +#endif - +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal +void TonalMDCTConceal_SaveFreqSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveFreqSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, // Q31-mdctSpectrum_exp const Word16 mdctSpectrum_exp, // Q0 @@ -503,6 +509,22 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( IF( ( nNewSamples > 0 ) && ( LE_16( nNewSamples, 2 * L_FRAME_MAX ) ) ) { /* Store new data */ +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + IF( GT_16( element_mode, EVS_MONO ) ) + { + Word64 W_tmp = 0; + move64(); + FOR( i = 0; i < infoIGFStartLine; i++ ) + { + W_tmp = W_mac_32_16( W_tmp, Mpy_32_32( mdctSpectrum[i], mdctSpectrum[i] ), 1 ); // exp: mdctSpectrum_exp + mdctSpectrum_exp - 1 + } + s = W_norm( W_tmp ); + hTonalMDCTConc->last_block_nrg = W_extract_h( W_shl( W_tmp, s ) ); // exp:add( sub( shl( mdctSpectrum_exp, 1 ), s ), 31 ) + move32(); + hTonalMDCTConc->last_block_nrg_exp = add( sub( shl( mdctSpectrum_exp, 1 ), s ), 31 ); + move16(); + } +#else Word64 W_tmp = 0; move64(); FOR( i = 0; i < infoIGFStartLine; i++ ) @@ -516,6 +538,7 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( move16(); /* Store new data */ +#endif s = getScaleFactor32( mdctSpectrum, nNewSamples ); max_exp = 0; @@ -530,7 +553,37 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( /*s = sub(s, max_exp);*/ hTonalMDCTConc->lastBlockData.scaleFactors_max_e = max_exp; move16(); +#ifdef HARMONIZE_2553_TonalConceal_SaveFreqSignal + IF( EQ_16( element_mode, EVS_MONO ) ) + { + FOR( i = 0; i < nNewSamples; i++ ) + { + hTonalMDCTConc->lastBlockData.spectralData[i] = extract_h( L_shl( mdctSpectrum[i], s ) ); // 31 - mdctSpectrum_exp +s -16 = 15-(mdctSpectrum_exp -s) + move16(); + } + } + ELSE + { + FOR( i = 0; i < nNewSamples; i++ ) + { + Word16 tmp = 0; + if ( mdctSpectrum[i] != 0 ) + { + tmp = 1; + move16(); + } + hTonalMDCTConc->lastBlockData.spectralData[i] = extract_h( L_shl( mdctSpectrum[i], s ) ); // 31 - mdctSpectrum_exp +s -16 = 15-(mdctSpectrum_exp -s) + move16(); + test(); + if ( hTonalMDCTConc->lastBlockData.spectralData[i] == 0 && EQ_16( tmp, 1 ) ) + { + hTonalMDCTConc->lastBlockData.spectralData[i] = 1; + move16(); + } + } + } +#else FOR( i = 0; i < nNewSamples; i++ ) { Word16 tmp = 0; @@ -549,6 +602,7 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( move16(); } } +#endif hTonalMDCTConc->lastBlockData.spectralData_exp = sub( mdctSpectrum_exp, s ); move16(); -- GitLab From 5c75ced6dc1e4fbebaefcbe95e95ecb590ce0ad1 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 23 Apr 2026 10:09:39 +0200 Subject: [PATCH 07/25] fix init --- lib_com/options.h | 2 +- lib_dec/tonalMDCTconcealment_fx.c | 30 ++++++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 23858129f..151df39cb 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -98,7 +98,7 @@ #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 */ -//#define HARMONIZE_2553_TonalConceal_Init /* FhG: Harmonize TonalMDCTConceal_Init 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_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index bd7c0f2b4..fb07302be 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -156,23 +156,37 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); move16(); #else - hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; - hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; - hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; - move16(); - move16(); - move16(); IF( GT_16( element_mode, EVS_MONO ) ) { set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; set16_fx( hTonalMDCTConc->secondLastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + move16(); hTonalMDCTConc->secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastBlockData.spectralData_exp; move16(); + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; set16_fx( hTonalMDCTConc->lastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); + } + ELSE + { + move16(); + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + move16(); + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + move16(); + + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; + move16(); + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + move16(); } - hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; - move16(); #endif hTonalMDCTConc->lastBlockData.scaleFactors_exp = hTonalMDCTConc->scaleFactorsBuffers_exp[0]; move16(); -- GitLab From 7fd36f9657a103c71d3b2062cb26fa74a371cf03 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Mon, 27 Apr 2026 07:06:25 +0200 Subject: [PATCH 08/25] fix init - init timedatabuffer in ivas path --- lib_dec/tonalMDCTconcealment_fx.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index fb07302be..03491fad5 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -274,9 +274,13 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); /* just the second half of the second last pcm output is needed */ -#ifndef HARMONIZE_2553_TonalConceal_Init - set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); +#ifdef HARMONIZE_2553_TonalConceal_Init + IF( GT_16( element_mode, EVS_MONO ) ) #endif + { + set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); + } + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ -- GitLab From d16f8505b41e141a06209ebd5963ae3a6b8b3a49 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 07:12:27 +0200 Subject: [PATCH 09/25] deactivate init --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 11073baa0..5a36904ea 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -100,7 +100,7 @@ #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 */ -#define HARMONIZE_2553_TonalConceal_Init /* FhG: Harmonize TonalMDCTConceal_Init 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_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ -- GitLab From 9db93ebf8632f660e73da35d340f67d752d065af Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 09:10:45 +0200 Subject: [PATCH 10/25] reharmonize init --- lib_dec/tonalMDCTconcealment_fx.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 03491fad5..7a17e164a 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -265,7 +265,6 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->faded_signal_nrg_exp = 0; move16(); - set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } #endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when @@ -273,6 +272,13 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); move16(); /* just the second half of the second last pcm output is needed */ +#ifdef HARMONIZE_2553_TonalConceal_Init + IF( EQ_16( element_mode, EVS_MONO ) ) + { + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, 3 * ( s_min( L_FRAME_MAX, nSamples ) ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, s_min( L_FRAME_MAX, nSamples ) )]; + } +#endif #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) @@ -280,15 +286,20 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( { set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } - - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; +#ifdef HARMONIZE_2553_TonalConceal_Init + IF( GT_16( element_mode, EVS_MONO ) ) + { + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; + } +#endif /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); return IVAS_ERR_OK; } + #ifndef HARMONIZE_2553_TonalConceal_SaveFreqSignal void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, -- GitLab From 2eaf552a83d5895d89bf8bb8f50128150283c0e4 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 10:04:09 +0200 Subject: [PATCH 11/25] added macro and code HARMONIZE_2553_TonalConceal_SaveTimeSignal - deactivated all but apply --- lib_com/options.h | 3 ++- lib_com/prot_fx.h | 9 ++++++++- lib_dec/dec_LPD_fx.c | 4 ++++ lib_dec/ivas_mdct_core_dec_fx.c | 4 ++++ lib_dec/ivas_tcx_core_dec_fx.c | 4 ++++ lib_dec/tonalMDCTconcealment_fx.c | 27 ++++++++++++++++++++++----- 6 files changed, 44 insertions(+), 7 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 5a36904ea..12ef3980f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -101,7 +101,8 @@ #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 */ //#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_SaveFreqSignal /* FhG: Harmonize TonalConceal_SaveFreqSignal with its ivas derivate */ +//#define HARMONIZE_2553_TonalConceal_SaveTimeSignal /* FhG: Harmonize TonalConceal_SaveTimeSignal with its ivas derivate */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index c097d596d..f0e530313 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5780,14 +5780,21 @@ void TonalMDCTConceal_InsertNoise_fx( Word16 crossfadeGain, const Word16 crossOverFreq ); +#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 nNewSamples ); +#endif +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal +void TonalMDCTConceal_SaveTimeSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, - Word16 *timeSignal, + Word16 *timeSignal, // q_timeSignal Word16 q_timeSignal, Word16 nNewSamples ); diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 5b1a13023..6293b10c4 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -768,7 +768,11 @@ void decoder_LPD_fx( IF( !bfi ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB, 0, L_frameTCX ); +#else TonalMDCTConceal_SaveTimeSignal_fx( st->hTonalMDCTConc, synthFB, L_frameTCX ); +#endif } decoder_tcx_post_fx( st, synth, synthFB, Aq, bfi ); IF( EQ_16( st->core, TCX_20_CORE ) ) diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 835138e0d..bed4eeb06 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1258,7 +1258,11 @@ void ivas_mdct_core_reconstruct_fx( test(); IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); +#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); +#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, q_winFB, NULL, bfi, MCT_flag ); diff --git a/lib_dec/ivas_tcx_core_dec_fx.c b/lib_dec/ivas_tcx_core_dec_fx.c index eb5c88faa..486896dc0 100644 --- a/lib_dec/ivas_tcx_core_dec_fx.c +++ b/lib_dec/ivas_tcx_core_dec_fx.c @@ -631,7 +631,11 @@ void stereo_tcx_core_dec_fx( { IF( !bfi && st->hTonalMDCTConc != NULL ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); +#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); +#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, st->Q_syn, Aq_fx, bfi, 0 ); diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 7a17e164a..0d98557a9 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2778,6 +2778,7 @@ void TonalMDCTConceal_Apply_ivas_fx( return; } +#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // Qx @@ -2797,9 +2798,15 @@ void TonalMDCTConceal_SaveTimeSignal_fx( return; } +#endif +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal +void TonalMDCTConceal_SaveTimeSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // q_timeSignal Word16 q_timeSignal, @@ -2813,15 +2820,25 @@ void TonalMDCTConceal_SaveTimeSignal_ivas_fx( Word16 exp, len; len = shr( hTonalMDCTConc->nSamples, 1 ); Copy( hTonalMDCTConc->lastPcmOut + len, hTonalMDCTConc->secondLastPcmOut, len ); - exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); - IF( exp != 0 ) +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + IF( GT_16( element_mode, EVS_MONO ) ) +#endif { - Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal + exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); + IF( exp != 0 ) + { + Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal + } } } Copy( timeSignal, hTonalMDCTConc->lastPcmOut, hTonalMDCTConc->nSamples ); - hTonalMDCTConc->q_lastPcmOut = q_timeSignal; - move16(); +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + IF( GT_16( element_mode, EVS_MONO ) ) +#endif + { + hTonalMDCTConc->q_lastPcmOut = q_timeSignal; + move16(); + } } return; -- GitLab From edb43a836da221543a28609a012aa5f6d1cbc8e4 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 11:16:19 +0200 Subject: [PATCH 12/25] deactivate all TDConcelament harmonizing macros --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 12ef3980f..38e15546b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -99,7 +99,7 @@ #define FIX_2402_REPL_EVS_ARI_CODEC_ENC /* FhG: basop issue 2402: replace EVS arith encoder with IVAS arith encoder */ #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 */ +//#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 */ -- GitLab From 294527a57d599fd2c9d7ccea05a6b3cc664078cc Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 13:10:50 +0000 Subject: [PATCH 13/25] Fix EVS PATH --- lib_dec/tonalMDCTconcealment_fx.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 0d98557a9..1a1915a27 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2701,7 +2701,6 @@ void TonalMDCTConceal_Apply_ivas_fx( } #ifdef HARMONIZE_2553_TonalConceal_Apply ELSE -#endif { @@ -2711,7 +2710,6 @@ void TonalMDCTConceal_Apply_ivas_fx( 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 */ -- GitLab From 61cbd783032509d64ad9008a35e7977c15ea685a Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 15:56:59 +0200 Subject: [PATCH 14/25] Revert "Fix EVS PATH" This reverts commit 294527a57d599fd2c9d7ccea05a6b3cc664078cc. --- lib_dec/tonalMDCTconcealment_fx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 1a1915a27..0d98557a9 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2701,6 +2701,7 @@ void TonalMDCTConceal_Apply_ivas_fx( } #ifdef HARMONIZE_2553_TonalConceal_Apply ELSE +#endif { @@ -2710,6 +2711,7 @@ void TonalMDCTConceal_Apply_ivas_fx( 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 */ -- GitLab From f2a8a72de5f039d75293d0afe65b6269a1cbe3e8 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 15:57:13 +0200 Subject: [PATCH 15/25] Revert "deactivate all TDConcelament harmonizing macros" This reverts commit edb43a836da221543a28609a012aa5f6d1cbc8e4. --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index f6a36e1dc..f41eeff46 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -99,7 +99,7 @@ #define FIX_2402_REPL_EVS_ARI_CODEC_ENC /* FhG: basop issue 2402: replace EVS arith encoder with IVAS arith encoder */ #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 */ +#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 */ -- GitLab From bf7fe5e6c70e1502743c4c953259407cf4490572 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 15:57:27 +0200 Subject: [PATCH 16/25] Revert "added macro and code HARMONIZE_2553_TonalConceal_SaveTimeSignal - deactivated all but apply" This reverts commit 2eaf552a83d5895d89bf8bb8f50128150283c0e4. --- lib_com/options.h | 3 +-- lib_com/prot_fx.h | 9 +-------- lib_dec/dec_LPD_fx.c | 4 ---- lib_dec/ivas_mdct_core_dec_fx.c | 4 ---- lib_dec/ivas_tcx_core_dec_fx.c | 4 ---- lib_dec/tonalMDCTconcealment_fx.c | 27 +++++---------------------- 6 files changed, 7 insertions(+), 44 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index f41eeff46..02020a552 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -101,8 +101,7 @@ #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 */ //#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 */ +#define HARMONIZE_2553_TonalConceal_SaveFreqSignal /* FhG: Harmonize TonalConceal_SaveFreqSignal with its ivas derivate */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index f0e530313..c097d596d 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5780,21 +5780,14 @@ void TonalMDCTConceal_InsertNoise_fx( Word16 crossfadeGain, const Word16 crossOverFreq ); -#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 nNewSamples ); -#endif -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal -void TonalMDCTConceal_SaveTimeSignal_fx( - Word16 element_mode, -#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( -#endif TonalMDCTConcealPtr hTonalMDCTConc, - Word16 *timeSignal, // q_timeSignal + Word16 *timeSignal, Word16 q_timeSignal, Word16 nNewSamples ); diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 6293b10c4..5b1a13023 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -768,11 +768,7 @@ void decoder_LPD_fx( IF( !bfi ) { -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal - TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB, 0, L_frameTCX ); -#else TonalMDCTConceal_SaveTimeSignal_fx( st->hTonalMDCTConc, synthFB, L_frameTCX ); -#endif } decoder_tcx_post_fx( st, synth, synthFB, Aq, bfi ); IF( EQ_16( st->core, TCX_20_CORE ) ) diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index bed4eeb06..835138e0d 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1258,11 +1258,7 @@ void ivas_mdct_core_reconstruct_fx( test(); IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL ) { -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal - TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); -#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); -#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, q_winFB, NULL, bfi, MCT_flag ); diff --git a/lib_dec/ivas_tcx_core_dec_fx.c b/lib_dec/ivas_tcx_core_dec_fx.c index 486896dc0..eb5c88faa 100644 --- a/lib_dec/ivas_tcx_core_dec_fx.c +++ b/lib_dec/ivas_tcx_core_dec_fx.c @@ -631,11 +631,7 @@ void stereo_tcx_core_dec_fx( { IF( !bfi && st->hTonalMDCTConc != NULL ) { -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal - TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); -#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); -#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, st->Q_syn, Aq_fx, bfi, 0 ); diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 0d98557a9..7a17e164a 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2778,7 +2778,6 @@ void TonalMDCTConceal_Apply_ivas_fx( return; } -#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // Qx @@ -2798,15 +2797,9 @@ void TonalMDCTConceal_SaveTimeSignal_fx( return; } -#endif -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal -void TonalMDCTConceal_SaveTimeSignal_fx( - Word16 element_mode, -#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( -#endif TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // q_timeSignal Word16 q_timeSignal, @@ -2820,25 +2813,15 @@ void TonalMDCTConceal_SaveTimeSignal_ivas_fx( Word16 exp, len; len = shr( hTonalMDCTConc->nSamples, 1 ); Copy( hTonalMDCTConc->lastPcmOut + len, hTonalMDCTConc->secondLastPcmOut, len ); -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal - IF( GT_16( element_mode, EVS_MONO ) ) -#endif + exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); + IF( exp != 0 ) { - exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); - IF( exp != 0 ) - { - Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal - } + Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal } } Copy( timeSignal, hTonalMDCTConc->lastPcmOut, hTonalMDCTConc->nSamples ); -#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal - IF( GT_16( element_mode, EVS_MONO ) ) -#endif - { - hTonalMDCTConc->q_lastPcmOut = q_timeSignal; - move16(); - } + hTonalMDCTConc->q_lastPcmOut = q_timeSignal; + move16(); } return; -- GitLab From 8579dea840a476d626fa54bb6e8f4a2db2b50d28 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 15:57:40 +0200 Subject: [PATCH 17/25] Revert "reharmonize init" This reverts commit 9db93ebf8632f660e73da35d340f67d752d065af. --- lib_dec/tonalMDCTconcealment_fx.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 7a17e164a..03491fad5 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -265,6 +265,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->faded_signal_nrg_exp = 0; move16(); + set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } #endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when @@ -272,13 +273,6 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); move16(); /* just the second half of the second last pcm output is needed */ -#ifdef HARMONIZE_2553_TonalConceal_Init - IF( EQ_16( element_mode, EVS_MONO ) ) - { - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, 3 * ( s_min( L_FRAME_MAX, nSamples ) ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, s_min( L_FRAME_MAX, nSamples ) )]; - } -#endif #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) @@ -286,20 +280,15 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( { set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } -#ifdef HARMONIZE_2553_TonalConceal_Init - IF( GT_16( element_mode, EVS_MONO ) ) - { - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; - } -#endif + + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); return IVAS_ERR_OK; } - #ifndef HARMONIZE_2553_TonalConceal_SaveFreqSignal void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, -- GitLab From d0fc3f5dc8f33c6bd5c1de6cf88e7a5b635ecfba Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Tue, 28 Apr 2026 10:04:09 +0200 Subject: [PATCH 18/25] added macro and code HARMONIZE_2553_TonalConceal_SaveTimeSignal - deactivated all but apply --- lib_com/options.h | 3 ++- lib_com/prot_fx.h | 9 ++++++++- lib_dec/dec_LPD_fx.c | 4 ++++ lib_dec/ivas_mdct_core_dec_fx.c | 4 ++++ lib_dec/ivas_tcx_core_dec_fx.c | 4 ++++ lib_dec/tonalMDCTconcealment_fx.c | 27 ++++++++++++++++++++++----- 6 files changed, 44 insertions(+), 7 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 2c01324f2..113819d43 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -101,7 +101,8 @@ #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 */ //#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_SaveFreqSignal /* FhG: Harmonize TonalConceal_SaveFreqSignal with its ivas derivate */ +//#define HARMONIZE_2553_TonalConceal_SaveTimeSignal /* FhG: Harmonize TonalConceal_SaveTimeSignal with its ivas derivate */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 947c7d538..696cb0a4b 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5704,14 +5704,21 @@ void TonalMDCTConceal_InsertNoise_fx( Word16 crossfadeGain, const Word16 crossOverFreq ); +#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 nNewSamples ); +#endif +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal +void TonalMDCTConceal_SaveTimeSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, - Word16 *timeSignal, + Word16 *timeSignal, // q_timeSignal Word16 q_timeSignal, Word16 nNewSamples ); diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 5b1a13023..6293b10c4 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -768,7 +768,11 @@ void decoder_LPD_fx( IF( !bfi ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB, 0, L_frameTCX ); +#else TonalMDCTConceal_SaveTimeSignal_fx( st->hTonalMDCTConc, synthFB, L_frameTCX ); +#endif } decoder_tcx_post_fx( st, synth, synthFB, Aq, bfi ); IF( EQ_16( st->core, TCX_20_CORE ) ) diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 835138e0d..bed4eeb06 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1258,7 +1258,11 @@ void ivas_mdct_core_reconstruct_fx( test(); IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); +#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] ); +#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, q_winFB, NULL, bfi, MCT_flag ); diff --git a/lib_dec/ivas_tcx_core_dec_fx.c b/lib_dec/ivas_tcx_core_dec_fx.c index eb5c88faa..486896dc0 100644 --- a/lib_dec/ivas_tcx_core_dec_fx.c +++ b/lib_dec/ivas_tcx_core_dec_fx.c @@ -631,7 +631,11 @@ void stereo_tcx_core_dec_fx( { IF( !bfi && st->hTonalMDCTConc != NULL ) { +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + TonalMDCTConceal_SaveTimeSignal_fx( st->element_mode, st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); +#else TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, st->Q_syn, hTcxDec->L_frameTCX ); +#endif } decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, st->Q_syn, Aq_fx, bfi, 0 ); diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 03491fad5..de4017f20 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2767,6 +2767,7 @@ void TonalMDCTConceal_Apply_ivas_fx( return; } +#ifndef HARMONIZE_2553_TonalConceal_SaveTimeSignal void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // Qx @@ -2786,9 +2787,15 @@ void TonalMDCTConceal_SaveTimeSignal_fx( return; } +#endif +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal +void TonalMDCTConceal_SaveTimeSignal_fx( + Word16 element_mode, +#else void TonalMDCTConceal_SaveTimeSignal_ivas_fx( +#endif TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // q_timeSignal Word16 q_timeSignal, @@ -2802,15 +2809,25 @@ void TonalMDCTConceal_SaveTimeSignal_ivas_fx( Word16 exp, len; len = shr( hTonalMDCTConc->nSamples, 1 ); Copy( hTonalMDCTConc->lastPcmOut + len, hTonalMDCTConc->secondLastPcmOut, len ); - exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); - IF( exp != 0 ) +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + IF( GT_16( element_mode, EVS_MONO ) ) +#endif { - Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal + exp = sub( q_timeSignal, hTonalMDCTConc->q_lastPcmOut ); + IF( exp != 0 ) + { + Scale_sig( hTonalMDCTConc->secondLastPcmOut, len, exp ); // q_timeSignal + } } } Copy( timeSignal, hTonalMDCTConc->lastPcmOut, hTonalMDCTConc->nSamples ); - hTonalMDCTConc->q_lastPcmOut = q_timeSignal; - move16(); +#ifdef HARMONIZE_2553_TonalConceal_SaveTimeSignal + IF( GT_16( element_mode, EVS_MONO ) ) +#endif + { + hTonalMDCTConc->q_lastPcmOut = q_timeSignal; + move16(); + } } return; -- GitLab From 3ae90f742b00caa2137e6175fda0b09d4942beb9 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 29 Apr 2026 07:59:20 +0200 Subject: [PATCH 19/25] Reharmonized init --- lib_dec/tonalMDCTconcealment_fx.c | 96 +++++++++++++++++-------------- 1 file changed, 53 insertions(+), 43 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index de4017f20..0522c9847 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -139,23 +139,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( hTonalMDCTConc->tcx_cfg = hTcxCfg; hTonalMDCTConc->lastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[0]; -#ifndef HARMONIZE_2553_TonalConceal_Init - set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); - move16(); - hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; - set16_fx( hTonalMDCTConc->secondLastBlockData.spectralData, 0, L_FRAME_MAX ); - move16(); - hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; - move16(); - hTonalMDCTConc->secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastBlockData.spectralData_exp; - move16(); - hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; - set16_fx( hTonalMDCTConc->lastBlockData.scaleFactors, 0, FDNS_NPTS ); - move16(); - hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; - set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); - move16(); -#else +#ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) { set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); @@ -187,6 +171,23 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; move16(); } +#else + + set16_fx( hTonalMDCTConc->lastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + hTonalMDCTConc->secondLastBlockData.spectralData = hTonalMDCTConc->spectralDataBuffers[1]; + set16_fx( hTonalMDCTConc->secondLastBlockData.spectralData, 0, L_FRAME_MAX ); + move16(); + hTonalMDCTConc->secondLastPowerSpectrum = hTonalMDCTConc->secondLastBlockData.spectralData; + move16(); + hTonalMDCTConc->secondLastPowerSpectrum_exp = hTonalMDCTConc->secondLastBlockData.spectralData_exp; + move16(); + hTonalMDCTConc->lastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[0]; + set16_fx( hTonalMDCTConc->lastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); + hTonalMDCTConc->secondLastBlockData.scaleFactors = hTonalMDCTConc->scaleFactorsBuffers[1]; + set16_fx( hTonalMDCTConc->secondLastBlockData.scaleFactors, 0, FDNS_NPTS ); + move16(); #endif hTonalMDCTConc->lastBlockData.scaleFactors_exp = hTonalMDCTConc->scaleFactorsBuffers_exp[0]; move16(); @@ -224,27 +225,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->nScaleFactors = nScaleFactors; move16(); -#ifndef HARMONIZE_2553_TonalConceal_Init - - set32_fx( hTonalMDCTConc->scaleFactorsBackground_fx, 0, FDNS_NPTS ); - hTonalMDCTConc->scf_fadeout = 16384 /*1.000000 Q14*/; - PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); - PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); - hTonalMDCTConc->psychParams = NULL; - - hTonalMDCTConc->last_block_nrg = 0; - move16(); - hTonalMDCTConc->last_block_nrg_exp = 0; - move16(); - hTonalMDCTConc->curr_noise_nrg = 0; - move16(); - hTonalMDCTConc->curr_noise_nrg_exp = 0; - move16(); - hTonalMDCTConc->faded_signal_nrg = 0; - move16(); - hTonalMDCTConc->faded_signal_nrg_exp = 0; - move16(); -#else +#ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) { set32_fx( hTonalMDCTConc->scaleFactorsBackground_fx, 0, FDNS_NPTS ); @@ -252,7 +233,6 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); hTonalMDCTConc->psychParams = NULL; - hTonalMDCTConc->last_block_nrg = 0; move16(); hTonalMDCTConc->last_block_nrg_exp = 0; @@ -265,14 +245,40 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); hTonalMDCTConc->faded_signal_nrg_exp = 0; move16(); - set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } +#else + + set32_fx( hTonalMDCTConc->scaleFactorsBackground_fx, 0, FDNS_NPTS ); + hTonalMDCTConc->scf_fadeout = 16384 /*1.000000 Q14*/; + PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); + PsychoacousticParameters_Init_fx( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); + hTonalMDCTConc->psychParams = NULL; + + hTonalMDCTConc->last_block_nrg = 0; + move16(); + hTonalMDCTConc->last_block_nrg_exp = 0; + move16(); + hTonalMDCTConc->curr_noise_nrg = 0; + move16(); + hTonalMDCTConc->curr_noise_nrg_exp = 0; + move16(); + hTonalMDCTConc->faded_signal_nrg = 0; + move16(); + hTonalMDCTConc->faded_signal_nrg_exp = 0; + move16(); #endif /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when new time samples are stored in lastPcmOut */ move16(); move16(); /* just the second half of the second last pcm output is needed */ +#ifdef HARMONIZE_2553_TonalConceal_Init + IF( EQ_16( element_mode, EVS_MONO ) ) + { + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, 3 * ( s_min( L_FRAME_MAX, nSamples ) ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, s_min( L_FRAME_MAX, nSamples ) )]; + } +#endif #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) @@ -280,9 +286,13 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( { set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } - - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; +#ifdef HARMONIZE_2553_TonalConceal_Init + IF( GT_16( element_mode, EVS_MONO ) ) + { + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; + } +#endif /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); -- GitLab From 1d3e30ddf5817452e42d858dd9d90974d29cfaca Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Wed, 29 Apr 2026 09:07:40 +0200 Subject: [PATCH 20/25] fix harmonized ivas path --- lib_dec/tonalMDCTconcealment_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 0522c9847..760f34862 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -288,11 +288,11 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( } #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) +#endif { hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; } -#endif /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); -- GitLab From d018606d5d91ebfcfd1b0fb8ede13a19bbb84337 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 30 Apr 2026 05:15:54 +0000 Subject: [PATCH 21/25] fix harmonization --- lib_dec/tonalMDCTconcealment_fx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 0522c9847..698b9d1b9 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -288,11 +288,12 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( } #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) +#endif { hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; } -#endif + /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); -- GitLab From d1c3f04adb9698702a1725e8374b1ff1cb8b192e Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 30 Apr 2026 08:33:08 +0200 Subject: [PATCH 22/25] reactivate init --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index c35f28375..da4890d70 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -100,7 +100,7 @@ #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 */ -//#define HARMONIZE_2553_TonalConceal_Init /* FhG: Harmonize TonalMDCTConceal_Init 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 */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ -- GitLab From 90f2c9d13a3da15a75d734180e221d0fba9783bc Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 30 Apr 2026 09:39:35 +0200 Subject: [PATCH 23/25] try last init fix --- lib_dec/core_dec_init_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/core_dec_init_fx.c b/lib_dec/core_dec_init_fx.c index c58e41ccd..96815e715 100644 --- a/lib_dec/core_dec_init_fx.c +++ b/lib_dec/core_dec_init_fx.c @@ -908,7 +908,7 @@ void open_decoder_LPD_fx( move16(); #ifdef HARMONIZE_2553_TonalConceal_Init - TonalMDCTConceal_Init_fx( st->element_mode, st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); + TonalMDCTConceal_Init_fx( EVS_MONO, st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); #else TonalMDCTConceal_Init_fx( st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); #endif @@ -1967,7 +1967,7 @@ void open_decoder_LPD_ivas_fx( st->hTonalMDCTConc->lastBlockData.nSamples = 0; move16(); #ifdef HARMONIZE_2553_TonalConceal_Init - TonalMDCTConceal_Init_fx( st->element_mode, st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); + TonalMDCTConceal_Init_fx( 1 /*signal non-EVS*/, st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); #else TonalMDCTConceal_Init_ivas_fx( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); #endif -- GitLab From 3998603ae99e2a103aa131588e6ff2ca0a7bd519 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 30 Apr 2026 10:32:59 +0200 Subject: [PATCH 24/25] activate all tonalconcealment-harmonization macros --- lib_com/options.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index da4890d70..162161d16 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -101,8 +101,8 @@ #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 */ #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 */ +#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 */ #define HARMONIZE_2543_SQ_gain /* FhG: Harmonize SQ_gain */ #define FIX_ISSUE_2533_EXTRA_CONDITION /* FhG: Fix issue basop 2533 removing the extra condition*/ #define HARMONIZE_2537_SetTCXModeInfo /* FhG: Harmonize SetTCXModeInfo - IVAS_VERSION OBVIOUSLY NOT FITTING FOR EVS - pipes not green */ -- GitLab From e2b25741877123db3dc954181b8a08d05da41966 Mon Sep 17 00:00:00 2001 From: Fabian Bauer Date: Thu, 30 Apr 2026 11:35:48 +0000 Subject: [PATCH 25/25] more cleanup --- lib_dec/tonalMDCTconcealment_fx.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 698b9d1b9..c02a9c2b2 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -272,13 +272,6 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( move16(); move16(); /* just the second half of the second last pcm output is needed */ -#ifdef HARMONIZE_2553_TonalConceal_Init - IF( EQ_16( element_mode, EVS_MONO ) ) - { - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, 3 * ( s_min( L_FRAME_MAX, nSamples ) ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[sub( ( 3 * L_FRAME_MAX ) / 2, s_min( L_FRAME_MAX, nSamples ) )]; - } -#endif #ifdef HARMONIZE_2553_TonalConceal_Init IF( GT_16( element_mode, EVS_MONO ) ) @@ -286,14 +279,9 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( { set16_fx( hTonalMDCTConc->timeDataBuffer, 0, ( 3 * L_FRAME_MAX ) / 2 ); } -#ifdef HARMONIZE_2553_TonalConceal_Init - IF( GT_16( element_mode, EVS_MONO ) ) -#endif - { - hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; - hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; - } + hTonalMDCTConc->secondLastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - ( 3 * s_min( L_FRAME_MAX, nSamples ) / 2 )]; + hTonalMDCTConc->lastPcmOut = &hTonalMDCTConc->timeDataBuffer[( 3 * L_FRAME_MAX ) / 2 - s_min( L_FRAME_MAX, nSamples )]; /* If the second last frame was lost, we reuse saved TonalComponentsInfo and don't update pcm buffers */ assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut - hTonalMDCTConc->timeDataBuffer ) * sizeof( hTonalMDCTConc->timeDataBuffer[0] ) ); @@ -2701,7 +2689,6 @@ void TonalMDCTConceal_Apply_ivas_fx( } #ifdef HARMONIZE_2553_TonalConceal_Apply ELSE -#endif { @@ -2711,7 +2698,6 @@ void TonalMDCTConceal_Apply_ivas_fx( 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 */ -- GitLab