Commit cac77554 authored by lefort's avatar lefort
Browse files

Output's level equalisation added.

parent 4c4cd11b
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -1010,6 +1010,9 @@ typedef struct stereo_dmx_evs_correlation_filter_structure
    float fad_g_prc[L_FRAME48k];
    int16_t fad_len_prc;

    float dmx_ener;
    float dmx_old_gain;

} STEREO_DMX_EVS_PHA_DATA, *STEREO_DMX_EVS_PHA_HANDLE;

#endif
+20 −7
Original line number Diff line number Diff line
@@ -1042,7 +1042,7 @@ void stereo_dmx_evs_enc(
    int16_t k, m, pha_len, fad_len;
    float mem_out_curr[CPE_CHANNELS][L_FRAME48k], mem_out_last[L_FRAME48k];
    float *p_data_mem, *p_prev_taps, *p_curr_taps, *fad_g, *p_mem_out_curr, *p_data_f;
    float dmx_itd_data[L_FRAME48k], dmx_ipd_data[L_FRAME48k], *p_dmx_data;
    float dmx_poc_data[L_FRAME48k], dmx_pha_data[L_FRAME48k], *p_dmx_data, dmx_gain;
    STEREO_DMX_EVS_PRC curr_prc;
#else
    float dmx_data[L_FRAME48k];
@@ -1152,16 +1152,26 @@ void stereo_dmx_evs_enc(
        dmx_weight = 0.5f;
    }

    create_M_signal( data_f[0], data_f[1], dmx_itd_data, dmx_weight, input_frame, hStereoDmxEVS->s_wnd,
    create_M_signal( data_f[0], data_f[1], dmx_poc_data, dmx_weight, input_frame, hStereoDmxEVS->s_wnd,
                     hStereoDmxEVS->dmx_weight, hStereoDmxEVS->pre_dmx_energy, hStereoDmxEVS->aux_dmx_energy );

    // pha

    for ( n=0; n < input_frame; n++ )
    {
        dmx_ipd_data[n] = (mem_out_curr[0][n] + mem_out_curr[1][n])*0.5f;
        dmx_pha_data[n] = (mem_out_curr[0][n] + mem_out_curr[1][n])*0.5f;
    }

    calc_energy( dmx_pha_data, dmx_pha_data, &(hStereoDmxEVS->hPHA->dmx_ener), input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING );
    dmx_gain = sqrtf((hStereoDmxEVS->aux_dmx_energy[0] + hStereoDmxEVS->aux_dmx_energy[1]) / (hStereoDmxEVS->hPHA->dmx_ener));
    /*if (hStereoDmxEVS->aux_dmx_energy[0] > hStereoDmxEVS->aux_dmx_energy[1]) {
        dmx_gain = sqrtf( ( hStereoDmxEVS->aux_dmx_energy[0] + EPSILON ) / ( hStereoDmxEVS->hPHA->dmx_ener + EPSILON ) );
    } else {
        dmx_gain = sqrtf( ( hStereoDmxEVS->aux_dmx_energy[1] + EPSILON ) / ( hStereoDmxEVS->hPHA->dmx_ener + EPSILON ) );
    }*/
    adapt_gain(dmx_pha_data, dmx_pha_data, dmx_gain, hStereoDmxEVS->hPHA->dmx_old_gain, input_frame, hStereoDmxEVS->s_wnd);
    hStereoDmxEVS->hPHA->dmx_old_gain = dmx_gain;

    // prc switch

    curr_prc = hStereoDmxEVS->hPHA->curr_prc;
@@ -1208,7 +1218,7 @@ void stereo_dmx_evs_enc(
 
    if ( hStereoDmxEVS->hPHA->curr_prc == STEREO_DMX_EVS_PRC_POC )
    {
        p_dmx_data = dmx_itd_data;
        p_dmx_data = dmx_poc_data;

        if (curr_prc != hStereoDmxEVS->hPHA->curr_prc)
        {
@@ -1218,13 +1228,13 @@ void stereo_dmx_evs_enc(
            for (n = 0; n < fad_len; n++)
            {
                p_dmx_data[n] *= fad_g[n];
                p_dmx_data[n] += (1.0f-fad_g[n]) * dmx_ipd_data[n];
                p_dmx_data[n] += (1.0f-fad_g[n]) * dmx_pha_data[n];
            }
        }
    }
    else
    {
        p_dmx_data = dmx_ipd_data;
        p_dmx_data = dmx_pha_data;

        if (curr_prc != hStereoDmxEVS->hPHA->curr_prc)
        {
@@ -1234,7 +1244,7 @@ void stereo_dmx_evs_enc(
            for (n = 0; n < fad_len; n++)
            {
                p_dmx_data[n] *= fad_g[n];
                p_dmx_data[n] += (1.0f-fad_g[n]) * dmx_itd_data[n];
                p_dmx_data[n] += (1.0f-fad_g[n]) * dmx_poc_data[n];
            }
        }
    }
@@ -1472,6 +1482,9 @@ ivas_error stereo_dmx_evs_init_encoder(
        fad_g[n] = (float) n / (float)fad_len;
    }

    hStereoDmxEVS->hPHA->dmx_ener = 0;
    hStereoDmxEVS->hPHA->dmx_old_gain = 0;

#endif 

    *hStereoDmxEVS_out = hStereoDmxEVS;