Loading lib_com/options.h +2 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ #define BITSTREAM_INDICES_MEMORY /* Don't count memory for bitstream Indice at the encoder - it is a temporary solution for development only */ #endif #define DISABLE_ADAP_RES_COD_TMP /* temporary fix for IVAS-403, disables adaptive residual coding */ /*#define DISABLE_ADAP_RES_COD_TMP*/ /* temporary fix for IVAS-403, disables adaptive residual coding */ #define ADAP_OPT /* Issue 69: optimized the adap algorithm */ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define USE_HRIR_128_METH5_IRC_53_Q10_SYML_ITRP1_48000 /* Dolby (Orange, FhG) : Contribution 36 - SBA HRIR update */ Loading lib_enc/ivas_stat_enc.h +3 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,9 @@ typedef struct stereo_dft_enc_data_struct float res_cod_NRG_S[STEREO_DFT_BAND_MAX]; float res_cod_SNR_M[STEREO_DFT_BAND_MAX]; float old_snr; #ifdef ADAP_OPT int16_t first_frm_flag; /* ADAP first frame flag */ #endif /* flags and data for adaptive wideband residual coding */ float res_dmx_ratio_lt; /* long term energy ratio between RES and DMX */ Loading lib_enc/ivas_stereo_dft_enc.c +43 −0 Original line number Diff line number Diff line Loading @@ -508,6 +508,10 @@ void stereo_dft_enc_reset( hStereoDft->hItd->prev_itd1 = 0; hStereoDft->hItd->prev_itd2 = 0; #ifdef ADAP_OPT hStereoDft->first_frm_flag = 1; #endif #ifdef DEBUG_MODE_DFT hStereoDft->verbose = 1; #endif Loading Loading @@ -1648,7 +1652,11 @@ void stereo_dft_enc_process( { stereo_dft_enc_get_res_cod_mode_flag( hStereoDft, res_nrg_all_curr, dmx_nrg_all_curr, &res_dmx_ratio, &frame_nrg_ratio ); #ifdef ADAP_OPT if ( hStereoDft->res_cod_sw_flag ) #else if ( hStereoDft->res_cod_mode[k_offset] == STEREO_DFT_RES_COD_OFF || hStereoDft->res_cod_sw_flag ) #endif { int16_t res_cod_band_max; Loading Loading @@ -1749,6 +1757,16 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } /* Calculate long term energy ratio between residual signal and downmix signal */ #ifdef ADAP_OPT if ( fast_update_flag ) { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.2f + hStereoDft->res_dmx_ratio_lt * 0.8f; } else { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.05f + hStereoDft->res_dmx_ratio_lt * 0.95f; } #else if ( fast_update_flag ) { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.5f + hStereoDft->res_dmx_ratio_lt * 0.5f; Loading @@ -1757,9 +1775,14 @@ static void stereo_dft_enc_get_res_cod_mode_flag( { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.1f + hStereoDft->res_dmx_ratio_lt * 0.9f; } #endif /*Get the residual signal coding initial flag */ #ifdef ADAP_OPT if ( hStereoDft->res_dmx_ratio_lt > 0.01f ) #else if ( hStereoDft->res_dmx_ratio_lt > 0.075f ) #endif { res_cod_mode_flag = 1; } Loading @@ -1769,12 +1792,28 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } /* Get the residual signal coding flag */ #ifdef ADAP_OPT if ( hStereoDft->first_frm_flag ) { prev_res_cod_mode_flag = res_cod_mode_flag; hStereoDft->first_frm_flag = 0; } else { prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; } #else prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; #endif if ( res_cod_mode_flag != prev_res_cod_mode_flag ) { if ( prev_res_cod_mode_flag == 1 ) { #ifdef ADAP_OPT if ( hStereoDft->hangover_cnt0 < 5 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) #else if ( hStereoDft->hangover_cnt0 < 3 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) #endif { res_cod_mode_flag = prev_res_cod_mode_flag; hStereoDft->hangover_cnt0++; Loading @@ -1794,7 +1833,11 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } else { #ifdef ADAP_OPT if ( hStereoDft->hangover_cnt1 < 5 ) #else if ( hStereoDft->hangover_cnt1 < 3 ) #endif { res_cod_mode_flag = prev_res_cod_mode_flag; hStereoDft->hangover_cnt1++; Loading Loading
lib_com/options.h +2 −1 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ #define BITSTREAM_INDICES_MEMORY /* Don't count memory for bitstream Indice at the encoder - it is a temporary solution for development only */ #endif #define DISABLE_ADAP_RES_COD_TMP /* temporary fix for IVAS-403, disables adaptive residual coding */ /*#define DISABLE_ADAP_RES_COD_TMP*/ /* temporary fix for IVAS-403, disables adaptive residual coding */ #define ADAP_OPT /* Issue 69: optimized the adap algorithm */ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define USE_HRIR_128_METH5_IRC_53_Q10_SYML_ITRP1_48000 /* Dolby (Orange, FhG) : Contribution 36 - SBA HRIR update */ Loading
lib_enc/ivas_stat_enc.h +3 −0 Original line number Diff line number Diff line Loading @@ -256,6 +256,9 @@ typedef struct stereo_dft_enc_data_struct float res_cod_NRG_S[STEREO_DFT_BAND_MAX]; float res_cod_SNR_M[STEREO_DFT_BAND_MAX]; float old_snr; #ifdef ADAP_OPT int16_t first_frm_flag; /* ADAP first frame flag */ #endif /* flags and data for adaptive wideband residual coding */ float res_dmx_ratio_lt; /* long term energy ratio between RES and DMX */ Loading
lib_enc/ivas_stereo_dft_enc.c +43 −0 Original line number Diff line number Diff line Loading @@ -508,6 +508,10 @@ void stereo_dft_enc_reset( hStereoDft->hItd->prev_itd1 = 0; hStereoDft->hItd->prev_itd2 = 0; #ifdef ADAP_OPT hStereoDft->first_frm_flag = 1; #endif #ifdef DEBUG_MODE_DFT hStereoDft->verbose = 1; #endif Loading Loading @@ -1648,7 +1652,11 @@ void stereo_dft_enc_process( { stereo_dft_enc_get_res_cod_mode_flag( hStereoDft, res_nrg_all_curr, dmx_nrg_all_curr, &res_dmx_ratio, &frame_nrg_ratio ); #ifdef ADAP_OPT if ( hStereoDft->res_cod_sw_flag ) #else if ( hStereoDft->res_cod_mode[k_offset] == STEREO_DFT_RES_COD_OFF || hStereoDft->res_cod_sw_flag ) #endif { int16_t res_cod_band_max; Loading Loading @@ -1749,6 +1757,16 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } /* Calculate long term energy ratio between residual signal and downmix signal */ #ifdef ADAP_OPT if ( fast_update_flag ) { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.2f + hStereoDft->res_dmx_ratio_lt * 0.8f; } else { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.05f + hStereoDft->res_dmx_ratio_lt * 0.95f; } #else if ( fast_update_flag ) { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.5f + hStereoDft->res_dmx_ratio_lt * 0.5f; Loading @@ -1757,9 +1775,14 @@ static void stereo_dft_enc_get_res_cod_mode_flag( { hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.1f + hStereoDft->res_dmx_ratio_lt * 0.9f; } #endif /*Get the residual signal coding initial flag */ #ifdef ADAP_OPT if ( hStereoDft->res_dmx_ratio_lt > 0.01f ) #else if ( hStereoDft->res_dmx_ratio_lt > 0.075f ) #endif { res_cod_mode_flag = 1; } Loading @@ -1769,12 +1792,28 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } /* Get the residual signal coding flag */ #ifdef ADAP_OPT if ( hStereoDft->first_frm_flag ) { prev_res_cod_mode_flag = res_cod_mode_flag; hStereoDft->first_frm_flag = 0; } else { prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; } #else prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; #endif if ( res_cod_mode_flag != prev_res_cod_mode_flag ) { if ( prev_res_cod_mode_flag == 1 ) { #ifdef ADAP_OPT if ( hStereoDft->hangover_cnt0 < 5 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) #else if ( hStereoDft->hangover_cnt0 < 3 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) #endif { res_cod_mode_flag = prev_res_cod_mode_flag; hStereoDft->hangover_cnt0++; Loading @@ -1794,7 +1833,11 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } else { #ifdef ADAP_OPT if ( hStereoDft->hangover_cnt1 < 5 ) #else if ( hStereoDft->hangover_cnt1 < 3 ) #endif { res_cod_mode_flag = prev_res_cod_mode_flag; hStereoDft->hangover_cnt1++; Loading