Loading lib_com/prot_fx.h +19 −0 Original line number Diff line number Diff line Loading @@ -10333,6 +10333,25 @@ void ProcessStereoIGF_fx( const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on ); #ifdef FIX_MDCT_STEREO_ENC_STACK void ProcessStereoIGF_fx_64( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Word32 *pITFMDCTSpectrum_fx[CPE_CHANNELS][NB_DIV], /* i : MDCT spectrum fir ITF */ Word64 powerSpec64[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ Word16 exp_powerSpec64[CPE_CHANNELS][NB_DIV], /* i/o: exp of pPowerSpectrum_fx */ Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i : inverse power spectrum */ Word16 *q_pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: Q of pPowerSpectrumMsInv_fx */ Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ Word16 exp_inv_spectrum_fx[CPE_CHANNELS], /* i/o: exp of inv_spectrum_fx */ const Word16 frameno, /* i : flag indicating index of current subfr. */ const Word16 sp_aud_decision0, /* i : sp_aud_decision0 */ const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on /* i : flag MCT mode */ ); #endif void IGFEncApplyStereo_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Loading lib_enc/ivas_stereo_mdct_core_enc_fx.c +15 −3 Original line number Diff line number Diff line Loading @@ -401,7 +401,12 @@ void stereo_mdct_core_enc_fx( /*--------------------------------------------------------------* * Power spectrum calculation *---------------------------------------------------------------*/ #ifdef FIX_MDCT_STEREO_ENC_STACK Word16 exp, shift1, shift2, norm; #else Word16 length, exp, shift1, shift2, norm; #endif Word32 mdct, mdst, imdct, imdst; FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) Loading Loading @@ -576,6 +581,7 @@ void stereo_mdct_core_enc_fx( IF( ( NE_16( hStereoMdct->mdct_stereo_mode[n], hStereoMdct->IGFStereoMode[n] ) || EQ_16( hStereoMdct->mdct_stereo_mode[n], SMDCT_BW_MS ) ) && !hStereoMdct->isSBAStereoMode ) { IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS]; #ifndef FIX_MDCT_STEREO_ENC_STACK Word32 powerSpec_fx[CPE_CHANNELS][N_MAX], *p_powerSpec_fx[CPE_CHANNELS]; Word16 exp_powSpec[CPE_CHANNELS][N_MAX], *p_exp_powSpec[CPE_CHANNELS]; p_powerSpec_fx[0] = powerSpec_fx[0]; Loading Loading @@ -615,7 +621,7 @@ void stereo_mdct_core_enc_fx( set16_fx( exp_powSpec[ch] + length, 0, sub( N_MAX, length ) ); } } #endif hIGFEnc[0] = sts[0]->hIGFEnc; hIGFEnc[1] = sts[1]->hIGFEnc; hIGFEnc[0]->spec_be_igf_e = p_orig_spectrum_e[0]; Loading @@ -623,9 +629,15 @@ void stereo_mdct_core_enc_fx( move16(); move16(); #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessStereoIGF_fx_64( hStereoMdct, sts, ms_mask, orig_spectrum_fx, powerSpec64, exp_powerSpec64, powerSpecMsInv_fx, q_powerSpecMsInv_fx, inv_spectrum_fx, exp_inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); #else ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask, orig_spectrum_fx, sub( Q31, p_orig_spectrum_e[0] ), sub( Q31, p_orig_spectrum_e[1] ), p_powerSpec_fx, p_exp_powSpec, powerSpecMsInv_fx, q_powerSpecMsInv_fx, inv_spectrum_fx, exp_inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); #endif } ELSE { Loading Loading @@ -676,7 +688,7 @@ void stereo_mdct_core_enc_fx( st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; } #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n ); ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n, hCPE->hCoreCoder[0]->sp_aud_decision0 ); #else L_subframeTCX = idiv1616( st->hTcxEnc->L_frameTCX, nSubframes ); /* Q0 */ Word16 q_spectrum; Loading Loading @@ -758,7 +770,7 @@ void stereo_mdct_core_enc_fx( FOR( n = 0; n < nSubframes; n++ ) { #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n ); ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n, hCPE->hCoreCoder[0]->sp_aud_decision0 ); #else Word16 q_spectrum; L_subframeTCX = idiv1616( st->hTcxEnc->L_frameTCX, nSubframes ); /* Q0 */ Loading lib_enc/prot_fx_enc.h +9 −8 Original line number Diff line number Diff line Loading @@ -1184,7 +1184,8 @@ void ProcessIGF_ivas_fx_64( const Word16 q_ITFMDCTSpectrum, /* i : Q of MDCT spectrum fir ITF */ const Word64 *pPowerSpectrum64, /* i : MDCT^2 + MDST^2 spectrum, or estimate (*q_powerSpec) */ const Word16 *exp_powerSpec64, /* i : Q of power spectrum */ const Word16 frameno /* i : flag indicating index of current subframe */ const Word16 frameno, /* i : flag indicating index of current subframe */ const Word16 sp_aud_decision0 /* i : first stage switching decision */ ); #endif Loading lib_enc/tcx_utils_enc_fx.c +89 −16 Original line number Diff line number Diff line Loading @@ -4068,7 +4068,8 @@ void ProcessIGF_ivas_fx_64( const Word16 q_ITFMDCTSpectrum, /* i : Q of MDCT spectrum fir ITF */ const Word64 *pPowerSpectrum64, /* i : MDCT^2 + MDST^2 spectrum, or estimate (*q_powerSpec) */ const Word16 *exp_powerSpec64, /* i/o: Q of power spectrum */ const Word16 frameno /* i : flag indicating index of current subframe */ const Word16 frameno, /* i : flag indicating index of current subframe */ const Word16 sp_aud_decision0 /* i : first stage switching decision */ ) { Word16 i, n1, nsub, length, norm; Loading Loading @@ -4131,7 +4132,79 @@ void ProcessIGF_ivas_fx_64( Scale_sig32( pITFMDCTSpectrum, st->hIGFEnc->infoStopLine, sub( q_spectrum, sub( Q31, q_ITFMDCTSpectrum ) ) ); /* q_spectrum */ ProcessIGF_ivas_fx( st, powerSpec_len, pMDCTSpectrum, &q_spectrum, pITFMDCTSpectrum, q_spectrum, &powerSpec_fx[frameno * L_subframeTCX], &exp_powerSpec[frameno * L_subframeTCX], st->core == TCX_20_CORE, frameno, st->sp_aud_decision0, 0 ); ProcessIGF_ivas_fx( st, powerSpec_len, pMDCTSpectrum, &q_spectrum, pITFMDCTSpectrum, q_spectrum, &powerSpec_fx[frameno * L_subframeTCX], &exp_powerSpec[frameno * L_subframeTCX], st->core == TCX_20_CORE, frameno, sp_aud_decision0, 0 ); return; } /*---------------------------------------------------------------------* * ProcessStereoIGF_fx_64() * * *---------------------------------------------------------------------*/ void ProcessStereoIGF_fx_64( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Word32 *pITFMDCTSpectrum_fx[CPE_CHANNELS][NB_DIV], /* i : MDCT spectrum fir ITF */ Word64 powerSpec64[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ Word16 exp_powerSpec64[CPE_CHANNELS][NB_DIV], /* i/o: exp of pPowerSpectrum_fx */ Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i : inverse power spectrum */ Word16 *q_pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: Q of pPowerSpectrumMsInv_fx */ Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ Word16 exp_inv_spectrum_fx[CPE_CHANNELS], /* i/o: exp of inv_spectrum_fx */ const Word16 frameno, /* i : flag indicating index of current subfr. */ const Word16 sp_aud_decision0, /* i : sp_aud_decision0 */ const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on /* i : flag MCT mode */ ) { Word16 ch, i, n1, nsub, length, shift1; Word32 powerSpec_fx[CPE_CHANNELS][N_MAX], *p_powerSpec_fx[CPE_CHANNELS]; Word16 exp_powSpec[CPE_CHANNELS][N_MAX], *p_exp_powSpec[CPE_CHANNELS]; p_powerSpec_fx[0] = powerSpec_fx[0]; p_exp_powSpec[0] = exp_powSpec[0]; p_powerSpec_fx[1] = powerSpec_fx[1]; p_exp_powSpec[1] = exp_powSpec[1]; /* Copy powerSpec values from 64 bit buffer to 32 bit buffer */ FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { n1, nsub = 1; length = sts[ch]->hTcxEnc->L_frameTCX; move16(); move16(); IF( NE_16( sts[ch]->hTcxEnc->tcxMode, TCX_20 ) ) { length = shr( sts[ch]->hTcxEnc->L_frameTCX, 1 ); nsub = NB_DIV; move16(); } IF( EQ_16( sts[ch]->last_core, ACELP_CORE ) ) { length = add( length, shr( length, 2 ) ); } FOR( n1 = 0; n1 < nsub; n1++ ) { FOR( i = 0; i < length; i++ ) { /* This doesn't result in saturation */ shift1 = W_norm( powerSpec64[ch][i + n1 * length] ); powerSpec_fx[ch][i + n1 * length] = W_extract_h( W_shl( powerSpec64[ch][i + n1 * length], shift1 ) ); // exp: exp move32(); exp_powSpec[ch][i + n1 * length] = sub( exp_powerSpec64[ch][n1], shift1 ); } } set32_fx( powerSpec_fx[ch] + length, 0, sub( N_MAX, length ) ); set16_fx( exp_powSpec[ch] + length, 0, sub( N_MAX, length ) ); } ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask, pITFMDCTSpectrum_fx, sub( Q31, sts[0]->hIGFEnc->spec_be_igf_e ), sub( Q31, sts[1]->hIGFEnc->spec_be_igf_e ), p_powerSpec_fx, p_exp_powSpec, pPowerSpectrumMsInv_fx, q_pPowerSpectrumMsInv_fx, inv_spectrum_fx, exp_inv_spectrum_fx, frameno, sp_aud_decision0, element_brate, mct_on ); return; } Loading Loading
lib_com/prot_fx.h +19 −0 Original line number Diff line number Diff line Loading @@ -10333,6 +10333,25 @@ void ProcessStereoIGF_fx( const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on ); #ifdef FIX_MDCT_STEREO_ENC_STACK void ProcessStereoIGF_fx_64( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Word32 *pITFMDCTSpectrum_fx[CPE_CHANNELS][NB_DIV], /* i : MDCT spectrum fir ITF */ Word64 powerSpec64[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ Word16 exp_powerSpec64[CPE_CHANNELS][NB_DIV], /* i/o: exp of pPowerSpectrum_fx */ Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i : inverse power spectrum */ Word16 *q_pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: Q of pPowerSpectrumMsInv_fx */ Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ Word16 exp_inv_spectrum_fx[CPE_CHANNELS], /* i/o: exp of inv_spectrum_fx */ const Word16 frameno, /* i : flag indicating index of current subfr. */ const Word16 sp_aud_decision0, /* i : sp_aud_decision0 */ const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on /* i : flag MCT mode */ ); #endif void IGFEncApplyStereo_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Loading
lib_enc/ivas_stereo_mdct_core_enc_fx.c +15 −3 Original line number Diff line number Diff line Loading @@ -401,7 +401,12 @@ void stereo_mdct_core_enc_fx( /*--------------------------------------------------------------* * Power spectrum calculation *---------------------------------------------------------------*/ #ifdef FIX_MDCT_STEREO_ENC_STACK Word16 exp, shift1, shift2, norm; #else Word16 length, exp, shift1, shift2, norm; #endif Word32 mdct, mdst, imdct, imdst; FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) Loading Loading @@ -576,6 +581,7 @@ void stereo_mdct_core_enc_fx( IF( ( NE_16( hStereoMdct->mdct_stereo_mode[n], hStereoMdct->IGFStereoMode[n] ) || EQ_16( hStereoMdct->mdct_stereo_mode[n], SMDCT_BW_MS ) ) && !hStereoMdct->isSBAStereoMode ) { IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS]; #ifndef FIX_MDCT_STEREO_ENC_STACK Word32 powerSpec_fx[CPE_CHANNELS][N_MAX], *p_powerSpec_fx[CPE_CHANNELS]; Word16 exp_powSpec[CPE_CHANNELS][N_MAX], *p_exp_powSpec[CPE_CHANNELS]; p_powerSpec_fx[0] = powerSpec_fx[0]; Loading Loading @@ -615,7 +621,7 @@ void stereo_mdct_core_enc_fx( set16_fx( exp_powSpec[ch] + length, 0, sub( N_MAX, length ) ); } } #endif hIGFEnc[0] = sts[0]->hIGFEnc; hIGFEnc[1] = sts[1]->hIGFEnc; hIGFEnc[0]->spec_be_igf_e = p_orig_spectrum_e[0]; Loading @@ -623,9 +629,15 @@ void stereo_mdct_core_enc_fx( move16(); move16(); #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessStereoIGF_fx_64( hStereoMdct, sts, ms_mask, orig_spectrum_fx, powerSpec64, exp_powerSpec64, powerSpecMsInv_fx, q_powerSpecMsInv_fx, inv_spectrum_fx, exp_inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); #else ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask, orig_spectrum_fx, sub( Q31, p_orig_spectrum_e[0] ), sub( Q31, p_orig_spectrum_e[1] ), p_powerSpec_fx, p_exp_powSpec, powerSpecMsInv_fx, q_powerSpecMsInv_fx, inv_spectrum_fx, exp_inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); #endif } ELSE { Loading Loading @@ -676,7 +688,7 @@ void stereo_mdct_core_enc_fx( st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; } #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n ); ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n, hCPE->hCoreCoder[0]->sp_aud_decision0 ); #else L_subframeTCX = idiv1616( st->hTcxEnc->L_frameTCX, nSubframes ); /* Q0 */ Word16 q_spectrum; Loading Loading @@ -758,7 +770,7 @@ void stereo_mdct_core_enc_fx( FOR( n = 0; n < nSubframes; n++ ) { #ifdef FIX_MDCT_STEREO_ENC_STACK ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n ); ProcessIGF_ivas_fx_64( st, N_MAX, st->hTcxEnc->spectrum_fx[n], orig_spectrum_fx[ch][n], p_orig_spectrum_e[ch], powerSpec64[ch], exp_powerSpec64[ch], n, hCPE->hCoreCoder[0]->sp_aud_decision0 ); #else Word16 q_spectrum; L_subframeTCX = idiv1616( st->hTcxEnc->L_frameTCX, nSubframes ); /* Q0 */ Loading
lib_enc/prot_fx_enc.h +9 −8 Original line number Diff line number Diff line Loading @@ -1184,7 +1184,8 @@ void ProcessIGF_ivas_fx_64( const Word16 q_ITFMDCTSpectrum, /* i : Q of MDCT spectrum fir ITF */ const Word64 *pPowerSpectrum64, /* i : MDCT^2 + MDST^2 spectrum, or estimate (*q_powerSpec) */ const Word16 *exp_powerSpec64, /* i : Q of power spectrum */ const Word16 frameno /* i : flag indicating index of current subframe */ const Word16 frameno, /* i : flag indicating index of current subframe */ const Word16 sp_aud_decision0 /* i : first stage switching decision */ ); #endif Loading
lib_enc/tcx_utils_enc_fx.c +89 −16 Original line number Diff line number Diff line Loading @@ -4068,7 +4068,8 @@ void ProcessIGF_ivas_fx_64( const Word16 q_ITFMDCTSpectrum, /* i : Q of MDCT spectrum fir ITF */ const Word64 *pPowerSpectrum64, /* i : MDCT^2 + MDST^2 spectrum, or estimate (*q_powerSpec) */ const Word16 *exp_powerSpec64, /* i/o: Q of power spectrum */ const Word16 frameno /* i : flag indicating index of current subframe */ const Word16 frameno, /* i : flag indicating index of current subframe */ const Word16 sp_aud_decision0 /* i : first stage switching decision */ ) { Word16 i, n1, nsub, length, norm; Loading Loading @@ -4131,7 +4132,79 @@ void ProcessIGF_ivas_fx_64( Scale_sig32( pITFMDCTSpectrum, st->hIGFEnc->infoStopLine, sub( q_spectrum, sub( Q31, q_ITFMDCTSpectrum ) ) ); /* q_spectrum */ ProcessIGF_ivas_fx( st, powerSpec_len, pMDCTSpectrum, &q_spectrum, pITFMDCTSpectrum, q_spectrum, &powerSpec_fx[frameno * L_subframeTCX], &exp_powerSpec[frameno * L_subframeTCX], st->core == TCX_20_CORE, frameno, st->sp_aud_decision0, 0 ); ProcessIGF_ivas_fx( st, powerSpec_len, pMDCTSpectrum, &q_spectrum, pITFMDCTSpectrum, q_spectrum, &powerSpec_fx[frameno * L_subframeTCX], &exp_powerSpec[frameno * L_subframeTCX], st->core == TCX_20_CORE, frameno, sp_aud_decision0, 0 ); return; } /*---------------------------------------------------------------------* * ProcessStereoIGF_fx_64() * * *---------------------------------------------------------------------*/ void ProcessStereoIGF_fx_64( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ Word32 *pITFMDCTSpectrum_fx[CPE_CHANNELS][NB_DIV], /* i : MDCT spectrum fir ITF */ Word64 powerSpec64[CPE_CHANNELS][N_MAX], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ Word16 exp_powerSpec64[CPE_CHANNELS][NB_DIV], /* i/o: exp of pPowerSpectrum_fx */ Word32 *pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i : inverse power spectrum */ Word16 *q_pPowerSpectrumMsInv_fx[CPE_CHANNELS][NB_DIV], /* i/o: Q of pPowerSpectrumMsInv_fx */ Word32 *inv_spectrum_fx[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ Word16 exp_inv_spectrum_fx[CPE_CHANNELS], /* i/o: exp of inv_spectrum_fx */ const Word16 frameno, /* i : flag indicating index of current subfr. */ const Word16 sp_aud_decision0, /* i : sp_aud_decision0 */ const Word32 element_brate, /* i : element bitrate */ const Word16 mct_on /* i : flag MCT mode */ ) { Word16 ch, i, n1, nsub, length, shift1; Word32 powerSpec_fx[CPE_CHANNELS][N_MAX], *p_powerSpec_fx[CPE_CHANNELS]; Word16 exp_powSpec[CPE_CHANNELS][N_MAX], *p_exp_powSpec[CPE_CHANNELS]; p_powerSpec_fx[0] = powerSpec_fx[0]; p_exp_powSpec[0] = exp_powSpec[0]; p_powerSpec_fx[1] = powerSpec_fx[1]; p_exp_powSpec[1] = exp_powSpec[1]; /* Copy powerSpec values from 64 bit buffer to 32 bit buffer */ FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { n1, nsub = 1; length = sts[ch]->hTcxEnc->L_frameTCX; move16(); move16(); IF( NE_16( sts[ch]->hTcxEnc->tcxMode, TCX_20 ) ) { length = shr( sts[ch]->hTcxEnc->L_frameTCX, 1 ); nsub = NB_DIV; move16(); } IF( EQ_16( sts[ch]->last_core, ACELP_CORE ) ) { length = add( length, shr( length, 2 ) ); } FOR( n1 = 0; n1 < nsub; n1++ ) { FOR( i = 0; i < length; i++ ) { /* This doesn't result in saturation */ shift1 = W_norm( powerSpec64[ch][i + n1 * length] ); powerSpec_fx[ch][i + n1 * length] = W_extract_h( W_shl( powerSpec64[ch][i + n1 * length], shift1 ) ); // exp: exp move32(); exp_powSpec[ch][i + n1 * length] = sub( exp_powerSpec64[ch][n1], shift1 ); } } set32_fx( powerSpec_fx[ch] + length, 0, sub( N_MAX, length ) ); set16_fx( exp_powSpec[ch] + length, 0, sub( N_MAX, length ) ); } ProcessStereoIGF_fx( hStereoMdct, sts, ms_mask, pITFMDCTSpectrum_fx, sub( Q31, sts[0]->hIGFEnc->spec_be_igf_e ), sub( Q31, sts[1]->hIGFEnc->spec_be_igf_e ), p_powerSpec_fx, p_exp_powSpec, pPowerSpectrumMsInv_fx, q_pPowerSpectrumMsInv_fx, inv_spectrum_fx, exp_inv_spectrum_fx, frameno, sp_aud_decision0, element_brate, mct_on ); return; } Loading