diff --git a/lib_com/options.h b/lib_com/options.h index dc260b61c0a674c01c6b9c13c81c4d6af628879e..e1bc66274dacf8eb163ac4403300260dd75064d0 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -195,6 +195,7 @@ #define NONBE_1246_INF_COHERENCE_IN_HIGH_LEVEL_DTX /* Ericsson: Issue 1246: High level input which triggers DTX can lead to numerical overflow in coherence calculation */ #define TMP_FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add error check for unsupported config: split rendering with VoIP mode */ #define FIX_1113_EXTREND_ISAR /* FhG: issue 1113: fix external renderer asserts for FOA/HOA2 and CLDFB config */ +#define NONBE_1203_MDCT2DFT_SWITCHING /* VA: issue 1203: fix severe artifacts during MDCT to DFT stereo switching when MDCT ITD is not used */ #define NONBE_1122_JBM_FIX_PLAYOUT_DELAY_IN_DTX /* FhG: Avoid JBM ignoring safety margin and setting playout delay to 0 during DTX */ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ #define FIX_938_COMPILER_WARNING /* FhG: Fix compiler warning in ivas_mdct_core_reconstruct() */ diff --git a/lib_enc/ivas_stereo_dft_td_itd.c b/lib_enc/ivas_stereo_dft_td_itd.c index 5f55611fd0d0ed79fcaba04c782d735f2602a6ea..25ea30c35b217ad4bcec75c92767d9844e2345c2 100644 --- a/lib_enc/ivas_stereo_dft_td_itd.c +++ b/lib_enc/ivas_stereo_dft_td_itd.c @@ -399,6 +399,9 @@ void stereo_td_itd_mdct_stereo( float bin_nrgR[STEREO_DFT_N_32k_ENC]; float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; +#ifdef NONBE_1203_MDCT2DFT_SWITCHING + int16_t dft_ovl; +#endif if ( hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) { @@ -427,6 +430,17 @@ void stereo_td_itd_mdct_stereo( stereo_td_itd( hStereoMdct->hItd, NULL, 1, hStereoMdct->hDft_ana->dft_ovl, hCPE->hCoreCoder, input_frame, hCPE->input_mem ); #endif } +#ifdef NONBE_1203_MDCT2DFT_SWITCHING + else if ( hCPE->input_mem[0] != NULL ) + { + dft_ovl = STEREO_DFT_OVL_MAX * input_frame / L_FRAME48k; + + for ( i = 0; i < CPE_CHANNELS; i++ ) + { + mvr2r( hCPE->hCoreCoder[i]->input + input_frame - dft_ovl, hCPE->input_mem[i], dft_ovl ); + } + } +#endif return; } diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index 27a17e048b7a7c3e222eb22262060654f09434c2..862eea204b749e6faf73f0aecb93b274bc3d710a 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -625,6 +625,9 @@ void stereo_switching_enc( dft_ovl = STEREO_DFT_OVL_MAX * input_frame / L_FRAME48k; /* update DFT analysis overlap memory */ +#ifdef NONBE_1203_MDCT2DFT_SWITCHING + /* note: in MDCT stereo, the update is done in stereo_td_itd_mdct_stereo() */ +#endif if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->input_mem[0] != NULL && hCPE->element_mode != IVAS_CPE_MDCT ) { for ( n = 0; n < CPE_CHANNELS; n++ )