Loading lib_com/options.h +4 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,9 @@ #define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ #define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ #define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA #define NONBE_FIX_947_STEREO_DMX_FADOPT /* Orange: Fading optimisation */ #endif /* ##################### End NON-BE switches ########################### */ Loading lib_enc/ivas_stereo_dmx_evs.c +67 −2 Original line number Diff line number Diff line Loading @@ -120,10 +120,10 @@ #define STEREO_DMX_EVS_SGC_LEGY_THRES_48 5.E8 #define STEREO_DMX_EVS_SGC_GMAX 1.4142f #define STEREO_DMX_EVS_SGC_GMIN 0.7071f #endif #define STEREO_DMX_EVS_IPD_ILD_THRES 3.16f // 5dB #define STEREO_DMX_EVS_IPD_SF_THRES 0.05f #endif /*-----------------------------------------------------------------------* * Local function prototypes Loading Loading @@ -1577,7 +1577,11 @@ void stereo_dmx_evs_enc( #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA float dmx_weight, corr; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt, sbfad_len; #else int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt; #endif float data_f[CPE_CHANNELS][L_FRAME48k]; float mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; float dmx_poc_data[L_FRAME48k], dmx_pha_data[L_FRAME48k], subframe_energy[STEREO_DMX_EVS_NB_SBFRM]; Loading Loading @@ -1823,7 +1827,11 @@ void stereo_dmx_evs_enc( else { hPHA->n_fad_g = input_frame - hPHA->n_fad_g - 1; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT hPHA->n_fad_cnt = 0; #else hPHA->n_fad_cnt = is_transient ? 0 : n_fad_r - hPHA->n_fad_cnt; #endif } } else if ( is_transient ) Loading @@ -1840,6 +1848,59 @@ void stereo_dmx_evs_enc( n_fad_cnt = hPHA->n_fad_cnt; m_fad_g = input_frame - n_fad_g - 1; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT if ( n_fad_r == 1 ) { n_fad_cnt = 0; for ( n = 0; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g++]; p_dmx_data[n] += fad_g[m_fad_g--] * p_dmx_data_fo[n]; } } else { n = 0; sbfad_len = 0; if ( n_fad_cnt != 0 ) { sbfad_len = min( fad_len, n_fad_r - n_fad_cnt ); for ( ; n < sbfad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; } n_fad_cnt = 0; n_fad_g++; m_fad_g--; } sbfad_len = (int16_t) ( ( fad_len - sbfad_len ) / n_fad_r ); for ( k = 0; k < sbfad_len; k++ ) { for ( m = 0; m < n_fad_r; m++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; n++; } n_fad_g++; m_fad_g--; } for ( ; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; if ( ++n_fad_cnt >= n_fad_r ) { n_fad_cnt = 0; n_fad_g++; m_fad_g--; } } } #else for ( n = 0; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; Loading @@ -1852,6 +1913,7 @@ void stereo_dmx_evs_enc( m_fad_g--; } } #endif hPHA->n_fad_g = n_fad_g; hPHA->n_fad_cnt = n_fad_cnt; Loading Loading @@ -2407,8 +2469,11 @@ ivas_error stereo_dmx_evs_init_encoder( #ifndef NONBE_FIX_947_STEREO_DMX_EVS_PHA hStereoDmxEVS->hPHA->fad_len_prc = (int16_t) ( STEREO_DMX_EVS_FADE_LEN_PRC * (float) input_Fs / 1000.0f ); #endif fad_len = hStereoDmxEVS->hPHA->fad_len_prc; #else fad_len = input_frame; #endif fad_g = hStereoDmxEVS->hPHA->fad_g_prc; fad_r = 1.0f / (float) ( fad_len + 1 ); fad_len2 = fad_len / 2; Loading Loading
lib_com/options.h +4 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,9 @@ #define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ #define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ #define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA #define NONBE_FIX_947_STEREO_DMX_FADOPT /* Orange: Fading optimisation */ #endif /* ##################### End NON-BE switches ########################### */ Loading
lib_enc/ivas_stereo_dmx_evs.c +67 −2 Original line number Diff line number Diff line Loading @@ -120,10 +120,10 @@ #define STEREO_DMX_EVS_SGC_LEGY_THRES_48 5.E8 #define STEREO_DMX_EVS_SGC_GMAX 1.4142f #define STEREO_DMX_EVS_SGC_GMIN 0.7071f #endif #define STEREO_DMX_EVS_IPD_ILD_THRES 3.16f // 5dB #define STEREO_DMX_EVS_IPD_SF_THRES 0.05f #endif /*-----------------------------------------------------------------------* * Local function prototypes Loading Loading @@ -1577,7 +1577,11 @@ void stereo_dmx_evs_enc( #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA float dmx_weight, corr; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt, sbfad_len; #else int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt; #endif float data_f[CPE_CHANNELS][L_FRAME48k]; float mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; float dmx_poc_data[L_FRAME48k], dmx_pha_data[L_FRAME48k], subframe_energy[STEREO_DMX_EVS_NB_SBFRM]; Loading Loading @@ -1823,7 +1827,11 @@ void stereo_dmx_evs_enc( else { hPHA->n_fad_g = input_frame - hPHA->n_fad_g - 1; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT hPHA->n_fad_cnt = 0; #else hPHA->n_fad_cnt = is_transient ? 0 : n_fad_r - hPHA->n_fad_cnt; #endif } } else if ( is_transient ) Loading @@ -1840,6 +1848,59 @@ void stereo_dmx_evs_enc( n_fad_cnt = hPHA->n_fad_cnt; m_fad_g = input_frame - n_fad_g - 1; #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT if ( n_fad_r == 1 ) { n_fad_cnt = 0; for ( n = 0; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g++]; p_dmx_data[n] += fad_g[m_fad_g--] * p_dmx_data_fo[n]; } } else { n = 0; sbfad_len = 0; if ( n_fad_cnt != 0 ) { sbfad_len = min( fad_len, n_fad_r - n_fad_cnt ); for ( ; n < sbfad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; } n_fad_cnt = 0; n_fad_g++; m_fad_g--; } sbfad_len = (int16_t) ( ( fad_len - sbfad_len ) / n_fad_r ); for ( k = 0; k < sbfad_len; k++ ) { for ( m = 0; m < n_fad_r; m++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; n++; } n_fad_g++; m_fad_g--; } for ( ; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; if ( ++n_fad_cnt >= n_fad_r ) { n_fad_cnt = 0; n_fad_g++; m_fad_g--; } } } #else for ( n = 0; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; Loading @@ -1852,6 +1913,7 @@ void stereo_dmx_evs_enc( m_fad_g--; } } #endif hPHA->n_fad_g = n_fad_g; hPHA->n_fad_cnt = n_fad_cnt; Loading Loading @@ -2407,8 +2469,11 @@ ivas_error stereo_dmx_evs_init_encoder( #ifndef NONBE_FIX_947_STEREO_DMX_EVS_PHA hStereoDmxEVS->hPHA->fad_len_prc = (int16_t) ( STEREO_DMX_EVS_FADE_LEN_PRC * (float) input_Fs / 1000.0f ); #endif fad_len = hStereoDmxEVS->hPHA->fad_len_prc; #else fad_len = input_frame; #endif fad_g = hStereoDmxEVS->hPHA->fad_g_prc; fad_r = 1.0f / (float) ( fad_len + 1 ); fad_len2 = fad_len / 2; Loading