Loading lib_com/prot_fx.h +0 −3 Original line number Diff line number Diff line Loading @@ -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] ); Loading lib_dec/dec_tcx_fx.c +38 −41 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -2932,7 +2922,6 @@ static void TCX_MDXT_Inverse_qwin_fx( return; } #endif void IMDCT_ivas_fx( Loading Loading @@ -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 ) ); Loading Loading @@ -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; Loading Loading @@ -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 ); Loading Loading @@ -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 ); Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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++ ) Loading Loading @@ -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++ ) Loading lib_dec/ivas_mct_dec_fx.c +0 −4 Original line number Diff line number Diff line Loading @@ -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 ); Loading lib_dec/ivas_mdct_core_dec_fx.c +8 −14 Original line number Diff line number Diff line Loading @@ -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] ) { Loading @@ -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; Loading @@ -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++ ) { Loading Loading @@ -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 ) ) { Loading Loading @@ -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 ) Loading lib_dec/ivas_stereo_mdct_core_dec_fx.c +0 −4 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading
lib_com/prot_fx.h +0 −3 Original line number Diff line number Diff line Loading @@ -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] ); Loading
lib_dec/dec_tcx_fx.c +38 −41 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -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 ); Loading @@ -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(); Loading Loading @@ -2932,7 +2922,6 @@ static void TCX_MDXT_Inverse_qwin_fx( return; } #endif void IMDCT_ivas_fx( Loading Loading @@ -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 ) ); Loading Loading @@ -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; Loading Loading @@ -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 ); Loading Loading @@ -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 ); Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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++ ) Loading Loading @@ -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++ ) Loading
lib_dec/ivas_mct_dec_fx.c +0 −4 Original line number Diff line number Diff line Loading @@ -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 ); Loading
lib_dec/ivas_mdct_core_dec_fx.c +8 −14 Original line number Diff line number Diff line Loading @@ -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] ) { Loading @@ -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; Loading @@ -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++ ) { Loading Loading @@ -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 ) ) { Loading Loading @@ -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 ) Loading
lib_dec/ivas_stereo_mdct_core_dec_fx.c +0 −4 Original line number Diff line number Diff line Loading @@ -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 */ Loading