Commit 2362d292 authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

Modified dynamic q_win calculation in IMDCT_ivas_fx()

parent dc08e179
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -2613,26 +2613,17 @@ static Word16 IMDCT_ivas_fx_calc_qwin(

    q_win = 6;
    move16();
    Word16 q_shift_syn_Overl_TDAC, q_shift_syn_Overl, q_shift_old_syn_Overl, q_shift_old_out;

    // q_win  == norm + Q_syn_Overl_TDAC
    q_shift_syn_Overl_TDAC = norm_arr( syn_Overl_TDAC, syn_Overl_TDAC_len );
    q_win = s_min( q_win, q_shift_syn_Overl_TDAC + Q_syn_Overl_TDAC );
    q_win = s_min( q_win, norm_arr( syn_Overl_TDAC, syn_Overl_TDAC_len ) + Q_syn_Overl_TDAC );

    // q_win = s_min( q_win, norm_arr( syn_Overl, oldLength / 2 ) + Q_syn_Overl );
    q_shift_syn_Overl = norm_arr( syn_Overl, old_syn_Overl_len );
    q_win = s_min( q_win, q_shift_syn_Overl + Q_syn_Overl );
    q_win = s_min( q_win, norm_arr( syn_Overl, old_syn_Overl_len ) + Q_syn_Overl );

    q_shift_old_syn_Overl = norm_arr( old_syn_Overl, old_syn_Overl_len );
    q_win = s_min( q_win, q_shift_old_syn_Overl + Q_old_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_shift_old_out = norm_arr( old_out_fx, t );
    q_win = s_min( q_win, q_shift_old_out + Q_old_out_fx );

    if ( q_shift_syn_Overl_TDAC == Q15 && q_shift_syn_Overl == Q15 &&
         q_shift_old_syn_Overl == Q15 && q_shift_old_out == Q15 )
        q_win = 0;
    q_win = s_min( q_win, norm_arr( old_out_fx, t ) + Q_old_out_fx );

#if 0
    set16_zero_fx(syn_Overl_TDAC + oldLength / 2, (t-oldLength)/2 );
@@ -3471,7 +3462,15 @@ void IMDCT_ivas_fx(

                q_diff = sub( q_old_out, q_win );
#endif

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                if ( allow_qwin_change )
                {                    
                    // sub( q_tmp_fx_32, q_win ) == -norm_arr( xn_buf_fx, L_frame )
                    // q_tmp_fx_32 - q_win == -norm_arr( xn_buf_fx, L_frame )
                    // q_win == q_tmp_fx_32 + norm_arr( xn_buf_fx, L_frame )
                    q_win = s_min( q_win, add( q_tmp_fx_32, norm_arr( xn_buf_fx, L_frame ) ) );
                }
#endif
                Word16 diff = sub( q_tmp_fx_32, q_win );
                FOR( Word16 ind = 0; ind < L_frame; ind++ )
                {