diff --git a/lib_com/options.h b/lib_com/options.h index 76bfee2aea9c762e8569d51024863b9c3cbe3899..e1dac150b51903bff268758c63d126a3589c7b1f 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 a4e19e0400c7da71ab98c14c25a732eecc3a692f..9e36a7b08dcd3d7b46d457939ccc3c2e12152530 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] ); + 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 ) ); +#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 );