Commit b3f7f4c5 authored by multrus's avatar multrus
Browse files

[cleanup] accept STABILIZE_GIPD

parent 1cc3e2cb
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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 */
+0 −1
Original line number Diff line number Diff line
@@ -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 */
+0 −2
Original line number Diff line number Diff line
@@ -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;
+0 −45
Original line number Diff line number Diff line
@@ -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 );
@@ -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++ )
@@ -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 );
@@ -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 );
@@ -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 );
@@ -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;
@@ -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
@@ -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;
@@ -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++ )
            {
@@ -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;

@@ -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;
@@ -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
        }
    }

@@ -3241,7 +3198,6 @@ static void res_pred_gain_mode_decision(
}


#ifdef STABILIZE_GIPD
/*-------------------------------------------------------------------------
 * stereo_dft_calc_mean_bipd()
 *
@@ -3405,7 +3361,6 @@ static void stereo_dft_gipd_stabilization(
    }
    return;
}
#endif


/*-------------------------------------------------------------------------