Commit 36bbe074 authored by Manuel Jander's avatar Manuel Jander
Browse files

Separate q_win into q_win and q_winFB for low band / high band, because these...

Separate q_win into q_win and q_winFB for low band / high band, because these can be different. Correct q_win calculation for TCX20, which fixes assert fail.
parent 0b43f51a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1584,6 +1584,7 @@ void decoder_tcx_imdct_fx(
    Word16 xn_buf_fx[],
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 *q_win,
    Word16 *q_winFB,
#else
    Word16 q_win,
#endif
+27 −60
Original line number Diff line number Diff line
@@ -2626,7 +2626,6 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
}

static void IMDCT_ivas_fx_rescale(
    Decoder_State *st,
    Word16 *syn_Overl_TDAC,
    Word16 *Q_syn_Overl_TDAC,
    Word16 *syn_Overl,
@@ -2637,10 +2636,6 @@ static void IMDCT_ivas_fx_rescale(
    Word16 *Q_old_out_fx,
    Word16 q_win,
    const Word16 FB_flag
#if 0
    Word16 *synth_buf_fx,
    Word16 q_syn
#endif
)
{
    Word16 oldLength;
@@ -2660,16 +2655,15 @@ static void IMDCT_ivas_fx_rescale(
    Scale_sig( syn_Overl, oldLength / 2, sub( q_win, *Q_syn_Overl ) ); // st->hTcxDec->Q_syn_Overl -> q_win
    *Q_syn_Overl = q_win;
    move16();
    if ( FB_flag == 0 ) {
        Scale_sig( old_syn_Overl, oldLength / 2, sub( q_win, *Q_old_syn_Overl ) ); // Q(-1 - st->Q_syn) -> q_win
        *Q_old_syn_Overl = q_win;
        move16();
    }
    Scale_sig( old_out_fx, oldLength, sub( q_win, *Q_old_out_fx ) ); // Q(st->hHQ_core->Q_old_wtda) -> q_win
    *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
}

static Word16 TCX_MDCT_Inverse_GetScaleFactor(
@@ -3087,9 +3081,6 @@ void IMDCT_ivas_fx(
            Word16 L_spec_TCX5_tmp = 0;
            move16();
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
#if 0
            Word16 q_win_prev;
#else
            IF( allow_qwin_change )
            {
                q_win = -2;
@@ -3097,7 +3088,6 @@ void IMDCT_ivas_fx(
                allow_qwin_change = 0;
                move16();
            }
#endif
#endif

            FOR( w = 0; w < 2; w++ )
@@ -3119,24 +3109,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 )
                    {
                        // extern int frame;
                        // 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( 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 );
                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 );
#else
                IF( EQ_16( kernel_type, MDST_IV ) || s_and( kernel_type, w ) )
                {
@@ -3238,7 +3211,7 @@ void IMDCT_ivas_fx(

            assert( q_win_prev == q_win );

            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 );
            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 );
#else
            IF( s_and( kernel_type, 1 ) )
            {
@@ -3297,7 +3270,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( 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 );
            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 );
#else
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
@@ -3358,8 +3331,9 @@ void IMDCT_ivas_fx(
                move16();

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                // L_norm_arr(xn_buf_fx_32, )
                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 );
                // 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( 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 );
@@ -3370,7 +3344,7 @@ void IMDCT_ivas_fx(
                {
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_DYNAMIC_QOLD
                    assert( L_shr( L_shl( old_out_fx[ind], q_old_out_diff ), q_old_out_diff ) == old_out_fx[ind] );
                    old_out_fx_32[ind] = L_shl( old_out_fx[ind], q_old_out_diff );
                    old_out_fx_32[ind] = L_shl( L_deposit_l( old_out_fx[ind] ), q_old_out_diff );
#else
                    old_out_fx_32[ind] = L_shl( old_out_fx[ind], diff );
#endif
@@ -3382,9 +3356,10 @@ void IMDCT_ivas_fx(
                FOR( Word16 ind = 0; ind < L_frame; ind++ )
                {
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_DYNAMIC_QOLD
                    old_out_fx[ind] = extract_l( L_shr( old_out_fx_32[ind], q_old_out_diff ) );
                    assert( extract_h( L_shr( old_out_fx_32[ind], q_old_out_diff ) ) == 0 || extract_h( L_shr( old_out_fx_32[ind], q_old_out_diff ) ) == -1 );
                    old_out_fx[ind] = extract_l( L_shr( old_out_fx_32[ind], q_old_out_diff ) );
#else
                    assert( extract_h( L_shr( old_out_fx_32[ind], diff ) ) == 0 || extract_h( L_shr( old_out_fx_32[ind], diff ) ) == -1 );
                    old_out_fx[ind] = extract_l( L_shr( old_out_fx_32[ind], diff ) );
#endif
                    xn_buf_fx[ind] = extract_l( L_shr( xn_buf_fx_32[ind], diff ) );
@@ -3426,7 +3401,7 @@ void IMDCT_ivas_fx(
                    q_win = -2;
#endif
                }
                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 );
                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 );
#endif

                Word16 q_diff = sub( q_xn_buf_fx_32, q_win );
@@ -3492,7 +3467,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( 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 );
            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 );
#else
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
@@ -4195,30 +4170,21 @@ void decoder_tcx_ivas_fx(
        move16();
    }

#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;
    Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( st->Q_syn, st->hTcxDec->Q_syn_Overl_TDAC ) ); // Scaling to Q_syn
    st->hTcxDec->Q_syn_Overl_TDAC = st->Q_syn;
    Scale_sig( st->hTcxDec->old_syn_Overl, 320, st->Q_syn - st->hTcxDec->Q_old_syn_Overl ); // Scaling to Q_syn
    st->hTcxDec->Q_old_syn_Overl = st->Q_syn;
#endif

#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

    Copy_Scale_sig_16_32_no_sat( st->old_Aq_12_8_fx, st->old_Aq_12_8_fx_32, M + 1, ( sub( 28, ( sub( 15, norm_s( sub( st->old_Aq_12_8_fx[0], 1 ) ) ) ) ) ) );

    Word16 q_win;
    Word16 q_win, q_winFB;
    q_win = st->Q_syn;
    move16();
    q_winFB = st->Q_syn;
    move16();

    assert( q_win == 0 );

    decoder_tcx_imdct_fx( st, L_frame_glob, L_frameTCX_glob, L_spec, tcx_offset, tcx_offsetFB, L_frame, L_frameTCX, left_rect, &x_fx[0], q_x, xn_buf_fx, &q_win, MDCT_IV,
    decoder_tcx_imdct_fx( st, L_frame_glob, L_frameTCX_glob, L_spec, tcx_offset, tcx_offsetFB, L_frame, L_frameTCX, left_rect, &x_fx[0], q_x, xn_buf_fx, &q_win, &q_winFB, MDCT_IV,
                          fUseTns, &synth_fx[0], &synthFB_fx[0], bfi, frame_cnt, sba_dirac_stereo_flag );

    assert( q_win == 0 );
    assert( q_win == q_winFB );

    /* Scaling up again */
    Scale_sig( synth_fx, L_frame_glob, sub( st->Q_syn, q_win ) );
@@ -5667,6 +5633,7 @@ void decoder_tcx_imdct_fx(
    Word16 xn_buf_fx[], // Q(-2)
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 *q_win,
    Word16 *q_winFB,
#else
    Word16 q_win,
#endif
@@ -5915,7 +5882,7 @@ void decoder_tcx_imdct_fx(
#endif
                       hTcxCfg->tcx_mdct_window_halfFB, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index,
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_DYNAMIC_QOLD
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, &st->hHQ_core->Q_old_wtda, 1, st, ratio, acelp_zir_fx, q_win );
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, &st->hHQ_core->Q_old_wtda, 1, st, ratio, acelp_zir_fx, q_winFB );
#else
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, 1, st, ratio, acelp_zir_fx, q_win );
#endif
@@ -5928,7 +5895,7 @@ void decoder_tcx_imdct_fx(
        IMDCT_ivas_fx( x_fx, q_x, hTcxDec->syn_OverlFB, hTcxDec->syn_Overl_TDACFB, xn_bufFB_fx_16, hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, hTcxCfg->tcx_mdct_window_halfFB, hTcxCfg->tcx_mdct_window_minimumFB, hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index,
#endif
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_DYNAMIC_QOLD
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, &st->hHQ_core->Q_old_wtda, 1, st, ratio, acelp_zir_fx, q_win );
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, &st->hHQ_core->Q_old_wtda, 1, st, ratio, acelp_zir_fx, q_winFB );
#else
                       kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, shr( s_max( L_frameTCX, L_spec ), 1 ), L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out_fx, 1, st, ratio, acelp_zir_fx, q_win );
#endif
+44 −7
Original line number Diff line number Diff line
@@ -1103,6 +1103,7 @@ void ivas_mdct_core_reconstruct_fx(
    move16();
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 q_win = -2;
    Word16 q_winFB = -2;
#else
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT
    Word16 q_win = -1;
@@ -1210,11 +1211,6 @@ void ivas_mdct_core_reconstruct_fx(
            Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) ); // q_syn -> q_win
            Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) );                                                          // st->Q_syn -> q_win
#endif
#if 0
            Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) );     // q_syn -> q_win
            Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) ); // q_syn -> q_win
            Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) );                                                          // st->Q_syn -> q_win
