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

Correct scaling of synth_buf_fx/synth_bufFB_fx. Cleanup of obsolete code.

parent dd49640f
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -9949,9 +9949,6 @@ void ivas_mdct_core_reconstruct_fx(
    /* o  : synthesis @output_FS                */ // e_sig
    Word16 fUseTns[CPE_CHANNELS][NB_DIV],          /* i  : flage TNS enabled                   */
    const Word16 MCT_flag,                         /* i  : hMCT handle allocated (1) or not (0)*/
#if defined( FIX_1348_BIT_PRECISION_IMPROVEMENT ) && !defined( FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN )
    const Word16 isParamMC,
#endif
    Word16 q_x,
    Word16 e_sig[CPE_CHANNELS] );
+38 −41
Original line number Diff line number Diff line
@@ -2573,22 +2573,6 @@ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_T
}

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
#if 0
static Word16 IMDCT_ivas_fx_adjust_qwin(
    Word16 Q_syn_Overl_TDAC,
    Word16 Q_syn_Overl,
    Word16 Q_old_syn_Overl,
    Word16 Q_old_wtda,
    Word16 q_win )
{
    // q_win = s_min( s_min( s_min( s_min( Q_syn_Overl_TDAC , Q_syn_Overl ), Q_old_syn_Overl ), Q_old_wtda ), q_win );
    q_win = s_min( s_min( s_min( Q_syn_Overl_TDAC, Q_syn_Overl ), Q_old_syn_Overl ), Q_old_wtda );
    q_win = s_min( q_win, -1 );
    q_win = s_max( q_win, -2 );

    return q_win;
}
#endif

