From 5732a17d7579d515f808765ad1ec007a9d679b93 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Fri, 29 Nov 2024 01:39:32 +0530 Subject: [PATCH] Float structure elements cleanup for encoder --- lib_enc/acelp_core_enc.c | 2 - lib_enc/core_enc_init.c | 69 ++++++++++++++++-------- lib_enc/core_enc_init_fx.c | 4 ++ lib_enc/core_enc_switch.c | 1 - lib_enc/init_enc.c | 38 +++++--------- lib_enc/ivas_core_enc.c | 25 ++------- lib_enc/ivas_core_pre_proc.c | 23 ++++---- lib_enc/ivas_core_pre_proc_front.c | 81 +++++++++++++++++++---------- lib_enc/ivas_cpe_enc.c | 2 +- lib_enc/ivas_mct_enc.c | 4 -- lib_enc/ivas_stereo_switching_enc.c | 5 +- lib_enc/ivas_stereo_td_analysis.c | 15 ------ lib_enc/stat_enc.h | 44 +++++++++------- 13 files changed, 164 insertions(+), 149 deletions(-) diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index 55e936bf3..6a4800d4f 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -556,8 +556,6 @@ ivas_error acelp_core_enc( { st->mem_deemp_preQ_fx = 0; move16(); - - st->mem_preemp_preQ = 0.0f; st->last_code_preq = 0; move16(); st->last_nq_preQ = 0; diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c index c8d88dd58..9e8e133b4 100644 --- a/lib_enc/core_enc_init.c +++ b/lib_enc/core_enc_init.c @@ -823,9 +823,14 @@ static void init_sig_buffers( /* Initialize Signal Buffers and Pointers at encoder-sampling-rate */ if ( st->ini_frame == 0 ) { +#ifdef IVAS_FLOAT_FIXED + set16_fx( st->buf_speech_enc_pe, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc_pe = 0; + set16_fx( st->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc = 0; +#else set_zero( st->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); set_zero( st->buf_speech_enc_pe_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); -#ifndef IVAS_FLOAT_FIXED set_zero( st->buf_wspeech_enc_flt, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); #endif if ( hTcxEnc != NULL ) @@ -836,33 +841,50 @@ static void init_sig_buffers( else if ( st->L_frame != L_frame_old && !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && ( total_brate == last_total_brate ) && ( st->last_bwidth == st->bwidth ) ) ) { +#ifndef IVAS_FLOAT_FIXED lerp_flt( st->buf_speech_enc_flt, st->buf_speech_enc_flt, st->L_frame, L_frame_old ); - if ( ( st->last_core != TCX_20_CORE ) && ( st->last_core != TCX_10_CORE ) ) { -#ifdef IVAS_FLOAT_FIXED floatToFixed_arr( st->buf_speech_enc_flt, st->buf_speech_enc, 0, st->L_frame ); -#endif } -#ifndef IVAS_FLOAT_FIXED mvr2r( st->old_wsp, st->buf_wspeech_enc_flt + st->L_frame + L_SUBFR - L_WSP_MEM, L_WSP_MEM ); #endif /*Resamp buffers needed only for ACELP*/ if ( st->L_frame == L_FRAME && !st->tcxonly ) { +#ifndef IVAS_FLOAT_FIXED // Need to remove after cleanup of old_inp_12k8 mvr2r( st->old_inp_12k8, st->buf_speech_enc_pe_flt + st->L_frame - L_INP_MEM, L_INP_MEM ); +#else + Word16 tmp; + f2me_buf_16( st->old_inp_12k8, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, &tmp, L_INP_MEM ); + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM, sub( tmp, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe, st->L_frame - L_INP_MEM, sub( st->exp_buf_speech_enc_pe, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe + st->L_frame, sub( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->L_frame ), sub( st->exp_buf_speech_enc_pe, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = s_max( tmp, st->exp_buf_speech_enc_pe ); +#endif } else if ( st->L_frame == L_FRAME16k && !st->tcxonly ) { #ifndef IVAS_FLOAT_FIXED lerp_flt( st->buf_wspeech_enc_flt + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc_flt + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); #endif +#ifndef IVAS_FLOAT_FIXED // Need to remove after cleanup of old_inp_12k8 mvr2r( st->old_inp_16k, st->buf_speech_enc_pe_flt + st->L_frame - L_INP_MEM, L_INP_MEM ); +#else + Word16 tmp; + f2me_buf_16( st->old_inp_12k8, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, &tmp, L_INP_MEM ); + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM, sub( tmp, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe, st->L_frame - L_INP_MEM, sub( st->exp_buf_speech_enc_pe, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe + st->L_frame, sub( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->L_frame ), sub( st->exp_buf_speech_enc_pe, s_max( tmp, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = s_max( tmp, st->exp_buf_speech_enc_pe ); +#endif } - st->mem_preemph_enc_flt = st->buf_speech_enc_flt[st->L_frame - 1]; #ifndef IVAS_FLOAT_FIXED + st->mem_preemph_enc_flt = st->buf_speech_enc_flt[st->L_frame - 1]; st->mem_wsp_enc_flt = st->buf_wspeech_enc_flt[st->L_frame + L_SUBFR - 1]; #endif } @@ -881,23 +903,11 @@ static void init_sig_buffers( #endif } +#ifndef IVAS_FLOAT_FIXED st->new_speech_enc_flt = st->buf_speech_enc_flt + st->encoderPastSamples_enc + st->encoderLookahead_enc; - st->new_speech_enc_pe_flt = st->buf_speech_enc_pe_flt + st->encoderPastSamples_enc + st->encoderLookahead_enc; - - if ( hTcxEnc != NULL ) - { - // hTcxEnc->new_speech_ltp_flt = hTcxEnc->buf_speech_ltp_flt + st->encoderPastSamples_enc + st->encoderLookahead_enc; - } st->speech_enc_flt = st->buf_speech_enc_flt + st->encoderPastSamples_enc; - st->speech_enc_pe_flt = st->buf_speech_enc_pe_flt + st->encoderPastSamples_enc; - if ( hTcxEnc != NULL ) - { - // hTcxEnc->speech_ltp_flt = hTcxEnc->buf_speech_ltp_flt + st->encoderPastSamples_enc; - } - -#ifndef IVAS_FLOAT_FIXED if ( st->element_mode > EVS_MONO ) { st->wspeech_enc_flt = st->buf_wspeech_enc_flt + st->L_frame + L_SUBFR; @@ -932,7 +942,11 @@ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_ol IF( st->ini_frame == 0 ) { set16_fx( st->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc = 0; + move16(); set16_fx( st->buf_speech_enc_pe, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc_pe = 0; + move16(); if ( hTcxEnc != NULL ) { set16_fx( hTcxEnc->buf_speech_ltp, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); @@ -955,7 +969,9 @@ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_ol IF( NE_16( st->last_core, TCX_20_CORE ) && NE_16( st->last_core, TCX_10_CORE ) ) /* condition should be checked again */ { Copy( st->buf_speech_enc, hTcxEnc->buf_speech_ltp, st->L_frame ); - hTcxEnc->exp_buf_speech_ltp = st->exp_buf_speech_enc; + Scale_sig( hTcxEnc->buf_speech_ltp, st->L_frame, sub( st->exp_buf_speech_enc, s_max( st->exp_buf_speech_enc, hTcxEnc->exp_buf_speech_ltp ) ) ); + Scale_sig( hTcxEnc->buf_speech_ltp + st->L_frame, sub( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->L_frame ), sub( hTcxEnc->exp_buf_speech_ltp, s_max( st->exp_buf_speech_enc, hTcxEnc->exp_buf_speech_ltp ) ) ); + hTcxEnc->exp_buf_speech_ltp = s_max( hTcxEnc->exp_buf_speech_ltp, st->exp_buf_speech_enc ); move16(); } @@ -971,19 +987,28 @@ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_ol { // Copy_Scale_sig( st->old_inp_12k8_fx, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM, sub( st->prev_Q_new, st->prev_Q_old ) ); Copy( st->old_inp_12k8_fx, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); - st->exp_buf_speech_enc_pe = st->exp_old_inp_12k8; + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc_pe + sub( st->L_frame, L_INP_MEM ), L_INP_MEM, sub( st->exp_old_inp_12k8, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe, sub( st->L_frame, L_INP_MEM ), sub( st->exp_buf_speech_enc_pe, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe + st->L_frame, sub( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->L_frame ), sub( st->exp_buf_speech_enc_pe, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ); move16(); } ELSE IF( EQ_16( st->L_frame, L_FRAME16k ) && !st->tcxonly ) { lerp( st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); Copy( st->old_inp_16k_fx, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); - st->exp_buf_speech_enc_pe = st->exp_old_inp_16k; + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc_pe + sub( st->L_frame, L_INP_MEM ), L_INP_MEM, sub( st->exp_old_inp_12k8, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe, sub( st->L_frame, L_INP_MEM ), sub( st->exp_buf_speech_enc_pe, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + Scale_sig( st->buf_speech_enc_pe + st->L_frame, sub( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->L_frame ), sub( st->exp_buf_speech_enc_pe, s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = s_max( st->exp_old_inp_12k8, st->exp_buf_speech_enc_pe ); move16(); } st->mem_preemph_enc = st->buf_speech_enc[st->encoderPastSamples_enc + st->encoderLookahead_enc - 1]; move16(); + st->exp_mem_preemph_enc = st->exp_buf_speech_enc; st->mem_wsp_enc = shr( st->buf_wspeech_enc[st->L_frame + L_SUBFR - 1], sub( Q16, st->exp_buf_wspeech_enc ) ); // Q-1 move16(); } diff --git a/lib_enc/core_enc_init_fx.c b/lib_enc/core_enc_init_fx.c index e13bae9d4..a3fa3e47b 100644 --- a/lib_enc/core_enc_init_fx.c +++ b/lib_enc/core_enc_init_fx.c @@ -462,7 +462,11 @@ void init_sig_buffers_fx( Encoder_State *st, const Word16 L_frame_old, const Wor IF( st->ini_frame == 0 ) { set16_fx( st->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc = 0; + move16(); set16_fx( st->buf_speech_enc_pe, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc_pe = 0; + move16(); set16_fx( hTcxEnc->buf_speech_ltp, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); set16_fx( st->buf_wspeech_enc, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k ); } diff --git a/lib_enc/core_enc_switch.c b/lib_enc/core_enc_switch.c index 87659d976..10ac4d570 100644 --- a/lib_enc/core_enc_switch.c +++ b/lib_enc/core_enc_switch.c @@ -207,7 +207,6 @@ void core_coder_mode_switch_ivas_fx( move32(); /* Initialize Signal Buffers */ - f2me_buf_16( st->buf_speech_enc_flt, st->buf_speech_enc, &st->exp_buf_speech_enc, st->L_frame ); f2me_buf_16( st->old_wsp, st->old_wsp_fx, &st->exp_old_wsp, L_WSP_MEM ); f2me_buf_16( st->old_inp_12k8, st->old_inp_12k8_fx, &st->exp_old_inp_12k8, L_INP_MEM ); f2me_buf_16( st->old_inp_16k, st->old_inp_16k_fx, &st->exp_old_inp_16k, L_INP_MEM ); diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 0ff68804d..f701a53a4 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -177,19 +177,21 @@ ivas_error init_encoder( #ifdef IVAS_FLOAT_FIXED set16_fx( st->old_wsp_fx, 0, L_WSP_MEM ); #endif +#ifndef IVAS_FLOAT_FIXED set_f( st->old_wsp2, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); - - st->mem_preemph = 0.0f; st->mem_preemph16k = 0.0f; st->mem_preemph_enc_flt = 0.0; +#endif + + st->mem_preemph = 0.0f; #ifdef IVAS_FLOAT_FIXED st->mem_preemph_fx = 0; st->mem_preemph16k_fx = 0; st->mem_preemph_enc = 0; + st->exp_mem_preemph_enc = 0; st->mem_deemp_preQ_fx = 0; #endif /* AVQ pre-quantizer memory */ - st->mem_preemp_preQ = 0.0f; st->last_nq_preQ = 0; st->last_code_preq = 0; st->use_acelp_preq = 0; @@ -197,11 +199,12 @@ ivas_error init_encoder( /* (Decimated) Weighted Speech Memory */ #ifndef IVAS_FLOAT_FIXED + st->mem_preemp_preQ = 0.0f; st->mem_wsp_enc_flt = 0.0; -#endif st->mem_wsp = 0.0f; set_f( st->mem_decim2, 0, 3 ); +#endif #ifndef IVAS_FLOAT_FIXED set_f( st->Bin_E, 0, L_FFT ); @@ -427,12 +430,9 @@ ivas_error init_encoder( st->old_inp_12k8_fx = st->hSignalBuf->old_inp_12k8_fx; st->old_inp_16k_fx = st->hSignalBuf->old_inp_16k_fx; #endif - st->buf_speech_enc_pe_flt = st->hSignalBuf->buf_speech_enc_pe_flt; #ifndef IVAS_FLOAT_FIXED st->buf_synth_flt = st->hSignalBuf->buf_synth_flt; -#endif st->buf_speech_enc_flt = st->hSignalBuf->buf_speech_enc_flt; -#ifndef IVAS_FLOAT_FIXED st->buf_wspeech_enc_flt = st->hSignalBuf->buf_wspeech_enc_flt; #endif @@ -502,12 +502,9 @@ ivas_error init_encoder( st->mem_decim16k = NULL; st->old_inp_12k8 = NULL; st->old_inp_16k = NULL; - st->buf_speech_enc_pe_flt = NULL; #ifndef IVAS_FLOAT_FIXED st->buf_synth_flt = NULL; -#endif st->buf_speech_enc_flt = NULL; -#ifdef IVAS_FLOAT_FIXED st->buf_speech_enc = NULL; #endif #ifndef IVAS_FLOAT_FIXED @@ -1363,6 +1360,8 @@ ivas_error init_encoder_ivas_fx( pitch_ol_init_fx( &st->old_thres_fx, &st->old_pitch, &st->delta_pit, &st->old_corr_fx ); set16_fx( st->old_wsp_fx, 0, L_WSP_MEM ); set16_fx( st->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); // Needs to change depending on usage. + st->Q_old_wsp2 = 0; + move16(); st->mem_preemph_fx = 0; move16(); @@ -1370,16 +1369,12 @@ ivas_error init_encoder_ivas_fx( move16(); st->mem_preemph_enc = 0; move16(); + st->exp_mem_preemph_enc = 0; + move16(); #if 1 // TODO: Float Initializations. To be removed later set_f( st->old_wsp, 0, L_WSP_MEM ); - set_f( st->old_wsp2, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); // Needs to change depending on usage. st->mem_preemph = 0.0f; - st->mem_preemph16k = 0.0f; - st->mem_preemph_enc_flt = 0.0; - st->mem_preemp_preQ = 0.0f; - st->mem_wsp = 0.0f; - set_f( st->mem_decim2, 0, 3 ); st->mem_preemph_DFT = 0.0f; set_f( st->inp_12k8_mem_stereo_sw, 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); st->mem_preemph16k_DFT = 0.0f; @@ -1583,6 +1578,8 @@ ivas_error init_encoder_ivas_fx( st->buf_wspeech_enc = st->hSignalBuf->buf_wspeech_enc; set16_fx( st->hSignalBuf->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + st->exp_buf_speech_enc = 0; + move16(); set16_fx( st->hSignalBuf->buf_wspeech_enc, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); st->exp_buf_wspeech_enc = 0; move16(); @@ -1624,20 +1621,17 @@ ivas_error init_encoder_ivas_fx( st->mem_decim16k = st->hSignalBuf->mem_decim16k_flt; st->old_inp_12k8 = st->hSignalBuf->old_inp_12k8_flt; st->old_inp_16k = st->hSignalBuf->old_inp_16k_flt; - st->buf_speech_enc_pe_flt = st->hSignalBuf->buf_speech_enc_pe_flt; #ifndef IVAS_FLOAT_FIXED st->buf_synth_flt = st->hSignalBuf->buf_synth_flt; -#endif st->buf_speech_enc_flt = st->hSignalBuf->buf_speech_enc_flt; -#ifndef IVAS_FLOAT_FIXED st->buf_wspeech_enc_flt = st->hSignalBuf->buf_wspeech_enc_flt; #endif set_f( st->mem_decim, 0, 2 * L_FILT_MAX ); set_f( st->mem_decim16k, 0, 2 * L_FILT_MAX ); set_f( st->old_inp_12k8, 0, L_INP_MEM ); set_f( st->old_inp_16k, 0, L_INP_MEM ); - set_f( st->hSignalBuf->buf_speech_enc_flt, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); #ifndef IVAS_FLOAT_FIXED + set_f( st->hSignalBuf->buf_speech_enc_flt, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); set_f( st->hSignalBuf->buf_wspeech_enc_flt, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); #endif #endif @@ -1660,12 +1654,9 @@ ivas_error init_encoder_ivas_fx( st->mem_decim16k = NULL; st->old_inp_12k8 = NULL; st->old_inp_16k = NULL; - st->buf_speech_enc_pe_flt = NULL; #ifndef IVAS_FLOAT_FIXED st->buf_synth_flt = NULL; -#endif st->buf_speech_enc_flt = NULL; -#ifndef IVAS_FLOAT_FIXED st->buf_wspeech_enc_flt = NULL; #endif #endif @@ -2299,7 +2290,6 @@ ivas_error init_encoder_ivas_fx( #endif /* Initialize Signal Buffers */ - f2me_buf_16( st->buf_speech_enc_flt, st->buf_speech_enc, &st->exp_buf_speech_enc, st->L_frame ); f2me_buf_16( st->old_wsp, st->old_wsp_fx, &st->exp_old_wsp, L_WSP_MEM ); f2me_buf_16( st->old_inp_12k8, st->old_inp_12k8_fx, &st->exp_old_inp_12k8, L_INP_MEM ); f2me_buf_16( st->old_inp_16k, st->old_inp_16k_fx, &st->exp_old_inp_16k, L_INP_MEM ); diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index f0854c989..3cfe0ff6b 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -454,7 +454,7 @@ ivas_error ivas_core_enc( Word16 orig_spectrum_e[CPE_CHANNELS][NB_DIV]; #ifdef IVAS_FLOAT_FIXED_CONVERSIONS Word16 old_inp_16k_fx[CPE_CHANNELS][L_INP]; - Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], q_fac[CPE_CHANNELS], q_fac1 = Q15; + Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], q_fac[CPE_CHANNELS]; Word16 pitch_buf_fx_new[CPE_CHANNELS][NB_SUBFR16k]; /* Q6 */ for ( i = 0; i < CPE_CHANNELS; i++ ) { @@ -467,10 +467,7 @@ ivas_error ivas_core_enc( } else if ( st1->element_mode != IVAS_CPE_MDCT ) { - q_fac1 = Q_factor_arr( st1->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - floatToFixed_arr( st1->buf_speech_enc_flt, st1->buf_speech_enc, q_fac1, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - st1->exp_buf_speech_enc = 15 - q_fac1; - st1->hTcxEnc->exp_buf_speech_ltp = 15 - q_fac1; + st1->hTcxEnc->exp_buf_speech_ltp = st1->exp_buf_speech_enc; } Scale_sig( st1->input_fx, input_frame, negate( st1->q_inp ) ); @@ -512,7 +509,6 @@ ivas_error ivas_core_enc( q_fac[i] = Q_factor_arr( old_wsp[i], L_WSP ); floatToFixed_arr( old_wsp[i], old_wsp_fx[i], q_fac[i], L_WSP ); } - Word16 q_fac1 = Q15; for ( i = 0; i < CPE_CHANNELS; i++ ) { Encoder_State *st1 = sts[i]; @@ -521,10 +517,7 @@ ivas_error ivas_core_enc( } else if ( st1->element_mode != IVAS_CPE_MDCT ) { - q_fac1 = Q_factor_arr( st1->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - floatToFixed_arr( st1->buf_speech_enc_flt, st1->buf_speech_enc, q_fac1, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - st1->exp_buf_speech_enc = 15 - q_fac1; - st1->hTcxEnc->exp_buf_speech_ltp = 15 - q_fac1; + st1->hTcxEnc->exp_buf_speech_ltp = st1->exp_buf_speech_enc; } } #endif @@ -583,9 +576,6 @@ ivas_error ivas_core_enc( *---------------------------------------------------------------------*/ // prev_lsp_wb_temp_fx, prev_lsp_wb_fx and prev_lpc_wb_fx in Q15. No float counterparts - f2me_buf_16( st->buf_speech_enc_pe_flt, st->buf_speech_enc_pe, &st->exp_buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - f2me_buf_16( st->buf_speech_enc_flt, st->buf_speech_enc, &st->exp_buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - floatToFixed_arr16( old_inp_12k8[n], old_inp_12k8_fx[n], Q_new[n] - 1, L_INP_12k8 ); floatToFixed_arr16( old_inp_16k[n], old_inp_16k_fx[n], Q_new[n] - 1, L_INP ); } @@ -814,15 +804,6 @@ ivas_error ivas_core_enc( diff_nBits = sub( diff_nBits, n ); } } - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( n = 0; n < n_CoreChannels; n++ ) - { - st = sts[n]; - me2f_buf_16( st->buf_speech_enc_pe, st->exp_buf_speech_enc_pe, st->buf_speech_enc_pe_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - me2f_buf_16( st->buf_speech_enc, st->exp_buf_speech_enc, st->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - } -#endif #ifdef DEBUG_MODE_INFO for ( n = 0; n < n_CoreChannels; n++ ) { diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c index 076ce0f47..ceecc30f9 100644 --- a/lib_enc/ivas_core_pre_proc.c +++ b/lib_enc/ivas_core_pre_proc.c @@ -550,9 +550,6 @@ ivas_error pre_proc_ivas( Word16 Q_r[2] = { 0 }, exp_wsp; Word16 old_wsp_fx[L_WSP], wsp_fx[L_FRAME + L_LOOK_12k8]; inp_16k_fx = old_inp_16k_fx + L_INP_MEM - L_look; - - st->mem_preemph_enc = (Word16) floatToFixed( st->mem_preemph_enc_flt, Q_old_inp_16k ); - st->mem_preemph16k_fx = (Word16) floatToFixed( st->mem_preemph16k, Q_old_inp_16k ); st->mem_preemph16k_DFT_fx = (Word16) floatToFixed( st->mem_preemph16k_DFT, Q_old_inp_16k ); floatToFixed_arr16( old_inp_16k, old_inp_16k_fx, Q_old_inp_16k, L_INP ); @@ -562,16 +559,22 @@ ivas_error pre_proc_ivas( floatToFixed_arr16( st->old_inp_16k, st->old_inp_16k_fx, Q_old_inp_16k, L_INP_MEM ); floatToFixed_arr16( st->mem_decim16k, st->mem_decim16k_fx, Q_old_inp_16k, 2 * L_FILT_MAX ); floatToFixed_arr16( st->inp_16k_mem_stereo_sw, st->inp_16k_mem_stereo_sw_fx, Q_old_inp_16k, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); - floatToFixed_arr16( st->buf_speech_enc_flt, st->buf_speech_enc, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - floatToFixed_arr16( st->buf_speech_enc_pe_flt, st->buf_speech_enc_pe, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); // Should take care of st->speech_enc_pe as wel - // wspeech_enc - if ( st->hBWE_FD != NULL ) { Scale_sig( st->hBWE_FD->L_old_wtda_swb_fx, L_FRAME48k, sub( -1, st->Q_old_wtda ) ); st->Q_old_wtda = -1; // This reset needs to be looked into } #endif + st->mem_preemph_enc = shl( st->mem_preemph_enc, sub( Q_old_inp_16k, sub( Q15, st->exp_mem_preemph_enc ) ) ); + move16(); + st->exp_mem_preemph_enc = sub( Q15, Q_old_inp_16k ); + move16(); + Scale_sig( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_speech_enc ) ) ); + st->exp_buf_speech_enc = sub( Q15, Q_old_inp_16k ); + move16(); + Scale_sig( st->buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = sub( Q15, Q_old_inp_16k ); + move16(); Scale_sig( st->input_fx, input_frame, sub( -1, st->q_inp ) ); st->q_inp = -1; Scale_sig( st->buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_wspeech_enc ) ) ); @@ -630,11 +633,11 @@ ivas_error pre_proc_ivas( Copy( &old_wsp_fx[L_FRAME], st->old_wsp_fx, L_WSP_MEM ); st->exp_old_wsp = exp_wsp; move16(); + st->exp_buf_speech_enc_pe = sub( Q15, *Q_new - 1 ); + move16(); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS // No need to do fixed to float for signal_in_fx - st->mem_preemph_enc_flt = fixedToFloat_16( st->mem_preemph_enc, Q_old_inp_16k ); - st->mem_preemph16k = fixedToFloat_16( st->mem_preemph16k_fx, Q_old_inp_16k ); st->mem_preemph16k_DFT = fixedToFloat_16( st->mem_preemph16k_DFT_fx, Q_old_inp_16k ); fixedToFloat_arr( old_inp_16k_fx, old_inp_16k, *Q_new - 1, L_INP ); @@ -643,8 +646,6 @@ ivas_error pre_proc_ivas( fixedToFloat_arr( st->old_inp_16k_fx, st->old_inp_16k, *Q_new - 1, L_INP_MEM ); fixedToFloat_arr( st->mem_decim16k_fx, st->mem_decim16k, Q_old_inp_16k, 2 * L_FILT_MAX ); fixedToFloat_arr( st->inp_16k_mem_stereo_sw_fx, st->inp_16k_mem_stereo_sw, Q_old_inp_16k, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); - fixedToFloat_arr( st->buf_speech_enc, st->buf_speech_enc_flt, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - fixedToFloat_arr( st->buf_speech_enc_pe, st->buf_speech_enc_pe_flt, *Q_new - 1, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); // Should take care of st->speech_enc_pe as wel #endif /* set the pointer of the current frame for the ACELP core */ IF( EQ_16( st->L_frame, L_FRAME ) ) diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 2d8b7a860..0cb19b371 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -1423,15 +1423,46 @@ ivas_error pre_proc_front_ivas_fx( /* save input resampled at 12.8kHz, non-preemhasised */ if ( element_mode == IVAS_CPE_DFT ) { +#ifndef IVAS_FLOAT_FIXED mvr2r( new_inp_12k8 - STEREO_DFT_OVL_12k8, st->buf_speech_enc_flt + L_FRAME32k - STEREO_DFT_OVL_12k8, L_FRAME + STEREO_DFT_OVL_12k8 ); +#else + Word16 tmp; + f2me_buf_16( new_inp_12k8 - STEREO_DFT_OVL_12k8, st->buf_speech_enc + L_FRAME32k - STEREO_DFT_OVL_12k8, &tmp, L_FRAME + STEREO_DFT_OVL_12k8 ); + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc + L_FRAME32k - STEREO_DFT_OVL_12k8, L_FRAME + STEREO_DFT_OVL_12k8, sub( tmp, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc, L_FRAME32k - L_FRAME, sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc + L_FRAME32k + L_FRAME, ( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ) - ( L_FRAME32k + L_FRAME ), sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + st->exp_buf_speech_enc = s_max( tmp, st->exp_buf_speech_enc ); +#endif } else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) { +#ifndef IVAS_FLOAT_FIXED mvr2r( new_inp_12k8 - lMemRecalc_12k8, st->buf_speech_enc_flt + L_FRAME32k - lMemRecalc_12k8 - L_FILT, L_FRAME + lMemRecalc_12k8 + L_FILT ); +#else + Word16 tmp; + f2me_buf_16( new_inp_12k8 - lMemRecalc_12k8, st->buf_speech_enc + L_FRAME32k - lMemRecalc_12k8 - L_FILT, &tmp, L_FRAME + lMemRecalc_12k8 + L_FILT ); + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc + L_FRAME32k - lMemRecalc_12k8 - L_FILT, L_FRAME + lMemRecalc_12k8 + L_FILT, sub( tmp, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc, L_FRAME32k - L_FRAME, sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc + L_FRAME32k + L_FRAME, ( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ) - ( L_FRAME32k + L_FRAME ), sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + st->exp_buf_speech_enc = s_max( tmp, st->exp_buf_speech_enc ); +#endif } else { +#ifndef IVAS_FLOAT_FIXED mvr2r( new_inp_12k8, st->buf_speech_enc_flt + L_FRAME32k, L_FRAME ); +#else + Word16 tmp; + f2me_buf_16( new_inp_12k8, st->buf_speech_enc + L_FRAME32k, &tmp, L_FRAME ); + /* SCaling to common exponent*/ + Scale_sig( st->buf_speech_enc + L_FRAME32k, L_FRAME, sub( tmp, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc, L_FRAME32k, sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + Scale_sig( st->buf_speech_enc + L_FRAME32k + L_FRAME, ( L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ) - ( L_FRAME32k + L_FRAME ), sub( st->exp_buf_speech_enc, s_max( tmp, st->exp_buf_speech_enc ) ) ); + + st->exp_buf_speech_enc = s_max( tmp, st->exp_buf_speech_enc ); +#endif } #endif // DEBUG @@ -2113,15 +2144,17 @@ ivas_error pre_proc_front_ivas_fx( Word16 *inp_12k8_fx1 = &buf[M]; // this is done because find_wsp accesses inp from -16 index Word16 wsp_fx1[L_FRAME + L_LOOK_12k8] = { 0 }; - Word16 e1, e2, q_inp_12k8; + Word16 e1, q_inp_12k8; f2me_buf_16( inp_12k8 - M, inp_12k8_fx1, &e1, 368 + M ); - f2me_buf_16( &st->mem_wsp, &st->mem_wsp_fx, &e2, 1 ); - q_inp_12k8 = sub( 15, s_max( e1, e2 ) ); + q_inp_12k8 = s_min( sub( 15, e1 ), st->mem_wsp_q ); for ( i = -M; i < 368; i++ ) { /* starting index from -16 */ inp_12k8_fx1[i] = (Word16) floatToFixed( inp_12k8[i], q_inp_12k8 ); } - st->mem_wsp_fx = (Word16) floatToFixed( st->mem_wsp, q_inp_12k8 ); + st->mem_wsp_fx = shl( st->mem_wsp_fx, sub( q_inp_12k8, st->mem_wsp_q ) ); + st->mem_wsp_q = q_inp_12k8; + move16(); + move16(); #endif ivas_find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A_fx, Aw_fx, inp_12k8_fx1, TILT_FAC_FX, wsp_fx1, &st->mem_wsp_fx, GAMMA1, L_LOOK_12k8 ); @@ -2137,7 +2170,6 @@ ivas_error pre_proc_front_ivas_fx( { wsp[i] = fixedToFloat( wsp_fx1[i], q_inp_12k8 ); } - st->mem_wsp = fixedToFloat( st->mem_wsp_fx, q_inp_12k8 ); #endif old_pitch1 = st->pitch[1]; @@ -2154,18 +2186,15 @@ ivas_error pre_proc_front_ivas_fx( Q_wsp = sub( 15, exp_wsp ); floatToFixed_arr( wsp, wsp_fx, Q_wsp, L_WSP - L_WSP_MEM ); - floatToFixed_arr( st->old_wsp2, st->old_wsp2_fx, Q_wsp, 115 ); - floatToFixed_arr( st->mem_decim2, st->mem_decim2_fx, Q_wsp, 3 ); #endif + Scale_sig( st->mem_decim2_fx, 3, sub( Q_wsp, st->Q_old_wsp2 ) ); // Q( mem_decim ) = Q( old_wsp2 ) + Scale_sig( st->old_wsp2_fx, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM, sub( Q_wsp, st->Q_old_wsp2 ) ); + st->Q_old_wsp2 = Q_wsp; + move16(); pitch_ol_ivas_fx( st->pitch, st->voicing_fx, &st->old_pitch, &st->old_corr_fx, corr_shift_fx, &st->old_thres_fx, &st->delta_pit, st->old_wsp2_fx, wsp_fx, st->mem_decim2_fx, *relE_fx, st->clas, st->input_bwidth, st->Opt_SC_VBR ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arr( st->old_wsp2_fx, st->old_wsp2, Q_wsp, 115 ); - fixedToFloat_arr( st->mem_decim2_fx, st->mem_decim2, Q_wsp, 3 ); -#endif - #else pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, *relE, L_look, st->clas, st->input_bwidth, st->Opt_SC_VBR ); #endif @@ -2486,17 +2515,12 @@ ivas_error pre_proc_front_ivas_fx( { #ifdef IVAS_FLOAT_FIXED_CONVERSIONS Word16 Q_old_inp_16k = -1; - st->mem_preemph_enc = (Word16) floatToFixed( st->mem_preemph_enc_flt, Q_old_inp_16k ); - st->mem_preemph16k_fx = (Word16) floatToFixed( st->mem_preemph16k, Q_old_inp_16k ); st->mem_preemph16k_DFT_fx = (Word16) floatToFixed( st->mem_preemph16k_DFT, Q_old_inp_16k ); floatToFixed_arr16( old_inp_16k, old_inp_16k_fx, Q_old_inp_16k, 880 ); floatToFixed_arr16( st->old_inp_16k, st->old_inp_16k_fx, Q_old_inp_16k, L_INP_MEM ); floatToFixed_arr16( st->mem_decim16k, st->mem_decim16k_fx, Q_old_inp_16k, 2 * L_FILT_MAX ); floatToFixed_arr16( st->inp_16k_mem_stereo_sw, st->inp_16k_mem_stereo_sw_fx, Q_old_inp_16k, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); - floatToFixed_arr16( st->buf_speech_enc_flt, st->buf_speech_enc, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - floatToFixed_arr16( st->buf_speech_enc_pe_flt, st->buf_speech_enc_pe, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); // Should take care of st->speech_enc_pe as wel - // wspeech_enc if ( st->hBWE_FD != NULL ) { @@ -2504,8 +2528,17 @@ ivas_error pre_proc_front_ivas_fx( st->Q_old_wtda = -1; // This reset needs to be looked into } #endif + st->mem_preemph_enc = shl( st->mem_preemph_enc, sub( Q_old_inp_16k, sub( Q15, st->exp_mem_preemph_enc ) ) ); + move16(); + st->exp_mem_preemph_enc = sub( Q15, Q_old_inp_16k ); + move16(); Scale_sig( st->buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_wspeech_enc ) ) ); st->exp_buf_wspeech_enc = sub( Q15, Q_old_inp_16k ); + Scale_sig( st->buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_speech_enc_pe ) ) ); + st->exp_buf_speech_enc_pe = sub( Q15, Q_old_inp_16k ); + move16(); + Scale_sig( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q_old_inp_16k, sub( Q15, st->exp_buf_speech_enc ) ) ); + st->exp_buf_speech_enc = sub( Q15, Q_old_inp_16k ); move16(); /* Compute core-coder buffers at internal sampling rate */ error = ivas_compute_core_buffers_fx( st, NULL, old_inp_16k_fx, NULL, input_frame, IVAS_SCE /*last_element_mode*/, INT_FS_16k /*sr_core_tmp*/, ener_fx, @@ -2519,25 +2552,17 @@ ivas_error pre_proc_front_ivas_fx( *epsP_fx_q = add( Q_r[0], 1 ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS // No need to do fixed to float for signal_in_fx - st->mem_preemph_enc_flt = fixedToFloat_16( st->mem_preemph_enc, Q_old_inp_16k ); - st->mem_preemph16k = fixedToFloat_16( st->mem_preemph16k_fx, Q_old_inp_16k ); st->mem_preemph16k_DFT = fixedToFloat_16( st->mem_preemph16k_DFT_fx, Q_old_inp_16k ); fixedToFloat_arr( old_inp_16k_fx, old_inp_16k, Q_old_inp_16k, L_INP ); fixedToFloat_arr( st->old_inp_16k_fx, st->old_inp_16k, Q_old_inp_16k, L_INP_MEM ); fixedToFloat_arr( st->mem_decim16k_fx, st->mem_decim16k, Q_old_inp_16k, 2 * L_FILT_MAX ); fixedToFloat_arr( st->inp_16k_mem_stereo_sw_fx, st->inp_16k_mem_stereo_sw, Q_old_inp_16k, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); - fixedToFloat_arr( st->buf_speech_enc, st->buf_speech_enc_flt, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - fixedToFloat_arr( st->buf_speech_enc_pe, st->buf_speech_enc_pe_flt, Q_old_inp_16k, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); // Should take care of st->speech_enc_pe as wel #endif #ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 q_speech_enc; - q_speech_enc = 0; - floatToFixed_arr( st->speech_enc_flt - 560, st->speech_enc - 560, q_speech_enc, 2 * 560 ); - // floatToFixed_arr( st->wspeech_enc_flt - 560, st->wspeech_enc - 560, q_speech_enc, 2 * 560 ); -#endif - smc_dec = ivas_acelp_tcx20_switching_fx( st, st->speech_enc, q_speech_enc, st->wspeech_enc, non_staX_fx, pitch_fr_fx, voicing_fr_fx, currFlatness_fx, lsp_mid_fx, stab_fac_fx, res_cod_SNR_M_fx, res_cod_SNR_M_fx_e, flag_16k_smc ); + + Scale_sig( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q15, st->exp_buf_speech_enc ) ); + smc_dec = ivas_acelp_tcx20_switching_fx( st, st->speech_enc, 0, st->wspeech_enc, non_staX_fx, pitch_fr_fx, voicing_fr_fx, currFlatness_fx, lsp_mid_fx, stab_fac_fx, res_cod_SNR_M_fx, res_cod_SNR_M_fx_e, flag_16k_smc ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS for ( i = 0; i < 7; i++ ) { diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index dc44161b6..ea41ff251 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -396,7 +396,7 @@ ivas_error ivas_cpe_enc_fx( move16(); sts[0]->q_old_inp = q_inp; move16(); - floatToFixed_arr( sts[0]->buf_speech_enc_flt, sts[0]->buf_speech_enc, q_inp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + Scale_sig( sts[0]->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( q_inp, sub( Q15, sts[0]->exp_buf_speech_enc ) ) ); stereo_switching_enc_fx( hCPE, sts[0]->old_input_signal_fx, input_frame, q_inp ); diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 3cc3e02f1..0ce7e11ae 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -660,8 +660,6 @@ ivas_error ivas_mct_enc_fx( #ifdef IVAS_FLOAT_FIXED #ifdef IVAS_FLOAT_FIXED_CONVERSIONS st = hCPE->hCoreCoder[n]; - f2me_buf_16( st->buf_speech_enc_pe_flt, st->buf_speech_enc_pe, &st->exp_buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - f2me_buf_16( st->buf_speech_enc_flt, st->buf_speech_enc, &st->exp_buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); IF( st->hTcxEnc != NULL ) { st->hTcxEnc->exp_buf_speech_ltp = 31; /*Q0*/ @@ -671,8 +669,6 @@ ivas_error ivas_mct_enc_fx( updt_enc_common_ivas_fx( st ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS - me2f_buf_16( st->buf_speech_enc_pe, st->exp_buf_speech_enc_pe, st->buf_speech_enc_pe_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - me2f_buf_16( st->buf_speech_enc, st->exp_buf_speech_enc, st->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); IF( st->hTcxEnc != NULL ) { Scale_sig( st->hTcxEnc->buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->hTcxEnc->exp_buf_speech_ltp ); diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index 8fc328406..4f6e3daa2 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -1442,8 +1442,11 @@ void stereo_switching_enc_fx( move16(); set16_fx( sts[1]->buf_speech_enc, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); + sts[1]->exp_buf_speech_enc = 0; + move16(); set16_fx( sts[1]->buf_speech_enc_pe, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - + sts[1]->exp_buf_speech_enc_pe = 0; + move16(); IF( sts[1]->hTcxEnc != NULL ) { set16_fx( sts[1]->hTcxEnc->buf_speech_ltp, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); diff --git a/lib_enc/ivas_stereo_td_analysis.c b/lib_enc/ivas_stereo_td_analysis.c index a315cf725..1af59b460 100644 --- a/lib_enc/ivas_stereo_td_analysis.c +++ b/lib_enc/ivas_stereo_td_analysis.c @@ -2464,10 +2464,6 @@ static Word16 stereo_tdm_ener_analysis_SM_fx( Word16 *tdm_SM_flag /* i/o: channel combination scheme flag */ ) { -#if 0 - Word16 Left_in_fx[L_FRAME48k], Right_in_fx[L_FRAME48k]; - Word16 q_Left_in, q_Right_in; -#endif Word32 rms_R_fx, rms_L_fx; Word16 q_rms_R, q_rms_L; Word32 corr_RM_fx, corr_LM_fx; @@ -2501,18 +2497,7 @@ static Word16 stereo_tdm_ener_analysis_SM_fx( * Compute L and R energy and Long term RMS of each channel *----------------------------------------------------------------*/ -#if 1 Get_LR_rms_fx( sts[0]->input_fx, sts[1]->input_fx, input_frame, &rms_L_fx, &q_rms_L, &rms_R_fx, &q_rms_R ); -#else - /* This part has f2f conversions as sts[0]->input_fx and sts[1]->input_fx are in Q0. Precision loss is observed in later functions.*/ - q_Left_in = Q_factor_arr( sts[0]->input, input_frame ); - q_Right_in = Q_factor_arr( sts[1]->input, input_frame ); - q_Left_in = s_min( q_Left_in, q_Right_in ); - q_Left_in = sub( q_Left_in, Q1 ); - floatToFixed_arr16( sts[0]->input, Left_in_fx, q_Left_in, input_frame ); - floatToFixed_arr16( sts[1]->input, Right_in_fx, q_Left_in, input_frame ); - Get_LR_rms_fx( Left_in_fx, Right_in_fx, input_frame, &rms_L_fx, &q_rms_L, &rms_R_fx, &q_rms_R ); -#endif /*----------------------------------------------------------------* * Compute the 1st order energy difference difference diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 7403143c3..4921a22ac 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -103,19 +103,21 @@ typedef struct bitstream_enc_data_structure typedef struct signal_buffers_enc_data_structure { +#ifndef IVAS_FLOAT_FIXED float input_buff_flt[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; - +#endif float Bin_E_old_flt[L_FFT / 2]; /* per bin energy of old 2nd frames */ float mem_decim_flt[2 * L_FILT_MAX]; /* decimation filter memory */ float mem_decim16k_flt[2 * L_FILT_MAX]; /* ACELP@16kHz - decimation filter memory @16kHz */ float old_inp_12k8_flt[L_INP_MEM]; /* memory of input signal at 12.8kHz */ float old_inp_16k_flt[L_INP_MEM]; /* ACELP@16kHz - memory of input signal @16 kHz */ - float buf_speech_enc_pe_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; #ifndef IVAS_FLOAT_FIXED float buf_synth_flt[OLD_SYNTH_SIZE_ENC + L_FRAME32k]; /* can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching */ float buf_wspeech_enc_flt[L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320]; /* increased by 320 to avoid memory overlap in find_wsp() and also to accomodate for the wspeech_enc */ -#endif + float buf_speech_enc_pe_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; + float buf_synth_flt[OLD_SYNTH_SIZE_ENC + L_FRAME32k]; /* can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching */ float buf_speech_enc_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; +#endif // Fixed Word16 input_buff[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; Word32 input_buff32[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; @@ -2067,15 +2069,15 @@ typedef struct enc_core_structure Word16 streaklimit_fx; /* LSF quantizer Q15 */ Word16 stab_fac_fx; /* LSF stability factor Q15 */ #endif - float mem_preemph; /* preemphasis filter memory */ - float old_wsp[L_WSP_MEM]; /* old weighted signal vector */ + float mem_preemph; /* preemphasis filter memory */ + float old_wsp[L_WSP_MEM]; /* old weighted signal vector */ +#ifndef IVAS_FLOAT_FIXED float old_wsp2[( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM]; /* old decimated weighted signal vector */ float mem_wsp; /* weighted signal vector memory */ float mem_decim2[3]; /* weighted signal decimation filter memory */ -#ifndef IVAS_FLOAT_FIXED - float clip_var[6]; /* pitch gain clipping memory */ - float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ - float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ + float clip_var[6]; /* pitch gain clipping memory */ + float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ + float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ #else Word16 clip_var_fx[6]; /* pitch gain clipping memory [2.56x,Q14,Q8,Q0,Q14,Q14] */ Word16 mem_AR_fx[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) Qlog2(2.56) */ @@ -2094,6 +2096,7 @@ typedef struct enc_core_structure Word16 old_wsp_fx[L_WSP_MEM]; /* old weighted signal vector */ #ifdef IVAS_FLOAT_FIXED Word16 exp_old_wsp; + Word16 Q_old_wsp2; #endif /*Word16 old_exc_fx[L_EXC_MEM];*/ /* old excitation vector */ Word16 old_wsp2_fx[( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM]; /* old decimated weighted signal vector qwsp */ @@ -2182,13 +2185,13 @@ typedef struct enc_core_structure Word16 music_hysteresis_fx; /* Counter of frames after AUDIO coding mode to prevent UC */ Word16 last_vad_spa_fx; - Word16 last_L_frame; /* ACELP@16kHz - last L_frame value */ - float mem_preemph16k; /* ACELP@16kHz - preemphasis filter memory @16kHz */ + Word16 last_L_frame; /* ACELP@16kHz - last L_frame value */ #ifndef IVAS_FLOAT_FIXED - float mem_deemp_preQ; /* ACELP@16kHz - prequantizer deemhasis memory */ + float mem_preemph16k; /* ACELP@16kHz - preemphasis filter memory @16kHz */ + float mem_deemp_preQ; /* ACELP@16kHz - prequantizer deemhasis memory */ + float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ #endif - float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ - Word16 mem_preemph16k_fx; /* ACELP@16kHz - preemphasis filter memory @16kHz */ + Word16 mem_preemph16k_fx; /* ACELP@16kHz - preemphasis filter memory @16kHz Q-1 */ Word16 mem_deemp_preQ_fx; /* ACELP@16kHz - prequantizer deemhasis memory */ Word16 mem_preemp_preQ_fx; /* ACELP@16kHz - prequantizer preemhasis memory */ Word16 last_nq_preQ; /* ACELP@16kHz - AVQ subquantizer number of the last sub-band of the last subframe */ @@ -2260,12 +2263,12 @@ typedef struct enc_core_structure float *mem_decim16k; /* ACELP@16kHz - decimation filter memory @16kHz */ float *old_inp_12k8; /* memory of input signal at 12.8kHz */ float *old_inp_16k; /* ACELP@16kHz - memory of input signal @16 kHz */ - float *buf_speech_enc_pe_flt; #ifndef IVAS_FLOAT_FIXED + float *buf_speech_enc_pe_flt; float *buf_synth_flt; /*can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching*/ float *buf_wspeech_enc_flt; -#endif float *buf_speech_enc_flt; +#endif Word32 *Bin_E_old_fx; /* per bin energy of old 2nd frames */ Word16 q_Bin_E_old; Word16 *mem_decim_fx; /* decimation filter memory */ @@ -2472,14 +2475,19 @@ typedef struct enc_core_structure TCX_CONFIG_HANDLE hTcxCfg; /* cod_main.c */ +#ifndef IVAS_FLOAT_FIXED float mem_preemph_enc_flt; /* speech preemph filter memory (at encoder-sampling-rate) */ - Word16 mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ +#endif + Word16 mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ + Word16 exp_mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ /* Signal Buffers and Pointers at encoder-sampling-rate */ +#ifndef IVAS_FLOAT_FIXED float *speech_enc_flt; - float *speech_enc_pe_flt; float *new_speech_enc_flt; + float *speech_enc_pe_flt; float *new_speech_enc_pe_flt; +#endif float *wspeech_enc_flt; float *synth_flt; Word16 *speech_enc; -- GitLab