Loading lib_com/ivas_cnst.h +0 −2 Original line number Diff line number Diff line Loading @@ -520,9 +520,7 @@ typedef enum #define STEREO_DFT_XCORR_LB_MAX 24 #ifdef STABILIZE_GIPD #define STEREO_DFT_IPD_BUF_LEN 5 #endif #define STEREO_DFT_N_COH_PRED 4 /* Number of intra-frame predictors for coherence vector */ #define STEREO_DFT_COH_PRED_COEFFS 15 /* Number of coefficients per predictor */ Loading lib_com/options.h +0 −1 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ #endif #define FIX_I59_DELAY_ROUNDING /* Issue 59: rounding in sample domain instead of nanosec for IVAS_ENC_GetDelay() and IVAS_DEC_GetDelay() */ #define FIX_FIX_I59 /* Issue 59: small fix concerning LFE delay rounding */ #define STABILIZE_GIPD /* FhG: Contribution 22: gIPD stabilization */ #define FIX_292_VBAP_CALLOC_REMOVAL /* Nokia: Fixes issue 292 by removing the remnant callocs */ #define FIX_293_EXT_RENDERER_CLI /* FhG: Fix bugs in external renderer CLI */ #define FIX_268 /* Issue 268: Add low cost dry-run of memory analysis */ Loading lib_enc/ivas_stat_enc.h +0 −2 Original line number Diff line number Diff line Loading @@ -210,12 +210,10 @@ typedef struct stereo_dft_enc_data_struct float sfm; float sum_dot_prod_real; float sum_dot_prod_img; #ifdef STABILIZE_GIPD float dot_prod_real_smooth[STEREO_DFT_BAND_MAX]; float dot_prod_img_smooth[STEREO_DFT_BAND_MAX]; float ipd_buf[STEREO_DFT_BAND_MAX][STEREO_DFT_IPD_BUF_LEN]; float prev_gipd; #endif /*ITD*/ ITD_DATA_HANDLE hItd; Loading lib_enc/ivas_stereo_dft_enc.c +0 −45 Original line number Diff line number Diff line Loading @@ -73,13 +73,11 @@ static void stereo_dft_enc_open( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const in static void stereo_dft_enc_compute_prm( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *DFT_L, float *DFT_R, int16_t k_offset, int16_t flag_quant, const int16_t sp_aud_decision0, const int16_t vad_flag, float *bin_nrgL, float *bin_nrgR, float *dot_prod_nrg_ratio ); #ifdef STABILIZE_GIPD static float stereo_dft_calc_mean_bipd( float *pIpd, float ipd_buf[STEREO_DFT_IPD_BUF_LEN] ); static float stereo_dft_calc_mean_ipd_change( float *pIpd, float *ipd_smooth, int16_t gipd_band_max ); static void stereo_dft_gipd_stabilization( float *pgIpd, float prev_gipd, float ipd_mean_change ); #endif #ifdef DEBUG_MODE_DFT static void stereo_dft_enc_get_nipd_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *pgIpd, const int16_t sp_aud_decision0, const float gainIPD ); Loading Loading @@ -441,7 +439,6 @@ void stereo_dft_enc_reset( hStereoDft->side_gain_counter = 0; hStereoDft->side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_INIT; set_zero( hStereoDft->gipd, STEREO_DFT_ENC_DFT_NB ); #ifdef STABILIZE_GIPD set_zero( hStereoDft->dot_prod_real_smooth, STEREO_DFT_BAND_MAX ); set_zero( hStereoDft->dot_prod_img_smooth, STEREO_DFT_BAND_MAX ); for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) Loading @@ -449,7 +446,6 @@ void stereo_dft_enc_reset( set_zero( hStereoDft->ipd_buf[i], STEREO_DFT_IPD_BUF_LEN ); } hStereoDft->prev_gipd = 0.f; #endif hStereoDft->gipd_index = 0; set_zero( hStereoDft->res_pred_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); set_s( hStereoDft->res_pred_index_EC, 0, STEREO_DFT_BAND_MAX ); Loading Loading @@ -643,11 +639,7 @@ void stereo_dft_enc_update( hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); /*Compute main parameters*/ #ifdef STABILIZE_GIPD hStereoDft->gipd_band_max = dft_band_ipd[1][3]; #else hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->hConfig->band_res][3]; #endif hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * hStereoDft->N / (float) ( hStereoDft->NFFT ) ); hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); Loading Loading @@ -1296,11 +1288,7 @@ void stereo_dft_enc_process( /* Initialization */ k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ #ifdef STABILIZE_GIPD hStereoDft->gipd_band_max = dft_band_ipd[1][3]; #else hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->band_res[k_offset]][3]; #endif hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); Loading Loading @@ -2611,14 +2599,10 @@ static void stereo_dft_enc_compute_prm( float sum_energy_L, sum_energy_R; float g, c; float abs_L_R; #ifdef STABILIZE_GIPD float abs_L_R2; #endif float gain_IPD; float sub_nrg_DMX[STEREO_DFT_BAND_MAX]; #ifdef STABILIZE_GIPD float sub_nrg_DMX2; #endif float sub_nrg_L[STEREO_DFT_BAND_MAX]; float sub_nrg_R[STEREO_DFT_BAND_MAX]; float diff_ipd; Loading @@ -2632,11 +2616,9 @@ static void stereo_dft_enc_compute_prm( float sum_past_dot_prod_abs, sum_past_dot_prod_abs2; float sum_past_nrg_dmx; int16_t pos; #ifdef STABILIZE_GIPD float pIpd[STEREO_DFT_BAND_MAX]; float ipd_smooth[STEREO_DFT_BAND_MAX]; float ipd_mean_change; #endif /*------------------------------------------------------------------* * Initialization Loading @@ -2657,9 +2639,7 @@ static void stereo_dft_enc_compute_prm( sum_energy_R = EPSILON; sum_dot_prod_real = EPSILON; sum_dot_prod_img = EPSILON; #ifdef STABILIZE_GIPD sub_nrg_DMX2 = 0.f; #endif #ifdef DEBUG_MODE_DFT sum_nrg_L = EPSILON; sum_nrg_R = EPSILON; Loading Loading @@ -2689,17 +2669,10 @@ static void stereo_dft_enc_compute_prm( pNrgL = bin_nrgL; pNrgR = bin_nrgR; #ifdef STABILIZE_GIPD sum_nrg_L2 = EPSILON; sum_nrg_R2 = EPSILON; dot_prod_real2 = EPSILON; dot_prod_img2 = EPSILON; #else sum_nrg_L2 = 0; sum_nrg_R2 = 0; dot_prod_real2 = 0; dot_prod_img2 = 0; #endif for ( i = hStereoDft->band_limits_dmx[b2]; i < hStereoDft->band_limits_dmx[b2 + 1]; i++ ) { Loading @@ -2710,7 +2683,6 @@ static void stereo_dft_enc_compute_prm( dot_prod_real2 += pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; dot_prod_img2 += pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; } #ifdef STABILIZE_GIPD abs_L_R2 = sqrtf( dot_prod_real2 * dot_prod_real2 + dot_prod_img2 * dot_prod_img2 ); sub_nrg_DMX2 = sum_nrg_L2 + sum_nrg_R2 + 2 * abs_L_R2; Loading @@ -2724,7 +2696,6 @@ static void stereo_dft_enc_compute_prm( gain_IPD += ( sum_nrg_L2 + sum_nrg_R2 + 2 * dot_prod_real2 ) / sub_nrg_DMX2 / hStereoDft->gipd_band_max; } #endif sum_past_nrgL2 = EPSILON; sum_past_nrgR2 = EPSILON; Loading Loading @@ -2878,31 +2849,17 @@ static void stereo_dft_enc_compute_prm( pPredGain[b] = 0.f; } #ifndef STABILIZE_GIPD if ( b < hStereoDft->gipd_band_max ) { gain_IPD += ( sum_nrg_L + sum_nrg_R + 2 * dot_prod_real ) / sub_nrg_DMX[b] / hStereoDft->gipd_band_max; } #endif #ifdef STABILIZE_GIPD if ( b2 == hStereoDft->gipd_band_max ) #else if ( b == hStereoDft->gipd_band_max - 1 ) #endif { #ifdef STABILIZE_GIPD ipd_mean_change = stereo_dft_calc_mean_ipd_change( pIpd, ipd_smooth, hStereoDft->gipd_band_max ); #endif hStereoDft->sum_dot_prod_real = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_real + hStereoDft->sfm * sum_dot_prod_real; hStereoDft->sum_dot_prod_img = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_img + hStereoDft->sfm * sum_dot_prod_img; pgIpd[0] = (float) atan2( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real ); #ifdef STABILIZE_GIPD stereo_dft_gipd_stabilization( &pgIpd[0], hStereoDft->prev_gipd, ipd_mean_change ); hStereoDft->prev_gipd = pgIpd[0]; #endif } } Loading Loading @@ -3241,7 +3198,6 @@ static void res_pred_gain_mode_decision( } #ifdef STABILIZE_GIPD /*------------------------------------------------------------------------- * stereo_dft_calc_mean_bipd() * Loading Loading @@ -3405,7 +3361,6 @@ static void stereo_dft_gipd_stabilization( } return; } #endif /*------------------------------------------------------------------------- Loading Loading
lib_com/ivas_cnst.h +0 −2 Original line number Diff line number Diff line Loading @@ -520,9 +520,7 @@ typedef enum #define STEREO_DFT_XCORR_LB_MAX 24 #ifdef STABILIZE_GIPD #define STEREO_DFT_IPD_BUF_LEN 5 #endif #define STEREO_DFT_N_COH_PRED 4 /* Number of intra-frame predictors for coherence vector */ #define STEREO_DFT_COH_PRED_COEFFS 15 /* Number of coefficients per predictor */ Loading
lib_com/options.h +0 −1 Original line number Diff line number Diff line Loading @@ -147,7 +147,6 @@ #endif #define FIX_I59_DELAY_ROUNDING /* Issue 59: rounding in sample domain instead of nanosec for IVAS_ENC_GetDelay() and IVAS_DEC_GetDelay() */ #define FIX_FIX_I59 /* Issue 59: small fix concerning LFE delay rounding */ #define STABILIZE_GIPD /* FhG: Contribution 22: gIPD stabilization */ #define FIX_292_VBAP_CALLOC_REMOVAL /* Nokia: Fixes issue 292 by removing the remnant callocs */ #define FIX_293_EXT_RENDERER_CLI /* FhG: Fix bugs in external renderer CLI */ #define FIX_268 /* Issue 268: Add low cost dry-run of memory analysis */ Loading
lib_enc/ivas_stat_enc.h +0 −2 Original line number Diff line number Diff line Loading @@ -210,12 +210,10 @@ typedef struct stereo_dft_enc_data_struct float sfm; float sum_dot_prod_real; float sum_dot_prod_img; #ifdef STABILIZE_GIPD float dot_prod_real_smooth[STEREO_DFT_BAND_MAX]; float dot_prod_img_smooth[STEREO_DFT_BAND_MAX]; float ipd_buf[STEREO_DFT_BAND_MAX][STEREO_DFT_IPD_BUF_LEN]; float prev_gipd; #endif /*ITD*/ ITD_DATA_HANDLE hItd; Loading
lib_enc/ivas_stereo_dft_enc.c +0 −45 Original line number Diff line number Diff line Loading @@ -73,13 +73,11 @@ static void stereo_dft_enc_open( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const in static void stereo_dft_enc_compute_prm( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *DFT_L, float *DFT_R, int16_t k_offset, int16_t flag_quant, const int16_t sp_aud_decision0, const int16_t vad_flag, float *bin_nrgL, float *bin_nrgR, float *dot_prod_nrg_ratio ); #ifdef STABILIZE_GIPD static float stereo_dft_calc_mean_bipd( float *pIpd, float ipd_buf[STEREO_DFT_IPD_BUF_LEN] ); static float stereo_dft_calc_mean_ipd_change( float *pIpd, float *ipd_smooth, int16_t gipd_band_max ); static void stereo_dft_gipd_stabilization( float *pgIpd, float prev_gipd, float ipd_mean_change ); #endif #ifdef DEBUG_MODE_DFT static void stereo_dft_enc_get_nipd_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *pgIpd, const int16_t sp_aud_decision0, const float gainIPD ); Loading Loading @@ -441,7 +439,6 @@ void stereo_dft_enc_reset( hStereoDft->side_gain_counter = 0; hStereoDft->side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_INIT; set_zero( hStereoDft->gipd, STEREO_DFT_ENC_DFT_NB ); #ifdef STABILIZE_GIPD set_zero( hStereoDft->dot_prod_real_smooth, STEREO_DFT_BAND_MAX ); set_zero( hStereoDft->dot_prod_img_smooth, STEREO_DFT_BAND_MAX ); for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) Loading @@ -449,7 +446,6 @@ void stereo_dft_enc_reset( set_zero( hStereoDft->ipd_buf[i], STEREO_DFT_IPD_BUF_LEN ); } hStereoDft->prev_gipd = 0.f; #endif hStereoDft->gipd_index = 0; set_zero( hStereoDft->res_pred_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); set_s( hStereoDft->res_pred_index_EC, 0, STEREO_DFT_BAND_MAX ); Loading Loading @@ -643,11 +639,7 @@ void stereo_dft_enc_update( hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); /*Compute main parameters*/ #ifdef STABILIZE_GIPD hStereoDft->gipd_band_max = dft_band_ipd[1][3]; #else hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->hConfig->band_res][3]; #endif hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * hStereoDft->N / (float) ( hStereoDft->NFFT ) ); hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); Loading Loading @@ -1296,11 +1288,7 @@ void stereo_dft_enc_process( /* Initialization */ k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ #ifdef STABILIZE_GIPD hStereoDft->gipd_band_max = dft_band_ipd[1][3]; #else hStereoDft->gipd_band_max = dft_band_ipd[hStereoDft->band_res[k_offset]][3]; #endif hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); Loading Loading @@ -2611,14 +2599,10 @@ static void stereo_dft_enc_compute_prm( float sum_energy_L, sum_energy_R; float g, c; float abs_L_R; #ifdef STABILIZE_GIPD float abs_L_R2; #endif float gain_IPD; float sub_nrg_DMX[STEREO_DFT_BAND_MAX]; #ifdef STABILIZE_GIPD float sub_nrg_DMX2; #endif float sub_nrg_L[STEREO_DFT_BAND_MAX]; float sub_nrg_R[STEREO_DFT_BAND_MAX]; float diff_ipd; Loading @@ -2632,11 +2616,9 @@ static void stereo_dft_enc_compute_prm( float sum_past_dot_prod_abs, sum_past_dot_prod_abs2; float sum_past_nrg_dmx; int16_t pos; #ifdef STABILIZE_GIPD float pIpd[STEREO_DFT_BAND_MAX]; float ipd_smooth[STEREO_DFT_BAND_MAX]; float ipd_mean_change; #endif /*------------------------------------------------------------------* * Initialization Loading @@ -2657,9 +2639,7 @@ static void stereo_dft_enc_compute_prm( sum_energy_R = EPSILON; sum_dot_prod_real = EPSILON; sum_dot_prod_img = EPSILON; #ifdef STABILIZE_GIPD sub_nrg_DMX2 = 0.f; #endif #ifdef DEBUG_MODE_DFT sum_nrg_L = EPSILON; sum_nrg_R = EPSILON; Loading Loading @@ -2689,17 +2669,10 @@ static void stereo_dft_enc_compute_prm( pNrgL = bin_nrgL; pNrgR = bin_nrgR; #ifdef STABILIZE_GIPD sum_nrg_L2 = EPSILON; sum_nrg_R2 = EPSILON; dot_prod_real2 = EPSILON; dot_prod_img2 = EPSILON; #else sum_nrg_L2 = 0; sum_nrg_R2 = 0; dot_prod_real2 = 0; dot_prod_img2 = 0; #endif for ( i = hStereoDft->band_limits_dmx[b2]; i < hStereoDft->band_limits_dmx[b2 + 1]; i++ ) { Loading @@ -2710,7 +2683,6 @@ static void stereo_dft_enc_compute_prm( dot_prod_real2 += pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; dot_prod_img2 += pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; } #ifdef STABILIZE_GIPD abs_L_R2 = sqrtf( dot_prod_real2 * dot_prod_real2 + dot_prod_img2 * dot_prod_img2 ); sub_nrg_DMX2 = sum_nrg_L2 + sum_nrg_R2 + 2 * abs_L_R2; Loading @@ -2724,7 +2696,6 @@ static void stereo_dft_enc_compute_prm( gain_IPD += ( sum_nrg_L2 + sum_nrg_R2 + 2 * dot_prod_real2 ) / sub_nrg_DMX2 / hStereoDft->gipd_band_max; } #endif sum_past_nrgL2 = EPSILON; sum_past_nrgR2 = EPSILON; Loading Loading @@ -2878,31 +2849,17 @@ static void stereo_dft_enc_compute_prm( pPredGain[b] = 0.f; } #ifndef STABILIZE_GIPD if ( b < hStereoDft->gipd_band_max ) { gain_IPD += ( sum_nrg_L + sum_nrg_R + 2 * dot_prod_real ) / sub_nrg_DMX[b] / hStereoDft->gipd_band_max; } #endif #ifdef STABILIZE_GIPD if ( b2 == hStereoDft->gipd_band_max ) #else if ( b == hStereoDft->gipd_band_max - 1 ) #endif { #ifdef STABILIZE_GIPD ipd_mean_change = stereo_dft_calc_mean_ipd_change( pIpd, ipd_smooth, hStereoDft->gipd_band_max ); #endif hStereoDft->sum_dot_prod_real = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_real + hStereoDft->sfm * sum_dot_prod_real; hStereoDft->sum_dot_prod_img = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_img + hStereoDft->sfm * sum_dot_prod_img; pgIpd[0] = (float) atan2( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real ); #ifdef STABILIZE_GIPD stereo_dft_gipd_stabilization( &pgIpd[0], hStereoDft->prev_gipd, ipd_mean_change ); hStereoDft->prev_gipd = pgIpd[0]; #endif } } Loading Loading @@ -3241,7 +3198,6 @@ static void res_pred_gain_mode_decision( } #ifdef STABILIZE_GIPD /*------------------------------------------------------------------------- * stereo_dft_calc_mean_bipd() * Loading Loading @@ -3405,7 +3361,6 @@ static void stereo_dft_gipd_stabilization( } return; } #endif /*------------------------------------------------------------------------- Loading