Commit f06c3dbf authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

Modified the length calculation of the old_syn_Overl buffer in q_win computation.

parent 6ae2d524
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -2575,6 +2575,7 @@ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_T
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN

static Word16 IMDCT_ivas_fx_calc_qwin(
    Decoder_State *st,          
    Word16 *syn_Overl_TDAC,
    Word16 Q_syn_Overl_TDAC,
    Word16 *syn_Overl,
@@ -2588,7 +2589,7 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
    const Word16 L_frameTCX,
    const Word16 FB_flag )
{
    Word16 oldLength, t;
    Word16 oldLength, t, old_syn_Overl_len;    

    oldLength = s_min( L_FRAME32k, L_frame );
    t = L_FRAME32k;
@@ -2600,14 +2601,20 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
        move16();
    }

    old_syn_Overl_len = st->hTcxCfg->tcx_mdct_window_length;
    IF( ( st->prev_bfi && EQ_16( st->last_core_bfi, ACELP_CORE ) ) || EQ_16( st->last_core, ACELP_CORE ) )
    {
        old_syn_Overl_len = shr( st->L_frame, 1 );
    }
    
    q_win = 6;
    move16();

    // q_win  == norm + Q_syn_Overl_TDAC
    q_win = s_min( q_win, norm_arr( syn_Overl_TDAC, oldLength / 2 ) + Q_syn_Overl_TDAC );
    q_win = s_min( q_win, norm_arr( syn_Overl_TDAC, shr(oldLength, 1) ) + Q_syn_Overl_TDAC );
    // q_win = s_min( q_win, norm_arr( syn_Overl, oldLength / 2 ) + Q_syn_Overl );
    q_win = s_min( q_win, norm_arr( syn_Overl, t / 2 ) + Q_syn_Overl );
    q_win = s_min( q_win, norm_arr( old_syn_Overl, oldLength / 2 ) + Q_old_syn_Overl );
    q_win = s_min( q_win, norm_arr( syn_Overl, shr(t, 1) ) + Q_syn_Overl );
    q_win = s_min( q_win, norm_arr( old_syn_Overl, old_syn_Overl_len ) + Q_old_syn_Overl );
    // q_win = s_min( q_win, norm_arr( old_out_fx, oldLength ) + Q_old_out_fx );
    q_win = s_min( q_win, norm_arr( old_out_fx, t ) + Q_old_out_fx );

@@ -3001,7 +3008,7 @@ void IMDCT_ivas_fx(
    IF( allow_qwin_change )
    {
        // q_win = IMDCT_ivas_fx_adjust_qwin( *Q_syn_Overl_TDAC_fx, *Q_old_syn_overl_fx, hTcxDec->Q_old_syn_Overl, *q_old_out_fx, q_win );
        q_win = IMDCT_ivas_fx_calc_qwin( syn_Overl_TDAC_fx, *Q_syn_Overl_TDAC_fx, old_syn_overl_fx, *Q_old_syn_overl_fx,
        q_win = IMDCT_ivas_fx_calc_qwin( st, syn_Overl_TDAC_fx, *Q_syn_Overl_TDAC_fx, old_syn_overl_fx, *Q_old_syn_overl_fx,
                                         hTcxDec->old_syn_Overl, hTcxDec->Q_old_syn_Overl, old_out_fx, *q_old_out_fx, q_win, L_frame, L_frameTCX, FB_flag );
    }
#else