From 24d5f8783736c8e5964f9507caf7edb0aef04ad6 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 22 Nov 2023 12:45:24 +0100 Subject: [PATCH 1/8] issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated"; under fix NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION --- lib_com/options.h | 1 + lib_dec/ivas_cpe_dec.c | 9 +++++++++ lib_enc/ivas_cpe_enc.c | 8 ++++++++ 3 files changed, 18 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index c8eb019c5b..0930002d0b 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -164,6 +164,7 @@ #define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/ #define NONBE_UNIFIED_DECODING_PATHS /* FhG: unify decoding paths */ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index d8b5ec4713..ae23102ed6 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -256,6 +256,15 @@ ivas_error ivas_cpe_dec( } else { +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION + if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) + { + nb_bits -= nb_bits_metadata; + nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); + nb_bits = min( nb_bits, 800 - 32 ); + } +#endif + stereo_dft_dec_read_BS( ivas_total_brate, hCPE->element_brate, &sts[0]->total_brate, sts[1], hCPE->hStereoDft, sts[0]->bwidth, output_frame, res_buf, &nb_bits, hCPE->hStereoCng->coh, st_ivas->ivas_format ); } diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index dc395d5f29..29b80117ae 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -657,17 +657,25 @@ ivas_error ivas_cpe_enc( { max_bits -= nb_bits_metadata; max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION + nb_bits = min( nb_bits, 800 - 32 ); +#endif } stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, max_bits ); } + if ( sts[0]->core_brate == FRAME_NO_DATA || sts[0]->core_brate == SID_2k40 ) { assert( ( nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS ) ) && "Stereo DFT CNG: bit budget is violated" ); } else { +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION + assert( ( nb_bits >= 0 ) && "Stereo DFT: bit budget is violated" ); +#else assert( ( ( hCPE->element_brate / FRAMES_PER_SEC - nb_bits ) >= ( 0.8f * sts[0]->bits_frame_nominal ) ) && "Stereo DFT: bit budget is violated" ); +#endif /* Flexible total bitrate in M channel */ sts[0]->total_brate = hCPE->element_brate - ( nb_bits * FRAMES_PER_SEC ); -- GitLab From c483c4523fbea4d27848e17a0f4051341a9bd521 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 22 Nov 2023 13:05:26 +0100 Subject: [PATCH 2/8] correction within NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION --- lib_enc/ivas_cpe_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 29b80117ae..6f7ff61b47 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -658,7 +658,7 @@ ivas_error ivas_cpe_enc( max_bits -= nb_bits_metadata; max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); #ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION - nb_bits = min( nb_bits, 800 - 32 ); + max_bits = min( max_bits, 800 - 32 ); #endif } -- GitLab From 89e6337c679d1f981c6accee513aa11af1c9ea40 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 22 Nov 2023 13:26:12 +0100 Subject: [PATCH 3/8] correction of assert() --- lib_enc/ivas_cpe_enc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 6f7ff61b47..b10d767192 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -672,11 +672,21 @@ ivas_error ivas_cpe_enc( else { #ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION - assert( ( nb_bits >= 0 ) && "Stereo DFT: bit budget is violated" ); +#ifdef DEBUGGING + if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) + { + assert( ( ( hCPE->element_brate / FRAMES_PER_SEC - nb_bits - nb_bits_metadata + (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ) ) >= ( 0.8f * sts[0]->bits_frame_nominal ) ) && "Stereo DFT: bit budget is violated" ); + } + else + { + assert( ( ( hCPE->element_brate / FRAMES_PER_SEC - nb_bits ) >= ( 0.8f * sts[0]->bits_frame_nominal ) ) && "Stereo DFT: bit budget is violated" ); + } + +#endif #else assert( ( ( hCPE->element_brate / FRAMES_PER_SEC - nb_bits ) >= ( 0.8f * sts[0]->bits_frame_nominal ) ) && "Stereo DFT: bit budget is violated" ); -#endif +#endif /* Flexible total bitrate in M channel */ sts[0]->total_brate = hCPE->element_brate - ( nb_bits * FRAMES_PER_SEC ); } -- GitLab From ee2fab9c6d77cf0a2854fc9f86db4ea2fc625938 Mon Sep 17 00:00:00 2001 From: advasila Date: Mon, 27 Nov 2023 23:03:25 +0200 Subject: [PATCH 4/8] alternative solution to issue 913 --- lib_com/options.h | 2 +- lib_dec/ivas_cpe_dec.c | 10 +++++++++- lib_enc/ivas_cpe_enc.c | 10 +++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 0930002d0b..527ea7710f 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -165,7 +165,7 @@ #define NONBE_UNIFIED_DECODING_PATHS /* FhG: unify decoding paths */ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ #define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ - +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT /* Mokia: issue 913: Alternative complementary colution to crash */ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index ae23102ed6..c14e862dbb 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -260,8 +260,16 @@ ivas_error ivas_cpe_dec( if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) { nb_bits -= nb_bits_metadata; - nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT + if ( hCPE->brate_surplus < 0 ) + { +#endif + nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT + } +#else nb_bits = min( nb_bits, 800 - 32 ); +#endif } #endif diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index b10d767192..23d148b9c8 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -656,9 +656,17 @@ ivas_error ivas_cpe_enc( if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) { max_bits -= nb_bits_metadata; - max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT + if ( hCPE->brate_surplus < 0 ) + { +#endif + max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT + } +#else #ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION max_bits = min( max_bits, 800 - 32 ); +#endif #endif } -- GitLab From 044ac21b5eb1e7a3d3b6b65bfe33234cc0b34976 Mon Sep 17 00:00:00 2001 From: advasila Date: Mon, 27 Nov 2023 23:13:08 +0200 Subject: [PATCH 5/8] fix clang --- lib_com/options.h | 7 +++++-- lib_dec/ivas_cpe_dec.c | 2 +- lib_enc/ivas_cpe_enc.c | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index e960bfa39b..07daad6c9a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -168,13 +168,16 @@ #endif #define NONBE_FIX_874_OMASA_BRSW_2TD /* Nokia: issue 874: Fixes the crashes with the long test vectors that prompted switching to TD*/ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ + +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT /* Nokia: issue 913: Alternative complementary colution to crash */ + #define NONBE_FIX_906_SBA_LBR_SMOOTHING /* FhG: issue #906: fix SBA low bit rate smoothing for HOA2/HOA3 output */ #define NONBE_FIX_878_RS_FEC_STEREO_CNG /* Eri: Frame loss and Unified Stereo CNG may cause false BER detection which results in corrupt bitstream decoding */ #define NONBE_FIX_904_JBM_SBA_RS_FOA /* FhG: issue #904: fix JBM SBA RS to FOA decoding */ #define NONBE_FIX_898_ISM_BRATE_CRASH /* VA: issue 898: fix decoder crash in ISM bitrate switching with DTX and binaural output */ -#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ -#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT /* Nokia: issue 913: Alternative complementary colution to crash */ + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index e1c5084bd6..2557b97fac 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -264,7 +264,7 @@ ivas_error ivas_cpe_dec( if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) { nb_bits -= nb_bits_metadata; -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT if ( hCPE->brate_surplus < 0 ) { #endif diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 23d148b9c8..cabbd9eb82 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -656,7 +656,7 @@ ivas_error ivas_cpe_enc( if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) { max_bits -= nb_bits_metadata; -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT if ( hCPE->brate_surplus < 0 ) { #endif -- GitLab From e0eac6c40867929773313a3c9d415e72db20bbf0 Mon Sep 17 00:00:00 2001 From: advasila Date: Tue, 28 Nov 2023 09:16:46 +0200 Subject: [PATCH 6/8] unify switches for issue 913 --- lib_com/options.h | 4 ++-- lib_dec/ivas_cpe_dec.c | 7 ------- lib_enc/ivas_cpe_enc.c | 9 ++------- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 07daad6c9a..42240a332d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -169,8 +169,8 @@ #define NONBE_FIX_874_OMASA_BRSW_2TD /* Nokia: issue 874: Fixes the crashes with the long test vectors that prompted switching to TD*/ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ -#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ -#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT /* Nokia: issue 913: Alternative complementary colution to crash */ +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA/Nok: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ + #define NONBE_FIX_906_SBA_LBR_SMOOTHING /* FhG: issue #906: fix SBA low bit rate smoothing for HOA2/HOA3 output */ #define NONBE_FIX_878_RS_FEC_STEREO_CNG /* Eri: Frame loss and Unified Stereo CNG may cause false BER detection which results in corrupt bitstream decoding */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 2557b97fac..3c28df58d2 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -264,19 +264,12 @@ ivas_error ivas_cpe_dec( if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) { nb_bits -= nb_bits_metadata; -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT if ( hCPE->brate_surplus < 0 ) { -#endif nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT } -#else - nb_bits = min( nb_bits, 800 - 32 ); -#endif } #endif - stereo_dft_dec_read_BS( ivas_total_brate, hCPE->element_brate, &sts[0]->total_brate, sts[1], hCPE->hStereoDft, sts[0]->bwidth, output_frame, res_buf, &nb_bits, hCPE->hStereoCng->coh, st_ivas->ivas_format ); } diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index cabbd9eb82..6722275d31 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -656,20 +656,15 @@ ivas_error ivas_cpe_enc( if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) { max_bits -= nb_bits_metadata; -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT +#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION if ( hCPE->brate_surplus < 0 ) { #endif max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); -#ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION_ALT - } -#else #ifdef NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION - max_bits = min( max_bits, 800 - 32 ); -#endif + } #endif } - stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, max_bits ); } -- GitLab From bc39b335fe92bf0737d725d4c2f57f30afd2d8b8 Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 28 Nov 2023 09:55:32 +0100 Subject: [PATCH 7/8] merge with main --- lib_com/options.h | 6 +----- lib_dec/ivas_cpe_dec.c | 1 + lib_enc/ivas_cpe_enc.c | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 3f5eef2a69..9e9e24e533 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -166,17 +166,13 @@ #ifdef NONBE_UNIFIED_DECODING_PATHS #define NONBE_UNIFIED_DECODING_PATHS_FIX /* VA: issue 876: fixes within NONBE_UNIFIED_DECODING_PATHS */ #endif -#define NONBE_FIX_874_OMASA_BRSW_2TD /* Nokia: issue 874: Fixes the crashes with the long test vectors that prompted switching to TD*/ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ - -#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA/Nok: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ - - #define NONBE_FIX_906_SBA_LBR_SMOOTHING /* FhG: issue #906: fix SBA low bit rate smoothing for HOA2/HOA3 output */ #define NONBE_FIX_878_RS_FEC_STEREO_CNG /* Eri: Frame loss and Unified Stereo CNG may cause false BER detection which results in corrupt bitstream decoding */ #define NONBE_FIX_904_JBM_SBA_RS_FOA /* FhG: issue #904: fix JBM SBA RS to FOA decoding */ #define NONBE_FIX_898_ISM_BRATE_CRASH /* VA: issue 898: fix decoder crash in ISM bitrate switching with DTX and binaural output */ #define NONBE_FIX_862_UBSAN_SPAR_DEC_BR_SW_PLC /* DLB: issue 862 : UBSAN: out-of-bound error in SPAR for OSBA bitrate switching with PLC*/ +#define NONBE_FIX_913_OMASA_BITBUDGET_VIOLATION /* VA/Nok: issue 913: Resolve "Crash in OMASA encoder - DFT-Stereo bit-budget violated" */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 3c28df58d2..140b33622c 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -269,6 +269,7 @@ ivas_error ivas_cpe_dec( nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); } } + #endif stereo_dft_dec_read_BS( ivas_total_brate, hCPE->element_brate, &sts[0]->total_brate, sts[1], hCPE->hStereoDft, sts[0]->bwidth, output_frame, res_buf, &nb_bits, hCPE->hStereoCng->coh, st_ivas->ivas_format ); } diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 6722275d31..251ef2a32d 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -665,6 +665,7 @@ ivas_error ivas_cpe_enc( } #endif } + stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, max_bits ); } -- GitLab From e38cc4856f7035d993b9a9c1e8fea687de527cbf Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 28 Nov 2023 10:01:12 +0100 Subject: [PATCH 8/8] reintroduce unused define NONBE_FIX_874_OMASA_BRSW_2TD in order to not introduce changes in options.h --- lib_com/options.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_com/options.h b/lib_com/options.h index 9e9e24e533..977b31778e 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -166,6 +166,7 @@ #ifdef NONBE_UNIFIED_DECODING_PATHS #define NONBE_UNIFIED_DECODING_PATHS_FIX /* VA: issue 876: fixes within NONBE_UNIFIED_DECODING_PATHS */ #endif +#define NONBE_FIX_874_OMASA_BRSW_2TD /* Nokia: issue 874: Fixes the crashes with the long test vectors that prompted switching to TD*/ #define NONBE_FIX_871_ACELP_CRASH_IN_OSBA /* FhG: isse 871: crash in ACELP core encoder with OSBA */ #define NONBE_FIX_906_SBA_LBR_SMOOTHING /* FhG: issue #906: fix SBA low bit rate smoothing for HOA2/HOA3 output */ #define NONBE_FIX_878_RS_FEC_STEREO_CNG /* Eri: Frame loss and Unified Stereo CNG may cause false BER detection which results in corrupt bitstream decoding */ -- GitLab