From 051dfe145f24183f7d165cc4e86c09112013ba34 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Mon, 9 Dec 2024 09:21:46 +0530 Subject: [PATCH] Fix for 3GPP issue 985: Stereo to MONO decoding: energy drop below 1 kHz link #985 --- lib_dec/ivas_stereo_dft_dec_dmx.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/lib_dec/ivas_stereo_dft_dec_dmx.c b/lib_dec/ivas_stereo_dft_dec_dmx.c index 64345f932..e97ba23de 100644 --- a/lib_dec/ivas_stereo_dft_dec_dmx.c +++ b/lib_dec/ivas_stereo_dft_dec_dmx.c @@ -223,7 +223,12 @@ void stereo_dft_unify_dmx_fx( Word16 j; Word32 sum_nrg_Mid, sum_abs, dot_prod_abs; Word16 wR, wL; - Word16 norm_sum_nrg_L, norm_sum_nrg_R, norm_dot_prod_real, norm_dot_prod_imag, guard_bit, min_norm, q_sum_nrg_L, q_sum_nrg_R, q_dot_prod_real; + Word16 norm_sum_nrg_L = 63, norm_sum_nrg_R = 63, norm_dot_prod_real = 63, norm_dot_prod_imag = 63, guard_bit = 2 /*find_guarded_bits_fx( 4 )*/, min_norm, q_sum_nrg_L, q_sum_nrg_R, q_dot_prod_real; + move16(); + move16(); + move16(); + move16(); + move16(); Word16 exp_sum_nrg_l, exp_sum_nrg_R, exp_dot_prod_abs, exp_sum_nrg_Mid; Word32 sum_nrg_L_32, sum_nrg_R_32, dot_prod_real_32, dot_prod_img_32; Word64 sum_nrg_L = 0, sum_nrg_R = 0; @@ -242,10 +247,22 @@ void stereo_dft_unify_dmx_fx( dot_prod_img = W_add( dot_prod_img, W_sub( W_mult_32_32( DFT_L[2 * j + 1], DFT_R[2 * j] ), W_mult_32_32( DFT_L[2 * j], DFT_R[2 * j + 1] ) ) ); /* 2 * q_dft + 1 */ } - norm_sum_nrg_L = W_norm( sum_nrg_L ); - norm_sum_nrg_R = W_norm( sum_nrg_R ); - norm_dot_prod_real = W_norm( dot_prod_real ); - norm_dot_prod_imag = W_norm( dot_prod_img ); + IF( sum_nrg_L != 0 ) + { + norm_sum_nrg_L = W_norm( sum_nrg_L ); + } + IF( sum_nrg_R != 0 ) + { + norm_sum_nrg_R = W_norm( sum_nrg_R ); + } + IF( dot_prod_real != 0 ) + { + norm_dot_prod_real = W_norm( dot_prod_real ); + } + IF( dot_prod_img != 0 ) + { + norm_dot_prod_imag = W_norm( dot_prod_img ); + } guard_bit = find_guarded_bits_fx( 4 ); min_norm = s_min( s_min( s_min( norm_sum_nrg_L, norm_sum_nrg_R ), norm_dot_prod_real ), norm_dot_prod_imag ) - guard_bit; -- GitLab