Commit 4b492033 authored by Manuel Jander's avatar Manuel Jander
Browse files

Avoid throwing assert, the actual problems will be fixed in a next change.

parent a64339e0
Loading
Loading
Loading
Loading
Loading
+98 −32
Original line number Diff line number Diff line
@@ -2588,6 +2588,41 @@ static Word16 IMDCT_ivas_fx_adjust_qwin(
    return q_win;
}

static Word16 IMDCT_ivas_fx_calc_qwin(
    Word16 *syn_Overl_TDAC,
    Word16 Q_syn_Overl_TDAC,
    Word16 *syn_Overl,
    Word16 Q_syn_Overl,
    Word16 *old_syn_Overl,
    Word16 Q_old_syn_Overl,
    Word16 *old_out_fx,
    Word16 Q_old_out_fx,
    const Word16 FB_flag,
    Word16 q_win )
{
    Word16 oldLength;

    oldLength = L_FRAME32k;
    move16();
    if ( FB_flag )
    {
        oldLength = L_FRAME48k;
        move16();
    }
    q_win = 2;
    move16();

    // 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( 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 );

    return q_win;
}

static void IMDCT_ivas_fx_rescale(
    Word16 *syn_Overl_TDAC,
    Word16 *Q_syn_Overl_TDAC,
@@ -2596,7 +2631,7 @@ static void IMDCT_ivas_fx_rescale(
    Word16 *old_syn_Overl,
    Word16 *Q_old_syn_Overl,
    Word16 *old_out_fx,
    Word16 *Q_old_wtda,
    Word16 *Q_old_out_fx,
    Word16 q_win,
    const Word16 FB_flag
#if 0
@@ -2616,18 +2651,17 @@ static void IMDCT_ivas_fx_rescale(
    }

#if 1
    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();
    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();
    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();
    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_wtda ) ); // Q(st->hHQ_core->Q_old_wtda) -> q_win
    *Q_old_wtda = q_win;
    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( synth_buf_fx, add( add( old_synth_len, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) );     // q_syn -> q_win
@@ -2682,7 +2716,8 @@ static void TCX_MDCT_Inverse_qwin_fx(
    const Word16 m,            /* Q0 */
    const Word16 r,            /* Q0 */
    const Word16 element_mode, /* Q0 */
    Word16 *q_win )
    Word16 *q_win,
    Word16 allow_qwin_change )
{

    Word16 i, fac, negfac, s;
@@ -2703,7 +2738,7 @@ static void TCX_MDCT_Inverse_qwin_fx(
    negfac = negate( fac );

#if 1
    IF( *q_win == -2 )
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
        // q_win = L_norm_arr(tmp_buf, , *q_win ) -  x_e;
@@ -2748,7 +2783,8 @@ static void TCX_MDST_Inverse_qwin_fx(
    const Word16 l, /* Q0 */
    const Word16 m, /* Q0 */
    const Word16 r, /* Q0 */
    Word16 *q_win )
    Word16 *q_win,
    Word16 allow_qwin_change )
{

    Word16 i, fac, negfac, s;
@@ -2771,7 +2807,7 @@ static void TCX_MDST_Inverse_qwin_fx(
    negfac = negate( fac );

#if 1
    IF( *q_win == -2 )
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
        // q_win = L_norm_arr(tmp_buf, , *q_win ) -  x_e;
@@ -2822,7 +2858,8 @@ static void TCX_MDXT_Inverse_qwin_fx(
    const Word16 m,            /* Q0 */
    const Word16 r,            /* Q0 */
    const UWord16 kernel_type, /* Q0 */
    Word16 *q_win )
    Word16 *q_win,
    Word16 allow_qwin_change )
{
    Word16 signLeft;
    Word16 signRight;
@@ -2858,7 +2895,7 @@ static void TCX_MDXT_Inverse_qwin_fx(
    }

#if 1
    IF( *q_win == -2 )
    IF( allow_qwin_change )
    {
        // x_e + q_win == L_norm_arr(tmp_buf, , *q_win );
        // q_win = L_norm_arr(tmp_buf, , *q_win ) -  x_e;
@@ -2954,11 +2991,19 @@ void IMDCT_ivas_fx(
    Word16 exp;
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
    Word16 q_win = *pq_win;
    Word16 allow_qwin_change = 1;
    move16();
    move16();
    x_e_hdrm = sub( Q16, q_x );
    IF( q_win == -2 )
    IF( *pq_win == 0 )
    {
        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 );
        allow_qwin_change = 0;
    }
    IF ( allow_qwin_change )
    {
        //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 );
    }
#else
    x_e_hdrm = add( q_win, sub( Q16, q_x ) );
@@ -3038,6 +3083,14 @@ void IMDCT_ivas_fx(
            move16();
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            Word16 q_win_prev;
#if 0
            IF ( allow_qwin_change ) {
                q_win = -2;
                move16();
                allow_qwin_change = 0;
                move16();
            }
#endif
#endif

            FOR( w = 0; w < 2; w++ )
@@ -3048,20 +3101,24 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                IF( EQ_16( kernel_type, MDST_IV ) || s_and( kernel_type, w ) )
                {
                    TCX_MDST_Inverse_qwin_fx( x_fx + L_spec_TCX5_tmp, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, &q_win );
                    TCX_MDST_Inverse_qwin_fx( x_fx + L_spec_TCX5_tmp, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, &q_win, allow_qwin_change );
                }
                ELSE IF( ( kernel_type != 0 ) && ( w == 0 ) ) /* type 1 or 2 */
                {
                    TCX_MDXT_Inverse_qwin_fx( x_fx + L_spec_TCX5_tmp, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, kernel_type, &q_win );
                    TCX_MDXT_Inverse_qwin_fx( x_fx + L_spec_TCX5_tmp, x_e_hdrm, win_fx, L_ola, sub( L_win, L_ola ), L_ola, kernel_type, &q_win, allow_qwin_change );
                }
                ELSE
                {
                    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 );
                    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 ( w > 0 )
                {
                    assert( q_win_prev == q_win );
                    //assert( q_win_prev == q_win );
                    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 );
                    }
                }
                else
                {
@@ -3126,15 +3183,15 @@ void IMDCT_ivas_fx(

            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 );
                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 );
            }
            ELSE IF( NE_16( kernel_type, MDCT_IV ) ) /* type 1 or 2 */
            {
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, win_fx + L_win, 0, sub( L_win, shr( L_ola, 1 ) ), L_ola, kernel_type, &q_win );
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, win_fx + L_win, 0, sub( L_win, shr( L_ola, 1 ) ), L_ola, kernel_type, &q_win, allow_qwin_change );
            }
            ELSE
            {
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, win_fx + L_win, 0, sub( L_win, shr( L_ola, 1 ) ), L_ola, st->element_mode, &q_win );
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, win_fx + L_win, 0, sub( L_win, shr( L_ola, 1 ) ), L_ola, st->element_mode, &q_win, allow_qwin_change );
            }
            q_win_prev = q_win;
