Commit 2d858703 authored by gaoyuy's avatar gaoyuy
Browse files

Replace ivas_stereo_dft_enc.c

parent 5fc237b2
Loading
Loading
Loading
Loading
Loading
+40 −3
Original line number Diff line number Diff line
@@ -1657,8 +1657,11 @@ void stereo_dft_enc_process(
    if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC && hStereoDft->hConfig->ada_wb_res_cod_mode )
    {
        stereo_dft_enc_get_res_cod_mode_flag( hStereoDft, res_nrg_all_curr, dmx_nrg_all_curr, &res_dmx_ratio, &frame_nrg_ratio );

#ifdef ADAP_OPT
        if (hStereoDft->res_cod_sw_flag)
#else
        if ( hStereoDft->res_cod_mode[k_offset] == STEREO_DFT_RES_COD_OFF || hStereoDft->res_cod_sw_flag )
#endif
        {
            int16_t res_cod_band_max;

@@ -1731,7 +1734,9 @@ static void stereo_dft_enc_get_res_cod_mode_flag(
    float dmx_res_all, g;
    int16_t fast_update_flag;
    int16_t prev_res_cod_mode_flag, res_cod_mode_flag;

#ifdef ADAP_OPT
    static int first_frm_flag = 1;
#endif
    k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/

    /*Calculate energy ratio between residual signal and downmix signal */
@@ -1759,6 +1764,16 @@ static void stereo_dft_enc_get_res_cod_mode_flag(
    }

    /* Calculate long term energy ratio between residual signal and downmix signal */
#ifdef ADAP_OPT
    if (fast_update_flag)
    {
        hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.2f + hStereoDft->res_dmx_ratio_lt * 0.8f;
    }
    else
    {
        hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.05f + hStereoDft->res_dmx_ratio_lt * 0.95f;
    }
#else
    if ( fast_update_flag )
    {
        hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.5f + hStereoDft->res_dmx_ratio_lt * 0.5f;
@@ -1767,9 +1782,13 @@ static void stereo_dft_enc_get_res_cod_mode_flag(
    {
        hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.1f + hStereoDft->res_dmx_ratio_lt * 0.9f;
    }

#endif
    /*Get the  residual signal coding initial flag */
#ifdef ADAP_OPT
    if (hStereoDft->res_dmx_ratio_lt > 0.01f)
#else
    if ( hStereoDft->res_dmx_ratio_lt > 0.075f )
#endif
    {
        res_cod_mode_flag = 1;
    }
@@ -1779,12 +1798,26 @@ static void stereo_dft_enc_get_res_cod_mode_flag(
    }

    /* Get the residual signal coding flag */
#ifdef ADAP_OPT
    if (first_frm_flag) {
        prev_res_cod_mode_flag = res_cod_mode_flag;
        first_frm_flag = 0;
    }
    else {
        prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1];
    }
#else
    prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1];
#endif
    if ( res_cod_mode_flag != prev_res_cod_mode_flag )
    {
        if ( prev_res_cod_mode_flag == 1 )
        {
#ifdef ADAP_OPT
            if (hStereoDft->hangover_cnt0 < 5 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0)
#else
            if ( hStereoDft->hangover_cnt0 < 3 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 )
#endif
            {
                res_cod_mode_flag = prev_res_cod_mode_flag;
                hStereoDft->hangover_cnt0++;
@@ -1804,7 +1837,11 @@ static void stereo_dft_enc_get_res_cod_mode_flag(
            }
            else
            {
#ifdef ADAP_OPT
                if (hStereoDft->hangover_cnt1 < 5)
#else
                if ( hStereoDft->hangover_cnt1 < 3 )
#endif
                {
                    res_cod_mode_flag = prev_res_cod_mode_flag;
                    hStereoDft->hangover_cnt1++;