diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index a28bea6cd93424d808e35a89912424e703f16278..c8da9fea14c9ed02acf27b68d6689bc07d0370be 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -1359,11 +1359,20 @@ void stereo_tcx_init_dec_fx( void stereo_icBWE_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef REMOVE_SCALING_SHB_SPEECH + const Word16 shb_speech_ref_fx16[], /* i : SHB speech ref channel Q0*/ + Word16 shb_speech_nonref_fx_16[], /* i/o: SHB speech non-ref channel shb_speech_nonref_e*/ +#else const Word32 shb_speech_ref_fx[], /* i : SHB speech ref channel */ const Word16 shb_speech_ref_e, /* i : SHB speech ref channel */ Word32 shb_speech_nonref_fx[], /* i/o: SHB speech non-ref channel */ +#endif Word16 shb_speech_nonref_e, /* i/o: SHB speech non-ref channel */ +#ifdef REMOVE_SCALING_SHB_SPEECH + const Word16 *voice_factors_fx /* i : voicing factors Q15 */ +#else const Word32 *voice_factors_fx /* i : voicing factors Q31 */ +#endif ); void initMdctStereoDecData_fx( @@ -6382,7 +6391,7 @@ UWord16 get_indice_st( void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Q0*/ + Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples Qnew-1*/ Word16 old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP Qx*/ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe Q6*/ ); diff --git a/lib_com/options.h b/lib_com/options.h index b6f1c2bc0b76b6aa158b6c90e51f700471c8da34..a22d8ee2fa364c772f04aca564d67bdb654d73e5 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -75,7 +75,6 @@ /*#define DISABLE_LIMITER*/ /* ################### Start MAINTENANCE switches ########################### */ -#define FIX_2255_ISAR_RENDER_POSES /* VA: issue 2255: fix missing check in isar_render_poses() */ /* ################### Start BE switches ################################# */ /* only BE switches wrt wrt. TS 26.251 V3.0 */ @@ -85,6 +84,7 @@ #define FIX_1999_TEMPORARY_DISABLE_DIST_ATT_CHECK /* Eri: Issue 1999: Range check on float values of distance attenuation, while the float values are not propagated to this function. The test is not correct, but configurable distance attenuation is not used in Characterization.*/ #define TMP_1342_WORKAROUND_DEC_FLUSH_BROKEN_IN_SR /* FhG: Temporary workaround for incorrect implementation of decoder flush with split rendering */ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ +#define FIX_2255_ISAR_RENDER_POSES /* VA: issue 2255: fix missing check in isar_render_poses() */ #define FIX_1904_HARM_GSC_ENC /* VA: #1904 Harmonization of EVS and IVAS GSC code */ #define FIX_1478_UNINIT_ON_BFI /* VA: Fix issue 1478 where a vector is partly un-initialized during bfi */ #define FIX_2318_CLANG_DECODER /* VA: basop issue 2318: Initialize command-line parameter arg.non_diegetic_pan_gain_fx */ @@ -114,6 +114,7 @@ #define FIX_2370_UNUSED_BUFFERS_CORE_ENC /* VA: basop issue 2370: remove temporary input buffers in core-encoder */ #define FIX_2376_FIX_USAN_PRE_PROC /* VA: basop issue 2376: Resolve "USAN: SEGV in ivas_compute_core_buffers_fx() */ #define FIX_2367_REMOVE_CODE_ICBWE /* VA: basop issue 2367: Remove IC-BWE obsolete code */ +#define REMOVE_SCALING_SHB_SPEECH /* VA: remove unnecessary scaling and 32-bit buffers from ivas_core_enc_fx() */ /* #################### End BE switches ################################## */ @@ -130,7 +131,6 @@ /* ##################### End NON-BE switches ########################### */ - /* ################## End MAINTENANCE switches ######################### */ /* clang-format on */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index cf36b5c6542b8096970df2e7c88f29ae128426e0..6c3d24ce4c4187cd3d0e2512c4dd3a3b26d76ee0 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -10336,14 +10336,18 @@ void Copy_Scale_sig32( ); void swb_pre_proc_ivas_fx( - Encoder_State *st, /* i/o: encoder state structure */ - Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ + Encoder_State *st, /* i/o: encoder state structure */ + Word16 *new_swb_speech, /* o : original input signal at 32kHz - Q0 */ +#ifndef REMOVE_SCALING_SHB_SPEECH 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- Q(Q_shb_spch) */ +#endif + Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz - Q0*/ +#ifndef REMOVE_SCALING_SHB_SPEECH Word16 *Q_shb_spch, +#endif 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 */ + Word16 q_reImBuffer, /* i : scale data of real and imag CLDFB buffers*/ CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ ); diff --git a/lib_enc/cng_enc_fx.c b/lib_enc/cng_enc_fx.c index 2903c2d09d813b2a80ed323a6cdfb081e138d250..7e63dc13932dd04ed85dcb62901d0c7aa5e36a71 100644 --- a/lib_enc/cng_enc_fx.c +++ b/lib_enc/cng_enc_fx.c @@ -2964,9 +2964,9 @@ void swb_CNG_enc_fx( #else void swb_CNG_enc_ivas_fx( #endif - Encoder_State *st, /* i/o: State structure */ - const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ - const Word16 *syn_12k8_16k_fx /* i : ACELP core synthesis at 12.8kHz or 16kHz Q0 */ + Encoder_State *st, /* i/o: State structure */ + const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ + const Word16 *syn_12k8_16k_fx /* i : ACELP core synthesis at 12.8kHz or 16kHz Q0 */ ) { Word16 shb_SID_updt; diff --git a/lib_enc/ivas_core_enc_fx.c b/lib_enc/ivas_core_enc_fx.c index 6362e6cdb706d2646c782ca27d251aa96975d3a4..35d7f45b3e1d45fc04749bb7e561ff2b5d737710 100644 --- a/lib_enc/ivas_core_enc_fx.c +++ b/lib_enc/ivas_core_enc_fx.c @@ -87,12 +87,16 @@ ivas_error ivas_core_enc_fx( STEREO_ICBWE_ENC_HANDLE hStereoICBWE; STEREO_TD_ENC_DATA_HANDLE hStereoTD; Word16 voice_factors_fx[CPE_CHANNELS][NB_SUBFR16k]; /* Q15 */ +#ifndef REMOVE_SCALING_SHB_SPEECH Word32 shb_speech_fx32[L_FRAME16k]; Word32 *new_swb_speech_fx; +#endif Word16 *inp_fx[CPE_CHANNELS]; Word16 *shb_speech_fx; +#ifndef REMOVE_SCALING_SHB_SPEECH Word16 Q_shb_spch; Word32 new_swb_speech_buffer_fx[L_FRAME48k + STEREO_DFT_OVL_MAX]; +#endif Word16 new_inp_resamp16k_fx[CPE_CHANNELS][L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ Word16 *hb_speech_fx; Word32 bwe_exc_extended_fx[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; /* 2 * Q_new */ @@ -110,8 +114,9 @@ ivas_error ivas_core_enc_fx( Word16 max_num_indices_BWE; Word16 i, shift, Q_min; +#ifndef REMOVE_SCALING_SHB_SPEECH set32_fx( new_swb_speech_buffer_fx, 0, L_FRAME48k + STEREO_DFT_OVL_MAX ); - +#endif FOR( i = 0; i < CPE_CHANNELS; i++ ) { set_zero_fx( bwe_exc_extended_fx[i], L_FRAME32k + NL_BUFF_OFFSET ); @@ -124,9 +129,10 @@ ivas_error ivas_core_enc_fx( error = IVAS_ERR_OK; move32(); +#ifndef REMOVE_SCALING_SHB_SPEECH Q_shb_spch = 0; move16(); - +#endif /*------------------------------------------------------------------* * General initialization *-----------------------------------------------------------------*/ @@ -657,7 +663,6 @@ ivas_error ivas_core_enc_fx( st->q_old_inp = -1; move16(); #endif - /*---------------------------------------------------------------------* * Postprocessing for ACELP/HQ core switching *---------------------------------------------------------------------*/ @@ -712,7 +717,9 @@ ivas_error ivas_core_enc_fx( } #endif +#ifndef REMOVE_SCALING_SHB_SPEECH new_swb_speech_fx = new_swb_speech_buffer_fx + STEREO_DFT_OVL_MAX; +#endif new_swb_speech_fx_16 = new_swb_speech_buffer_fx_16 + STEREO_DFT_OVL_MAX; set16_fx( new_swb_speech_buffer_fx_16, 0, L_FRAME48k + STEREO_DFT_OVL_MAX ); shb_speech_fx = new_inp_resamp16k_fx[n]; /* reuse existing buffer: shb_speech[L_FRAME16k] */ @@ -745,7 +752,11 @@ ivas_error ivas_core_enc_fx( st->cldfbSynTd->Q_cldfb_state = sub( q_re_im_buf[n], 1 ); } +#ifdef REMOVE_SCALING_SHB_SPEECH + swb_pre_proc_ivas_fx( st, new_swb_speech_fx_16, shb_speech_fx, realBuffer_fx[n], imagBuffer_fx[n], q_re_im_buf[n], hCPE ); +#else swb_pre_proc_ivas_fx( st, new_swb_speech_fx_16, new_swb_speech_fx, shb_speech_fx, &Q_shb_spch, realBuffer_fx[n], imagBuffer_fx[n], q_re_im_buf[n], hCPE ); +#endif st->cldfbSynTd->Q_cldfb_state = sub( q_re_im_buf[n], 1 ); } @@ -757,6 +768,7 @@ ivas_error ivas_core_enc_fx( } } +#ifndef REMOVE_SCALING_SHB_SPEECH Word16 Q_shb_spch_16 = Q_shb_spch; move16(); #ifdef FIX_2344_ALIGN_PREPROC @@ -767,15 +779,17 @@ ivas_error ivas_core_enc_fx( shift = add( getScaleFactor16( shb_speech_fx, L_FRAME16k ), Q16 ); Copy_Scale_sig_16_32_no_sat( shb_speech_fx, shb_speech_fx32, L_FRAME16k, shift ); // Q_shb_spch Q_shb_spch = add( Q_shb_spch, shift ); - - IF( st->hBWE_FD ) +#endif + IF( st->hBWE_FD ) // VE: to be moved to the end of swb_pre_proc_ivas_fx() { shift = getScaleFactor16( st->hBWE_FD->L_old_wtda_swb_fx, L_FRAME48k ); st->Q_old_wtda = add( st->Q_old_wtda, shift ); move16(); Scale_sig( st->hBWE_FD->L_old_wtda_swb_fx, L_FRAME48k, shift ); // st->Q_old_wtda } +#ifndef REMOVE_SCALING_SHB_SPEECH } +#endif /* SWB TBE encoder */ test(); @@ -788,7 +802,11 @@ ivas_error ivas_core_enc_fx( Word16 Q_fb_exc; Word16 fb_exc_fx[L_FRAME16k]; +#ifdef REMOVE_SCALING_SHB_SPEECH + swb_tbe_enc_ivas_fx( st, hStereoICBWE, shb_speech_fx, bwe_exc_extended_fx[n], voice_factors_fx[n], fb_exc_fx, &Q_fb_exc, Q_new[n], 0, st->voicing_fx, pitch_buf_fx[n] ); +#else swb_tbe_enc_ivas_fx( st, hStereoICBWE, shb_speech_fx, bwe_exc_extended_fx[n], voice_factors_fx[n], fb_exc_fx, &Q_fb_exc, Q_new[n], Q_shb_spch_16, st->voicing_fx, pitch_buf_fx[n] ); +#endif IF( EQ_16( st->extl, FB_TBE ) ) { @@ -799,9 +817,15 @@ ivas_error ivas_core_enc_fx( } ELSE IF( EQ_16( st->extl, SWB_BWE ) || EQ_16( st->extl, FB_BWE ) ) { +#ifndef REMOVE_SCALING_SHB_SPEECH Copy_Scale_sig_32_16( shb_speech_fx32, shb_speech_fx, L_FRAME16k, -Q16 ); // Q_shb_spch - 16 +#endif /* SWB(FB) BWE encoder */ +#ifdef REMOVE_SCALING_SHB_SPEECH + swb_bwe_enc_ivas_fx( st, last_element_mode, old_inp_12k8_fx[n], old_inp_16k_fx[n], old_syn_12k8_16k_fx[n], new_swb_speech_fx_16, st->q_inp, shb_speech_fx, sub( Q_new[n], 1 ) ); +#else swb_bwe_enc_ivas_fx( st, last_element_mode, old_inp_12k8_fx[n], old_inp_16k_fx[n], old_syn_12k8_16k_fx[n], new_swb_speech_fx_16, st->q_inp, shb_speech_fx, sub( Q_shb_spch, Q16 ), sub( Q_new[n], 1 ) ); +#endif } Scale_sig( old_syn_12k8_16k_fx[n], L_FRAME16k, sub( Q1, Q_new[n] ) ); // Q0 @@ -825,9 +849,11 @@ ivas_error ivas_core_enc_fx( IF( st->hTdCngEnc != NULL && st->Opt_DTX_ON && ( GE_16( input_frame, L_FRAME32k ) || EQ_16( st->element_mode, IVAS_CPE_DFT ) ) ) { /* SHB DTX/CNG encoder */ +#ifndef REMOVE_SCALING_SHB_SPEECH Copy_Scale_sig_32_16( shb_speech_fx32, shb_speech_fx, L_FRAME16k, negate( Q_shb_spch ) ); // Q0 +#endif #ifdef HARM_NON_LINEARITY - swb_CNG_enc_fx( st, shb_speech_fx /* Unmodified */, old_syn_12k8_16k_fx[n] ); + swb_CNG_enc_fx( st, shb_speech_fx, old_syn_12k8_16k_fx[n] ); #else swb_CNG_enc_ivas_fx( st, shb_speech_fx /* Unmodified */, old_syn_12k8_16k_fx[n] ); #endif @@ -846,19 +872,24 @@ ivas_error ivas_core_enc_fx( test(); IF( n == 0 && GE_32( input_Fs, 32000 ) && hStereoICBWE != NULL ) { +#ifndef FIX_2367_REMOVE_CODE_ICBWE #ifdef FIX_2367_REMOVE_CODE_ICBWE Word16 q_new_swb_speech_buffer = st->q_inp; #endif Word32 voice_factors_fx32[CPE_CHANNELS][NB_SUBFR16k]; stereo_icBWE_preproc_fx( hCPE, input_frame, new_swb_speech_buffer_fx_16 /*tmp buffer*/, q_new_swb_speech_buffer ); - q_new_swb_speech_buffer = add( q_new_swb_speech_buffer, 16 ); + q_new_swb_speech_buffer = add( q_new_swb_speech_buffer, Q16 ); Copy_Scale_sig_16_32_no_sat( new_swb_speech_buffer_fx_16, new_swb_speech_buffer_fx, L_FRAME48k + STEREO_DFT_OVL_MAX, Q16 ); // q_new_swb_speech_buffer+st->q_inp - 16 - > q_new_swb_speech_buffer+st->q_inp Copy_Scale_sig_16_32_no_sat( voice_factors_fx[0], voice_factors_fx32[0], NB_SUBFR16k, Q16 ); // Q31 stereo_icBWE_enc_fx( hCPE, shb_speech_fx32, sub( Q31, Q_shb_spch ), new_swb_speech_buffer_fx, sub( Q31, q_new_swb_speech_buffer ), voice_factors_fx32[0] ); -#ifndef FIX_2367_REMOVE_CODE_ICBWE +#else + stereo_icBWE_preproc_fx( hCPE, input_frame, new_swb_speech_buffer_fx_16 /*tmp buffer*/, st->q_inp ); + stereo_icBWE_enc_fx( hCPE, shb_speech_fx, new_swb_speech_buffer_fx_16, st->q_inp, voice_factors_fx[0] ); +#endif +#ifndef FIX_2367_REMOVE_CODE_ICBWE IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) ) { test(); diff --git a/lib_enc/ivas_stereo_icbwe_enc_fx.c b/lib_enc/ivas_stereo_icbwe_enc_fx.c index 7ae50b177bd740229ab7522111bf5d9eabd56785..366b93c26eb1bcf487247623ee4adcff1537e633 100644 --- a/lib_enc/ivas_stereo_icbwe_enc_fx.c +++ b/lib_enc/ivas_stereo_icbwe_enc_fx.c @@ -605,7 +605,6 @@ static void icbwe_dft_stereo_param_fx( return; } - /*-------------------------------------------------------------------* * stereo_icBWE_enc() * @@ -613,12 +612,21 @@ static void icbwe_dft_stereo_param_fx( *-------------------------------------------------------------------*/ void stereo_icBWE_enc_fx( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const Word32 shb_speech_ref_fx[], /* i : SHB speech ref channel Q31-shb_speech_ref_e*/ - const Word16 shb_speech_ref_e, /* i : SHB speech ref channel */ - Word32 shb_speech_nonref_fx[], /* i/o: SHB speech non-ref channel Q31-shb_speech_nonref_e*/ - Word16 shb_speech_nonref_e, /* i/o: SHB speech non-ref channel */ - const Word32 *voice_factors_fx /* i : voicing factors Q31 */ + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ +#ifdef REMOVE_SCALING_SHB_SPEECH + const Word16 shb_speech_ref_fx16[], /* i : SHB speech ref channel Q0*/ + Word16 shb_speech_nonref_fx_16[], /* i/o: SHB speech non-ref channel shb_speech_nonref_e*/ +#else + const Word32 shb_speech_ref_fx[], /* i : SHB speech ref channel shb_speech_ref_e*/ + const Word16 shb_speech_ref_e, /* i : SHB speech ref channel */ + Word32 shb_speech_nonref_fx[], /* i/o: SHB speech non-ref channel Q31-shb_speech_nonref_e*/ +#endif + Word16 shb_speech_nonref_e, /* i/o: SHB speech non-ref channel */ +#ifdef REMOVE_SCALING_SHB_SPEECH + const Word16 *voice_factors_fx16 /* i : voicing factors Q15 */ +#else + const Word32 *voice_factors_fx /* i : voicing factors Q31 */ +#endif ) { Word16 i, j, k, nbSubFr; @@ -642,6 +650,21 @@ void stereo_icBWE_enc_fx( Word32 temp1_fx, temp2_fx; Word16 temp1_e, temp2_e, shb_frame_ref_e, shb_frame_nonref_e, gDes_e, tmp, exp; +#ifdef REMOVE_SCALING_SHB_SPEECH + Word32 shb_speech_ref_fx[L_FRAME16k]; + Word16 shb_speech_ref_e; + Word32 shb_speech_nonref_fx[L_FRAME48k + STEREO_DFT_OVL_MAX]; + Word32 voice_factors_fx[NB_SUBFR16k]; + + shb_speech_ref_e = add( getScaleFactor16( shb_speech_ref_fx16, L_FRAME16k ), Q16 ); + Copy_Scale_sig_16_32_no_sat( shb_speech_ref_fx16, shb_speech_ref_fx, L_FRAME16k, shb_speech_ref_e ); + shb_speech_ref_e = Q31 - shb_speech_ref_e; + + shb_speech_nonref_e = Q15 - shb_speech_nonref_e; + Copy_Scale_sig_16_32_no_sat( shb_speech_nonref_fx_16, shb_speech_nonref_fx, L_FRAME48k + STEREO_DFT_OVL_MAX, Q16 ); // q_new_swb_speech_buffer+st->q_inp - 16 - > q_new_swb_speech_buffer+st->q_inp + Copy_Scale_sig_16_32_no_sat( voice_factors_fx16, voice_factors_fx, NB_SUBFR16k, Q16 ); // Q31 +#endif + /* initialization */ hStereoDft = hCPE->hStereoDft; hStereoICBWE = hCPE->hStereoICBWE; diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index f4abb182a15bcccb61a4326c5c208a5309b474b0..fc5fa2eeb774f76c76812d27ef665ab0063f66f0 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -599,14 +599,20 @@ void swb_bwe_enc_ivas_fx( const Word16 *old_syn_12k8_16k_fx, /* i : ACELP core synthesis at 12.8kHz or 16kHz */ const Word16 *new_swb_speech_fx, /* i : original input signal at 32kHz */ const Word16 Q_new_swb_speech, /* i : Q for new_swb_speech_fx */ - Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ +#ifdef REMOVE_SCALING_SHB_SPEECH + Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ + const Word16 Q_slb_speech +#else + Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ Word16 Q_shb_speech, - Word16 Q_slb_speech ); + Word16 Q_slb_speech +#endif +); void swb_CNG_enc_fx( - Encoder_State *st_fx, /* i/o: State structure */ - const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ - const Word16 *syn_12k8_16k_fx /* i : ACELP core synthesis at 12.8kHz or 16kHz */ + Encoder_State *st_fx, /* i/o: State structure */ + const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ + const Word16 *syn_12k8_16k_fx /* i : ACELP core synthesis at 12.8kHz or 16kHz */ ); #ifndef HARM_NON_LINEARITY @@ -649,7 +655,7 @@ void swb_tbe_enc_fx( void swb_tbe_enc_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ - Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q_shb */ + Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ Word32 *bwe_exc_extended, /* i : bandwidth extended exciatation 2 * Q_new */ const Word16 voice_factors_fx[], /* i : voicing factors Q15 */ Word16 *White_exc16k_fx, /* o : shaped white excitation for the FB TBE Q_white_exc */ diff --git a/lib_enc/swb_bwe_enc_fx.c b/lib_enc/swb_bwe_enc_fx.c index 6e4e8b391b18c386157accd005f101464f2bfe68..e07f797771aa552fd80693a46c09249649d68479 100644 --- a/lib_enc/swb_bwe_enc_fx.c +++ b/lib_enc/swb_bwe_enc_fx.c @@ -262,6 +262,7 @@ void wb_bwe_enc_ivas_fx( * * SWB BWE encoder (only for 32kHz signals) *-------------------------------------------------------------------*/ + void swb_bwe_enc_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 last_element_mode, /* i : last element mode */ @@ -270,9 +271,15 @@ void swb_bwe_enc_ivas_fx( const Word16 *old_syn_12k8_16k_fx, /* i : ACELP core synthesis at 12.8kHz or 16kHz */ const Word16 *new_swb_speech_fx, /* i : original input signal at 32kHz */ const Word16 Q_new_swb_speech, /* i : Q for new_swb_speech_fx */ - Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ +#ifdef REMOVE_SCALING_SHB_SPEECH + Word16 *shb_speech_fx_Q0, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ + const Word16 Q_slb_speech +#else + Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz */ Word16 Q_shb_speech, - Word16 Q_slb_speech ) + Word16 Q_slb_speech +#endif +) { Word16 i; Word16 *new_input_fx; @@ -304,14 +311,23 @@ void swb_bwe_enc_ivas_fx( move16(); Word16 fb_band_begin; Word16 q_new_input_hp; +#ifdef REMOVE_SCALING_SHB_SPEECH + Word16 shb_speech_fx[L_FRAME16k]; + Word16 Q_shb_speech; +#endif FD_BWE_ENC_HANDLE hBWE_FD = st_fx->hBWE_FD; TD_BWE_ENC_HANDLE hBWE_TD = st_fx->hBWE_TD; +#ifdef REMOVE_SCALING_SHB_SPEECH + Q_shb_speech = getScaleFactor16( shb_speech_fx_Q0, L_FRAME16k ); + Copy_Scale_sig( shb_speech_fx_Q0, shb_speech_fx, L_FRAME16k, Q_shb_speech ); // Q0 -> Q_shb_spch +#endif /*---------------------------------------------------------------------* * Delay the original input signal to be synchronized with ACELP core synthesis *---------------------------------------------------------------------*/ + IF( EQ_16( st_fx->extl, FB_BWE ) ) { inner_frame = L_FRAME48k; diff --git a/lib_enc/swb_pre_proc_fx.c b/lib_enc/swb_pre_proc_fx.c index 04d546ffa2e0992aa69bdf54afcf36864443d8a5..107d85ccd7661b939825158e26446fd5fc2eda3b 100644 --- a/lib_enc/swb_pre_proc_fx.c +++ b/lib_enc/swb_pre_proc_fx.c @@ -771,17 +771,20 @@ void swb_pre_proc_fx( * - Common SWB TBE and SWB BWE pre-processing *-------------------------------------------------------------------*/ -/*full implementation pending*/ void swb_pre_proc_ivas_fx( - Encoder_State *st, /* i/o: encoder state structure */ - Word16 *new_swb_speech, /* o : original input signal at 32kHz - st->q_inp */ + Encoder_State *st, /* i/o: encoder state structure */ + Word16 *new_swb_speech, /* o : original input signal at 32kHz - st->q_inp */ +#ifndef REMOVE_SCALING_SHB_SPEECH 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- Q(Q_shb_spch) */ +#endif + Word16 *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz - Q0 */ +#ifndef REMOVE_SCALING_SHB_SPEECH Word16 *Q_shb_spch, - 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 */ - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ +#endif + 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 */ + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ ) { Word16 Sample_Delay_SWB_BWE, inner_frame, delay; @@ -1063,6 +1066,12 @@ void swb_pre_proc_ivas_fx( ELSE /* IVAS_CPE_DFT */ { Word16 out_start_ind, out_end_ind; +#ifdef REMOVE_SCALING_SHB_SPEECH + Word32 new_swb_speech_buffer_fx[L_FRAME48k + STEREO_DFT_OVL_MAX]; + Word32 *new_swb_speech_fx; + set32_fx( new_swb_speech_buffer_fx, 0, L_FRAME48k + STEREO_DFT_OVL_MAX ); + new_swb_speech_fx = new_swb_speech_buffer_fx + STEREO_DFT_OVL_MAX; +#endif stereo_dft_enc_synthesize_fx( hCPE->hStereoDft, new_swb_speech_fx, &out_start_ind, &out_end_ind, st->idchan, input_Fs, 32000, 0, NULL ); Copy_Scale_sig32_16( new_swb_speech_fx - STEREO_DFT_OVL_MAX, new_swb_speech - STEREO_DFT_OVL_MAX, L_FRAME48k + STEREO_DFT_OVL_MAX, add( st->q_inp, add( q_reImBuffer, 1 ) ) ); // st->q_inp @@ -1272,9 +1281,11 @@ void swb_pre_proc_ivas_fx( regV = icbwe_regressionValuesTDM_fx; cldfbSynthesis_ivas_fx( realBufferFlipped, imagBufferFlipped, shb_speech_fx_32, -1, 0, 0, st->cldfbSynTd ); - Copy_Scale_sig_32_16( shb_speech_fx_32, shb_speech, L_FRAME16k, negate( sub( q_reImBuffer, 1 ) ) ); + Copy_Scale_sig_32_16( shb_speech_fx_32, shb_speech, L_FRAME16k, negate( sub( q_reImBuffer, 1 ) ) ); // Q0 +#ifndef REMOVE_SCALING_SHB_SPEECH *Q_shb_spch = 0; move16(); +#endif } IF( GE_16( st->element_mode, IVAS_CPE_DFT ) && hCPE->hStereoICBWE != NULL ) diff --git a/lib_enc/swb_tbe_enc_fx.c b/lib_enc/swb_tbe_enc_fx.c index ebe37fae5846d8b972e2a1c2f19167d3482d4abd..c0af2d1e59f157c09c93edd25bcb643db1124152 100644 --- a/lib_enc/swb_tbe_enc_fx.c +++ b/lib_enc/swb_tbe_enc_fx.c @@ -2823,9 +2823,9 @@ void swb_tbe_enc_fx( /*======================================================================================*/ void swb_tbe_enc_ivas_fx( - Encoder_State *st_fx, /* i/o: encoder state structure */ + Encoder_State *st_fx, /* i/o: encoder state structure */ STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ - Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q_shb */ + Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ Word32 *bwe_exc_extended, /* i : bandwidth extended exciatation 2 * Q_new */ const Word16 voice_factors_fx[], /* i : voicing factors Q15 */ Word16 *White_exc16k_fx, /* o : shaped white excitation for the FB TBE Q_white_exc */