diff --git a/lib_com/options.h b/lib_com/options.h index 1e44c32497a747098ea431b6d2d7e3a0e1f819aa..2f0a623c4652ee75ebc7669a26b54250b1af75cc 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -183,6 +183,8 @@ #define FIX_803_SCE_MD_HANDLE /* VA: issue 803: Resolve "MD handle needed only for one SCE" */ #define FIX_812_DOUBLE_PREC_MCT /* FhG: Issue 812: Avoid double precision in MCT */ #define FIX_807_VARIABLE_SPEED_DECODING /* FhG: Issue 807: Resolve "Variable Speed Decoding broken" */ +#define FIX_818_DOUBLE_PREC_KERNEN_SW /* FhG: Issue 818: Avoid double precision in kernel switching */ + /* #################### End BE switches ################################## */ diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index 54ab9212ed699ed4f7779bc756110c709de3732f..74d8404fb0159fda72a00eab2a59c9c6d7e6c0c3 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -228,7 +228,11 @@ static void kernel_switch_trafo( edxt( inputBuffer, y, l / 2 + m + r / 2, kernelType, FALSE ); +#ifdef FIX_818_DOUBLE_PREC_KERNEL_SW + v_multc( y, sqrtf( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); +#else v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); +#endif return; } @@ -277,7 +281,11 @@ static void kernel_switch_update_transforms( edxt( windowedTimeSignal, sigR, s, kernelType, FALSE ); +#ifdef FIX_818_DOUBLE_PREC_KERNEL_SW + v_multc( sigR, sqrtf( (float) NORM_MDCT_FACTOR / s ), sigR, s ); +#else v_multc( sigR, (float) sqrt( (float) NORM_MDCT_FACTOR / s ), sigR, s ); +#endif } else /* 2 TCX5 subframes or 1 TCX10 or 1 transitory TCX20 */ {