Commit b248081a authored by lefort's avatar lefort
Browse files

Fading optimisation in terms of complexity.

parent 413767a3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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 ########################### */

+67 −2
Original line number Diff line number Diff line
@@ -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
@@ -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];
@@ -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 )
@@ -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];
@@ -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;
@@ -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;