diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index caa01e7dea45d214c29108a1bfbd82b5ed36b93d..0550189ac010f3b50287b0d0a9ce1fd0d048c291 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -2163,11 +2163,6 @@ void ivas_mdct_core_reconstruct_fx( ELSE /*ACELP core for ACELP-PLC */ { assert( EQ_16( st->bfi, 1 ) ); - Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), negate( q_syn ) ); // Q0 - Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), negate( q_syn ) ); // Q0 - q_syn = 0; - move16(); - move16(); /* PLC: [TCX: TD PLC] */ IF( MCT_flag != 0 ) { @@ -2184,8 +2179,6 @@ void ivas_mdct_core_reconstruct_fx( con_tcx_ivas_fx( st, &synthFB_fx[0], hCPE->hStereoMdct->lastCoh_fx, &sts[0]->seed_acelp, 0, &st->hFdCngDec->hFdCngCom->A_cng[0] ); } } - - Scale_sig( synthFB_fx, st->hTcxDec->L_frameTCX, q_syn ); // q_syn IF( ( EQ_16( st->nbLostCmpt, 1 ) ) || ( st->hTcxDec->tcxConceal_recalc_exc != 0 ) ) { Scale_sig( synthFB_fx - add( add( shr( st->hTcxDec->L_frameTCX, 1 ), st->hTcxDec->pit_max_TCX ), 2 * M ), add( add( shr( st->hTcxDec->L_frameTCX, 1 ), st->hTcxDec->pit_max_TCX ), 2 * M ), sub( q_syn, sub( st->Q_exc, 1 ) ) ); // 2 * q_syn - (st->Q_exc - 1) diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index 9d1fb571c731311a5e3889bb0a0f3e7ee9cdd4b0..90b3eb4d8dc6a64c3b6c5e1ba0a0e959fdd502b7 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -1105,9 +1105,22 @@ ivas_error IVAS_DEC_GetSamples( } ELSE { + Word32 max_val; + Word16 max_shift; + + maximum_32_fx( hIvasDec->apaExecBuffer_fx, APA_BUF_PER_CHANNEL * nTransportChannels, &max_val ); + IF( max_val ) + { + max_shift = s_max( Q12, sub( 31 - 3, norm_l( L_shr( max_val, 11 ) ) ) ); + } + ELSE + { + max_shift = Q12; + move16(); + } FOR( Word32 i = 0; i < APA_BUF_PER_CHANNEL * nTransportChannels; ++i ) { - tmp_apaExecBuffer[i] = extract_l( L_shr( hIvasDec->apaExecBuffer_fx[i], Q12 ) ); // Q(-1) + tmp_apaExecBuffer[i] = extract_l( L_shr( hIvasDec->apaExecBuffer_fx[i], max_shift ) ); // Q(-1) } IF( apa_exec_ivas_fx( hIvasDec->hTimeScaler, tmp_apaExecBuffer, (UWord16) imult3216( hIvasDec->nSamplesFrame, nTransportChannels ), (UWord16) hIvasDec->tsm_max_scaling, tmp_apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) { @@ -1116,7 +1129,7 @@ ivas_error IVAS_DEC_GetSamples( FOR( Word32 i = 0; i < APA_BUF_PER_CHANNEL * nTransportChannels; ++i ) { - hIvasDec->apaExecBuffer_fx[i] = L_shl( tmp_apaExecBuffer[i], Q12 ); // Q11 + hIvasDec->apaExecBuffer_fx[i] = L_shl( tmp_apaExecBuffer[i], max_shift ); // Q11 } } assert( LE_32( (Word32) nTimeScalerOutSamples, APA_BUF ) );