From a390d3c156adcd2737f786124e9015b3af454523 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 17:29:51 +0200 Subject: [PATCH 01/13] issue 2586: creating the switch and adding Q value altering line. --- lib_com/options.h | 1 + lib_dec/ivas_stereo_switching_dec_fx.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index fe16a0ce7..72134f31d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -107,6 +107,7 @@ #define FIX_1585_ASAN_FORMAT_SW_ALT /* VA,FhG: float issues 1585,1593: alternative fix memory leaks with format switching */ #define FIX_BASOP_2573_RF_MODE_UPDATE /* FhG: BASOP issue 2573: remove duplicated update of rf_mode parameters from evs_enc_fx(); was already done in updt_enc_common_fx() */ #define FIX_2570_BUF_OVFL /* Orange: basop issue 2570: global-buffer-overflow in lib_rend/ivas_objectRenderer_sources_fx.c */ +#define FIX_ISSUE_2586_Q_VALUE /* FhG: basop issue 2586: Q value not updated after value is altered*/ /* #################### End BE switches ################################## */ diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index f0684a3f4..86cb86c3e 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -420,6 +420,9 @@ ivas_error stereo_memory_dec_fx( div_m = BASOP_Util_Divide3216_Scale( hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )], &div_e ); hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ move32(); +#ifdef FIX_ISSUE_2586_Q_VALUE + hCPE->q_output_mem_fx[n][i - delay_comp_DFT] = 31 - div_e; +#endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } } -- GitLab From a1aa68b77f00176feaf6bc41d3d320115bf0f928 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 17:37:13 +0200 Subject: [PATCH 02/13] issue 2586: Clang formatting patch --- lib_dec/ivas_stereo_switching_dec_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 86cb86c3e..be8382f28 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -423,7 +423,7 @@ ivas_error stereo_memory_dec_fx( #ifdef FIX_ISSUE_2586_Q_VALUE hCPE->q_output_mem_fx[n][i - delay_comp_DFT] = 31 - div_e; #endif // FIX_ISSUE_2586_Q_VALUE - // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; + // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } } -- GitLab From cfce9241d4d8775ad6011203b3c8e517cd712992 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 17:46:41 +0200 Subject: [PATCH 03/13] issue 2586: Adding some fixes and an assert to test a theory --- lib_dec/ivas_stereo_switching_dec_fx.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index be8382f28..3342698c2 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -421,7 +421,10 @@ ivas_error stereo_memory_dec_fx( hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ move32(); #ifdef FIX_ISSUE_2586_Q_VALUE - hCPE->q_output_mem_fx[n][i - delay_comp_DFT] = 31 - div_e; + hCPE->q_output_mem_fx[n] = 31 - div_e; + IF(i != 0) { + assert(EQ_16(hCPE->q_output_mem_fx[n], 31 - div_e)); + } #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } -- GitLab From ca7510b93599d1a4fa8ca70b5da7224b3d9ad693 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 17:49:52 +0200 Subject: [PATCH 04/13] issue 2586: Clang formatting patch --- lib_dec/ivas_stereo_switching_dec_fx.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 3342698c2..e1fac9dbf 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -422,8 +422,9 @@ ivas_error stereo_memory_dec_fx( move32(); #ifdef FIX_ISSUE_2586_Q_VALUE hCPE->q_output_mem_fx[n] = 31 - div_e; - IF(i != 0) { - assert(EQ_16(hCPE->q_output_mem_fx[n], 31 - div_e)); + IF( i != 0 ) + { + assert( EQ_16( hCPE->q_output_mem_fx[n], 31 - div_e ) ); } #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; -- GitLab From 748d87d4a37c6c9ee2bcd60deb2afd542eed0261 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 18:13:29 +0200 Subject: [PATCH 05/13] issue 2586: fixing mistakes related to previous commit --- lib_dec/ivas_stereo_switching_dec_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index e1fac9dbf..5931d5403 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -421,11 +421,11 @@ ivas_error stereo_memory_dec_fx( hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ move32(); #ifdef FIX_ISSUE_2586_Q_VALUE - hCPE->q_output_mem_fx[n] = 31 - div_e; - IF( i != 0 ) + IF(i != delay_comp_DFT) { - assert( EQ_16( hCPE->q_output_mem_fx[n], 31 - div_e ) ); + assert(EQ_16(hCPE->q_output_mem_fx[n], 31 - div_e)); } + hCPE->q_output_mem_fx[n] = 31 - div_e; #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } -- GitLab From 1f21394cd6ff5fda1e1c6e0f0484cbda9f6c568d Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 18:15:23 +0200 Subject: [PATCH 06/13] issue 2586: putting BASOP operators where they must be --- lib_dec/ivas_stereo_switching_dec_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 5931d5403..8743f6b14 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -423,9 +423,9 @@ ivas_error stereo_memory_dec_fx( #ifdef FIX_ISSUE_2586_Q_VALUE IF(i != delay_comp_DFT) { - assert(EQ_16(hCPE->q_output_mem_fx[n], 31 - div_e)); + assert(EQ_16(hCPE->q_output_mem_fx[n], sub(31, div_e))); } - hCPE->q_output_mem_fx[n] = 31 - div_e; + hCPE->q_output_mem_fx[n] = sub(31, div_e); #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } -- GitLab From 319d2528129ba976f6db461d5cfc0a0e97f26fa2 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Mon, 11 May 2026 18:49:31 +0200 Subject: [PATCH 07/13] issue 2586: Clang formatting patch --- lib_dec/ivas_stereo_switching_dec_fx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 8743f6b14..8ac6f0a8a 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -421,14 +421,15 @@ ivas_error stereo_memory_dec_fx( hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ move32(); #ifdef FIX_ISSUE_2586_Q_VALUE - IF(i != delay_comp_DFT) + IF( i != delay_comp_DFT ) { - assert(EQ_16(hCPE->q_output_mem_fx[n], sub(31, div_e))); + assert( EQ_16( hCPE->q_output_mem_fx[n], sub( 31, div_e ) ) ); } - hCPE->q_output_mem_fx[n] = sub(31, div_e); + hCPE->q_output_mem_fx[n] = sub( 31, div_e ); #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } + } IF( hCPE->hCoreCoder[0]->last_core != ACELP_CORE ) -- GitLab From a163b4d69abd0e2ca01c54d9ee8f9734615a7055 Mon Sep 17 00:00:00 2001 From: Tommy Date: Mon, 11 May 2026 15:29:36 -0400 Subject: [PATCH 08/13] fix clang --- lib_dec/ivas_stereo_switching_dec_fx.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 8ac6f0a8a..416e36468 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -429,7 +429,6 @@ ivas_error stereo_memory_dec_fx( #endif // FIX_ISSUE_2586_Q_VALUE // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } - } IF( hCPE->hCoreCoder[0]->last_core != ACELP_CORE ) -- GitLab From c99317e1be571e62e9b5788e45a28dacb283d2a9 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Tue, 12 May 2026 12:54:24 +0200 Subject: [PATCH 09/13] issue 2586: Necessary changes in order to make dynamic Q value assignment possible with normalization of every value in the smaller loop. --- lib_dec/ivas_stereo_switching_dec_fx.c | 45 ++++++++++++++++++-------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 8ac6f0a8a..7ea717401 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -411,26 +411,43 @@ ivas_error stereo_memory_dec_fx( { delay_comp_DFT = NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ); /* Q0 */ move16(); - +#ifndef FIX_ISSUE_2586_Q_VALUE /* redressing of the DFT OLA part */ - FOR( n = 0; n < CPE_CHANNELS; n++ ) + FOR(n = 0; n < CPE_CHANNELS; n++) { - FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) + FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) { - div_m = BASOP_Util_Divide3216_Scale( hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )], &div_e ); - hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ + div_m = BASOP_Util_Divide3216_Scale(hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * (hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i)], &div_e); + hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl(div_m, add(div_e, 16)); /* div_e + Q16 */ move32(); -#ifdef FIX_ISSUE_2586_Q_VALUE - IF( i != delay_comp_DFT ) - { - assert( EQ_16( hCPE->q_output_mem_fx[n], sub( 31, div_e ) ) ); - } - hCPE->q_output_mem_fx[n] = sub( 31, div_e ); -#endif // FIX_ISSUE_2586_Q_VALUE - // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; + // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } - } +#else + Word16* exponent_array; + Word32* L_output_buffer; + Word16 max_exponent; + /* redressing of the DFT OLA part */ + FOR(n = 0; n < CPE_CHANNELS; n++) + { + max_exponent = 0xffe1; // Q0 + FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) + { + div_m = BASOP_Util_Divide3216_Scale(hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * (hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i)], &div_e); // div_e <--> Q(15-div_e) + L_output_buffer[i - delay_comp_DFT] = L_deposit_h(div_m); // Q(31-div_e) + exponent_array[i - delay_comp_DFT] = div_e; + move16(); + max_exponent = s_max(max_exponent, div_e); + // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; + } + + FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) { + hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shr(L_output_buffer[i - delay_comp_DFT], sub(max_exponent,exponent_array[i-delay_comp_DFT])); + move32(); + } + hCPE->q_output_mem_fx[n] = sub( 0x001f, max_exponent); + } +#endif // !FIX_ISSUE_2586_Q_VALUE IF( hCPE->hCoreCoder[0]->last_core != ACELP_CORE ) { -- GitLab From 46ff5d8a7467d18127c913862bfb8cb9cc5f1d88 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Tue, 12 May 2026 12:58:20 +0200 Subject: [PATCH 10/13] issue 2586: Clang formatting patch --- lib_dec/ivas_stereo_switching_dec_fx.c | 33 +++++++++++++------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 7ea717401..df2295425 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -413,39 +413,40 @@ ivas_error stereo_memory_dec_fx( move16(); #ifndef FIX_ISSUE_2586_Q_VALUE /* redressing of the DFT OLA part */ - FOR(n = 0; n < CPE_CHANNELS; n++) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { - FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) + FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) { - div_m = BASOP_Util_Divide3216_Scale(hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * (hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i)], &div_e); - hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl(div_m, add(div_e, 16)); /* div_e + Q16 */ + div_m = BASOP_Util_Divide3216_Scale( hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )], &div_e ); + hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shl( div_m, add( div_e, 16 ) ); /* div_e + Q16 */ move32(); // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } } #else - Word16* exponent_array; - Word32* L_output_buffer; + Word16 *exponent_array; + Word32 *L_output_buffer; Word16 max_exponent; /* redressing of the DFT OLA part */ - FOR(n = 0; n < CPE_CHANNELS; n++) - { + FOR( n = 0; n < CPE_CHANNELS; n++ ) + { max_exponent = 0xffe1; // Q0 - FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) + FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) { - div_m = BASOP_Util_Divide3216_Scale(hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * (hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i)], &div_e); // div_e <--> Q(15-div_e) - L_output_buffer[i - delay_comp_DFT] = L_deposit_h(div_m); // Q(31-div_e) + div_m = BASOP_Util_Divide3216_Scale( hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )], &div_e ); // div_e <--> Q(15-div_e) + L_output_buffer[i - delay_comp_DFT] = L_deposit_h( div_m ); // Q(31-div_e) exponent_array[i - delay_comp_DFT] = div_e; move16(); - max_exponent = s_max(max_exponent, div_e); + max_exponent = s_max( max_exponent, div_e ); // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } - - FOR(i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++) { - hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shr(L_output_buffer[i - delay_comp_DFT], sub(max_exponent,exponent_array[i-delay_comp_DFT])); + + FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) + { + hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shr( L_output_buffer[i - delay_comp_DFT], sub( max_exponent, exponent_array[i - delay_comp_DFT] ) ); move32(); } - hCPE->q_output_mem_fx[n] = sub( 0x001f, max_exponent); + hCPE->q_output_mem_fx[n] = sub( 0x001f, max_exponent ); } #endif // !FIX_ISSUE_2586_Q_VALUE -- GitLab From d05a8379f2aec62768aea5264928e37f72594e2c Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Tue, 12 May 2026 13:07:14 +0200 Subject: [PATCH 11/13] issue 2586: Taking care of uninitialized pointer variables --- lib_dec/ivas_stereo_switching_dec_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index df2295425..90f2daa99 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -424,8 +424,8 @@ ivas_error stereo_memory_dec_fx( } } #else - Word16 *exponent_array; - Word32 *L_output_buffer; + Word16 *exponent_array = NULL; + Word32 *L_output_buffer = NULL; Word16 max_exponent; /* redressing of the DFT OLA part */ FOR( n = 0; n < CPE_CHANNELS; n++ ) -- GitLab From 4d55014a1bc82dddea78e56b490f2c338c6d23ca Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Tue, 12 May 2026 14:14:20 +0200 Subject: [PATCH 12/13] issue 2586: Static arrays, continue loop when mantissa is zero since exponent will saturate variable max_exponent --- lib_dec/ivas_stereo_switching_dec_fx.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index 90f2daa99..fea562d7f 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -424,19 +424,23 @@ ivas_error stereo_memory_dec_fx( } } #else - Word16 *exponent_array = NULL; - Word32 *L_output_buffer = NULL; + Word16 exponent_array[STEREO_DFT32MS_OVL_MAX]; + Word32 L_output_buffer[STEREO_DFT32MS_OVL_MAX]; Word16 max_exponent; /* redressing of the DFT OLA part */ FOR( n = 0; n < CPE_CHANNELS; n++ ) { - max_exponent = 0xffe1; // Q0 + max_exponent = -31; + move16(); FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) { div_m = BASOP_Util_Divide3216_Scale( hCPE->output_mem_fx[n][i - delay_comp_DFT], hCPE->hStereoDft->win32ms_fx[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )], &div_e ); // div_e <--> Q(15-div_e) L_output_buffer[i - delay_comp_DFT] = L_deposit_h( div_m ); // Q(31-div_e) exponent_array[i - delay_comp_DFT] = div_e; move16(); + IF(div_m == 0) { + continue; + } max_exponent = s_max( max_exponent, div_e ); // hCPE->output_mem_fx[n][sub(i, delay_comp_DFT)] = hCPE->hStereoDft->win32ms_fx[i_mult(STEREO_DFT32MS_STEP, ( sub(add(sub(hCPE->hStereoDft->dft32ms_ovl, 1), delay_comp_DFT), i) ))]; } @@ -446,7 +450,7 @@ ivas_error stereo_memory_dec_fx( hCPE->output_mem_fx[n][i - delay_comp_DFT] = L_shr( L_output_buffer[i - delay_comp_DFT], sub( max_exponent, exponent_array[i - delay_comp_DFT] ) ); move32(); } - hCPE->q_output_mem_fx[n] = sub( 0x001f, max_exponent ); + hCPE->q_output_mem_fx[n] = sub( 31, max_exponent ); } #endif // !FIX_ISSUE_2586_Q_VALUE -- GitLab From 4b2b1476355498bdd3f0b9c6f050f7c01a583742 Mon Sep 17 00:00:00 2001 From: "Azizi, Arash" Date: Tue, 12 May 2026 14:16:36 +0200 Subject: [PATCH 13/13] issue 2586: Clang formatting patch --- lib_dec/ivas_stereo_switching_dec_fx.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_stereo_switching_dec_fx.c b/lib_dec/ivas_stereo_switching_dec_fx.c index fea562d7f..7b94c702b 100644 --- a/lib_dec/ivas_stereo_switching_dec_fx.c +++ b/lib_dec/ivas_stereo_switching_dec_fx.c @@ -430,7 +430,7 @@ ivas_error stereo_memory_dec_fx( /* redressing of the DFT OLA part */ FOR( n = 0; n < CPE_CHANNELS; n++ ) { - max_exponent = -31; + max_exponent = -31; move16(); FOR( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) { @@ -438,7 +438,8 @@ ivas_error stereo_memory_dec_fx( L_output_buffer[i - delay_comp_DFT] = L_deposit_h( div_m ); // Q(31-div_e) exponent_array[i - delay_comp_DFT] = div_e; move16(); - IF(div_m == 0) { + IF( div_m == 0 ) + { continue; } max_exponent = s_max( max_exponent, div_e ); -- GitLab