#endif

            FOR( k = 0; k < nSubframes[ch]; k++ )
            {
@@ -1228,14 +1224,16 @@ void ivas_mdct_core_reconstruct_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                    IF( ( EQ_16( hCPE->nchan_out, 1 ) && EQ_16( st->hTcxDec->kernel_type[k], MDST_IV ) ) || EQ_16( st->hTcxCfg->tcx_last_overlap_mode, TRANSITION_OVERLAP ) )
                    {
                        decoder_tcx_imdct_fx( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x_fx[ch][k], q_x, xn_buf_fx, &q_win,
                        decoder_tcx_imdct_fx( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x_fx[ch][k], q_x, xn_buf_fx, &q_win, &q_winFB,
                                              MDCT_IV, fUseTns[ch][k], &synth_fx[k * L_frame[ch]], &synthFB_fx[k * L_frameTCX[ch]], bfi, k, 0 );
                    }
                    ELSE
                    {
                        decoder_tcx_imdct_fx( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x_fx[ch][k], q_x, xn_buf_fx, &q_win,
                        decoder_tcx_imdct_fx( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x_fx[ch][k], q_x, xn_buf_fx, &q_win, &q_winFB,
                                              st->hTcxDec->kernel_type[k], fUseTns[ch][k], &synth_fx[k * L_frame[ch]], &synthFB_fx[k * L_frameTCX[ch]], bfi, k, 0 );
                    }

                    Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) );                            // st->Q_syn -> q_win
#else
                    IF( ( EQ_16( hCPE->nchan_out, 1 ) && EQ_16( st->hTcxDec->kernel_type[k], MDST_IV ) ) || EQ_16( st->hTcxCfg->tcx_last_overlap_mode, TRANSITION_OVERLAP ) )
                    {
@@ -1254,6 +1252,8 @@ void ivas_mdct_core_reconstruct_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                    q_win = -2;
                    move16();
                    q_winFB = -2;
                    move16();
#endif
                    set16_fx( &synth_fx[k * L_frame[ch]], 0, L_frame[ch] );
                    set16_fx( &synthFB_fx[k * L_frame[ch]], 0, L_frameTCX[ch] );
@@ -1270,7 +1270,43 @@ void ivas_mdct_core_reconstruct_fx(
                    set16_fx( &st->hTcxDec->syn_Overl_TDACFB[0], 0, shr( L_frameTCX[ch], 1 ) );
                }
            }
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            test();
            IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL )
            {
                TonalMDCTConceal_SaveTimeSignal_ivas_fx( st->hTonalMDCTConc, synthFB_fx, q_winFB, L_frameTCX[ch] );
            }
            decoder_tcx_post_ivas_fx( st, synth_fx, synthFB_fx, q_winFB, NULL, bfi, MCT_flag );

            sf = s_min( getScaleFactor16( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ) ), getScaleFactor16( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ) ) );
            IF( LT_16( sf, 2 ) )
            {
                q_syn = sub( sf, 2 );
                st->Q_syn = q_syn;
                move16();
            }
            sf = s_min( getScaleFactor16( st->hHQ_core->old_out_fx, L_FRAME48k ), getScaleFactor16( st->hHQ_core->old_out_LB_fx, L_FRAME32k ) );
            IF( LT_16( sf, sub( st->Q_syn, q_win ) ) )
            {
                st->Q_syn = add( q_win, sf );
            }

            Scale_sig( st->hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2, sub( sub( -1, st->Q_syn ), st->hTcxDec->Q_syn_Overl_TDACFB ) ); // q_winFB -> Q(-1 - st->Q_syn)
            st->hTcxDec->Q_syn_Overl_TDACFB = sub( -1, st->Q_syn );
            move16();
            Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), st->hTcxDec->Q_syn_Overl_TDAC ) ); // q_win -> Q(-1 - st->Q_syn)
            st->hTcxDec->Q_syn_Overl_TDAC = sub( -1, st->Q_syn );
            move16();
            Scale_sig( st->hTcxDec->old_syn_Overl, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), st->hTcxDec->Q_old_syn_Overl ) ); // q_win -> Q(-1 - st->Q_syn)
            st->hTcxDec->Q_old_syn_Overl = sub( -1, st->Q_syn );
            Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), sub( q_syn, q_win ) );     // q_win -> q_syn
            Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_syn, q_winFB ) ); // q_win -> q_syn
            Scale_sig( st->syn, M + 1, add( st->Q_syn, 2 ) );
            Scale_sig( st->hTcxDec->syn_OverlFB, L_FRAME_MAX / 2, sub( st->Q_syn, st->hTcxDec->Q_syn_OverlFB ) ); // q_winFB -> st->Q_syn
            st->hTcxDec->Q_syn_OverlFB = st->Q_syn;
            Scale_sig( st->hTcxDec->syn_Overl, L_FRAME32k / 2, sub( st->Q_syn, st->hTcxDec->Q_syn_Overl ) ); // q_win -> st->Q_syn
            st->hTcxDec->Q_syn_Overl = st->Q_syn;
#else
            test();
            IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL )
            {
@@ -1314,6 +1350,7 @@ void ivas_mdct_core_reconstruct_fx(
            st->hHQ_core->Q_old_wtda_LB = st->Q_syn;
            move16();
#endif
#endif
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_DYNAMIC_QOLD
            Scale_sig( st->mem_syn2_fx, M, sub( -2, q_win ) );
            // Scale_sig( st->mem_syn2_fx, M, sub( st->Q_syn, q_win ) ); // q_win -> Q_syn