Loading lib_com/prot_fx.h +2 −0 Original line number Diff line number Diff line Loading @@ -10535,6 +10535,8 @@ void swb_pre_proc_ivas_fx( Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ Word32 *new_swb_speech_fx, /* o : original input signal at 32kHz - Q - q_reImBuffer */ Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz- Q0 */ Word32 *shb_speech_32, /* o : SHB target signal (6-14kHz) at 16kHz- Q - q_reImBuffer */ Word16 *use_shb32, /* o : flags valid data in 32-bit shb buffer for better precision. */ Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer Q - q_reImbuffer */ Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer Q - q_reImbuffer */ Word16 q_reImBuffer, /* i : scale data of real and imag CLDFB buffers */ lib_enc/ivas_core_enc.c +15 −6 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ ivas_error ivas_core_enc( STEREO_TD_ENC_DATA_HANDLE hStereoTD; float *inp[CPE_CHANNELS]; float new_inp_resamp16k[CPE_CHANNELS][L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k] = { { 0 } }; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ float shb_speech[L_FRAME16k]; float hb_speech[L_FRAME16k / 4]; float *new_swb_speech; Loading @@ -106,6 +106,7 @@ ivas_error ivas_core_enc( #ifdef IVAS_FLOAT_FIXED Word32 *new_swb_speech_fx; Word16 shb_speech_fx[L_FRAME16k]; // Q_shb_spch Word32 shb_speech_fx_32[L_FRAME16k]; // Q_shb_spch Word16 Q_shb_spch; Word32 new_swb_speech_buffer_fx[L_FRAME48k + STEREO_DFT_OVL_MAX]; Word16 new_inp_resamp16k_fx[CPE_CHANNELS][L_FRAME16k]; Loading Loading @@ -847,6 +848,7 @@ ivas_error ivas_core_enc( Word32 realBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; Word32 imagBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; Word16 new_swb_speech_16_fx[L_FRAME48k] = { 0 }; Word16 use_shb32 = 0; Word16 q_realImagBuffer = Q_factor_arrL( (float *) &realBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); q_realImagBuffer = s_min( q_realImagBuffer, Q_factor_arrL( (float *) &imagBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ) ); floatToFixed_arrL32( (float *) &realBuffer[n][0][0], (Word32 *) &realBuffer_fx[0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); Loading @@ -858,7 +860,7 @@ ivas_error ivas_core_enc( #else for ( Word32 idx = 0; idx < ( L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); idx++ ) { st->hSignalBuf->input_buff[idx] = (Word16) st->hSignalBuf->input_buff_flt[0]; st->hSignalBuf->input_buff[idx] = (Word16) st->hSignalBuf->input_buff_flt[idx]; } #endif if ( st->element_mode == IVAS_CPE_DFT ) Loading Loading @@ -895,7 +897,7 @@ ivas_error ivas_core_enc( } #endif #endif swb_pre_proc_ivas_fx( st, new_swb_speech_16_fx, new_swb_speech_fx, shb_speech_fx, realBuffer_fx, imagBuffer_fx, q_realImagBuffer, hCPE ); swb_pre_proc_ivas_fx( st, new_swb_speech_16_fx, new_swb_speech_fx, shb_speech_fx, shb_speech_fx_32, &use_shb32, realBuffer_fx, imagBuffer_fx, q_realImagBuffer, hCPE ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS fixedToFloat_arr( (Word16 *) &st->hBWE_TD->old_speech_shb_fx[0], (float *) &st->hBWE_TD->old_speech_shb[0], 0, L_LOOK_16k + L_SUBFR16k ); fixedToFloat_arr( (Word16 *) &st->hBWE_FD->old_fdbwe_speech_fx[0], (float *) &st->hBWE_FD->old_fdbwe_speech[0], 0, L_FRAME48k ); Loading @@ -906,7 +908,14 @@ ivas_error ivas_core_enc( } fixedToFloat_arrL32( (Word32 *) &st->cldfbSynTd->cldfb_state_fx[0], (float *) &st->cldfbSynTd->cldfb_state[0], q_realImagBuffer, st->cldfbSynTd->p_filter_length ); fixedToFloat_arr( new_swb_speech_16_fx, new_swb_speech, 0, L_FRAME48k ); if ( use_shb32 == 0 ) { fixedToFloat_arr( shb_speech_fx, shb_speech, 0, L_FRAME16k ); } else { fixedToFloat_arrL( shb_speech_fx_32, shb_speech, q_realImagBuffer - 1, L_FRAME16k ); } fixedToFloat_arrL32( (Word32 *) &realBuffer_fx[0][0], (float *) &realBuffer[n][0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); fixedToFloat_arrL32( (Word32 *) &imagBuffer_fx[0][0], (float *) &imagBuffer[n][0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); st->hBWE_TD->cldfbHBLT_flt = fix16_to_float( st->hBWE_TD->cldfbHBLT, Q13 ); Loading lib_enc/swb_pre_proc.c +13 −1 Original line number Diff line number Diff line Loading @@ -282,6 +282,8 @@ void swb_pre_proc_ivas_fx( Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ Word32 *new_swb_speech_fx, /* o : original input signal at 32kHz - Q - q_reImBuffer */ Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz- Q0 */ Word32 *shb_speech_32, /* o : SHB target signal (6-14kHz) at 16kHz- Q - q_reImBuffer */ Word16 *use_shb32, /* o : flags valid data in 32-bit shb buffer for better precision. */ Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer Q - q_reImbuffer */ Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer Q - q_reImbuffer */ Word16 q_reImBuffer, /* i : scale data of real and imag CLDFB buffers */ Loading @@ -308,9 +310,11 @@ void swb_pre_proc_ivas_fx( Word32 lbEner; Word16 exp_lbEner = 0; Word16 Sample_Delay_SWB_BWE32k, lMemRecalc32k, dft_ovl32k; Word32 shb_speech_32[L_FRAME16k]; Word32 one_by_50_Q31 = 42949673; *use_shb32 = 0; move16(); lMemRecalc32k = NS2SA_FX2( 32000, L_MEM_RECALC_NS ); move16(); // exp_lbEner move16(); // lMemRecalc32k Loading Loading @@ -783,6 +787,8 @@ void swb_pre_proc_ivas_fx( // Copy_Scale_sig_16_32((const Word16 *)&shb_speech[0], (Word32 *)&shb_speech_32[0], L_FRAME16k,Q16); cldfbSynthesis_ivas_fx( realBufferFlipped, imagBufferFlipped, shb_speech_32, -1, st->cldfbSynTd ); *use_shb32 = 1; move16(); Copy_Scale_sig_32_16( (const Word32 *) &shb_speech_32[0], (Word16 *) &shb_speech[0], L_FRAME16k, negate( sub( q_reImBuffer, 1 ) ) ); } Loading Loading @@ -888,6 +894,8 @@ void swb_pre_proc_ivas_fx( IF( ( EQ_16( st->bwidth, FB ) || st->core == ACELP_CORE ) && ( st->element_mode == EVS_MONO ) ) { InitSWBencBufferStates_fx( st->hBWE_TD, shb_speech ); *use_shb32 = 0; move16(); } ELSE { Loading Loading @@ -932,6 +940,8 @@ void swb_pre_proc_ivas_fx( } Decimate_allpass_steep_fx( spchTmp, hBWE_TD->state_ana_filt_shb_fx, L_FRAME32k, shb_speech ); *use_shb32 = 0; move16(); Copy( shb_speech + L_FRAME16k - ( L_LOOK_16k + L_SUBFR16k ), hBWE_TD->old_speech_shb_fx, L_LOOK_16k + L_SUBFR16k ); Loading Loading @@ -971,6 +981,8 @@ void swb_pre_proc_ivas_fx( shb_speech[i] = mult_r( mult_r( i, 983 /*0.03f Q15*/ ), shb_speech[2 * delay - 1 - i] ); move16(); } *use_shb32 = 0; move16(); } return; Loading Loading
lib_com/prot_fx.h +2 −0 Original line number Diff line number Diff line Loading @@ -10535,6 +10535,8 @@ void swb_pre_proc_ivas_fx( Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ Word32 *new_swb_speech_fx, /* o : original input signal at 32kHz - Q - q_reImBuffer */ Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz- Q0 */ Word32 *shb_speech_32, /* o : SHB target signal (6-14kHz) at 16kHz- Q - q_reImBuffer */ Word16 *use_shb32, /* o : flags valid data in 32-bit shb buffer for better precision. */ Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer Q - q_reImbuffer */ Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer Q - q_reImbuffer */ Word16 q_reImBuffer, /* i : scale data of real and imag CLDFB buffers */
lib_enc/ivas_core_enc.c +15 −6 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ ivas_error ivas_core_enc( STEREO_TD_ENC_DATA_HANDLE hStereoTD; float *inp[CPE_CHANNELS]; float new_inp_resamp16k[CPE_CHANNELS][L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k] = { { 0 } }; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ float shb_speech[L_FRAME16k]; float hb_speech[L_FRAME16k / 4]; float *new_swb_speech; Loading @@ -106,6 +106,7 @@ ivas_error ivas_core_enc( #ifdef IVAS_FLOAT_FIXED Word32 *new_swb_speech_fx; Word16 shb_speech_fx[L_FRAME16k]; // Q_shb_spch Word32 shb_speech_fx_32[L_FRAME16k]; // Q_shb_spch Word16 Q_shb_spch; Word32 new_swb_speech_buffer_fx[L_FRAME48k + STEREO_DFT_OVL_MAX]; Word16 new_inp_resamp16k_fx[CPE_CHANNELS][L_FRAME16k]; Loading Loading @@ -847,6 +848,7 @@ ivas_error ivas_core_enc( Word32 realBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; Word32 imagBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; Word16 new_swb_speech_16_fx[L_FRAME48k] = { 0 }; Word16 use_shb32 = 0; Word16 q_realImagBuffer = Q_factor_arrL( (float *) &realBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); q_realImagBuffer = s_min( q_realImagBuffer, Q_factor_arrL( (float *) &imagBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ) ); floatToFixed_arrL32( (float *) &realBuffer[n][0][0], (Word32 *) &realBuffer_fx[0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); Loading @@ -858,7 +860,7 @@ ivas_error ivas_core_enc( #else for ( Word32 idx = 0; idx < ( L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); idx++ ) { st->hSignalBuf->input_buff[idx] = (Word16) st->hSignalBuf->input_buff_flt[0]; st->hSignalBuf->input_buff[idx] = (Word16) st->hSignalBuf->input_buff_flt[idx]; } #endif if ( st->element_mode == IVAS_CPE_DFT ) Loading Loading @@ -895,7 +897,7 @@ ivas_error ivas_core_enc( } #endif #endif swb_pre_proc_ivas_fx( st, new_swb_speech_16_fx, new_swb_speech_fx, shb_speech_fx, realBuffer_fx, imagBuffer_fx, q_realImagBuffer, hCPE ); swb_pre_proc_ivas_fx( st, new_swb_speech_16_fx, new_swb_speech_fx, shb_speech_fx, shb_speech_fx_32, &use_shb32, realBuffer_fx, imagBuffer_fx, q_realImagBuffer, hCPE ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS fixedToFloat_arr( (Word16 *) &st->hBWE_TD->old_speech_shb_fx[0], (float *) &st->hBWE_TD->old_speech_shb[0], 0, L_LOOK_16k + L_SUBFR16k ); fixedToFloat_arr( (Word16 *) &st->hBWE_FD->old_fdbwe_speech_fx[0], (float *) &st->hBWE_FD->old_fdbwe_speech[0], 0, L_FRAME48k ); Loading @@ -906,7 +908,14 @@ ivas_error ivas_core_enc( } fixedToFloat_arrL32( (Word32 *) &st->cldfbSynTd->cldfb_state_fx[0], (float *) &st->cldfbSynTd->cldfb_state[0], q_realImagBuffer, st->cldfbSynTd->p_filter_length ); fixedToFloat_arr( new_swb_speech_16_fx, new_swb_speech, 0, L_FRAME48k ); if ( use_shb32 == 0 ) { fixedToFloat_arr( shb_speech_fx, shb_speech, 0, L_FRAME16k ); } else { fixedToFloat_arrL( shb_speech_fx_32, shb_speech, q_realImagBuffer - 1, L_FRAME16k ); } fixedToFloat_arrL32( (Word32 *) &realBuffer_fx[0][0], (float *) &realBuffer[n][0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); fixedToFloat_arrL32( (Word32 *) &imagBuffer_fx[0][0], (float *) &imagBuffer[n][0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); st->hBWE_TD->cldfbHBLT_flt = fix16_to_float( st->hBWE_TD->cldfbHBLT, Q13 ); Loading
lib_enc/swb_pre_proc.c +13 −1 Original line number Diff line number Diff line Loading @@ -282,6 +282,8 @@ void swb_pre_proc_ivas_fx( Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ Word32 *new_swb_speech_fx, /* o : original input signal at 32kHz - Q - q_reImBuffer */ Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz- Q0 */ Word32 *shb_speech_32, /* o : SHB target signal (6-14kHz) at 16kHz- Q - q_reImBuffer */ Word16 *use_shb32, /* o : flags valid data in 32-bit shb buffer for better precision. */ Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer Q - q_reImbuffer */ Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer Q - q_reImbuffer */ Word16 q_reImBuffer, /* i : scale data of real and imag CLDFB buffers */ Loading @@ -308,9 +310,11 @@ void swb_pre_proc_ivas_fx( Word32 lbEner; Word16 exp_lbEner = 0; Word16 Sample_Delay_SWB_BWE32k, lMemRecalc32k, dft_ovl32k; Word32 shb_speech_32[L_FRAME16k]; Word32 one_by_50_Q31 = 42949673; *use_shb32 = 0; move16(); lMemRecalc32k = NS2SA_FX2( 32000, L_MEM_RECALC_NS ); move16(); // exp_lbEner move16(); // lMemRecalc32k Loading Loading @@ -783,6 +787,8 @@ void swb_pre_proc_ivas_fx( // Copy_Scale_sig_16_32((const Word16 *)&shb_speech[0], (Word32 *)&shb_speech_32[0], L_FRAME16k,Q16); cldfbSynthesis_ivas_fx( realBufferFlipped, imagBufferFlipped, shb_speech_32, -1, st->cldfbSynTd ); *use_shb32 = 1; move16(); Copy_Scale_sig_32_16( (const Word32 *) &shb_speech_32[0], (Word16 *) &shb_speech[0], L_FRAME16k, negate( sub( q_reImBuffer, 1 ) ) ); } Loading Loading @@ -888,6 +894,8 @@ void swb_pre_proc_ivas_fx( IF( ( EQ_16( st->bwidth, FB ) || st->core == ACELP_CORE ) && ( st->element_mode == EVS_MONO ) ) { InitSWBencBufferStates_fx( st->hBWE_TD, shb_speech ); *use_shb32 = 0; move16(); } ELSE { Loading Loading @@ -932,6 +940,8 @@ void swb_pre_proc_ivas_fx( } Decimate_allpass_steep_fx( spchTmp, hBWE_TD->state_ana_filt_shb_fx, L_FRAME32k, shb_speech ); *use_shb32 = 0; move16(); Copy( shb_speech + L_FRAME16k - ( L_LOOK_16k + L_SUBFR16k ), hBWE_TD->old_speech_shb_fx, L_LOOK_16k + L_SUBFR16k ); Loading Loading @@ -971,6 +981,8 @@ void swb_pre_proc_ivas_fx( shb_speech[i] = mult_r( mult_r( i, 983 /*0.03f Q15*/ ), shb_speech[2 * delay - 1 - i] ); move16(); } *use_shb32 = 0; move16(); } return; Loading