#else
@@ -3161,11 +3218,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 );
                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 );
            }
            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 );
                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 );
            }

            assert( q_win_prev == q_win );
@@ -3218,15 +3275,15 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
                TCX_MDST_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, &q_win );
                TCX_MDST_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, &q_win, allow_qwin_change );
            }
            ELSE IF( NE_16( kernel_type, MDCT_IV ) ) /* type 1 or 2 */
            {
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, kernel_type, &q_win );
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, kernel_type, &q_win, allow_qwin_change );
            }
            ELSE
            {
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, sub( L_frame, overlap ), overlap, st->element_mode, &q_win );
                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 );
@@ -3290,6 +3347,7 @@ void IMDCT_ivas_fx(
                move16();

#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 );
#endif

@@ -3346,7 +3404,16 @@ void IMDCT_ivas_fx(
                // v_multc_fixed( xn_buf_fx_32 + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp_fx_32, L_frame );

#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
                // L_norm_arr( xn_buf_fx, L_frame )
                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

@@ -3402,18 +3469,17 @@ void IMDCT_ivas_fx(
#ifdef FIX_1348_BIT_PRECISION_IMPROVEMENT_QWIN
            IF( EQ_16( kernel_type, MDST_IV ) )
            {
                TCX_MDST_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, &q_win );
                TCX_MDST_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, &q_win, allow_qwin_change );
            }
            ELSE IF( NE_16( kernel_type, MDCT_IV ) ) /* type 1 or 2 */
            {
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, kernel_type, &q_win );
                TCX_MDXT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, kernel_type, &q_win, allow_qwin_change );
            }
            ELSE
            {
                TCX_MDCT_Inverse_qwin_fx( x_fx, x_e_hdrm, xn_buf_fx, overlap, L_frame - overlap, overlap, st->element_mode, &q_win );
                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 );
            }

            // xn_buf_fx, NULL, L_frame,
            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 ) )