Commit e6a26d0b authored by Manuel Jander's avatar Manuel Jander
Browse files

Add 2 bits headroom to dynamic q_win calculation as the default static value of q_win did.

parent a4db18ff
Loading
Loading
Loading
Loading
+18 −11
Original line number Diff line number Diff line
@@ -2611,7 +2611,7 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
        oldLength = L_FRAME48k;
        move16();
    }
    q_win = 2;
    q_win = 4;
    move16();

    // q_win  == norm + Q_syn_Overl_TDAC
@@ -2620,12 +2620,13 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
    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 = sub( q_win, 1 );
    q_win = s_max( -3, sub( q_win, 2 ) );

    return q_win;
}

static void IMDCT_ivas_fx_rescale(
    Decoder_State *st,
    Word16 *syn_Overl_TDAC,
    Word16 *Q_syn_Overl_TDAC,
    Word16 *syn_Overl,
@@ -2666,6 +2667,8 @@ static void IMDCT_ivas_fx_rescale(
    *Q_old_out_fx = q_win;
    move16();
#endif
    Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) ); // st->Q_syn -> q_win

    // Scale_sig( synth_buf_fx, add( add( old_synth_len, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) );     // q_syn -> q_win
}

@@ -3084,8 +3087,9 @@ void IMDCT_ivas_fx(
            Word16 L_spec_TCX5_tmp = 0;
            move16();
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            Word16 q_win_prev;
#if 0
            Word16 q_win_prev;
#else
            IF ( allow_qwin_change ) {
                q_win = -2;
                move16();
@@ -3114,6 +3118,7 @@ void IMDCT_ivas_fx(
                    TCX_MDCT_Inverse_qwin_fx( x_fx + L_spec_TCX5_tmp, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, st->element_mode, &q_win, allow_qwin_change );
                }

#if 0
                if ( w > 0 )
                {
                    if ( q_win_prev != q_win )
@@ -3122,13 +3127,15 @@ void IMDCT_ivas_fx(
                        // printf( "\nWarning: q_win changed in TCX5. Frame %d, q_win %d %d\n", frame, q_win_prev, q_win );
                        printf( "\nWarning: q_win changed in TCX5. Frame X, q_win %d %d\n", q_win_prev, q_win );
                    }
                    // Rescale both subframes some how ?
                }
                else
                {
                    q_win_prev = q_win;
                }
#endif

                IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#else
                IF( EQ_16( kernel_type, MDST_IV ) || s_and( kernel_type, w ) )
                {
@@ -3230,7 +3237,7 @@ void IMDCT_ivas_fx(

            assert( q_win_prev == q_win );

            IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#else
            IF( s_and( kernel_type, 1 ) )
            {
@@ -3289,7 +3296,7 @@ void IMDCT_ivas_fx(
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, st->element_mode, &q_win, allow_qwin_change );
            }

            IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#else
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
@@ -3351,7 +3358,7 @@ void IMDCT_ivas_fx(

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                // L_norm_arr(xn_buf_fx_32, )
                IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#endif

                Word16 diff = sub( q_tmp_fx_32, q_win );
@@ -3418,7 +3425,7 @@ void IMDCT_ivas_fx(
                    q_win = -2;
#endif
                }
                IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#endif

                Word16 q_diff = sub( q_xn_buf_fx_32, q_win );
@@ -3484,7 +3491,7 @@ void IMDCT_ivas_fx(
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, st->element_mode, &q_win, allow_qwin_change );
            }

            IMDCT_ivas_fx_rescale( 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( 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, FB_flag );
#else
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
@@ -4187,7 +4194,7 @@ void decoder_tcx_ivas_fx(
        move16();
    }

#if 1
#if 0
    /* Scaling down buffers for decoder_tcx_imdct_fx*/
    Scale_sig( st->hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2, sub( st->Q_syn, st->hTcxDec->Q_syn_Overl_TDACFB ) ); // Scaling to Q_syn
    st->hTcxDec->Q_syn_Overl_TDACFB = st->Q_syn;
@@ -4197,7 +4204,7 @@ void decoder_tcx_ivas_fx(
    st->hTcxDec->Q_old_syn_Overl = st->Q_syn;
#endif

#if 1
#if 0
    Scale_sig( synth_fx, L_frame_glob, st->Q_syn );      // Scaling to Q_syn
    Scale_sig( synthFB_fx, L_frameTCX_glob, st->Q_syn ); // Scaling to Q_syn
#endif