diff --git a/lib_com/options.h b/lib_com/options.h index a1981a5e79fa66c55ac728690bb964d92b805b1a..7280227b3312699d5d4de0fc7b54e97d2309daa3 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -149,6 +149,7 @@ #define FIX_WRONG_NBANDS_IN_ITD_ESTIMATION /* Issue 85: fix incorrect setting of nbands in calc_mean_E_ratio() if bwidth is limited on commandline*/ +#define FIX_ADAP_STEFI_SHIFT /* Issue 89: fix bug in parameter shift of adaptive stereo filling */ #define FIX_I87 /* fix for issue 86: incorrect Ambisonics order set for head rotation in SBA */ diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c old mode 100644 new mode 100755 index b6a7e0685db044f1f2b5b92d87aeba2c62164807..343d83ec126f136a1ae470b1721f53d43d724fd6 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -2943,7 +2943,15 @@ static void stereo_dft_enc_compute_prm( /* parameters for bred0 <= b < bpred1 are estimated from parameters of the remaining bands with ptrans0 <= b < btrans1. */ +#ifdef FIX_ADAP_STEFI_SHIFT + bpred1 = (hStereoDft->nbands > 10) ? STEREO_DFT_RES_PRED_BAND_MAX - 2 : hStereoDft->nbands; + if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW ) + { + bpred1 = min( bpred1, 6 ); + } +#else bpred1 = ( hStereoDft->nbands > 10 ) ? hStereoDft->nbands - 2 : hStereoDft->nbands; +#endif bpred0 = bpred1 - STEREO_DFT_RES_PRED_BAND_MIN_CONST; /* get estimate (currently the maximal index) */ @@ -2963,7 +2971,11 @@ static void stereo_dft_enc_compute_prm( if ( hStereoDft->reverb_flag && hStereoDft->nbands > 10 ) /*SWB and FB*/ { +#ifdef FIX_ADAP_STEFI_SHIFT + for ( b = STEREO_DFT_RES_PRED_BAND_MAX - 1; b >= STEREO_DFT_RES_PRED_BAND_MAX - 2; b-- ) +#else for ( b = hStereoDft->nbands - 1; b >= hStereoDft->nbands - 2; b-- ) +#endif { hStereoDft->res_pred_index_EC[b - STEREO_DFT_RES_PRED_BAND_MIN_CONST] = hStereoDft->res_pred_index_EC[b]; }