Loading lib_enc/ivas_stat_enc.h +6 −3 Original line number Diff line number Diff line Loading @@ -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 Loading lib_enc/ivas_stereo_dmx_evs.c +20 −7 Original line number Diff line number Diff line Loading @@ -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]; Loading Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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) { Loading @@ -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]; } } } Loading Loading @@ -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; Loading Loading
lib_enc/ivas_stat_enc.h +6 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
lib_enc/ivas_stereo_dmx_evs.c +20 −7 Original line number Diff line number Diff line Loading @@ -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]; Loading Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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) { Loading @@ -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]; } } } Loading Loading @@ -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; Loading