static Word16 IMDCT_ivas_fx_calc_qwin(
    Word16 *syn_Overl_TDAC,
@@ -2599,9 +2583,12 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
    Word16 Q_old_syn_Overl,
    Word16 *old_out_fx,
    Word16 Q_old_out_fx,
    const Word16 FB_flag,
    Word16 q_win )
    Word16 q_win,
    const Word16 L_frame,
    const Word16 L_frameTCX,
    const Word16 FB_flag )
{
#if 0
    Word16 oldLength;

    oldLength = L_FRAME32k;
@@ -2611,6 +2598,18 @@ static Word16 IMDCT_ivas_fx_calc_qwin(
        oldLength = L_FRAME48k;
        move16();
    }
#else
    Word16 oldLength;

    oldLength = L_frame;
    move16();
    if ( FB_flag )
    {
        oldLength = L_frameTCX;
        move16();
    }
#endif

    q_win = 4;
    move16();

@@ -2736,7 +2735,6 @@ static void TCX_MDCT_Inverse_qwin_fx(

    negfac = negate( fac );

#if 1
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
@@ -2744,9 +2742,7 @@ static void TCX_MDCT_Inverse_qwin_fx(
        s = L_norm_arr( tmp_buf + L2, m + R2 + L2 );
        *q_win = s_min( sub( s, x_e ), *q_win );
    }
#else
    assert( *q_win == 0 || *q_win == -2 );
#endif

    s = add( x_e, *q_win );
    move16();

@@ -2805,7 +2801,6 @@ static void TCX_MDST_Inverse_qwin_fx(

    negfac = negate( fac );

#if 1
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
@@ -2813,9 +2808,7 @@ static void TCX_MDST_Inverse_qwin_fx(
        s = L_norm_arr( tmp_buf + L2, m + R2 + L2 );
        *q_win = s_min( sub( s, x_e ), *q_win );
    }
#else
    assert( *q_win == 0 || *q_win == -2 );
#endif

    s = add( x_e, *q_win );
    move16();

@@ -2893,7 +2886,6 @@ static void TCX_MDXT_Inverse_qwin_fx(
        signRight = negfac;
    }

#if 1
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
@@ -2901,9 +2893,7 @@ static void TCX_MDXT_Inverse_qwin_fx(
        s = L_norm_arr( tmp_buf + L2, m + R2 + L2 );
        *q_win = s_min( sub( s, x_e ), *q_win );
    }
#else
    assert( *q_win == 0 || *q_win == -2 );
#endif

    s = add( x_e, *q_win );
    move16();

@@ -2932,7 +2922,6 @@ static void TCX_MDXT_Inverse_qwin_fx(

    return;
}

#endif

void IMDCT_ivas_fx(
@@ -3002,7 +2991,7 @@ void IMDCT_ivas_fx(
    {
        // 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,
                                         hTcxDec->old_syn_Overl, hTcxDec->Q_old_syn_Overl, old_out_fx, *q_old_out_fx, FB_flag, q_win );
                                         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
    x_e_hdrm = add( q_win, sub( Q16, q_x ) );
@@ -3083,6 +3072,7 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            IF( allow_qwin_change )
            {
                /* Use fixed q_win to avoid the need to adapt scaling of two TCX5 blocks (less effort with maybe not ideal scaling) */
                q_win = -2;
                move16();
                allow_qwin_change = 0;
@@ -3165,6 +3155,17 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            Word16 q_win_prev;

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            IF( allow_qwin_change )
            {
                /* Use fixed q_win to avoid the need to adapt scaling of two TCX5 blocks (less effort with maybe not ideal scaling) */
                q_win = -2;
                move16();
                allow_qwin_change = 0;
                move16();
            }
#endif

            IF( EQ_16( kernel_type, MDST_IV ) )
            {
                TCX_MDST_Inverse_qwin_fx( x_fx, x_e_hdrm, win_fx + L_win, 0, sub( L_win, shr( L_ola, 1 ) ), L_ola, &q_win, allow_qwin_change );
@@ -3202,11 +3203,11 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            IF( s_and( kernel_type, 1 ) )
            {
                TCX_MDST_Inverse_qwin_fx( x_fx + L_spec_TCX5, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, &q_win, 0 );
                TCX_MDST_Inverse_qwin_fx( x_fx + L_spec_TCX5, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, &q_win, allow_qwin_change );
            }
            ELSE
            {
                TCX_MDCT_Inverse_qwin_fx( x_fx + L_spec_TCX5, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, st->element_mode, &q_win, 0 );
                TCX_MDCT_Inverse_qwin_fx( x_fx + L_spec_TCX5, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, st->element_mode, &q_win, allow_qwin_change );
            }

            assert( q_win_prev == q_win );
@@ -3392,14 +3393,10 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                if ( allow_qwin_change )
                {
#if 1
                    // sub( q_xn_buf_fx_32, q_win ) == 16 - L_norm_arr( xn_buf_fx_32, L_frame )
                    // q_xn_buf_fx_32 - q_win == 16 - L_norm_arr( xn_buf_fx_32, L_frame )
                    // 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 ) ) - 1 );
#else
                    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 );
#endif
@@ -4188,7 +4185,7 @@ void decoder_tcx_ivas_fx(

    /* Scaling up again */
    Scale_sig( synth_fx, L_frame_glob, sub( st->Q_syn, q_win ) );
    Scale_sig( synthFB_fx, L_frameTCX_glob, sub( st->Q_syn, q_win ) );
    Scale_sig( synthFB_fx, L_frameTCX_glob, sub( st->Q_syn, q_winFB ) );
    // Scale_sig( st->hTcxDec->syn_Overl, L_FRAME32k / 2, 1 );

    Scale_sig( st->hTcxDec->old_syn_Overl, 320, ( -2 - st->hTcxDec->Q_old_syn_Overl ) ); // Scaling to Q-2
@@ -5860,7 +5857,7 @@ void decoder_tcx_imdct_fx(
    }

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 shift_q = sub( q_x, *q_win );
    Word16 shift_q = sub( q_x, *q_winFB );
#endif

    FOR( Word16 ind = 0; ind < L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX; ind++ )
@@ -5902,7 +5899,7 @@ void decoder_tcx_imdct_fx(
    }

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    shift_q = sub( q_x, *q_win );
    shift_q = sub( q_x, *q_winFB );
#endif

    FOR( Word16 ind = 0; ind < L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX; ind++ )
+0 −4
Original line number Diff line number Diff line
@@ -346,11 +346,7 @@ ivas_error ivas_mct_dec_fx(
        }
        Copy_Scale_sig_16_32_no_sat( hCPE->hCoreCoder[0]->old_Aq_12_8_fx, hCPE->hCoreCoder[0]->old_Aq_12_8_fx_32, add( M, 1 ), sub( 28, sub( 15, norm_s( sub( hCPE->hCoreCoder[0]->old_Aq_12_8_fx[0], 1 ) ) ) ) );
        Copy_Scale_sig_16_32_no_sat( hCPE->hCoreCoder[1]->old_Aq_12_8_fx, hCPE->hCoreCoder[1]->old_Aq_12_8_fx_32, add( M, 1 ), sub( 28, sub( 15, norm_s( sub( hCPE->hCoreCoder[1]->old_Aq_12_8_fx[0], 1 ) ) ) ) );
#if defined( FIX_1348_BIT_PRECISION_IMPROVEMENT ) && !defined( FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN )
        ivas_mdct_core_reconstruct_fx( hCPE, x_fx, synth_fx, fUseTns[cpe_id], 1, st_ivas->mc_mode == MC_MODE_PARAMMC, q_output, e_sig );
#else
        ivas_mdct_core_reconstruct_fx( hCPE, x_fx, synth_fx, fUseTns[cpe_id], 1, q_output, e_sig );
#endif

        Word16 hdrm, sh;
        hdrm = getScaleFactor16( synth_fx[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX );
+8 −14
Original line number Diff line number Diff line
@@ -1083,9 +1083,6 @@ void ivas_mdct_core_reconstruct_fx(
    /* o  : synthesis @output_FS                */ // e_sig
    Word16 fUseTns[CPE_CHANNELS][NB_DIV],          /* i  : flage TNS enabled                   */
    const Word16 MCT_flag,                         /* i  : hMCT handle allocated (1) or not (0)*/
#if defined( FIX_1348_BIT_PRECISION_IMPROVEMENT ) && !defined( FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN )
    const Word16 isParamMC,
#endif
    Word16 q_x,
    Word16 e_sig[CPE_CHANNELS] )
{
@@ -1103,7 +1100,9 @@ void ivas_mdct_core_reconstruct_fx(
    move16();
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 q_win = -2;
    move16();
    Word16 q_winFB = -2;
    move16();
#else
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT
    Word16 q_win = -1;
@@ -1130,13 +1129,6 @@ void ivas_mdct_core_reconstruct_fx(
    bfi = sts[0]->bfi;
    move16();

#ifndef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT
    if ( isParamMC )
        q_win = -2;
#endif
#endif

    /* TNS, ITF, IMDCT and updates */
    FOR( ch = 0; ch < CPE_CHANNELS; ch++ )
    {
@@ -1233,7 +1225,9 @@ void ivas_mdct_core_reconstruct_fx(
                                              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
                    // Need to rescale for each subframe, because q_win/q_winFB might change for the next subframe. Other OLA buffers are rescaled each time.
                    Scale_sig( &synth_fx[k * L_frame[ch]], add( L_frame[ch], M ), sub( st->hTcxDec->q_old_synth, q_win ) ); // q_win -> st->hTcxDec->q_old_synth
                    Scale_sig( &synthFB_fx[k * L_frameTCX[ch]], add( L_frameTCX[ch], M ), sub( st->hTcxDec->q_old_synth, q_winFB ) ); // q_winFB -> st->hTcxDec->q_old_synth
#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 ) )
                    {
@@ -1299,13 +1293,13 @@ void ivas_mdct_core_reconstruct_fx(
            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;
            Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), sub( q_syn, st->hTcxDec->q_old_synth ) ); // st->hTcxDec->q_old_synth -> q_syn
            Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_syn, st->hTcxDec->q_old_synth ) ); // st->hTcxDec->q_old_synth -> q_syn
            Scale_sig( st->syn, M + 1, add( st->Q_syn, 2 ) );
#else
            test();
            IF( ( bfi == 0 ) && st->hTonalMDCTConc != NULL )
+0 −4
Original line number Diff line number Diff line
@@ -550,11 +550,7 @@ void stereo_mdct_core_dec_fx(
    }
    Copy_Scale_sig_16_32_no_sat( hCPE->hCoreCoder[0]->old_Aq_12_8_fx, hCPE->hCoreCoder[0]->old_Aq_12_8_fx_32, M + 1, sub( 28, sub( 15, norm_s( sub( hCPE->hCoreCoder[0]->old_Aq_12_8_fx[0], 1 ) ) ) ) ); /* Q28 */
    Copy_Scale_sig_16_32_no_sat( hCPE->hCoreCoder[1]->old_Aq_12_8_fx, hCPE->hCoreCoder[1]->old_Aq_12_8_fx_32, M + 1, sub( 28, sub( 15, norm_s( sub( hCPE->hCoreCoder[1]->old_Aq_12_8_fx[0], 1 ) ) ) ) ); /* Q28 */
#if defined( FIX_1348_BIT_PRECISION_IMPROVEMENT ) && !defined( FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN )
    ivas_mdct_core_reconstruct_fx( hCPE, x_fx, signal_outFB_tmp_fx, fUseTns, 0, st_ivas->mc_mode == MC_MODE_PARAMMC, Q11, e_sigFB );
#else
    ivas_mdct_core_reconstruct_fx( hCPE, x_fx, signal_outFB_tmp_fx, fUseTns, 0, Q11, e_sigFB );
#endif

    Copy32( signal_out_tmp_fx[0], signal_out_fx[0], L_FRAME48k ); /* Q11 */
    Copy32( signal_out_tmp_fx[1], signal_out_fx[1], L_FRAME48k ); /* Q11 */