From 5fc237b2fcf029f3d77f22f19f734b8869f7ccf9 Mon Sep 17 00:00:00 2001 From: gaoyuy Date: Tue, 18 Apr 2023 01:48:13 +0000 Subject: [PATCH 1/3] Replace options.h --- lib_com/options.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index cce0aff460..97d2a966f8 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -138,7 +138,8 @@ #ifdef LSF_RE_USE_SECONDARY_CHANNEL /*#define LSF_RE_USE_SECONDARY_CHANNEL_REUSEMODE */ /* switch to isolate the reuse mode case */ #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 ITD_WINNER_GAIN_MODIFY */ /* ITD optimization - WORK IN PROGRESS */ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define FIX_103_RA_PARAMS_PARAM_BIN_REND /* Issue 103: Digest room acoustics parameters for Parametric Binaural Renderer*/ -- GitLab From 2d8587037fc4e0f4a05c55147fb508645628a5bc Mon Sep 17 00:00:00 2001 From: gaoyuy Date: Tue, 18 Apr 2023 01:51:09 +0000 Subject: [PATCH 2/3] Replace ivas_stereo_dft_enc.c --- lib_enc/ivas_stereo_dft_enc.c | 43 ++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index ab4844ab94..aabfc74159 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -1657,8 +1657,11 @@ void stereo_dft_enc_process( if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC && hStereoDft->hConfig->ada_wb_res_cod_mode ) { 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; @@ -1731,7 +1734,9 @@ static void stereo_dft_enc_get_res_cod_mode_flag( float dmx_res_all, g; int16_t fast_update_flag; int16_t prev_res_cod_mode_flag, res_cod_mode_flag; - +#ifdef ADAP_OPT + static int first_frm_flag = 1; +#endif k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ /*Calculate energy ratio between residual signal and downmix signal */ @@ -1759,6 +1764,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; @@ -1767,9 +1782,13 @@ 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; } @@ -1779,12 +1798,26 @@ static void stereo_dft_enc_get_res_cod_mode_flag( } /* Get the residual signal coding flag */ +#ifdef ADAP_OPT + if (first_frm_flag) { + prev_res_cod_mode_flag = res_cod_mode_flag; + 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++; @@ -1804,7 +1837,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++; -- GitLab From 4927a3235311d66af9aef3bc5e34aab2e2aa8f52 Mon Sep 17 00:00:00 2001 From: gaoyuy Date: Thu, 8 Jun 2023 16:23:29 +0800 Subject: [PATCH 3/3] moved variable first_frm_flag to hStereoDft & clang format --- lib_enc/ivas_stat_enc.h | 3 +++ lib_enc/ivas_stereo_dft_enc.c | 16 ++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 6638a89488..5d89d3dab5 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -270,6 +270,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 */ diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index aabfc74159..b5be17f09f 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -520,6 +520,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 @@ -1734,9 +1738,7 @@ static void stereo_dft_enc_get_res_cod_mode_flag( float dmx_res_all, g; int16_t fast_update_flag; int16_t prev_res_cod_mode_flag, res_cod_mode_flag; -#ifdef ADAP_OPT - static int first_frm_flag = 1; -#endif + k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ /*Calculate energy ratio between residual signal and downmix signal */ @@ -1799,11 +1801,13 @@ static void stereo_dft_enc_get_res_cod_mode_flag( /* Get the residual signal coding flag */ #ifdef ADAP_OPT - if (first_frm_flag) { + if ( hStereoDft->first_frm_flag ) + { prev_res_cod_mode_flag = res_cod_mode_flag; - first_frm_flag = 0; + hStereoDft->first_frm_flag = 0; } - else { + else + { prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; } #else -- GitLab