From 3ababc80f29cad87da799c93e076534439a7dadb Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Tue, 9 Sep 2025 13:09:34 +0200 Subject: [PATCH] use saturating operator to avoid assert() at overflow --- lib_com/options.h | 1 + lib_dec/bass_psfilter_fx.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 7b4934a4d..b4d00a799 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -92,6 +92,7 @@ #define FIX_1995_REVERB_INIT /* VA/Nokia: issue 1995: Fix use-of-uninitialized-value in ivas_binaural_reverb_init() */ #define FIX_1996_MASKING_NOISE /* Dlb: Heavy precision loss in ola buffers causing discontinuity*/ #define FIX1998_APA_EXEC_SCALING /* FhG: fix scaling of apa_exec_ivas_fx(); avoid continuously worse scaling with previous data */ +#define FIX2007_BASSPSFILTER_OVERFLOW /* FhG: use saturing operator, to avoid overflow in bass_psfilter_fx() */ /* #################### Start BASOP porting switches ############################ */ diff --git a/lib_dec/bass_psfilter_fx.c b/lib_dec/bass_psfilter_fx.c index 4a5ef9328..599c3aa98 100644 --- a/lib_dec/bass_psfilter_fx.c +++ b/lib_dec/bass_psfilter_fx.c @@ -555,7 +555,11 @@ void bass_psfilter_fx( FOR( i = 0; i < subfr_len; i++ ) { /* err[i] = syn_fx[i] - gain*syn2_fx[i] */ +#ifdef FIX2007_BASSPSFILTER_OVERFLOW + err[i] = msu_r( L_shr_sat( L_mult0( gain, syn2_fx[i] ), exp2 ), syn_fx[i], 16384 ); /* Q15 */ +#else err[i] = msu_r( L_shr( L_mult0( gain, syn2_fx[i] ), exp2 ), syn_fx[i], 16384 ); /* Q15 */ +#endif move16(); /* the sign is inverted but it is not important because we calculate energy with 'err[i]' x 'err[i]' -- GitLab