From b99e2c0e780b7e02a2c83583c934a12abc981d1c Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 12 Oct 2023 12:30:20 +0200 Subject: [PATCH 1/6] correction of an if condition inside the stereo classsifier under DEBUGGING --- lib_enc/ivas_stereo_classifier.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 8e979fcf1f..fbf74780ef 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -146,12 +146,9 @@ int16_t select_stereo_mode( else if ( element_mode < IVAS_CPE_MDCT ) { #ifdef DEBUGGING - if ( stereo_switching_flag == 0 ) + if ( hCPE->stereo_mode_cmdl > 1 && stereo_switching_flag == 0 ) { - if ( hCPE->stereo_mode_cmdl > 1 ) - { - element_mode = hCPE->stereo_mode_cmdl; - } + element_mode = hCPE->stereo_mode_cmdl; } else #endif -- GitLab From 2c0175add7091e7f1ffda58382a47a426bc185ab Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 12 Oct 2023 13:48:41 +0200 Subject: [PATCH 2/6] further modification to the if condition to prevent access to hCPE->hStereoTD during switching from MDCT stereo --- lib_enc/ivas_stereo_classifier.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index fbf74780ef..6244aa9924 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -145,14 +145,16 @@ int16_t select_stereo_mode( } else if ( element_mode < IVAS_CPE_MDCT ) { -#ifdef DEBUGGING - if ( hCPE->stereo_mode_cmdl > 1 && stereo_switching_flag == 0 ) + if ( stereo_switching_flag == 0 ) { - element_mode = hCPE->stereo_mode_cmdl; - } - else +#ifdef DEBUGGING + if ( hCPE->stereo_mode_cmdl > 1 ) + { + element_mode = hCPE->stereo_mode_cmdl; + } #endif - if ( element_mode == IVAS_CPE_TD ) + } + else if ( element_mode == IVAS_CPE_TD ) { if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec > 0 && is_speech ) { @@ -189,6 +191,7 @@ int16_t select_stereo_mode( if ( hCPE->last_element_mode != IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_TD ) { int16_t lrtd_mode = hStereoClassif->lrtd_mode; + /* reset stereo classifier when switching from MDCT stereo to Unified stereo */ stereo_classifier_init( hCPE->hStereoClassif ); -- GitLab From eab6f17a589a05d472cd1b481f9894df46a0fef6 Mon Sep 17 00:00:00 2001 From: malenov Date: Fri, 13 Oct 2023 11:10:51 +0200 Subject: [PATCH 3/6] amend fix to prevent switching from MDCT stereo to TD stereo at 16.4 kbps in MASA 2TC --- lib_com/options.h | 1 + lib_enc/ivas_stereo_classifier.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 9348bf96aa..c4e68e13b9 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -164,6 +164,7 @@ #define BE_FIX_832_ASAN_ERROR_EFAP_OSBA /* FhG: issue #832: fix ASAN error caused by re-allocating EFAP memories in OSBA*/ #define NONBE_FIX_819_DOUBLE_PREC_COMB_FORMATS /* VA: issue 820: Double precision arithmetic in combined formats */ #define NONBE_FIX_849_OMASA_BFI_CRASH /* VA: issue 849: fix OMASA 2TC and FEC crashes */ +#define NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING /* VA: issue 861: fix MASA 2TC crash when switching from MDCT stereo to TD/DFT stereo */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 6244aa9924..5e07ea14c5 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -131,7 +131,11 @@ int16_t select_stereo_mode( hStereoClassif->lrtd_mode = 0; element_mode = IVAS_CPE_DFT; - if ( hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) + if ( +#ifdef NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING + stereo_switching_flag == 1 && +#endif + hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) { hStereoClassif->lrtd_mode = 1; element_mode = IVAS_CPE_TD; -- GitLab From d15278661738c26b5650ecb2886a2bd123f7925c Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 16 Oct 2023 09:39:37 +0200 Subject: [PATCH 4/6] disable stereo switching in MASA and OMASA (more restrictive if condition) --- lib_enc/ivas_stereo_classifier.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 5e07ea14c5..10f0db074e 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -111,7 +111,13 @@ int16_t select_stereo_mode( hStereoClassif->lrtd_mode = ( ( hStereoClassif->unclr_decision | hStereoClassif->xtalk_decision ) && is_speech ); stereo_switching_flag = 1; - if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( ivas_format >= MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( +#ifdef NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING + ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) +#else + ivas_format >= MASA_FORMAT +#endif + && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) #ifdef DEBUGGING || ( hCPE->stereo_mode_cmdl == IVAS_CPE_DFT || hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) #endif -- GitLab From 5413ea3169629c5ac69bffdba6ba773e9ab36c6a Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 16 Oct 2023 09:45:15 +0200 Subject: [PATCH 5/6] clang format --- lib_enc/ivas_stereo_classifier.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 10f0db074e..17dce8dd1f 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -111,13 +111,13 @@ int16_t select_stereo_mode( hStereoClassif->lrtd_mode = ( ( hStereoClassif->unclr_decision | hStereoClassif->xtalk_decision ) && is_speech ); stereo_switching_flag = 1; - if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( #ifdef NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) -#else - ivas_format >= MASA_FORMAT -#endif - && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) +#else + ivas_format >= MASA_FORMAT +#endif + && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) #ifdef DEBUGGING || ( hCPE->stereo_mode_cmdl == IVAS_CPE_DFT || hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) #endif -- GitLab From b6a55d4be4ccd3afa63fa4aec1cea5dc6806908a Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 17 Oct 2023 10:26:02 +0200 Subject: [PATCH 6/6] formatting --- lib_com/options.h | 2 +- lib_enc/ivas_stereo_classifier.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 27a71151e5..5cd0bccf7a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -172,9 +172,9 @@ #define BE_FIX_832_ASAN_ERROR_EFAP_OSBA /* FhG: issue #832: fix ASAN error caused by re-allocating EFAP memories in OSBA*/ #define NONBE_FIX_819_DOUBLE_PREC_COMB_FORMATS /* VA: issue 820: Double precision arithmetic in combined formats */ #define NONBE_FIX_849_OMASA_BFI_CRASH /* VA: issue 849: fix OMASA 2TC and FEC crashes */ +#define NONBE_UNIFIED_DECODING_PATHS /* FhG: unify decoding paths */ #define NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING /* VA: issue 861: fix MASA 2TC crash when switching from MDCT stereo to TD/DFT stereo */ -#define NONBE_UNIFIED_DECODING_PATHS /* FhG: unify decoding paths */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index 17dce8dd1f..1edace43ba 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -111,13 +111,12 @@ int16_t select_stereo_mode( hStereoClassif->lrtd_mode = ( ( hStereoClassif->unclr_decision | hStereoClassif->xtalk_decision ) && is_speech ); stereo_switching_flag = 1; - if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( + #ifdef NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING - ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) #else - ivas_format >= MASA_FORMAT + if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( ivas_format >= MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) #endif - && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) #ifdef DEBUGGING || ( hCPE->stereo_mode_cmdl == IVAS_CPE_DFT || hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) #endif @@ -137,11 +136,12 @@ int16_t select_stereo_mode( hStereoClassif->lrtd_mode = 0; element_mode = IVAS_CPE_DFT; - if ( + #ifdef NONBE_FIX_861_MASA_CRASH_STEREO_SWITCHING - stereo_switching_flag == 1 && + if ( stereo_switching_flag == 1 && hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) +#else + if ( hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) #endif - hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) { hStereoClassif->lrtd_mode = 1; element_mode = IVAS_CPE_TD; -- GitLab