From 4111bcf1add565f9fce3e35116a73c36c14f6cec Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Tue, 20 Aug 2024 15:17:45 -0400 Subject: [PATCH 1/2] possible fix to 856, wrong usage of extract_l --- lib_com/options.h | 1 + lib_com/swb_bwe_com_fx.c | 5 ++++- lib_dec/FEC_HQ_core.c | 4 ++++ lib_dec/ivas_core_dec.c | 5 ++++- lib_dec/swb_tbe_dec.c | 5 ++++- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index c8a0c19c9..ff2a6f5fe 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -169,6 +169,7 @@ #define FIX_854_HILBERT_SCALING /* VA: reduce lost of precision due to unnecessary scaling, reduce a lot the 2 kHz tone */ +#define FIX_856_EXTRACT_L /* VA: Fix undesirable wrap-around */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_com/swb_bwe_com_fx.c b/lib_com/swb_bwe_com_fx.c index 181bc2e1a..a308d1559 100644 --- a/lib_com/swb_bwe_com_fx.c +++ b/lib_com/swb_bwe_com_fx.c @@ -838,8 +838,11 @@ Word16 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 */ L_temp = L_shl( L_temp, sub( exp2, 4 ) ); // Output is expected in Q11 } BASOP_SATURATE_WARNING_ON_EVS - +#ifdef FIX_856_EXTRACT_L + return extract_h( L_shl_sat( L_temp, 16 ) ); +#else return extract_l( L_temp ); +#endif } #endif diff --git a/lib_dec/FEC_HQ_core.c b/lib_dec/FEC_HQ_core.c index 14aa62ef6..17fe13469 100644 --- a/lib_dec/FEC_HQ_core.c +++ b/lib_dec/FEC_HQ_core.c @@ -1584,7 +1584,11 @@ void save_synthesis_hq_fec_fx( Copy( st->hTcxDec->synth_history_fx + output_frame, st->hTcxDec->synth_history_fx, add( sub( output_frame, post_hq_delay ), NS2SA_FX2( st->output_Fs, PH_ECU_MEM_NS ) ) ); FOR( Word16 i = 0; i < output_frame; i++ ) { +#ifdef FIX_856_EXTRACT_L + st->hTcxDec->old_synthFB_fx[sub( add( i, output_frame ), post_hq_delay )] = extract_h( L_shl_sat( output_fx[i], 16 ) ); +#else st->hTcxDec->old_synthFB_fx[sub( add( i, output_frame ), post_hq_delay )] = extract_l( output_fx[i] ); +#endif move16(); } diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 6397898f5..b01f39250 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -1626,8 +1626,11 @@ ivas_error ivas_core_dec_fx( exp_max = s_min( exp_max, exp_delay_buf_out ); Copy32( output_32_fx[n], output_fx_loc, output_frame ); - +#ifdef FIX_856_EXTRACT_L + Scale_sig32( output_fx_loc, output_frame, -Q11 ); /* output_fx_loc should be in Q0 when entering save_synthesis_hq_fec_fx */ +#else Scale_sig32( output_fx_loc, output_frame, sub( exp_max, Q11 ) ); +#endif Scale_sig( st->delay_buf_out_fx, NS2SA_FX2( st->output_Fs, DELAY_CLDFB_NS ), exp_max ); Scale_sig( st->hHQ_core->old_out_fx + NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ), sub( NS2SA_FX2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ), NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ) ), exp_max ); Scale_sig( st->prev_synth_buffer_fx, NS2SA_FX2( 48000, L_sub( DELAY_BWE_TOTAL_NS, DELAY_CLDFB_NS ) ), sub( exp_max, st->q_prev_synth_buffer_fx ) ); diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index e6e9482a6..5c1d9c583 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -1121,8 +1121,11 @@ void ivas_swb_tbe_dec_fx( /* find tilt */ calc_tilt_bwe_fx_loc( old_syn_12k8_16k_fx, &tilt_swb_fec_32_fx, &tilt_swb_fec_fx_q, L_FRAME ); +#ifdef FIX_856_EXTRACT_L + tilt_swb_fec_fx = round_fx_sat( L_shl_sat( tilt_swb_fec_32_fx, sub( 11 + 16, tilt_swb_fec_fx_q ) ) ); +#else tilt_swb_fec_fx = extract_l( L_shr( tilt_swb_fec_32_fx, sub( tilt_swb_fec_fx_q, 11 ) ) ); - +#endif test(); if ( st->bfi && st->clas_dec != UNVOICED_CLAS ) { -- GitLab From 371d686bdcf6341fbd9cb3cef46d11a0be818bd7 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 22 Aug 2024 15:24:40 +0530 Subject: [PATCH 2/2] Corrected the scaling in ivas_core_dec for output_fx_loc --- lib_dec/ivas_core_dec.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index b01f39250..6397898f5 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -1626,11 +1626,8 @@ ivas_error ivas_core_dec_fx( exp_max = s_min( exp_max, exp_delay_buf_out ); Copy32( output_32_fx[n], output_fx_loc, output_frame ); -#ifdef FIX_856_EXTRACT_L - Scale_sig32( output_fx_loc, output_frame, -Q11 ); /* output_fx_loc should be in Q0 when entering save_synthesis_hq_fec_fx */ -#else + Scale_sig32( output_fx_loc, output_frame, sub( exp_max, Q11 ) ); -#endif Scale_sig( st->delay_buf_out_fx, NS2SA_FX2( st->output_Fs, DELAY_CLDFB_NS ), exp_max ); Scale_sig( st->hHQ_core->old_out_fx + NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ), sub( NS2SA_FX2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ), NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ) ), exp_max ); Scale_sig( st->prev_synth_buffer_fx, NS2SA_FX2( 48000, L_sub( DELAY_BWE_TOTAL_NS, DELAY_CLDFB_NS ) ), sub( exp_max, st->q_prev_synth_buffer_fx ) ); -- GitLab