From 8a69c3ac038942d30629edae3e770fa744323dfa Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Mon, 24 Mar 2025 14:39:45 +0100 Subject: [PATCH 1/2] Add fix FIX_1416_MDCT_CLASSIFIER for TCX/HQ classifier --- lib_com/options.h | 2 ++ lib_enc/mdct_classifier_fx.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 76bfee2ae..e1dac150b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -67,6 +67,8 @@ #define BASOP_NOGLOB_DECLARE_LOCAL #endif +#define FIX_1416_MDCT_CLASSIFIER /* Eri: Fix for precision in mdct_classifier_ivas_fx, aligning HQ/TCX decision with float */ + /* Note: each compile switch (FIX_1101_...) is independent from the other ones */ //#define OPT_STEREO_32KBPS_V1 /* Optimization made in stereo decoding path for 32kbps decoding */ #endif diff --git a/lib_enc/mdct_classifier_fx.c b/lib_enc/mdct_classifier_fx.c index a4e19e040..d884d1c1f 100644 --- a/lib_enc/mdct_classifier_fx.c +++ b/lib_enc/mdct_classifier_fx.c @@ -878,8 +878,13 @@ Word16 mdct_classifier_ivas_fx( FOR( i = 0; i < 32; i++ ) { +#ifdef FIX_1416_MDCT_CLASSIFIER + avrg_l = L_add( avrg_l, X[20 + i], 5 ); + avrg_h = L_add( avrg_h, X[96 + i], 5 ); +#else avrg_l = L_add( avrg_l, L_shr( X[20 + i], 5 ) ); avrg_h = L_add( avrg_h, L_shr( X[96 + i], 5 ) ); +#endif IF( GT_32( X[20 + i], peak_l ) ) { peak_l = L_add( X[20 + i], 0 ); @@ -889,6 +894,10 @@ Word16 mdct_classifier_ivas_fx( peak_h = L_add( X[96 + i], 0 ); } } +#ifdef FIX_1416_MDCT_CLASSIFIER + avrg_l = L_shr( X[20 + i], 5 ); + avrg_h = L_shr( X[96 + i], 5 ); +#endif /* Compute: d_acc - 12*(np -1). */ acc = L_deposit_l( d_acc ); -- GitLab From 880c7fb14288f48a00ed480d649e6e947dbdd34c Mon Sep 17 00:00:00 2001 From: Erik Norvell Date: Mon, 24 Mar 2025 14:56:56 +0100 Subject: [PATCH 2/2] Correct cleanup error --- lib_enc/mdct_classifier_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/mdct_classifier_fx.c b/lib_enc/mdct_classifier_fx.c index d884d1c1f..9e36a7b08 100644 --- a/lib_enc/mdct_classifier_fx.c +++ b/lib_enc/mdct_classifier_fx.c @@ -879,8 +879,8 @@ Word16 mdct_classifier_ivas_fx( FOR( i = 0; i < 32; i++ ) { #ifdef FIX_1416_MDCT_CLASSIFIER - avrg_l = L_add( avrg_l, X[20 + i], 5 ); - avrg_h = L_add( avrg_h, X[96 + i], 5 ); + avrg_l = L_add( avrg_l, X[20 + i] ); + avrg_h = L_add( avrg_h, X[96 + i] ); #else avrg_l = L_add( avrg_l, L_shr( X[20 + i], 5 ) ); avrg_h = L_add( avrg_h, L_shr( X[96 + i], 5 ) ); -- GitLab