From f2a1e2eafc0c746c59490aa3ffdf760c8a0e4e67 Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Mon, 20 Apr 2026 13:36:12 +0200 Subject: [PATCH 1/6] Remove possibly not needed rescaling with macros NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 and NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE. --- lib_com/ivas_prot_fx.h | 10 ++++++++++ lib_com/options.h | 2 ++ lib_enc/ext_sig_ana_fx.c | 2 +- lib_enc/ivas_core_enc_fx.c | 17 ++++++++++++++++- lib_enc/ivas_corecoder_enc_reconfig_fx.c | 6 ++++++ lib_enc/ivas_mdct_core_enc_fx.c | 13 +++++++++++-- lib_enc/ivas_stereo_mdct_core_enc_fx.c | 14 ++++++++++++-- lib_enc/prot_fx_enc.h | 10 +++++++--- 8 files changed, 65 insertions(+), 9 deletions(-) diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index 02d720e2f..0e552a66a 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -6089,7 +6089,12 @@ UWord16 get_indice_st( void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples new_samples_q*/ + Word16 *new_samples_q, +#else Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Qnew-1*/ +#endif Word16 old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe Q6*/ ); @@ -6136,7 +6141,12 @@ void stereo_switching_dec_fx( void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 *Q_new, /* i : new samples q */ +#else Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples */ +#endif Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ Word16 pitch_buf[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe */ Word32 *mdst_spectrum_long[CPE_CHANNELS], /* o : buffer for MDST spectrum */ diff --git a/lib_com/options.h b/lib_com/options.h index c09e1ff3d..43c6363e5 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -91,6 +91,8 @@ #define NONBE_FIX_ISSUE_2206_AVOID_OVERFLOW_SWB_fenv_fx2 /* FhG: Avoid overflow of SWB_fenv_fx in SWB_BWE_encoding_fx because of very small energies. */ #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 NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 /* FhG: Correct scale inconsistency of old_inp_16k_fx buffer scale. */ +#define NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE /* FhG: Remove rescaling of audio during mode switching. */ #define FIX_FLOAT_1539_G192_FORMAT_SWITCH /* VA/Nokia: reintroduce format switching for g192 bitstreams */ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 6ee717fbc..33c2aa8f5 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -474,7 +474,7 @@ void core_signal_analysis_high_bitrate_fx( void core_signal_analysis_high_bitrate_ivas_fx( #ifdef NONBE_FIX_ISSUE_2206 - const Word16 *new_samples, /*i : *Q_new */ + const Word16 *new_samples, /*i : *Q_new-1 */ #else const Word16 *new_samples, /*i : Q0 */ #endif diff --git a/lib_enc/ivas_core_enc_fx.c b/lib_enc/ivas_core_enc_fx.c index 919ef5df2..919b996ef 100644 --- a/lib_enc/ivas_core_enc_fx.c +++ b/lib_enc/ivas_core_enc_fx.c @@ -433,7 +433,7 @@ ivas_error ivas_core_enc_fx( FOR( n = 0; n < n_CoreChannels; n++ ) { st = sts[n]; -#ifndef NONBE_FIX_ISSUE_2206 +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Scale_sig( old_inp_16k_fx[n], L_INP, sub( Q1, Q_new[n] ) ); // Q0 #endif IF( NE_16( st->element_mode, IVAS_CPE_DFT ) && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) @@ -448,15 +448,22 @@ ivas_error ivas_core_enc_fx( Q_spec_old[1] = hCPE->hCoreCoder[1]->hTcxEnc->spectrum_long_e; move16(); +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + ivas_mdct_core_whitening_enc_fx( hCPE, old_inp_16k_fx, Q_new, old_wsp_fx, pitch_buf_fx_new, hMCT->p_mdst_spectrum_long_fx[cpe_id], hMCT->tnsBits[cpe_id], hMCT->p_orig_spectrum_long_fx[cpe_id], + hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], hMCT->hBstr, 1, hMCT->nchan_out_woLFE, mdst_spectrum_e, orig_spectrum_e ); +#else ivas_mdct_core_whitening_enc_fx( hCPE, old_inp_16k_fx, old_wsp_fx, pitch_buf_fx_new, hMCT->p_mdst_spectrum_long_fx[cpe_id], hMCT->tnsBits[cpe_id], hMCT->p_orig_spectrum_long_fx[cpe_id], hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], hMCT->hBstr, 1, hMCT->nchan_out_woLFE, mdst_spectrum_e, orig_spectrum_e ); +#endif FOR( i = 0; i < CPE_CHANNELS; i++ ) { st = sts[i]; Word16 nSubframes = NB_DIV; move16(); +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q_new[i], Q1 ) ); // Q_new[n] - 1 +#endif if ( EQ_16( st->hTcxEnc->tcxMode, TCX_20 ) ) { nSubframes = 1; @@ -521,7 +528,9 @@ ivas_error ivas_core_enc_fx( FOR( i = 0; i < CPE_CHANNELS; i++ ) { st = sts[i]; +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q1, Q_new[i] ) ); // Q0 +#endif test(); IF( NE_16( st->element_mode, IVAS_CPE_DFT ) && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) @@ -556,11 +565,17 @@ ivas_error ivas_core_enc_fx( Q_spec_old[1] = hCPE->hCoreCoder[1]->hTcxEnc->spectrum_long_e; move16(); +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + stereo_mdct_core_enc_fx( hCPE, old_inp_16k_fx, Q_new, old_wsp_fx, pitch_buf_fx ); +#else stereo_mdct_core_enc_fx( hCPE, old_inp_16k_fx, old_wsp_fx, pitch_buf_fx ); +#endif FOR( i = 0; i < CPE_CHANNELS; i++ ) { +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q_new[i], Q1 ) ); // Q_new[n] - 1 +#endif st = sts[i]; IF( EQ_16( st->hTcxEnc->tcxMode, TCX_20 ) ) { diff --git a/lib_enc/ivas_corecoder_enc_reconfig_fx.c b/lib_enc/ivas_corecoder_enc_reconfig_fx.c index 9c845eb40..2b658c3db 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig_fx.c +++ b/lib_enc/ivas_corecoder_enc_reconfig_fx.c @@ -59,7 +59,11 @@ ivas_error ivas_corecoder_enc_reconfig_fx( const MC_MODE last_mc_mode /* i : switching between MC modes: last mode */ ) { +#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE + Word16 n, sce_id, cpe_id; +#else Word16 n, sce_id, cpe_id, k, shift; +#endif Word16 len_inp_memory, n_CoreCoder_existing, nSCE_existing, nCPE_existing; Word32 input_buff_fx[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )]; @@ -221,6 +225,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } +#ifndef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE Word16 q_com_sce = Q15, q_com_sce32 = Q31; move16(); move16(); @@ -325,6 +330,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( } } } +#endif test(); test(); diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c index 99ff751e4..4d3e46014 100644 --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1163,8 +1163,13 @@ static void compute_power_spec( *-------------------------------------------------------------------*/ void ivas_mdct_core_whitening_enc_fx( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 *Q_new, /* i : new samples q */ +#else + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ +#endif Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe Q6*/ Word32 *mdst_spectrum_long_fx[CPE_CHANNELS], /* o : buffer for MDST spectrum mdst_spectrum_e*/ @@ -1204,7 +1209,9 @@ void ivas_mdct_core_whitening_enc_fx( Word16 zero_side_flag[NB_DIV]; Word16 q_com, q_min; Word32 *mdst_spectrum_fx[CPE_CHANNELS][NB_DIV]; +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Word16 Q_new; +#endif Word16 q_windowedSignal[CPE_CHANNELS]; Word16 shift = 0; /* 0 for one subframe and 1 for two subframes*/ Word16 *speech; @@ -1319,8 +1326,10 @@ void ivas_mdct_core_whitening_enc_fx( tcx_ltp_encode_ivas_fx( st, st->hTcxEnc->tcxMode, L_FRAME, old_wsp_fx[ch] + L_WSP_MEM + L_LOOK_12k8, NULL, old_wsp_fx[ch] + L_WSP_MEM + L_LOOK_12k8, T_op[ch], ¶m_core[ch][1 + NOISE_FILL_RANGES], <pBits[ch], NULL, 0, IVAS_CPE_MDCT ); +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX Q_new = 0; move16(); +#endif core_signal_analysis_high_bitrate_ivas_fx( new_samples_fx[ch] + L_INP_MEM, T_op[ch], NULL, NULL, st, tnsSize[ch], tnsBits[ch], param_core[ch], <pBits[ch], windowedSignal_fx[ch], st->L_frame, st->hTcxEnc->L_frameTCX, hCPE->last_element_mode, 0, mdst_spectrum_fx[ch], mdst_spectrum_e[ch], &Q_new, &q_windowedSignal[ch] ); diff --git a/lib_enc/ivas_stereo_mdct_core_enc_fx.c b/lib_enc/ivas_stereo_mdct_core_enc_fx.c index 37996fe42..3b8122ae7 100644 --- a/lib_enc/ivas_stereo_mdct_core_enc_fx.c +++ b/lib_enc/ivas_stereo_mdct_core_enc_fx.c @@ -127,8 +127,13 @@ static void sync_tcx_mode_fx( * joint stereo mdct core encoder *-------------------------------------------------------------------*/ void stereo_mdct_core_enc_fx( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 *Q_new, +#else + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ +#endif Word16 old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe Q6*/ ) @@ -284,8 +289,13 @@ void stereo_mdct_core_enc_fx( * - TNS *---------------------------------------------------------------*/ +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX + ivas_mdct_core_whitening_enc_fx( hCPE, new_samples, Q_new, old_wsp, pitch_buf_fx, p_mdst_spectrum_long_fx, + tnsBits, p_orig_spectrum_long_fx, tnsSize, p_param, hBstr, 0, CPE_CHANNELS, mdst_spectrum_e, orig_spectrum_e ); +#else ivas_mdct_core_whitening_enc_fx( hCPE, new_samples, old_wsp, pitch_buf_fx, p_mdst_spectrum_long_fx, tnsBits, p_orig_spectrum_long_fx, tnsSize, p_param, hBstr, 0, CPE_CHANNELS, mdst_spectrum_e, orig_spectrum_e ); +#endif FOR( i = 0; i < CPE_CHANNELS; i++ ) { diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index d59870610..3f83df923 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -2026,10 +2026,14 @@ void core_signal_analysis_high_bitrate_fx( Word16 *Q_new ); void core_signal_analysis_high_bitrate_ivas_fx( +#ifdef NONBE_FIX_ISSUE_2206 + const Word16 *new_samples, /*i : Q_new-1 */ +#else const Word16 *new_samples, /*i : Q0 */ - const Word16 T_op[3], /* i : open-loop pitch values for quantiz. Q0*/ - Word16 lsp_new[], /* Q15 */ - Word16 lsp_mid[], /* Q15 */ +#endif + const Word16 T_op[3], /* i : open-loop pitch values for quantiz. Q0*/ + Word16 lsp_new[], /* Q15 */ + Word16 lsp_mid[], /* Q15 */ Encoder_State *st, Word16 pTnsSize[], /* Q0 */ Word16 pTnsBits[], /* Q0 */ -- GitLab From d48d3a348631ba3dc52e3d8a68b800d6bc3e3221 Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Mon, 20 Apr 2026 15:27:51 +0200 Subject: [PATCH 2/6] Disable NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE. --- lib_com/options.h | 2 +- lib_enc/ivas_corecoder_enc_reconfig_fx.c | 45 ++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 43c6363e5..3deebd146 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -92,7 +92,7 @@ #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 NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 /* FhG: Correct scale inconsistency of old_inp_16k_fx buffer scale. */ -#define NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE /* FhG: Remove rescaling of audio during mode switching. */ +//#define NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE /* FhG: Remove rescaling of audio during mode switching. */ #define FIX_FLOAT_1539_G192_FORMAT_SWITCH /* VA/Nokia: reintroduce format switching for g192 bitstreams */ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ #define FIX_BASOP_2530_IVAS_DECISION_MAT /* VA: Fix ambiguous usage of extract_l() */ diff --git a/lib_enc/ivas_corecoder_enc_reconfig_fx.c b/lib_enc/ivas_corecoder_enc_reconfig_fx.c index 2b658c3db..f2f53321e 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig_fx.c +++ b/lib_enc/ivas_corecoder_enc_reconfig_fx.c @@ -225,7 +225,28 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } -#ifndef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE +#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE + IF ( GT_16( len_inp_memory, input_frame ) ) + { + Word16 k; + + IF( nSCE_old > 0 ) + { + FOR( k = 0; k < nSCE_old; k++ ) + { + assert( st_ivas->hSCE[k]->hCoreCoder[0]->q_old_inp32 == st_ivas->hSCE[k]->hCoreCoder[0]->q_inp32 ); + } + } + IF( nCPE_old > 0 ) + { + FOR( k = 0; k < nCPE_old; k++ ) + { + assert( st_ivas->hCPE[k]->hCoreCoder[0]->q_old_inp32 == st_ivas->hCPE[k]->hCoreCoder[0]->q_inp32 ); + assert( st_ivas->hCPE[k]->hCoreCoder[1]->q_old_inp32 == st_ivas->hCPE[k]->hCoreCoder[1]->q_inp32 ); + } + } + } +#else Word16 q_com_sce = Q15, q_com_sce32 = Q31; move16(); move16(); @@ -339,6 +360,26 @@ ivas_error ivas_corecoder_enc_reconfig_fx( /* within McMASA we can modify the transport signals when switching */ /* copy earlier dmx buffers */ +#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE + set32_fx( input_buff_fx[0], 0, len_inp_memory ); + IF( nSCE_old > 0 ) + { + Copy_Scale_sig32 ( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff32_fx, input_buff_fx[0], len_inp_memory, -Q4 ); + q_input_buff[0] = sub( st_ivas->hSCE[0]->hCoreCoder[0]->q_old_inp32, Q4 ); + move16(); + } + + FOR( n = 0; n < CPE_CHANNELS; n++ ) + { + set32_fx( input_buff_fx[n + 1], 0, len_inp_memory ); + IF( nCPE_old > 0 ) + { + Copy_Scale_sig32( st_ivas->hCPE[0]->hCoreCoder[n]->input_buff32_fx, input_buff_fx[n + 1], len_inp_memory, -Q4 ); /* st_ivas->hCPE[0]->hCoreCoder[n]->q_inp32 */ + q_input_buff[n + 1] = sub( st_ivas->hCPE[0]->hCoreCoder[n]->q_old_inp32, Q4 ); + move16(); + } + } +#else IF( nSCE_old > 0 ) { set32_fx( input_buff_fx[0], 0, len_inp_memory ); @@ -357,7 +398,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } } - +#endif ivas_mcmasa_dmx_modify_fx( len_inp_memory, input_buff_fx, q_input_buff, nSCE_old + CPE_CHANNELS * nCPE_old, st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE ); -- GitLab From d6dea31e63da0dd8b419cdda13678aed212b1e89 Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Mon, 20 Apr 2026 15:29:17 +0200 Subject: [PATCH 3/6] clang format --- lib_enc/ivas_corecoder_enc_reconfig_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_corecoder_enc_reconfig_fx.c b/lib_enc/ivas_corecoder_enc_reconfig_fx.c index f2f53321e..4e1beaad6 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig_fx.c +++ b/lib_enc/ivas_corecoder_enc_reconfig_fx.c @@ -226,7 +226,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( } #ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE - IF ( GT_16( len_inp_memory, input_frame ) ) + IF( GT_16( len_inp_memory, input_frame ) ) { Word16 k; @@ -364,7 +364,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( set32_fx( input_buff_fx[0], 0, len_inp_memory ); IF( nSCE_old > 0 ) { - Copy_Scale_sig32 ( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff32_fx, input_buff_fx[0], len_inp_memory, -Q4 ); + Copy_Scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff32_fx, input_buff_fx[0], len_inp_memory, -Q4 ); q_input_buff[0] = sub( st_ivas->hSCE[0]->hCoreCoder[0]->q_old_inp32, Q4 ); move16(); } -- GitLab From 6cd82539d10583feb5efce5320760719ba4a5e04 Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Thu, 23 Apr 2026 15:22:45 +0200 Subject: [PATCH 4/6] Remove NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE. --- lib_com/options.h | 4 +- lib_enc/ivas_corecoder_enc_reconfig_fx.c | 48 ------------------------ 2 files changed, 1 insertion(+), 51 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index c37a81975..4eaf472d9 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -91,8 +91,6 @@ #define NONBE_FIX_ISSUE_2206_AVOID_OVERFLOW_SWB_fenv_fx2 /* FhG: Avoid overflow of SWB_fenv_fx in SWB_BWE_encoding_fx because of very small energies. */ #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 NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 /* FhG: Correct scale inconsistency of old_inp_16k_fx buffer scale. */ -//#define NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE /* FhG: Remove rescaling of audio during mode switching. */ #define NONBE_FIX_2507 /* Fix porting error in SQ_gain_estimate_fx() */ #define FIX_FLOAT_1539_G192_FORMAT_SWITCH /* VA/Nokia: reintroduce format switching for g192 bitstreams */ #define HARMONIZE_2499_CONFIGUREFDCNGDEC /* FhG: basop issue 2499: harmonoize configureFdCngDec */ @@ -131,7 +129,7 @@ #define FIX_FLOAT_1573_POSITION_UPDATE /* Eri: Float issue 1573: For static orientation and listener movement, the PoseUpdated flag is cleared and prevents 5 ms update rate. */ #define FIX_BASOP_2521_DIRAC_STEREO_STEFFI_NRGS /* FhG: BASOP issue 2521: Fix wrong porting for determination of first subframe length in ivas_sba_dirac_stereo_compute_td_stefi_nrgs() */ #define FIX_1452_DEFAULT_REVERB /* Nokia/Philips/FhG: Fix default room presets and their usage in renderer */ - +#define NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 /* FhG: Correct scale inconsistency of old_inp_16k_fx buffer scale. */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_corecoder_enc_reconfig_fx.c b/lib_enc/ivas_corecoder_enc_reconfig_fx.c index 4e1beaad6..e30ddf504 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig_fx.c +++ b/lib_enc/ivas_corecoder_enc_reconfig_fx.c @@ -59,11 +59,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( const MC_MODE last_mc_mode /* i : switching between MC modes: last mode */ ) { -#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE - Word16 n, sce_id, cpe_id; -#else Word16 n, sce_id, cpe_id, k, shift; -#endif Word16 len_inp_memory, n_CoreCoder_existing, nSCE_existing, nCPE_existing; Word32 input_buff_fx[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )]; @@ -225,28 +221,6 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } -#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE - IF( GT_16( len_inp_memory, input_frame ) ) - { - Word16 k; - - IF( nSCE_old > 0 ) - { - FOR( k = 0; k < nSCE_old; k++ ) - { - assert( st_ivas->hSCE[k]->hCoreCoder[0]->q_old_inp32 == st_ivas->hSCE[k]->hCoreCoder[0]->q_inp32 ); - } - } - IF( nCPE_old > 0 ) - { - FOR( k = 0; k < nCPE_old; k++ ) - { - assert( st_ivas->hCPE[k]->hCoreCoder[0]->q_old_inp32 == st_ivas->hCPE[k]->hCoreCoder[0]->q_inp32 ); - assert( st_ivas->hCPE[k]->hCoreCoder[1]->q_old_inp32 == st_ivas->hCPE[k]->hCoreCoder[1]->q_inp32 ); - } - } - } -#else Word16 q_com_sce = Q15, q_com_sce32 = Q31; move16(); move16(); @@ -351,7 +325,6 @@ ivas_error ivas_corecoder_enc_reconfig_fx( } } } -#endif test(); test(); @@ -360,26 +333,6 @@ ivas_error ivas_corecoder_enc_reconfig_fx( /* within McMASA we can modify the transport signals when switching */ /* copy earlier dmx buffers */ -#ifdef NONBE_FIX_2549_REMOVE_RECONFIG_RESCALE - set32_fx( input_buff_fx[0], 0, len_inp_memory ); - IF( nSCE_old > 0 ) - { - Copy_Scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff32_fx, input_buff_fx[0], len_inp_memory, -Q4 ); - q_input_buff[0] = sub( st_ivas->hSCE[0]->hCoreCoder[0]->q_old_inp32, Q4 ); - move16(); - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - set32_fx( input_buff_fx[n + 1], 0, len_inp_memory ); - IF( nCPE_old > 0 ) - { - Copy_Scale_sig32( st_ivas->hCPE[0]->hCoreCoder[n]->input_buff32_fx, input_buff_fx[n + 1], len_inp_memory, -Q4 ); /* st_ivas->hCPE[0]->hCoreCoder[n]->q_inp32 */ - q_input_buff[n + 1] = sub( st_ivas->hCPE[0]->hCoreCoder[n]->q_old_inp32, Q4 ); - move16(); - } - } -#else IF( nSCE_old > 0 ) { set32_fx( input_buff_fx[0], 0, len_inp_memory ); @@ -398,7 +351,6 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } } -#endif ivas_mcmasa_dmx_modify_fx( len_inp_memory, input_buff_fx, q_input_buff, nSCE_old + CPE_CHANNELS * nCPE_old, st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE ); -- GitLab From 4ae495569d63c3f3c2cc9a5c24386e70b2918e1c Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Thu, 23 Apr 2026 17:06:56 +0200 Subject: [PATCH 5/6] Correct macro name, now changes are active. --- lib_com/ivas_prot_fx.h | 4 ++-- lib_enc/ivas_core_enc_fx.c | 12 ++++++------ lib_enc/ivas_corecoder_enc_reconfig_fx.c | 1 + lib_enc/ivas_mdct_core_enc_fx.c | 10 ++++++---- lib_enc/ivas_stereo_mdct_core_enc_fx.c | 4 ++-- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index 0e552a66a..a840390d4 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -6089,7 +6089,7 @@ UWord16 get_indice_st( void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples new_samples_q*/ Word16 *new_samples_q, #else @@ -6141,7 +6141,7 @@ void stereo_switching_dec_fx( void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ Word16 *Q_new, /* i : new samples q */ #else diff --git a/lib_enc/ivas_core_enc_fx.c b/lib_enc/ivas_core_enc_fx.c index 919b996ef..d35894594 100644 --- a/lib_enc/ivas_core_enc_fx.c +++ b/lib_enc/ivas_core_enc_fx.c @@ -433,7 +433,7 @@ ivas_error ivas_core_enc_fx( FOR( n = 0; n < n_CoreChannels; n++ ) { st = sts[n]; -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Scale_sig( old_inp_16k_fx[n], L_INP, sub( Q1, Q_new[n] ) ); // Q0 #endif IF( NE_16( st->element_mode, IVAS_CPE_DFT ) && NE_16( st->element_mode, IVAS_CPE_MDCT ) ) @@ -448,7 +448,7 @@ ivas_error ivas_core_enc_fx( Q_spec_old[1] = hCPE->hCoreCoder[1]->hTcxEnc->spectrum_long_e; move16(); -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 ivas_mdct_core_whitening_enc_fx( hCPE, old_inp_16k_fx, Q_new, old_wsp_fx, pitch_buf_fx_new, hMCT->p_mdst_spectrum_long_fx[cpe_id], hMCT->tnsBits[cpe_id], hMCT->p_orig_spectrum_long_fx[cpe_id], hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], hMCT->hBstr, 1, hMCT->nchan_out_woLFE, mdst_spectrum_e, orig_spectrum_e ); #else @@ -461,7 +461,7 @@ ivas_error ivas_core_enc_fx( st = sts[i]; Word16 nSubframes = NB_DIV; move16(); -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q_new[i], Q1 ) ); // Q_new[n] - 1 #endif if ( EQ_16( st->hTcxEnc->tcxMode, TCX_20 ) ) @@ -528,7 +528,7 @@ ivas_error ivas_core_enc_fx( FOR( i = 0; i < CPE_CHANNELS; i++ ) { st = sts[i]; -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q1, Q_new[i] ) ); // Q0 #endif @@ -565,7 +565,7 @@ ivas_error ivas_core_enc_fx( Q_spec_old[1] = hCPE->hCoreCoder[1]->hTcxEnc->spectrum_long_e; move16(); -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 stereo_mdct_core_enc_fx( hCPE, old_inp_16k_fx, Q_new, old_wsp_fx, pitch_buf_fx ); #else stereo_mdct_core_enc_fx( hCPE, old_inp_16k_fx, old_wsp_fx, pitch_buf_fx ); @@ -573,7 +573,7 @@ ivas_error ivas_core_enc_fx( FOR( i = 0; i < CPE_CHANNELS; i++ ) { -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Scale_sig( old_inp_16k_fx[i], L_INP, sub( Q_new[i], Q1 ) ); // Q_new[n] - 1 #endif st = sts[i]; diff --git a/lib_enc/ivas_corecoder_enc_reconfig_fx.c b/lib_enc/ivas_corecoder_enc_reconfig_fx.c index e30ddf504..9c845eb40 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig_fx.c +++ b/lib_enc/ivas_corecoder_enc_reconfig_fx.c @@ -351,6 +351,7 @@ ivas_error ivas_corecoder_enc_reconfig_fx( move16(); } } + ivas_mcmasa_dmx_modify_fx( len_inp_memory, input_buff_fx, q_input_buff, nSCE_old + CPE_CHANNELS * nCPE_old, st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE ); diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c index b574c5d77..d7d47be2a 100644 --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1164,7 +1164,7 @@ static void compute_power_spec( void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ Word16 *Q_new, /* i : new samples q */ #else @@ -1209,7 +1209,7 @@ void ivas_mdct_core_whitening_enc_fx( Word16 zero_side_flag[NB_DIV]; Word16 q_com, q_min; Word32 *mdst_spectrum_fx[CPE_CHANNELS][NB_DIV]; -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Word16 Q_new; #endif Word16 q_windowedSignal[CPE_CHANNELS]; @@ -1330,12 +1330,14 @@ void ivas_mdct_core_whitening_enc_fx( tcx_ltp_encode_ivas_fx( st, st->hTcxEnc->tcxMode, L_FRAME, old_wsp_fx[ch] + L_WSP_MEM + L_LOOK_12k8, NULL, old_wsp_fx[ch] + L_WSP_MEM + L_LOOK_12k8, T_op[ch], ¶m_core[ch][1 + NOISE_FILL_RANGES], <pBits[ch], NULL, 0, IVAS_CPE_MDCT ); -#ifndef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 + core_signal_analysis_high_bitrate_ivas_fx( new_samples_fx[ch] + L_INP_MEM, T_op[ch], NULL, NULL, st, tnsSize[ch], tnsBits[ch], param_core[ch], <pBits[ch], windowedSignal_fx[ch], st->L_frame, st->hTcxEnc->L_frameTCX, hCPE->last_element_mode, 0, mdst_spectrum_fx[ch], mdst_spectrum_e[ch], Q_new, &q_windowedSignal[ch] ); +#else Q_new = 0; move16(); -#endif core_signal_analysis_high_bitrate_ivas_fx( new_samples_fx[ch] + L_INP_MEM, T_op[ch], NULL, NULL, st, tnsSize[ch], tnsBits[ch], param_core[ch], <pBits[ch], windowedSignal_fx[ch], st->L_frame, st->hTcxEnc->L_frameTCX, hCPE->last_element_mode, 0, mdst_spectrum_fx[ch], mdst_spectrum_e[ch], &Q_new, &q_windowedSignal[ch] ); +#endif /* BWD in MDCT domain */ IF( NE_16( st->hTcxCfg->tcx_last_overlap_mode, TRANSITION_OVERLAP ) ) diff --git a/lib_enc/ivas_stereo_mdct_core_enc_fx.c b/lib_enc/ivas_stereo_mdct_core_enc_fx.c index a8e9c1a85..4b0a50ad8 100644 --- a/lib_enc/ivas_stereo_mdct_core_enc_fx.c +++ b/lib_enc/ivas_stereo_mdct_core_enc_fx.c @@ -128,7 +128,7 @@ static void sync_tcx_mode_fx( *-------------------------------------------------------------------*/ void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ Word16 *Q_new, #else @@ -293,7 +293,7 @@ void stereo_mdct_core_enc_fx( * - TNS *---------------------------------------------------------------*/ -#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX +#ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 ivas_mdct_core_whitening_enc_fx( hCPE, new_samples, Q_new, old_wsp, pitch_buf_fx, p_mdst_spectrum_long_fx, tnsBits, p_orig_spectrum_long_fx, tnsSize, p_param, hBstr, 0, CPE_CHANNELS, mdst_spectrum_e, orig_spectrum_e ); #else -- GitLab From 0376f29c16417d854d8a9da30b0828b912db5908 Mon Sep 17 00:00:00 2001 From: Manuel Jander Date: Thu, 23 Apr 2026 20:59:58 +0200 Subject: [PATCH 6/6] Change comment alignment according to suggestion from @vaclav. --- lib_com/ivas_prot_fx.h | 4 ++-- lib_enc/ivas_mdct_core_enc_fx.c | 10 +++++----- lib_enc/ivas_stereo_mdct_core_enc_fx.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index a840390d4..802cb1807 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -6090,7 +6090,7 @@ UWord16 get_indice_st( void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ #ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 - Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples new_samples_q*/ + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples new_samples_q*/ Word16 *new_samples_q, #else Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Qnew-1*/ @@ -6142,7 +6142,7 @@ void stereo_switching_dec_fx( void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ #ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 - Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ Word16 *Q_new, /* i : new samples q */ #else Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples */ diff --git a/lib_enc/ivas_mdct_core_enc_fx.c b/lib_enc/ivas_mdct_core_enc_fx.c index d7d47be2a..110367c51 100644 --- a/lib_enc/ivas_mdct_core_enc_fx.c +++ b/lib_enc/ivas_mdct_core_enc_fx.c @@ -1165,13 +1165,13 @@ static void compute_power_spec( void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ #ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 - Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ - Word16 *Q_new, /* i : new samples q */ + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 *Q_new, /* i : new samples q */ #else - Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ + Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ #endif - Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ - Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe Q6*/ + Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ + Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe Q6*/ Word32 *mdst_spectrum_long_fx[CPE_CHANNELS], /* o : buffer for MDST spectrum mdst_spectrum_e*/ Word16 tnsBits[CPE_CHANNELS][NB_DIV], /* o : buffer TNS bits */ Word32 *orig_spectrum_long[CPE_CHANNELS], /* o : origingal spectrum w/o whitening orig_spectrum_e*/ diff --git a/lib_enc/ivas_stereo_mdct_core_enc_fx.c b/lib_enc/ivas_stereo_mdct_core_enc_fx.c index 4b0a50ad8..dab303580 100644 --- a/lib_enc/ivas_stereo_mdct_core_enc_fx.c +++ b/lib_enc/ivas_stereo_mdct_core_enc_fx.c @@ -129,10 +129,10 @@ static void sync_tcx_mode_fx( void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ #ifdef NONBE_FIX_ISSUE_2206_MDCT_STEREO_FIX_2549 - Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q_new[]-1*/ Word16 *Q_new, #else - Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ #endif Word16 old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe Q6*/ -- GitLab