diff --git a/lib_com/options.h b/lib_com/options.h index 59ff573abf771336760bff156b0600eff4b63741..1cfb4c9f24362c76b8591556811afcbef46564f6 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -170,6 +170,8 @@ /* #################### Start NON-BE switches ############################ */ /* any switch which is non-be wrt. TS 26.258 V3.0 */ +#define FIX_2432_ISM_SPIKES_16KHZ /* VA: basop issue 2432: fix spikes in ISM decoding at 16kHz output sampling rate */ + /* ##################### End NON-BE switches ########################### */ /* ################## End MAINTENANCE switches ######################### */ diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 04105f2796e8e50542c86678be8aa1879604075b..fd9ae141e5d6a7e5afdabe9d5d70f236c4d35527 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -76,7 +76,11 @@ ivas_error ivas_core_dec( float tmp_buffer[L_FRAME48k]; int16_t tmps, incr; float *bwe_exc_extended[CPE_CHANNELS] = { NULL, NULL }; +#ifdef FIX_2432_ISM_SPIKES_16KHZ + int16_t flag_bwe_bws, flag_swb_tbe; +#else int16_t flag_bwe_bws; +#endif float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; int16_t core_switching_flag[CPE_CHANNELS]; float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; @@ -513,9 +517,16 @@ ivas_error ivas_core_dec( * SWB(FB) BWE decoding *---------------------------------------------------------------------*/ +#ifdef FIX_2432_ISM_SPIKES_16KHZ + flag_swb_tbe = ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && !st->con_tcx && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ); +#endif flag_bwe_bws = ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && st->bfi == 0 ); +#ifdef FIX_2432_ISM_SPIKES_16KHZ + if ( flag_swb_tbe ) +#else if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && !st->con_tcx && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ) +#endif { /* SWB TBE decoder */ swb_tbe_dec( st, hStereoICBWE, bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], tmp_buffer /*fb_exc*/, hb_synth[n], pitch_buf[n] ); @@ -532,7 +543,12 @@ ivas_error ivas_core_dec( swb_bwe_dec( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame ); } +#ifdef FIX_2432_ISM_SPIKES_16KHZ + /* set hb_synth[n] buffer to zeros in case of no BWE decoding */ + if ( ( st->core == ACELP_CORE && ( st->extl == -1 || st->extl == SWB_CNG || ( st->extl == WB_BWE && st->bws_cnt > 0 && flag_swb_tbe == 0 ) ) ) && flag_bwe_bws == 0 ) +#else if ( ( st->core == ACELP_CORE && ( st->extl == -1 || st->extl == SWB_CNG ) ) && flag_bwe_bws == 0 ) +#endif { set_f( hb_synth[n], 0.0f, L_FRAME48k ); }