From 8672f295f05a469afefc9da73c2ed574227dec02 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 12:32:36 +0200 Subject: [PATCH 01/17] [fix] for issue 1097 out of bound buffers when switching from SID frame --- lib_com/ivas_prot.h | 4 ++++ lib_com/options.h | 1 + lib_enc/ivas_mct_core_enc.c | 29 +++++++++++++++++++++++++++++ lib_enc/ivas_mct_enc_mct.c | 4 ++++ 4 files changed, 38 insertions(+) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index c2bf977774..c1904453f3 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3059,7 +3059,11 @@ void mctStereoIGF_enc( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ float *orig_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : MDCT spectrum for ITF */ +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + float *powerSpec[MCT_MAX_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate */ +#else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate */ +#endif float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect. */ float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i : speech audio decision */ diff --git a/lib_com/options.h b/lib_com/options.h index 2440c09406..078c940d2b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -183,6 +183,7 @@ #define NONBE_FIX_1087_OOB_SBA_DTX_RS /* VA: issue 1087: Extend the length of the buffer for MCT decoding to avoid out-of-bound writing in SBA SID bitrate switching decoding */ #define NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR /* Nok: issue 1074 fixing number of objects signaling in OMASA low rate */ +#define NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC /* FhG: fix out-of-bound errors when switching from SID frame to active frame*/ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index cf2f3d8afd..25bf46eeb6 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -197,8 +197,15 @@ void ivas_mct_core_enc( int16_t i, cpe_id, n, nAvailBits; int16_t nCPE; float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + float powerSpec_long[MCT_MAX_CHANNELS][L_FRAME48k]; +#else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; +#endif float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + float *powerSpec[MCT_MAX_CHANNELS]; +#endif float *powerSpecMsInv[MCT_MAX_CHANNELS][2]; float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2]; float *inv_spectrum[MCT_MAX_CHANNELS][2]; @@ -244,6 +251,9 @@ void ivas_mct_core_enc( inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; inv_spectrum[ch][0] = inv_spectrum_long[ch]; inv_spectrum[ch][1] = inv_spectrum_long[ch] + N_TCX10_MAX; +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + powerSpec[ch] = powerSpec_long[ch]; +#endif } for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) @@ -271,6 +281,25 @@ void ivas_mct_core_enc( } } +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + /* for bitrate switching with DTX on, larger buffers are needed to compute the power spectrum*/ + if ( sts[0]->last_core == ACELP_CORE ) + { + float powerSpecMsInv_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long_cpe0[ch]; + inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long_cpe0[ch] + N_TCX10_MAX; + inv_spectrum[ch][0] = inv_spectrum_long_cpe0[ch]; + inv_spectrum[ch][1] = inv_spectrum_long_cpe0[ch] + N_TCX10_MAX; + powerSpec[ch] = powerSpec_long_cpe0[ch]; + } + } +#endif + hBstr = sts[0]->hBstr; for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c index 4e00969847..a9aa4f6258 100755 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -817,7 +817,11 @@ void mctStereoIGF_enc( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ float *orig_spectrum[MCT_MAX_CHANNELS][2], /* i : MDCT spectrum for ITF */ +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + float *powerSpec[MCT_MAX_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ +#else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ +#endif float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect.*/ float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i : speech audio decision */ -- GitLab From 3f7fe8ade722f83a0a421645d5828b71cc2ac7d6 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 13:11:02 +0200 Subject: [PATCH 02/17] clang format --- lib_enc/ivas_mct_core_enc.c | 2 +- lib_enc/ivas_mct_enc_mct.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) mode change 100755 => 100644 lib_enc/ivas_mct_enc_mct.c diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 25bf46eeb6..6cfee83677 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -197,7 +197,7 @@ void ivas_mct_core_enc( int16_t i, cpe_id, n, nAvailBits; int16_t nCPE; float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ -#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC float powerSpec_long[MCT_MAX_CHANNELS][L_FRAME48k]; #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c old mode 100755 new mode 100644 index a9aa4f6258..e8c98e9a72 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -814,13 +814,13 @@ void write_mct_bitstream( *--------------------------------------------------------------------*/ void mctStereoIGF_enc( - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - Encoder_State **sts, /* i/o: encoder state structure */ - float *orig_spectrum[MCT_MAX_CHANNELS][2], /* i : MDCT spectrum for ITF */ + MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ + Encoder_State **sts, /* i/o: encoder state structure */ + float *orig_spectrum[MCT_MAX_CHANNELS][2], /* i : MDCT spectrum for ITF */ #ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC - float *powerSpec[MCT_MAX_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ + float *powerSpec[MCT_MAX_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ #else - float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ + float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ #endif float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect.*/ float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ -- GitLab From c8fd5a42ca7e68102572559894d10626956d8a68 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 14:25:19 +0200 Subject: [PATCH 03/17] optimized fix for worst-case memory --- lib_enc/ivas_mct_core_enc.c | 40 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 6cfee83677..d0fea55c9c 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -198,7 +198,11 @@ void ivas_mct_core_enc( int16_t nCPE; float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ #ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC - float powerSpec_long[MCT_MAX_CHANNELS][L_FRAME48k]; + float powerSpecMsInv_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; + float powerSpec_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k]; + float inv_spectrum_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; #endif @@ -210,7 +214,9 @@ void ivas_mct_core_enc( float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2]; float *inv_spectrum[MCT_MAX_CHANNELS][2]; float *mdst_spectrum[MCT_MAX_CHANNELS][2]; +#ifndef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC float inv_spectrum_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ +#endif int16_t total_side_bits; int16_t chBitRatios[MCT_MAX_CHANNELS]; Encoder_State *sts[MCT_MAX_CHANNELS]; @@ -245,7 +251,20 @@ void ivas_mct_core_enc( nCPE++; } +#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long_cpe0[ch]; + inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long_cpe0[ch] + N_TCX10_MAX; + inv_spectrum[ch][0] = inv_spectrum_long_cpe0[ch]; + inv_spectrum[ch][1] = inv_spectrum_long_cpe0[ch] + N_TCX10_MAX; + powerSpec[ch] = powerSpec_long_cpe0[ch]; + } + + for ( ch = CPE_CHANNELS; ch < nChannels; ch++ ) +#else for ( ch = 0; ch < nChannels; ch++ ) +#endif { inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; @@ -281,25 +300,6 @@ void ivas_mct_core_enc( } } -#ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC - /* for bitrate switching with DTX on, larger buffers are needed to compute the power spectrum*/ - if ( sts[0]->last_core == ACELP_CORE ) - { - float powerSpecMsInv_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; - float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; - float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long_cpe0[ch]; - inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long_cpe0[ch] + N_TCX10_MAX; - inv_spectrum[ch][0] = inv_spectrum_long_cpe0[ch]; - inv_spectrum[ch][1] = inv_spectrum_long_cpe0[ch] + N_TCX10_MAX; - powerSpec[ch] = powerSpec_long_cpe0[ch]; - } - } -#endif - hBstr = sts[0]->hBstr; for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) -- GitLab From 41aaee75ab7797a9cbdea8b7c0610d99bc66380b Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 14:35:53 +0200 Subject: [PATCH 04/17] fix one more buffer and clan format --- lib_enc/ivas_mct_core_enc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index d0fea55c9c..d48d2487e9 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -201,12 +201,13 @@ void ivas_mct_core_enc( float powerSpecMsInv_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; - float powerSpec_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k]; - float inv_spectrum_long[MCT_MAX_CHANNELS-CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float powerSpec_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; + float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float powerSpecMsInv_long[MCT_MAX_CHANNELS - CPE_CHANNELSDEBU][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; -#endif float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ +#endif #ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC float *powerSpec[MCT_MAX_CHANNELS]; #endif @@ -260,8 +261,8 @@ void ivas_mct_core_enc( inv_spectrum[ch][1] = inv_spectrum_long_cpe0[ch] + N_TCX10_MAX; powerSpec[ch] = powerSpec_long_cpe0[ch]; } - - for ( ch = CPE_CHANNELS; ch < nChannels; ch++ ) + + for ( ch = CPE_CHANNELS; ch < nChannels; ch++ ) #else for ( ch = 0; ch < nChannels; ch++ ) #endif -- GitLab From 024191f8ffe23f6800ba14ec5baf6516dc0d5ca7 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 14:39:46 +0200 Subject: [PATCH 05/17] clang format --- lib_enc/ivas_mct_core_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index d48d2487e9..8a34d0f423 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -202,7 +202,7 @@ void ivas_mct_core_enc( float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; - float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ float powerSpecMsInv_long[MCT_MAX_CHANNELS - CPE_CHANNELSDEBU][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; -- GitLab From 5ea06452574ca9e8213df669bf3c7c7df7914d1b Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 14:57:38 +0200 Subject: [PATCH 06/17] fix build error --- lib_enc/ivas_mct_core_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 8a34d0f423..c151c545fd 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -203,7 +203,7 @@ void ivas_mct_core_enc( float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ - float powerSpecMsInv_long[MCT_MAX_CHANNELS - CPE_CHANNELSDEBU][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ + float powerSpecMsInv_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ -- GitLab From 6459f5fb2520698ad43e176cca0d99ef2bc356fb Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 16 May 2024 16:05:30 +0200 Subject: [PATCH 07/17] clang format --- lib_enc/ivas_mct_core_enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index c151c545fd..47bc1c450f 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -202,7 +202,7 @@ void ivas_mct_core_enc( float inv_spectrum_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long_cpe0[CPE_CHANNELS][L_FRAME_PLUS]; float powerSpec_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; - float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ + float inv_spectrum_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ float powerSpecMsInv_long[MCT_MAX_CHANNELS - CPE_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ #else float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; -- GitLab From 2c5f968c54ad8e821580cce0b270532e8c8983b0 Mon Sep 17 00:00:00 2001 From: vaclav Date: Wed, 5 Jun 2024 09:57:04 +0200 Subject: [PATCH 08/17] fix issue 1111: remove unused buffer `tdm_lspQ_PCh[]'; under FIX_1111_TDM_LSP_BUFFER --- lib_com/ivas_stereo_td_bit_alloc.c | 31 ++++++++++++++++++++++++++++++ lib_com/options.h | 2 +- lib_enc/ivas_core_enc.c | 8 ++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_stereo_td_bit_alloc.c b/lib_com/ivas_stereo_td_bit_alloc.c index cdcfa3cbc1..07bdfb73a8 100644 --- a/lib_com/ivas_stereo_td_bit_alloc.c +++ b/lib_com/ivas_stereo_td_bit_alloc.c @@ -456,17 +456,48 @@ void td_stereo_param_updt( if ( tdm_use_IAWB_Ave_lpc == 1 ) { mvr2r( IAWB_Ave, tdm_lsfQ_PCh, M ); + +#ifdef FIX_1111_TDM_LSP_BUFFER + if ( tdm_lspQ_PCh != NULL ) + { + lsf2lsp( tdm_lsfQ_PCh, tdm_lspQ_PCh, M, INT_FS_12k8 ); + } +#else lsf2lsp( tdm_lsfQ_PCh, tdm_lspQ_PCh, M, INT_FS_12k8 ); +#endif } else if ( flag_ACELP16k == 1 ) { +#ifdef FIX_1111_TDM_LSP_BUFFER + if ( tdm_lspQ_PCh != NULL ) + { + mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); + lsp_convert_poly( tdm_lspQ_PCh, L_FRAME, 0 ); + lsp2lsf( tdm_lspQ_PCh, tdm_lsfQ_PCh, M, INT_FS_12k8 ); + } + else + { + float lsp_temp[M]; + mvr2r( lsp_old_PCh, lsp_temp, M ); + lsp_convert_poly( lsp_temp, L_FRAME, 0 ); + lsp2lsf( lsp_temp, tdm_lsfQ_PCh, M, INT_FS_12k8 ); + } +#else mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); lsp_convert_poly( tdm_lspQ_PCh, L_FRAME, 0 ); lsp2lsf( tdm_lspQ_PCh, tdm_lsfQ_PCh, M, INT_FS_12k8 ); +#endif } else { +#ifdef FIX_1111_TDM_LSP_BUFFER + if ( tdm_lspQ_PCh != NULL ) + { + mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); + } +#else mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); +#endif mvr2r( lsf_old_PCh, tdm_lsfQ_PCh, M ); } diff --git a/lib_com/options.h b/lib_com/options.h index ea4a4576ec..5c0c3a542b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,7 +171,7 @@ #define FIX_1099_JBM_MD_HANDLE_ALLOC /* VA: issue 1099: Limit the allocation of `hJbmMetadata` handle to MASA and OMASA only */ - +#define FIX_1111_TDM_LSP_BUFFER /* VA: issue 1111: remove unused buffer `tdm_lspQ_PCh[]' */ /* #################### End BE switches ################################## */ diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index 27161bec33..e8a3267687 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -99,7 +99,11 @@ ivas_error ivas_core_enc( int16_t Voicing_flag[CPE_CHANNELS]; float pitch_buf[CPE_CHANNELS][NB_SUBFR16k]; int16_t unbits[CPE_CHANNELS]; +#ifdef FIX_1111_TDM_LSP_BUFFER + float tdm_lsfQ_PCh[M]; +#else float tdm_lspQ_PCh[M], tdm_lsfQ_PCh[M]; +#endif int16_t last_element_mode, tdm_Pitch_reuse_flag; int32_t element_brate, last_element_brate, input_Fs; int16_t diff_nBits; @@ -270,7 +274,11 @@ ivas_error ivas_core_enc( if ( st->element_mode == IVAS_CPE_TD && n == 0 ) { +#ifdef FIX_1111_TDM_LSP_BUFFER + td_stereo_param_updt( st->lsp_old, st->lsf_old, pitch_buf[0], NULL, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); +#else td_stereo_param_updt( st->lsp_old, st->lsf_old, pitch_buf[0], tdm_lspQ_PCh, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); +#endif } } -- GitLab From 3de57e41b396dcff102fd3f2fe36409c7bc4d014 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 6 Jun 2024 09:40:58 +0200 Subject: [PATCH 09/17] revert threshold for svd zero flush --- lib_com/options.h | 3 ++- lib_dec/ivas_svd_dec.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index ea4a4576ec..62624926b2 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -179,7 +179,8 @@ /* any switch which is non-be wrt selection floating point code */ /* all switches in this category should start with "NONBE_" */ -#define NONBE_FIX_1070_USAN_SEGFAULT_MC_TO_BIN_BTSW_HEADROT /* fix 1070 USAN: nullptr-with-offset and Segfaults in 7_1_4 to BINAURAL and BINAURAL_ROOM_REVERB decoding with bitrate switching and head rotation*/ +#define NONBE_FIX_1070_USAN_SEGFAULT_MC_TO_BIN_BTSW_HEADROT /* fix 1070 USAN: nullptr-with-offset and Segfaults in 7_1_4 to BINAURAL and BINAURAL_ROOM_REVERB decoding with bitrate switching and head rotation*/ +#define REVERT_ZERO_FLUSH_TRESH /* FhG: issue 1069: revert threshold value introduced with !1518 due to significant complexity increase*/ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c index ebef0644ee..3b475f547e 100644 --- a/lib_dec/ivas_svd_dec.c +++ b/lib_dec/ivas_svd_dec.c @@ -51,7 +51,11 @@ #define SVD_MINIMUM_VALUE 1e-32f /* minimum value */ #define CONVERGENCE_FACTOR 1.0e-04f /* factor for SVD convergence */ #define SVD_MAX_NUM_ITERATION 75 /* maximum number of interations before exiting the SVD */ +#ifdef REVERT_ZERO_FLUSH_TRESH +#define SVD_ZERO_FLUSH_THRESHOLD 1.0e-20f +#else #define SVD_ZERO_FLUSH_THRESHOLD 0.0f +#endif /*-----------------------------------------------------------------------* -- GitLab From 9f855cff909cdf1b5a2b173d1803dabc8c63409e Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Thu, 6 Jun 2024 09:47:39 +0200 Subject: [PATCH 10/17] clang format --- lib_dec/ivas_svd_dec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c index 3b475f547e..5c84af950b 100644 --- a/lib_dec/ivas_svd_dec.c +++ b/lib_dec/ivas_svd_dec.c @@ -48,9 +48,9 @@ *-----------------------------------------------------------------------*/ /* The SVD is sensitive to changes to the following constants, so please be careful when trying to tune things */ -#define SVD_MINIMUM_VALUE 1e-32f /* minimum value */ -#define CONVERGENCE_FACTOR 1.0e-04f /* factor for SVD convergence */ -#define SVD_MAX_NUM_ITERATION 75 /* maximum number of interations before exiting the SVD */ +#define SVD_MINIMUM_VALUE 1e-32f /* minimum value */ +#define CONVERGENCE_FACTOR 1.0e-04f /* factor for SVD convergence */ +#define SVD_MAX_NUM_ITERATION 75 /* maximum number of interations before exiting the SVD */ #ifdef REVERT_ZERO_FLUSH_TRESH #define SVD_ZERO_FLUSH_THRESHOLD 1.0e-20f #else -- GitLab From aee6cf7c2aacd4325ad7b2e76cb72f4eb50459fb Mon Sep 17 00:00:00 2001 From: Archit Tamarapu Date: Thu, 6 Jun 2024 10:50:19 +0200 Subject: [PATCH 11/17] [fix] BRIR memory allocation being skipped due to function return when loading from file if HRIR memory is already allocated --- lib_com/options.h | 1 + lib_dec/ivas_binRenderer_internal.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index ea4a4576ec..c069cc8e92 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -168,6 +168,7 @@ //#define FIX_CREND_SIMPLIFY_CODE /* Ora : simplify line code in crend */ #define FLOAT_FIX_POINT_HRTF_FILE_FORMAT /* allows reading floation or fix point hrtf binary file format */ #define FIX_1082_INSTRUM_FAILED_LC3PLUS /* VoiceAge: issue 1082: fix ambiguous syntax in LC3Plus code leading to fails of instrumented builds */ +#define FIX_1115_FASTCONV_HRTF_FILE_LOAD /* FhG: issue 1115: fix crash when loading FastConv-only binary HRTF file */ #define FIX_1099_JBM_MD_HANDLE_ALLOC /* VA: issue 1099: Limit the allocation of `hJbmMetadata` handle to MASA and OMASA only */ diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 6eed547360..9e7ed8b6e1 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -685,11 +685,15 @@ ivas_error ivas_allocate_binaural_hrtf( if ( renderer_type == RENDERER_BINAURAL_FASTCONV || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { +#ifndef FIX_1115_FASTCONV_HRTF_FILE_LOAD if ( ( HrtfFastConv->leftHRIRReal != NULL ) && ( HrtfFastConv->leftHRIRImag != NULL ) && ( HrtfFastConv->rightHRIRReal != NULL ) && ( HrtfFastConv->rightHRIRImag != NULL ) ) { return IVAS_ERR_OK; } else +#else + if ( ( HrtfFastConv->leftHRIRReal == NULL ) && ( HrtfFastConv->leftHRIRImag == NULL ) && ( HrtfFastConv->rightHRIRReal == NULL ) && ( HrtfFastConv->rightHRIRImag == NULL ) ) +#endif { if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) @@ -713,11 +717,15 @@ ivas_error ivas_allocate_binaural_hrtf( if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { +#ifndef FIX_1115_FASTCONV_HRTF_FILE_LOAD if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) { return IVAS_ERR_OK; } else +#else + if ( ( HrtfFastConv->leftBRIRReal == NULL ) && ( HrtfFastConv->leftBRIRImag == NULL ) && ( HrtfFastConv->rightBRIRReal == NULL ) && ( HrtfFastConv->rightBRIRImag == NULL ) ) +#endif { if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftBRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) { -- GitLab From 2ad89313129f2e347995defe3b6c6e072d228045 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Fri, 7 Jun 2024 12:27:37 +0200 Subject: [PATCH 12/17] fix pointer assignemt --- lib_enc/ivas_mct_core_enc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 47bc1c450f..07971a7e4b 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -267,12 +267,12 @@ void ivas_mct_core_enc( for ( ch = 0; ch < nChannels; ch++ ) #endif { - inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; - inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; - inv_spectrum[ch][0] = inv_spectrum_long[ch]; - inv_spectrum[ch][1] = inv_spectrum_long[ch] + N_TCX10_MAX; + inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch - CPE_CHANNELS]; + inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch - CPE_CHANNELS] + N_TCX10_MAX; + inv_spectrum[ch][0] = inv_spectrum_long[ch - CPE_CHANNELS]; + inv_spectrum[ch][1] = inv_spectrum_long[ch - CPE_CHANNELS] + N_TCX10_MAX; #ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC - powerSpec[ch] = powerSpec_long[ch]; + powerSpec[ch] = powerSpec_long[ch - CPE_CHANNELS]; #endif } -- GitLab From 0f06dce08fcc84759cab8fe1e97e5056255c2978 Mon Sep 17 00:00:00 2001 From: Eleni Fotopoulou Date: Fri, 7 Jun 2024 12:32:10 +0200 Subject: [PATCH 13/17] add comment --- lib_enc/ivas_mct_core_enc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index 07971a7e4b..0cd304696a 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -253,6 +253,7 @@ void ivas_mct_core_enc( } #ifdef NONBE_FIX_1097_SBA_DTX_BRATE_SWITCHING_ENC + /* point first CPE channels to longer buffers where switching from ACELP to TCX may occur in SBA with DTX (total memory saving)*/ for ( ch = 0; ch < CPE_CHANNELS; ch++ ) { inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long_cpe0[ch]; -- GitLab From 0447806969830f387598dc2ed69acce699260db4 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Fri, 14 Jun 2024 09:35:27 +0200 Subject: [PATCH 14/17] Fix in test_param_file.py for tracefile check --- .../HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa | 4 ++-- tests/codec_be_on_mr_nonselection/test_param_file.py | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa b/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa index e818470a52..42c083d6f3 100644 --- a/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa +++ b/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6ecaaa25464342567a19dc04a563127d89055e49c2bd177a22c9e19397a2bba -size 15915864 +oid sha256:2c368121ebd83ed0712cd1963ab44f130d1e02a14f5191bf2d403f71b7eadc0f +size 15911554 diff --git a/tests/codec_be_on_mr_nonselection/test_param_file.py b/tests/codec_be_on_mr_nonselection/test_param_file.py index 619e252767..97168edf16 100644 --- a/tests/codec_be_on_mr_nonselection/test_param_file.py +++ b/tests/codec_be_on_mr_nonselection/test_param_file.py @@ -330,8 +330,12 @@ def test_param_file_tests( ref_tracefile_dec = f"{reference_path}/param_file/dec/{tracefile_dec}" # check for same RTP sequence number in last line of tracefile - dut_rtp_num_last = np.genfromtxt(dut_tracefile_dec, delimiter=";")[-1,0] - ref_rtp_num_last = np.genfromtxt(ref_tracefile_dec, delimiter=";")[-1,0] + with open(dut_tracefile_dec,"r") as fp: + lines = [l for l in fp.readlines() if not l.startswith("-1")] + dut_rtp_num_last = lines[-1][0] + with open(ref_tracefile_dec,"r") as fp: + lines = [l for l in fp.readlines() if not l.startswith("-1")] + ref_rtp_num_last = lines[-1][0] tracefile_last_rtp_numbers_differ = dut_rtp_num_last != ref_rtp_num_last # same sequence number -> likely no crash, assume length difference is due to difference in TSM -- GitLab From 24e07db99673e9f90d6e4ef42077f62ae521f0b9 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 14 Jun 2024 09:44:53 +0200 Subject: [PATCH 15/17] use option in numpy.genfromtxt for reading the first column only --- tests/codec_be_on_mr_nonselection/test_param_file.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/codec_be_on_mr_nonselection/test_param_file.py b/tests/codec_be_on_mr_nonselection/test_param_file.py index 97168edf16..eee9fcd9b2 100644 --- a/tests/codec_be_on_mr_nonselection/test_param_file.py +++ b/tests/codec_be_on_mr_nonselection/test_param_file.py @@ -330,12 +330,8 @@ def test_param_file_tests( ref_tracefile_dec = f"{reference_path}/param_file/dec/{tracefile_dec}" # check for same RTP sequence number in last line of tracefile - with open(dut_tracefile_dec,"r") as fp: - lines = [l for l in fp.readlines() if not l.startswith("-1")] - dut_rtp_num_last = lines[-1][0] - with open(ref_tracefile_dec,"r") as fp: - lines = [l for l in fp.readlines() if not l.startswith("-1")] - ref_rtp_num_last = lines[-1][0] + dut_rtp_num_last = np.genfromtxt(dut_tracefile_dec, delimiter=";", usecols=[0])[-1] + ref_rtp_num_last = np.genfromtxt(ref_tracefile_dec, delimiter=";", usecols=[0])[-1] tracefile_last_rtp_numbers_differ = dut_rtp_num_last != ref_rtp_num_last # same sequence number -> likely no crash, assume length difference is due to difference in TSM -- GitLab From a0a7e9868d7a9bd9c70a83bb0cca0ad6479f7974 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Fri, 14 Jun 2024 10:13:21 +0200 Subject: [PATCH 16/17] Remove sofa file committed by accident --- .../HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa diff --git a/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa b/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa deleted file mode 100644 index 42c083d6f3..0000000000 --- a/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c368121ebd83ed0712cd1963ab44f130d1e02a14f5191bf2d403f71b7eadc0f -size 15911554 -- GitLab From 4aec7c559d7aab496a167f9fd92b6d9e97545078 Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Fri, 14 Jun 2024 10:16:03 +0200 Subject: [PATCH 17/17] Restore sofa file --- .../HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa diff --git a/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa b/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa new file mode 100644 index 0000000000..e818470a52 --- /dev/null +++ b/scripts/binauralRenderer_interface/HRIRs_sofa/HRIR_128_Meth5_IRC_51_Q10_symL_Itrp1_48000.sofa @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6ecaaa25464342567a19dc04a563127d89055e49c2bd177a22c9e19397a2bba +size 15915864 -- GitLab