Commit 49308ae4 authored by Manuel Jander's avatar Manuel Jander
Browse files

Increase range for norm_arr() analysis for syn_Overl and old_out_fx. Skip...

Increase range for norm_arr() analysis for syn_Overl and old_out_fx. Skip scaling xn_buf_fx in cases where it is not applicable.
parent e9f84b0b
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -2588,13 +2588,15 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
    const Word16 L_frameTCX,
    const Word16 FB_flag )
{
    Word16 oldLength;
    Word16 oldLength, t;

    oldLength = s_min( L_FRAME32k, L_frame );
    t = L_FRAME32k;
    move16();
    if ( FB_flag )
    {
        oldLength = s_min( L_FRAME48k, L_frameTCX );
        t = L_FRAME48k;
        move16();
    }

@@ -2603,10 +2605,18 @@ static Word16 IMDCT_ivas_fx_calc_qwin(

    // 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, oldLength / 2 ) + Q_syn_Overl );
    //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( old_out_fx, oldLength ) + Q_old_out_fx );
    //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 );

#if 0
    set16_zero_fx(syn_Overl_TDAC + oldLength / 2, (t-oldLength)/2 );
    //set16_zero_fx(syn_Overl + oldLength / 2, (t-oldLength)/2 );
    set16_zero_fx(old_syn_Overl + oldLength / 2, (t-oldLength)/2 );
    //set16_zero_fx(old_out_fx + oldLength, (t-oldLength) );
#endif
    q_win = s_max( -3, sub( q_win, 2 ) );

    return q_win;
@@ -2637,9 +2647,11 @@ static void IMDCT_ivas_fx_rescale(
    }

#if 1
    IF ( xn_buf_fx != NULL ) {
        Scale_sig( xn_buf_fx, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX, sub( q_win, *q_xn_buf_fx ) );
        *q_xn_buf_fx = q_win;
        move16();
    }
    Scale_sig( syn_Overl_TDAC, oldLength / 2, sub( q_win, *Q_syn_Overl_TDAC ) ); // st->hTcxDec->Q_syn_Overl_TDAC -> q_win
    *Q_syn_Overl_TDAC = q_win;
    move16();
@@ -3346,7 +3358,7 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                // q_win < norm + q_tmp_fx_32 - 16
                q_win = s_min( q_win, L_norm_arr( tmp_fx_32, L_frame ) + q_tmp_fx_32 - 16 );
                IMDCT_ivas_fx_rescale( xn_buf_fx, &q_xn_buf_fx, 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, FB_flag );
                IMDCT_ivas_fx_rescale( NULL, NULL, 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, FB_flag );
#endif

                Word16 diff = sub( q_tmp_fx_32, q_win );
@@ -3410,7 +3422,7 @@ void IMDCT_ivas_fx(
                    // q_win == - 16 + L_norm_arr( xn_buf_fx_32, L_frame ) + q_xn_buf_fx_32
                    q_win = s_min( q_win, add( sub( q_xn_buf_fx_32, 16 ), L_norm_arr( xn_buf_fx_32, L_frame ) ) - 2 );
                }
                IMDCT_ivas_fx_rescale( xn_buf_fx, &q_xn_buf_fx, 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, FB_flag );
                IMDCT_ivas_fx_rescale( NULL, NULL, 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, FB_flag );
#endif

                Word16 q_diff = sub( q_xn_buf_fx_32, q_win );