From b52bab4b27b55db41e326cdaae13d372079af041 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Tue, 19 Nov 2024 14:23:39 +0530 Subject: [PATCH 1/2] STEREO_ICBWE_ENC_DATA structure cleanup and MSAN error fixes --- lib_com/fd_cng_com.c | 25 ---------- lib_com/fd_cng_com_fx.c | 2 +- lib_com/ivas_prot.h | 4 -- lib_com/prot.h | 12 ----- lib_com/prot_fx.h | 2 +- lib_dec/fd_cng_dec_fx.c | 2 +- lib_enc/core_enc_init.c | 1 - lib_enc/ext_sig_ana.c | 6 +-- lib_enc/fd_cng_enc.c | 33 ------------- lib_enc/fd_cng_enc_fx.c | 2 +- lib_enc/hq_core_enc.c | 60 ------------------------ lib_enc/init_enc.c | 29 ++++++++---- lib_enc/ivas_core_enc.c | 72 ++--------------------------- lib_enc/ivas_cpe_enc.c | 25 ++++------ lib_enc/ivas_init_enc.c | 37 +-------------- lib_enc/ivas_masa_enc.c | 15 +++--- lib_enc/ivas_mct_enc.c | 4 -- lib_enc/ivas_mdct_core_enc.c | 25 +++++----- lib_enc/ivas_sns_enc.c | 1 + lib_enc/ivas_stat_enc.h | 28 +++-------- lib_enc/ivas_stereo_icbwe_enc.c | 63 ++++--------------------- lib_enc/ivas_stereo_mdct_core_enc.c | 3 +- lib_enc/ivas_stereo_switching_enc.c | 18 ++++---- lib_enc/ivas_stereo_td_enc.c | 3 -- lib_enc/stat_enc.h | 2 + 25 files changed, 90 insertions(+), 384 deletions(-) diff --git a/lib_com/fd_cng_com.c b/lib_com/fd_cng_com.c index d81159dde..76aca2e49 100644 --- a/lib_com/fd_cng_com.c +++ b/lib_com/fd_cng_com.c @@ -55,31 +55,6 @@ static void mhvals_flt( const int16_t d, float *m ); #endif static void getmidbands( int16_t *part, const int16_t npart, int16_t *midband, float *psize_flt, float *psize_inv_flt ); - -/*------------------------------------------------------------------- - * createFdCngCom_flt() - * - * Create an instance of type FD_CNG_COM - *-------------------------------------------------------------------*/ - -ivas_error createFdCngCom_flt( - HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - HANDLE_FD_CNG_COM hs; - - /* Allocate memory */ - if ( ( hs = (HANDLE_FD_CNG_COM) malloc( sizeof( FD_CNG_COM ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD CNG COM" ); - } - - *hFdCngCom = hs; - - return IVAS_ERR_OK; -} - - /*------------------------------------------------------------------- * initFdCngCom_flt() * diff --git a/lib_com/fd_cng_com_fx.c b/lib_com/fd_cng_com_fx.c index 8c64e6c16..de6d747c9 100644 --- a/lib_com/fd_cng_com_fx.c +++ b/lib_com/fd_cng_com_fx.c @@ -29,7 +29,7 @@ static void getmidbands( const Word16 *part, const Word16 npart, Word16 *midband * * Create an instance of type FD_CNG_COM *-------------------------------------------------------------------*/ -ivas_error createFdCngCom( +ivas_error createFdCngCom_fx( HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ ) { diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 119824b03..f6a1a1f4c 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -2029,10 +2029,6 @@ void adjustTargetSignal( * IC-BWE Stereo prototypes *----------------------------------------------------------------------------------*/ -void stereo_icBWE_init_enc( - STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ -); - void spectral_balancer( float *signal, float *mem, diff --git a/lib_com/prot.h b/lib_com/prot.h index 71ede8fe3..cc4f3abe1 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -5330,10 +5330,6 @@ float gain_dequant( const int16_t bits /* i : number of bits to dequantize */ ); -void HQ_core_enc_init( - HQ_ENC_HANDLE hHQ_core /* i/o: HQ core data handle */ -); - void hq_core_enc( Encoder_State *st, /* i/o: encoder state structure */ const float *audio, /* i : input audio signal */ @@ -8753,10 +8749,6 @@ float construct_snr_thresh( const int16_t bw_index /* i : band width index */ ); -ivas_error createFdCngCom_flt( - HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -); - void deleteFdCngCom_flt( HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ ); @@ -9007,10 +8999,6 @@ void noisy_speech_detection( const float syn[] /* i : input time-domain frame */ ); -ivas_error createFdCngEnc( - HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ -); - void deleteFdCngEnc( HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ ); diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index f1cb75f78..683b398d9 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -5011,7 +5011,7 @@ Word16 const *PlcGetLsfBase( Word16 const lpcQuantization, // fd_cng_com.c /* Create an instance of type FD_CNG */ -ivas_error createFdCngCom( HANDLE_FD_CNG_COM *hFdCngCom ); +ivas_error createFdCngCom_fx( HANDLE_FD_CNG_COM *hFdCngCom ); void initFdCngCom( HANDLE_FD_CNG_COM hFdCngCom, Word16 scale ); diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index 9645e3bbe..bba782c1f 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -60,7 +60,7 @@ ivas_error createFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG DEC structure" ); } - IF( ( error = createFdCngCom( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) + IF( ( error = createFdCngCom_fx( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) { return error; } diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c index 95e3f74f6..fe9077d33 100644 --- a/lib_enc/core_enc_init.c +++ b/lib_enc/core_enc_init.c @@ -777,7 +777,6 @@ static void init_tcx( #else hTcxEnc->tcxltp_gain_past = 0; #endif - hTcxEnc->tcxltp_norm_corr_past_flt = 0.f; hTcxEnc->tcxltp_norm_corr_mem_flt = 0.f; #ifndef IVAS_FLOAT_FIXED hTcxEnc->kernel_switch_corr_past_flt = 0.f; diff --git a/lib_enc/ext_sig_ana.c b/lib_enc/ext_sig_ana.c index 2a594cd18..eaf71b952 100644 --- a/lib_enc/ext_sig_ana.c +++ b/lib_enc/ext_sig_ana.c @@ -133,7 +133,6 @@ void core_signal_analysis_high_bitrate( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS if ( st->element_mode == IVAS_CPE_DFT ) { - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); q_fac = Q_factor_arr( st->buf_wspeech_enc_flt, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); floatToFixed_arr( st->buf_wspeech_enc_flt, buf_wspeech_enc_fx, q_fac, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); @@ -148,7 +147,6 @@ void core_signal_analysis_high_bitrate( } else if ( st->element_mode != IVAS_CPE_MDCT ) { - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); q_fac = Q_factor_arr( st->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); floatToFixed_arr( st->buf_speech_enc_flt, buf_speech_enc_fx, q_fac, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); speech_fx = buf_speech_enc_fx + +st->encoderPastSamples_enc; @@ -170,12 +168,10 @@ void core_signal_analysis_high_bitrate( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS if ( st->element_mode == IVAS_CPE_DFT ) { - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( buf_wspeech_enc_fx, st->buf_wspeech_enc_flt, q_fac, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); } else if ( st->element_mode != IVAS_CPE_MDCT ) { - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( buf_speech_ltp_fx, st->hTcxEnc->buf_speech_ltp_flt, q_fac, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } #endif @@ -471,7 +467,7 @@ void core_signal_analysis_high_bitrate( #else #ifdef IVAS_FLOAT_FIXED_CONVERSIONS // q factor of spectrum - Word16 q_factor_spectrum = Q_factor_arrL( hTcxEnc->spectrum[frameno], N_MAX ) - 1; + Word16 q_factor_spectrum = Q_factor_arrL( hTcxEnc->spectrum[frameno], N_TCX10_MAX ) - 1; /* conv params to fix */ // -1 = -32768 , Q=15 , ltp_gain diff --git a/lib_enc/fd_cng_enc.c b/lib_enc/fd_cng_enc.c index a947768a3..e537fca28 100644 --- a/lib_enc/fd_cng_enc.c +++ b/lib_enc/fd_cng_enc.c @@ -52,39 +52,6 @@ #include "prot_fx.h" #endif -/*-------------------------------------------------------------------* - * createFdCngEnc() - * - * - *-------------------------------------------------------------------*/ - -ivas_error createFdCngEnc( - HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ -) -{ - HANDLE_FD_CNG_ENC hs; - ivas_error error; - error = IVAS_ERR_OK; - - /* Set output to NULL in case of errors and early return */ - *hFdCngEnc = NULL; - - /* Allocate memory */ - if ( ( hs = (HANDLE_FD_CNG_ENC) malloc( sizeof( FD_CNG_ENC ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG ENC structure" ); - } - - if ( ( error = createFdCngCom_flt( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hFdCngEnc = hs; - - return error; -} - /*-------------------------------------------------------------------* * initFdCngEnc() * diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 111cd2dc0..fd7780c72 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -44,7 +44,7 @@ void createFdCngEnc_fx( HANDLE_FD_CNG_ENC *hFdCngEnc ) move16(); - createFdCngCom( &( hs->hFdCngCom ) ); + createFdCngCom_fx( &( hs->hFdCngCom ) ); *hFdCngEnc = hs; move16(); diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c index 56bd1dbb1..b45ac7004 100644 --- a/lib_enc/hq_core_enc.c +++ b/lib_enc/hq_core_enc.c @@ -652,63 +652,3 @@ void hq_core_enc( return; } #endif - -/*-------------------------------------------------------------------* - * hq_core_enc_init() - * - * Initialize HQ core state structure - *-------------------------------------------------------------------*/ - -void HQ_core_enc_init( - HQ_ENC_HANDLE hHQ_core /* i/o: HQ core data handle */ -) -{ - hHQ_core->mode_count = 0; - hHQ_core->mode_count1 = 0; - - hHQ_core->hq_generic_speech_class = 0; - - hHQ_core->prev_Npeaks = 0; - set_s( hHQ_core->prev_peaks, 0, HVQ_MAX_PEAKS ); - hHQ_core->hvq_hangover = 0; - hHQ_core->prev_hqswb_clas = HQ_NORMAL; - set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - - set_s( hHQ_core->prev_frm_index, -1, NB_SWB_SUBBANDS_HAR_SEARCH_SB ); - hHQ_core->prev_frm_hfe2 = 0; - hHQ_core->prev_stab_hfe2 = 0; -#ifndef IVAS_FLOAT_FIXED - hHQ_core->prev_ni_ratio = 0.5f; - set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); -#else - hHQ_core->prev_ni_ratio_fx = 16384; - set16_fx( hHQ_core->prev_En_sb_fx, 0, NB_SWB_SUBBANDS ); -#endif - set_s( hHQ_core->last_bitalloc_max_band, 0, 2 ); -#ifndef IVAS_FLOAT_FIXED - set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( hHQ_core->last_env, 0, BANDS_MAX ); -#else - set32_fx( hHQ_core->last_ni_gain_fx, 0, BANDS_MAX ); - set16_fx( hHQ_core->last_env_fx, 0, BANDS_MAX ); -#endif - -#ifdef IVAS_FLOAT_FIXED - set32_fx( hHQ_core->last_ni_gain_fx, 0, BANDS_MAX ); - set16_fx( hHQ_core->last_env_fx, 0, BANDS_MAX ); - set16_fx( hHQ_core->prev_En_sb_fx, 0, NB_SWB_SUBBANDS ); -#endif - hHQ_core->last_max_pos_pulse = 0; - -#ifndef IVAS_FLOAT_FIXED - hHQ_core->crest_lp = HQ_CREST_THRESHOLD; - hHQ_core->crest_mod_lp = HQ_CREST_MOD_THRESHOLD; -#else - hHQ_core->crest_lp_fx = HQ_CREST_THRESHOLD_FX; - hHQ_core->crest_lp_q = Q28; - hHQ_core->crest_mod_lp_fx = HQ_CREST_MOD_THRESHOLD_FX; - hHQ_core->crest_mod_lp_q = Q29; -#endif - - return; -} diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index d0071ebeb..8c2cff48b 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -519,7 +519,6 @@ ivas_error init_encoder( st->vad_flag = 1; st->localVAD = 0; - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) ) { if ( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) @@ -553,7 +552,11 @@ ivas_error init_encoder( #ifndef IVAS_FLOAT_FIXED vad_init( st->hVAD_CLDFB ); #else - vad_init_fx( st->hVAD_CLDFB ); +#ifndef MSAN_FIX + wb_vad_init_fx( st->hVAD ); +#else + wb_vad_init_ivas_fx( st->hVAD ); +#endif #endif } else @@ -873,7 +876,7 @@ ivas_error init_encoder( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } - HQ_core_enc_init( st->hHQ_core ); + HQ_core_enc_init_fx( st->hHQ_core ); } else { @@ -1107,10 +1110,7 @@ ivas_error init_encoder( if ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) { - if ( ( error = createFdCngEnc( &st->hFdCngEnc ) ) != IVAS_ERR_OK ) - { - return error; - } + createFdCngEnc_fx( &st->hFdCngEnc ); #ifdef IVAS_FLOAT_FIXED initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); @@ -2031,9 +2031,6 @@ ivas_error init_encoder_ivas_fx( } HQ_core_enc_init_fx( st->hHQ_core ); -#if 1 - HQ_core_enc_init( st->hHQ_core ); -#endif } ELSE { @@ -2271,11 +2268,17 @@ ivas_error init_encoder_ivas_fx( st->currEnergyHF = 0; +#ifdef MSAN_FIX + st->prevEnergyHF = 0; +#endif + /* Initialize TCX */ +#ifndef IVAS_FLOAT_FIXED IF( hTcxEnc != NULL ) { st->preemph_fac = (Word16) floatToFixed( st->preemph_fac_flt, Q15 ); } +#endif /* Initialize Signal Buffers */ f2me_buf_16( st->buf_speech_enc_flt, st->buf_speech_enc, &st->exp_buf_speech_enc, st->L_frame ); @@ -2408,6 +2411,12 @@ void LPDmem_enc_init( set_f( hLPDmem->mem_syn1_flt, 0, M ); set_f( hLPDmem->mem_syn2_flt, 0, M ); set_zero( hLPDmem->mem_syn_r_flt, L_SYN_MEM ); + +#ifdef IVAS_FLOAT_FIXED +#ifdef MSAN_FIX + set16_fx( hLPDmem->mem_syn_r, 0, L_SYN_MEM ); +#endif +#endif set_f( hLPDmem->mem_syn3_flt, 0, M ); #ifndef IVAS_FLOAT_FIXED diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index 6dd5c909b..39a87514f 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -237,7 +237,6 @@ ivas_error ivas_core_enc( IF( st->hTcxEnc ) { st->hTcxEnc->tfm_mem_fx = floatToFixed_32( st->hTcxEnc->tfm_mem, Q31 ); - st->hTcxEnc->tcxltp_norm_corr_past = (Word16) floatToFixed( st->hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); } f2me( cor_map_sum[n], &cor_map_sum_fx, &exp_cor_map_sum ); @@ -303,7 +302,6 @@ ivas_error ivas_core_enc( IF( st->hTcxEnc ) { st->hTcxEnc->tfm_mem = fixedToFloat_32( st->hTcxEnc->tfm_mem_fx, Q31 ); - st->hTcxEnc->tcxltp_norm_corr_past_flt = fixedToFloat_16( st->hTcxEnc->tcxltp_norm_corr_past, Q15 ); } #endif @@ -444,7 +442,7 @@ ivas_error ivas_core_enc( { nSubframes = 2; } - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); + //hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); floatToFixed_arr16( st->lspold_enc, st->lspold_enc_fx, Q15, M ); Word16 q_spectrum = L_get_q_buf1( hTcxEnc->spectrum[0], st->hTcxEnc->L_frameTCX / nSubframes ); @@ -496,7 +494,7 @@ ivas_error ivas_core_enc( } #endif #ifdef IVAS_FLOAT_FIXED_CONVERSIONS - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); + //hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( pitch_buf_fx[n], pitch_buf[n], Q6, NB_SUBFR16k ); fixedToFloat_arr( st->hTcxEnc->old_out_fx, st->hTcxEnc->old_out, st->hTcxEnc->Q_old_out, L_FRAME32k ); @@ -1124,36 +1122,10 @@ ivas_error ivas_core_enc( if ( n == 0 && input_Fs >= 32000 && hStereoICBWE != NULL ) { #ifdef IVAS_FLOAT_FIXED - Word16 inp0_fx[L_FRAME48k], inp1_fx[L_FRAME48k]; Word16 new_swb_speech_buffer_fx16[L_FRAME48k + STEREO_DFT_OVL_MAX]; Word16 q_new_swb_speech_buffer = Q_factor_arr( new_swb_speech_buffer, input_frame ); floatToFixed_arr16( new_swb_speech_buffer, new_swb_speech_buffer_fx16, q_new_swb_speech_buffer, input_frame ); - hCPE->hStereoICBWE->dataChan_fx[0] = inp0_fx; - hCPE->hStereoICBWE->dataChan_fx[1] = inp1_fx; - - Word16 scale_factor = Q_factor_arr( hCPE->hStereoICBWE->dataChan[0], input_frame ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->dataChan[1], input_frame ) ); - scale_factor = min( scale_factor, Q_factor_arr( &hCPE->hStereoICBWE->memHPF[0], 4 ) ); - scale_factor = min( scale_factor, Q_factor_arr( &hCPE->hStereoICBWE->memHPF[4], 4 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->dec_2over3_mem, 12 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->dec_2over3_mem_lp, 3 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->memModifyFs_icbwe[0], 60 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->memModifyFs_icbwe[1], 60 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->icbwe_inp_mem[0], 270 ) ); - scale_factor = min( scale_factor, Q_factor_arr( hCPE->hStereoICBWE->icbwe_inp_mem[1], 270 ) ); - hCPE->hStereoICBWE->q_dataChan_fx = scale_factor; - floatToFixed_arr16( hCPE->hStereoICBWE->dataChan[0], inp0_fx, scale_factor, input_frame ); - floatToFixed_arr16( hCPE->hStereoICBWE->dataChan[1], inp1_fx, scale_factor, input_frame ); - floatToFixed_arr16( &hCPE->hStereoICBWE->memHPF[0], &hCPE->hStereoICBWE->memHPF_fx[0], scale_factor, 4 ); - floatToFixed_arr16( &hCPE->hStereoICBWE->memHPF[4], &hCPE->hStereoICBWE->memHPF_fx[4], scale_factor, 4 ); - floatToFixed_arr16( hCPE->hStereoICBWE->dec_2over3_mem, hCPE->hStereoICBWE->dec_2over3_mem_fx, scale_factor, 12 ); - floatToFixed_arr16( hCPE->hStereoICBWE->dec_2over3_mem_lp, hCPE->hStereoICBWE->dec_2over3_mem_lp_fx, scale_factor, 3 ); - floatToFixed_arr16( hCPE->hStereoICBWE->memModifyFs_icbwe[0], hCPE->hStereoICBWE->memModifyFs_icbwe_fx[0], scale_factor, 60 ); - floatToFixed_arr16( hCPE->hStereoICBWE->memModifyFs_icbwe[1], hCPE->hStereoICBWE->memModifyFs_icbwe_fx[1], scale_factor, 60 ); - floatToFixed_arr16( hCPE->hStereoICBWE->icbwe_inp_mem[0], hCPE->hStereoICBWE->icbwe_inp_mem_fx[0], scale_factor, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - floatToFixed_arr16( hCPE->hStereoICBWE->icbwe_inp_mem[1], hCPE->hStereoICBWE->icbwe_inp_mem_fx[1], scale_factor, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - // floatToFixed_arr16( hCPE->hStereoICBWE->mem_decim_shb_ch0, hCPE->hStereoICBWE->mem_decim_shb_ch0_fx, 0, 90 ); @@ -1162,17 +1134,6 @@ ivas_error ivas_core_enc( fixedToFloat_arr( new_swb_speech_buffer_fx16, new_swb_speech_buffer, q_new_swb_speech_buffer, input_frame ); - fixedToFloat_arr( inp0_fx, hCPE->hStereoICBWE->dataChan[0], scale_factor, input_frame ); - fixedToFloat_arr( inp1_fx, hCPE->hStereoICBWE->dataChan[1], scale_factor, input_frame ); - fixedToFloat_arr( &hCPE->hStereoICBWE->memHPF_fx[0], &hCPE->hStereoICBWE->memHPF[0], scale_factor, 4 ); - fixedToFloat_arr( &hCPE->hStereoICBWE->memHPF_fx[4], &hCPE->hStereoICBWE->memHPF[4], scale_factor, 4 ); - fixedToFloat_arr( hCPE->hStereoICBWE->dec_2over3_mem_fx, hCPE->hStereoICBWE->dec_2over3_mem, scale_factor, 12 ); - fixedToFloat_arr( hCPE->hStereoICBWE->dec_2over3_mem_lp_fx, hCPE->hStereoICBWE->dec_2over3_mem_lp, scale_factor, 3 ); - fixedToFloat_arr( hCPE->hStereoICBWE->memModifyFs_icbwe_fx[0], hCPE->hStereoICBWE->memModifyFs_icbwe[0], scale_factor, 60 ); - fixedToFloat_arr( hCPE->hStereoICBWE->memModifyFs_icbwe_fx[1], hCPE->hStereoICBWE->memModifyFs_icbwe[1], scale_factor, 60 ); - fixedToFloat_arr( hCPE->hStereoICBWE->icbwe_inp_mem_fx[0], hCPE->hStereoICBWE->icbwe_inp_mem[0], scale_factor, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - fixedToFloat_arr( hCPE->hStereoICBWE->icbwe_inp_mem_fx[1], hCPE->hStereoICBWE->icbwe_inp_mem[1], scale_factor, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - // fixedToFloat_arr( hCPE->hStereoICBWE->mem_decim_shb_ch0_fx, hCPE->hStereoICBWE->mem_decim_shb_ch0, 0, 90 ); #else @@ -1200,13 +1161,9 @@ ivas_error ivas_core_enc( f2me_buf_16( hStereoICBWE->nlExc16k, hStereoICBWE->nlExc16k_fx, &hStereoICBWE->nlExc16k_e, L_FRAME16k / nbSubFr ); q_new_swb_speech_buffer = Q_factor_arrL( new_swb_speech_buffer, input_frame ); floatToFixed_arrL( new_swb_speech_buffer, new_swb_speech_buffer_fx, q_new_swb_speech_buffer, input_frame ); - Copy_Scale_sig_16_32( voice_factors_fx[0], voice_factors_fx32[0], NB_SUBFR16k, 16 ); // Q31 - f2me_buf_16( hCPE->hStereoICBWE->mem_shb_speech_nonref, hCPE->hStereoICBWE->mem_shb_speech_nonref_fx, &hCPE->hStereoICBWE->mem_shb_speech_nonref_e, L_LOOK_16k ); // shb_speech_ref_e - f2me_buf_16( hCPE->hStereoICBWE->mem_shb_speech_ref, hCPE->hStereoICBWE->mem_shb_speech_ref_fx, &hCPE->hStereoICBWE->mem_shb_speech_ref_e, L_LOOK_16k ); // shb_speech_ref_e + Copy_Scale_sig_16_32( voice_factors_fx[0], voice_factors_fx32[0], NB_SUBFR16k, 16 ); // Q31 // f2me( hCPE->hStereoICBWE->icbweRefEner, &hCPE->hStereoICBWE->icbweRefEner_fx, &hCPE->hStereoICBWE->icbweRefEner_e ); - scale_factor = s_min( scale_factor, Q_factor_arrL( hCPE->hStereoICBWE->mem_lpc_shbsynth_nonref, LPC_SHB_ORDER ) ); - floatToFixed_arr32( hCPE->hStereoICBWE->mem_lpc_shbsynth_nonref, hCPE->hStereoICBWE->mem_lpc_shbsynth_nonref_fx, scale_factor, LPC_SHB_ORDER ); #ifdef MSAN_FIX f2me_buf( hCPE->hStereoICBWE->lpSHBRef, hCPE->hStereoICBWE->lpSHBRef_fx, &hCPE->hStereoICBWE->lpSHBRef_e, LPC_SHB_ORDER + 1 ); #else @@ -1218,14 +1175,11 @@ ivas_error ivas_core_enc( stereo_icBWE_enc_ivas_fx( hCPE, shb_speech_fx32, 31 - q_shb_speech_fx32, new_swb_speech_buffer_fx, 31 - q_new_swb_speech_buffer, voice_factors_fx32[0] ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arr( hStereoICBWE->mem_shb_speech_ref_fx, hStereoICBWE->mem_shb_speech_ref, 15 - hStereoICBWE->mem_shb_speech_ref_e, LPC_SHB_ORDER ); - IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) ) { // hStereoICBWE->prevSpecMapping = fixedToFloat( hStereoICBWE->prevSpecMapping_fx, 31 ); IF( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) { - fixedToFloat_arrL( hStereoICBWE->mem_lpc_shbsynth_nonref_fx, hStereoICBWE->mem_lpc_shbsynth_nonref, 31 - hStereoICBWE->mem_lpc_shbsynth_nonref_e, LPC_SHB_ORDER ); } ELSE { @@ -1242,11 +1196,9 @@ ivas_error ivas_core_enc( IF( ( EQ_16( st->extl, SWB_TBE ) || EQ_16( st->extl, WB_TBE ) || EQ_16( st->extl, FB_TBE ) ) && EQ_16( st->flag_ACELP16k, 1 ) ) { // hStereoICBWE->prevSpecMapping = fixedToFloat( hStereoICBWE->prevSpecMapping_fx, Q31 ); - hStereoICBWE->memShbSpecMapping = fixedToFloat( hStereoICBWE->memShbSpecMapping_fx, 31 - hStereoICBWE->memShbSpecMapping_e ); } ELSE { - hStereoICBWE->memShbSpecMapping = 0; #ifndef IVAS_FLOAT_FIXED hStereoICBWE->prevSpecMapping = 0; #else @@ -1258,21 +1210,8 @@ ivas_error ivas_core_enc( { // hStereoICBWE->prevgsMapping = me2f( hStereoICBWE->prevgsMapping_fx, hStereoICBWE->prevgsMapping_e ); // hStereoICBWE->gDes_pastFrame = me2f( hStereoICBWE->gDes_pastFrame_fx, hStereoICBWE->gDes_pastFrame_e ); - - IF( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - - - me2f_buf( hStereoICBWE->memShbSpecXcorr_fx, hStereoICBWE->memShbSpecXcorr_e, hStereoICBWE->memShbSpecXcorr, 6 ); - hStereoICBWE->memShbSpecMapping = me2f( hStereoICBWE->memShbSpecMapping_fx, hStereoICBWE->memShbSpecMapping_e ); - } - // hStereoICBWE->prevRefEner = fixedToFloat( hStereoICBWE->prevRefEner_fx, 31 - hStereoICBWE->prevRefEner_e ); // hStereoICBWE->prevNonRefEner = fixedToFloat( hStereoICBWE->prevNonRefEner_fx, 31 - hStereoICBWE->prevNonRefEner_e ); - IF( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - fixedToFloat_arrL( hStereoICBWE->mem_lpc_shbsynth_nonref_fx, hStereoICBWE->mem_lpc_shbsynth_nonref, 31 - hStereoICBWE->mem_lpc_shbsynth_nonref_e, LPC_SHB_ORDER ); - } // hStereoICBWE->gDes_pastFrame = me2f( hStereoICBWE->gDes_pastFrame_fx, hStereoICBWE->gDes_pastFrame_e ); } #endif @@ -1305,10 +1244,7 @@ ivas_error ivas_core_enc( f2me_buf_16( st->buf_wspeech_enc_flt, st->buf_wspeech_enc, &st->exp_buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k ); f2me_buf_16( st->hTcxEnc->buf_speech_ltp_flt, st->hTcxEnc->buf_speech_ltp, &st->hTcxEnc->exp_buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } - IF( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) - { - st->hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( st->hTcxEnc->tcxltp_norm_corr_past_flt, 15 ); - } + #endif updt_enc_common_ivas_fx( st ); diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 3d6e11ebc..fbef1542f 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -143,6 +143,7 @@ ivas_error ivas_cpe_enc_fx( Word16 localVAD_HE_SAD[CPE_CHANNELS]; /* HE-SAD flag without hangover, LR channels */ float band_energies_LR[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ float orig_input[CPE_CHANNELS][L_FRAME48k]; + Word16 orig_input_fx[CPE_CHANNELS][L_FRAME48k]; float Etot_last[CPE_CHANNELS]; Word16 Etot_last_fx[CPE_CHANNELS]; Word32 tmp, input_Fs; @@ -427,17 +428,6 @@ ivas_error ivas_cpe_enc_fx( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS fixedToFloat_arrL32( sts[0]->input_buff32_fx, sts[0]->input_buff, sts[0]->q_inp32, 1965 ); fixedToFloat_arrL32( sts[1]->input_buff32_fx, sts[1]->input_buff, sts[1]->q_inp32, 1965 ); - if ( EQ_16( hCPE->element_mode, IVAS_CPE_MDCT ) || NE_16( hCPE->element_mode, IVAS_CPE_TD ) ) - { - } - else - { - if ( hCPE->hStereoICBWE != NULL ) - { - fixedToFloat_arr( hCPE->hStereoICBWE->icbwe_inp_mem_fx[0], hCPE->hStereoICBWE->icbwe_inp_mem[0], hCPE->hStereoICBWE->q_dataChan_fx, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - fixedToFloat_arr( hCPE->hStereoICBWE->icbwe_inp_mem_fx[1], hCPE->hStereoICBWE->icbwe_inp_mem[1], hCPE->hStereoICBWE->q_dataChan_fx, NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ) ); - } - } #endif #else stereo_tca_enc( hCPE, input_frame ); @@ -448,11 +438,17 @@ ivas_error ivas_cpe_enc_fx( for ( n = 0; n < CPE_CHANNELS; n++ ) { +#ifdef IVAS_FLOAT_FIXED_CONVERSIONS + floatToFixed_arr( sts[n]->input, sts[n]->input_fx, -1, input_frame ); +#endif mvr2r( sts[n]->input, orig_input[n], input_frame ); + Copy( sts[n]->input_fx, orig_input_fx[n], input_frame ); - if ( hCPE->hStereoICBWE != NULL ) + IF( hCPE->hStereoICBWE != NULL ) { - hCPE->hStereoICBWE->dataChan[n] = &orig_input[n][0]; + hCPE->hStereoICBWE->dataChan_fx[n] = &orig_input_fx[n][0]; + hCPE->hStereoICBWE->q_dataChan_fx = -1; + move16(); } } @@ -2348,10 +2344,7 @@ ivas_error create_cpe_enc( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } - stereo_icBWE_init_enc( hCPE->hStereoICBWE ); -#ifdef IVAS_FLOAT_FIXED stereo_icBWE_init_enc_fx( hCPE->hStereoICBWE ); -#endif } /*-----------------------------------------------------------------* diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index 3c246c0ad..136ab1071 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -684,19 +684,6 @@ ivas_error ivas_init_encoder( nchan_inp_buff++; /* for *data_separated_object */ } - for ( n = 0; n < nchan_inp_buff; n++ ) - { - /* note: these are intra-frame heap memories */ - if ( ( st_ivas->p_data_f[n] = (float *) malloc( ( input_Fs / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point input audio buffer!\n" ) ); - } - } - for ( ; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - st_ivas->p_data_f[n] = NULL; - } -#ifdef IVAS_FLOAT_FIXED FOR( n = 0; n < nchan_inp_buff; n++ ) { /* note: these are intra-frame heap memories */ @@ -709,7 +696,6 @@ ivas_error ivas_init_encoder( { st_ivas->p_data_fx[n] = NULL; } -#endif /*-----------------------------------------------------------------* * Allocate and initialize buffer of indices *-----------------------------------------------------------------*/ @@ -1411,20 +1397,7 @@ ivas_error ivas_init_encoder_fx( nchan_inp_buff = add( nchan_inp_buff, 1 ); /* for *data_separated_object */ } -#if 1 /* To be removed */ - FOR( n = 0; n < nchan_inp_buff; n++ ) - { - /* note: these are intra-frame heap memories */ - IF( ( st_ivas->p_data_f[n] = (float *) malloc( ( input_Fs / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point input audio buffer!\n" ) ); - } - } - FOR( ; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - st_ivas->p_data_f[n] = NULL; - } -#endif + FOR( n = 0; n < nchan_inp_buff; n++ ) { /* note: these are intra-frame heap memories */ @@ -2288,14 +2261,6 @@ void ivas_destroy_enc( /* floating-point input audio buffers */ for ( n = 0; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - if ( st_ivas->p_data_f[n] != NULL ) - { - free( st_ivas->p_data_f[n] ); - st_ivas->p_data_f[n] = NULL; - } - } - for ( n = 0; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) { if ( st_ivas->p_data_fx[n] != NULL ) { diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 92c5cebc4..0e544cd4d 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -1662,7 +1662,12 @@ ivas_error ivas_masa_enc_config_fx( /* Setup importance weights for two-direction band selection. */ IF( EQ_16( hMasa->config.numberOfDirections, 2 ) ) { +#ifdef MSAN_FIX + set32_fx( hMasa->data.importanceWeight_fx, ONE_IN_Q30 /*1.0f Q30*/, MASA_FREQUENCY_BANDS ); +#else set32_fx( hMasa->data.importanceWeight_fx, ONE_IN_Q30 /*1.0f Q30*/, hMasa->config.numCodingBands ); +#endif + IF( EQ_16( hMasa->config.numCodingBands, 5 ) ) { @@ -8544,9 +8549,8 @@ static void ivas_encode_masaism_metadata_fx( energy_ism = BASOP_Util_Add_Mant32Exp( energy_ism, energy_ism_e, hOmasaData->energy_ism_fx[sf][band], hOmasaData->energy_ism_fx_e[sf][band], &energy_ism_e ); FOR( obj = 0; obj < nchan_ism; obj++ ) { - L_tmp = Mpy_32_32( hOmasaData->energy_ism_fx[sf][band], hOmasaData->energy_ratio_ism_fx[sf][band][obj] ); // Q = (31 - hOmasaData->energy_ism_fx_e[sf][band]) + Q30 - 31 - L_tmp_e = add( 1, hOmasaData->energy_ism_fx_e[sf][band] ); - energy_ism_ind[obj] = BASOP_Util_Add_Mant32Exp( energy_ism_ind[obj], energy_ism_ind_e[obj], L_tmp, L_tmp_e, &energy_ism_ind_e[obj] ); + + hOmasaData->masa_to_total_energy_ratio_fx[sf][0] = ONE_IN_Q30; // 1.0f in Q30 move32(); } } @@ -8560,7 +8564,6 @@ static void ivas_encode_masaism_metadata_fx( hOmasaData->energy_ratio_ism_fx[sf][0][obj] = L_shl( hOmasaData->energy_ratio_ism_fx[sf][0][obj], sub( L_tmp_e, 1 ) ); // Q30 move32(); } - L_tmp = BASOP_Util_Add_Mant32Exp( eneBand, sub( 31, hMasa->data.q_energy ), energy_ism, energy_ism_e, &L_tmp_e ); IF( L_tmp != 0 ) { @@ -8573,7 +8576,7 @@ static void ivas_encode_masaism_metadata_fx( } ELSE { - hOmasaData->masa_to_total_energy_ratio_fx[sf][0] = ONE_IN_Q30; // q30 + hOmasaData->masa_to_total_energy_ratio_fx[sf][0] = MAX_32; move32(); } } @@ -8649,7 +8652,7 @@ static void ivas_encode_masaism_metadata_fx( } ELSE { - hOmasaData->masa_to_total_energy_ratio_fx[0][band] = ONE_IN_Q30; // Q30 + hOmasaData->masa_to_total_energy_ratio_fx[0][band] = MAX_32; move32(); } } diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 49ae8f695..a83b9eb7d 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -672,10 +672,6 @@ ivas_error ivas_mct_enc_fx( f2me_buf_16( st->buf_wspeech_enc_flt, st->buf_wspeech_enc, &st->exp_buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k ); f2me_buf_16( st->hTcxEnc->buf_speech_ltp_flt, st->hTcxEnc->buf_speech_ltp, &st->hTcxEnc->exp_buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } - IF( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) - { - st->hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( st->hTcxEnc->tcxltp_norm_corr_past_flt, 15 ); - } #endif updt_enc_common_ivas_fx( st ); diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index c719ac54e..73327fbae 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -1639,6 +1639,16 @@ void ivas_mdct_core_whitening_enc( Word16 q_fac; Word32 scf_fx[CPE_CHANNELS][NB_DIV][M]; Word32 scf_q_fx[CPE_CHANNELS][NB_DIV][M]; +#ifdef MSAN_FIX + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) + { + FOR( i = 0; i < NB_DIV; i++ ) + { + set32_fx( scf_fx[ch][i], 0, M ); + set32_fx( scf_q_fx[ch][i], 0, M ); + } + } +#endif #endif float chE[2], chE_tot; int8_t sns_low_br_mode; @@ -1731,7 +1741,7 @@ void ivas_mdct_core_whitening_enc( if ( mct_on ) { sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ - sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt = sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt + sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt ); + sts[0]->hTcxEnc->tcxltp_norm_corr_past = sts[1]->hTcxEnc->tcxltp_norm_corr_past = add( shr( sts[0]->hTcxEnc->tcxltp_norm_corr_past, 1 ), shr( sts[1]->hTcxEnc->tcxltp_norm_corr_past, 1 ) ); for ( ch = 0; ch < CPE_CHANNELS; ch++ ) { st = sts[ch]; @@ -1746,7 +1756,6 @@ void ivas_mdct_core_whitening_enc( IF( st->hTcxEnc ) { st->hTcxEnc->tfm_mem_fx = floatToFixed_32( st->hTcxEnc->tfm_mem, Q31 ); - st->hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( st->hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); } #endif SetTCXModeInfo_ivas_fx( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); @@ -1783,7 +1792,6 @@ void ivas_mdct_core_whitening_enc( #ifdef IVAS_FLOAT_FIXED #ifdef IVAS_FLOAT_FIXED_CONVERSIONS TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); q_fac = Q_factor_arr( old_wsp[ch], L_WSP ); floatToFixed_arr( old_wsp[ch], old_wsp_fx[ch], q_fac, L_WSP ); #endif @@ -1791,7 +1799,6 @@ void ivas_mdct_core_whitening_enc( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS fixedToFloat_arr( old_wsp_fx[ch], old_wsp[ch], q_fac, L_WSP ); - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); #endif #else tcx_ltp_encode( st, st->hTcxEnc->tcxMode, L_FRAME, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, NULL, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, T_op[ch], ¶m_core[ch][1 + NOISE_FILL_RANGES], <pBits[ch], NULL, 0, IVAS_CPE_MDCT ); @@ -1918,14 +1925,12 @@ void ivas_mdct_core_whitening_enc( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS if ( st->element_mode == IVAS_CPE_DFT ) { - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); q_fac = Q_factor_arr( st->buf_wspeech_enc_flt, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); floatToFixed_arr( st->buf_wspeech_enc_flt, st->buf_wspeech_enc, q_fac, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); st->exp_buf_wspeech_enc = 15 - q_fac; } else if ( st->element_mode != IVAS_CPE_MDCT ) { - hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); q_fac = Q_factor_arr( st->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); floatToFixed_arr( st->buf_speech_enc_flt, st->buf_speech_enc, q_fac, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); st->exp_buf_speech_enc = 15 - q_fac; @@ -1965,12 +1970,10 @@ void ivas_mdct_core_whitening_enc( if ( st->element_mode == IVAS_CPE_DFT ) { - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( st->buf_wspeech_enc, st->buf_wspeech_enc_flt, q_fac, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); } else if ( st->element_mode != IVAS_CPE_MDCT ) { - hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( st->hTcxEnc->buf_speech_ltp, st->hTcxEnc->buf_speech_ltp_flt, q_fac, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } @@ -2095,8 +2098,8 @@ void ivas_mdct_core_whitening_enc( nSampCore = tcx_subframe_coded_lines; } - nrg = 0.25f * ( hTcxEnc0->tcxltp_norm_corr_past_flt + hTcxEnc0->tcxltp_norm_corr_mem_flt + /* tcxltp_norm_corr_past already contains the */ - hTcxEnc1->tcxltp_norm_corr_past_flt + hTcxEnc1->tcxltp_norm_corr_mem_flt ); /* normalized correlation of the current frame */ + nrg = 0.25f * ( fix16_to_float( hTcxEnc0->tcxltp_norm_corr_past, 15 ) + hTcxEnc0->tcxltp_norm_corr_mem_flt + /* tcxltp_norm_corr_past already contains the */ + fix16_to_float( hTcxEnc1->tcxltp_norm_corr_past, 15 ) + hTcxEnc1->tcxltp_norm_corr_mem_flt ); /* normalized correlation of the current frame */ L_subframe = max( 512, L_subframe ); nSubframes = ( hTcxEnc0->tcxMode == TCX_20 ) ? 1 : NB_DIV; @@ -2173,7 +2176,7 @@ void ivas_mdct_core_whitening_enc( Word16 leftOverlap = 0, rightOverlap = 0; PWord16 const *left_win; PWord16 const *right_win; - Word16 q_windowedSignal, len_windowSignal; + Word16 q_windowedSignal = 0, len_windowSignal; windowedSignal_fx[0][0] = ( Word16 ) * ( windowedSignal[0] + n * L_FRAME48k ); windowedSignal_fx[0][1] = ( Word16 ) * ( windowedSignal[0] + n * L_FRAME48k + 1 ); diff --git a/lib_enc/ivas_sns_enc.c b/lib_enc/ivas_sns_enc.c index bab1cbde4..b69b151a7 100644 --- a/lib_enc/ivas_sns_enc.c +++ b/lib_enc/ivas_sns_enc.c @@ -45,6 +45,7 @@ #include "ivas_cnst.h" #include "wmc_auto.h" #include "prot_fx_enc.h" + /*------------------------------------------------------------------- * sns_1st_cod() * diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 681de918c..676c69e1c 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -664,39 +664,22 @@ typedef struct stereo_tca_enc_data_structure typedef struct stereo_icbwe_enc_data_structure { - int16_t prev_refChanIndx_bwe; - int16_t refChanIndx_bwe; - /* SHB speech resampler memory */ - float memHPF[8]; + Word16 prev_refChanIndx_bwe; + Word16 refChanIndx_bwe; #ifndef IVAS_FLOAT_FIXED float mem_decim_shb_ch0[2 * L_FILT_MAX]; #endif - /* SHB speech non-ref channel */ - float mem_shb_speech_ref[L_LOOK_16k]; - float mem_shb_speech_nonref[L_LOOK_16k]; - - /* unscaled & scaled SHB synthesis memory */ - float mem_lpc_shbsynth_nonref[LPC_SHB_ORDER]; - - /* inter-channel BWE spectral shape adj. */ #ifndef IVAS_FLOAT_FIXED float prevSpecMapping; float prevgsMapping; #endif - float memShbSpecMapping; - float memShbSpecXcorr[6]; + #ifndef IVAS_FLOAT_FIXED float prevRefEner; float prevNonRefEner; #endif - float memGsEnerMap[2]; - float dec_2over3_mem[L_FILT_2OVER3]; - float dec_2over3_mem_lp[L_FILT_2OVER3_LP]; - float icbwe_inp_mem[CPE_CHANNELS][NS2SA( 48000, L_MEM_RECALC_TBE_NS )]; - float *dataChan[CPE_CHANNELS]; - float memModifyFs_icbwe[CPE_CHANNELS][2 * L_FILT32k]; #ifndef IVAS_FLOAT_FIXED float mem_nrg_L[CPE_CHANNELS]; float mem_nrg_R[CPE_CHANNELS]; @@ -710,11 +693,15 @@ typedef struct stereo_icbwe_enc_data_structure float mixExc16k[L_FRAME16k]; float lpSHBRef[LPC_SHB_ORDER + 1]; + /* SHB speech resampler memory */ Word16 memHPF_fx[8]; // Q -> q_dataChan_fx Word16 mem_decim_shb_ch0_fx[2 * L_FILT_MAX]; // Q0 + /* SHB speech non-ref channel */ Word16 mem_shb_speech_ref_fx[L_LOOK_16k]; Word16 mem_shb_speech_nonref_fx[L_LOOK_16k]; + /* unscaled & scaled SHB synthesis memory */ Word32 mem_lpc_shbsynth_nonref_fx[LPC_SHB_ORDER]; + /* inter-channel BWE spectral shape adj. */ Word32 prevSpecMapping_fx; Word32 memShbSpecMapping_fx; Word32 memShbSpecXcorr_fx[6]; @@ -1815,7 +1802,6 @@ typedef struct { ENCODER_CONFIG_HANDLE hEncoderConfig; /* Encoder configuration structure */ - float *p_data_f[MAX_INPUT_CHANNELS+MAX_NUM_OBJECTS]; /* floating-point input audio buffers */ #ifdef IVAS_FLOAT_FIXED Word32 *p_data_fx[MAX_INPUT_CHANNELS+MAX_NUM_OBJECTS]; /* fixed-point input audio buffers */ Word16 q_data_fx; /* Q-factor of fixed-point input audio buffers */ diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c index ca51393e1..dda389784 100644 --- a/lib_enc/ivas_stereo_icbwe_enc.c +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -1565,61 +1565,6 @@ void stereo_icBWE_enc_ivas_fx( * * Stereo (inter-channel) BWE mapping - encoder initialization *-------------------------------------------------------------------*/ - -void stereo_icBWE_init_enc( - STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ -) -{ - /* SHB speech resampler memory */ - // set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); - - /* SHB ref channel */ - set_f( hStereoICBWE->mem_shb_speech_ref, 0, L_LOOK_16k ); - - /* SHB non-ref channel */ - set_f( hStereoICBWE->mem_shb_speech_nonref, 0, L_LOOK_16k ); - - /* unscaled & scaled SHB synthesis memory */ - set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); - - /* inter-channel BWE spectral shape adj. */ - // hStereoICBWE->prevSpecMapping = 0; - // hStereoICBWE->prevgsMapping = 1.0f; - set_f( &( hStereoICBWE->memShbSpecMapping ), 0, 1 ); - set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); - - // hStereoICBWE->prevNonRefEner = 1.0f; - // hStereoICBWE->prevRefEner = 1.0f; - - // set_f( hStereoICBWE->memGsEnerMap, 1.0f, 2 ); - - set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); - set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); - set_f( hStereoICBWE->memHPF, 0, 8 ); - - /* BWE ref channel */ - hStereoICBWE->refChanIndx_bwe = L_CH_INDX; - hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; - - set_f( hStereoICBWE->memModifyFs_icbwe[0], 0, 2 * L_FILT32k ); - set_f( hStereoICBWE->memModifyFs_icbwe[1], 0, 2 * L_FILT32k ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS // Required for float to fixed conversion can be removed once float to fix of this buffer is removed. - set_f( hStereoICBWE->icbwe_inp_mem[0], 0, NS2SA( 48000, L_MEM_RECALC_TBE_NS ) ); - set_f( hStereoICBWE->icbwe_inp_mem[1], 0, NS2SA( 48000, L_MEM_RECALC_TBE_NS ) ); -#endif -#ifndef IVAS_FLOAT_FIXED - set_f( hStereoICBWE->mem_nrg_L, 0, 2 ); - set_f( hStereoICBWE->mem_nrg_R, 0, 2 ); - set_f( hStereoICBWE->mem_nrg_DMX, 0, 2 ); -#endif - // hStereoICBWE->gDes_pastFrame = 1.0f; - // hStereoICBWE->icbweRefEner = 0.0f; - - hStereoICBWE->MSFlag = 0; - return; -} - void stereo_icBWE_init_enc_fx( STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ ) @@ -1629,9 +1574,13 @@ void stereo_icBWE_init_enc_fx( /* SHB ref channel */ set16_fx( hStereoICBWE->mem_shb_speech_ref_fx, 0, L_LOOK_16k ); + hStereoICBWE->mem_shb_speech_ref_e = 0; + move16(); /* SHB non-ref channel */ set16_fx( hStereoICBWE->mem_shb_speech_nonref_fx, 0, L_LOOK_16k ); + hStereoICBWE->mem_shb_speech_nonref_e = 0; + move16(); /* unscaled & scaled SHB synthesis memory */ set32_fx( hStereoICBWE->mem_lpc_shbsynth_nonref_fx, 0, LPC_SHB_ORDER ); @@ -1642,7 +1591,11 @@ void stereo_icBWE_init_enc_fx( move32(); move32(); set32_fx( &( hStereoICBWE->memShbSpecMapping_fx ), 0, 1 ); + hStereoICBWE->memShbSpecMapping_e = 0; + move16(); set32_fx( hStereoICBWE->memShbSpecXcorr_fx, 0, 6 ); + hStereoICBWE->memShbSpecXcorr_e = 0; + move16(); hStereoICBWE->prevNonRefEner_fx = MAX_32; // Q31 hStereoICBWE->prevRefEner_fx = MAX_32; // Q31 diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c index 041913efd..88830ea7c 100644 --- a/lib_enc/ivas_stereo_mdct_core_enc.c +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -614,7 +614,7 @@ void stereo_mdct_core_enc( *---------------------------------------------------------------*/ sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ - sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt = sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt + sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt ); + sts[0]->hTcxEnc->tcxltp_norm_corr_past = sts[1]->hTcxEnc->tcxltp_norm_corr_past = add( shr( sts[0]->hTcxEnc->tcxltp_norm_corr_past, 1 ), shr( sts[1]->hTcxEnc->tcxltp_norm_corr_past, 1 ) ); #ifdef IVAS_FLOAT_FIXED #ifdef IVAS_FLOAT_FIXED_CONVERSIONS for ( ch = 0; ch < CPE_CHANNELS; ch++ ) @@ -629,7 +629,6 @@ void stereo_mdct_core_enc( IF( st->hTcxEnc ) { st->hTcxEnc->tfm_mem_fx = floatToFixed_32( st->hTcxEnc->tfm_mem, Q31 ); - st->hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( st->hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); } } #endif diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index cf683d621..3d0b9a22d 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -170,7 +170,11 @@ static ivas_error allocate_CoreCoder_enc( #ifndef IVAS_FLOAT_FIXED wb_vad_init( st->hVAD ); #else +#ifndef MSAN_FIX wb_vad_init_fx( st->hVAD ); +#else + wb_vad_init_ivas_fx( st->hVAD ); +#endif #endif } @@ -379,9 +383,6 @@ ivas_error stereo_memory_enc_fx( { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } -#ifdef IVAS_FLOAT_FIXED - stereo_icBWE_init_enc( hCPE->hStereoICBWE ); // To be removed -#endif stereo_icBWE_init_enc_fx( hCPE->hStereoICBWE ); } @@ -394,7 +395,7 @@ ivas_error stereo_memory_enc_fx( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } - HQ_core_enc_init( st->hHQ_core ); + HQ_core_enc_init_fx( st->hHQ_core ); } } @@ -435,6 +436,9 @@ ivas_error stereo_memory_enc_fx( /* allocate secondary channel */ #ifdef IVAS_FLOAT_FIXED IF( NE_32( ( error = allocate_CoreCoder_enc_fx( hCPE->hCoreCoder[1] ) ), IVAS_ERR_OK ) ) + { + return error; + } #endif IF( ( error = allocate_CoreCoder_enc( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) { @@ -691,10 +695,8 @@ ivas_error stereo_memory_enc_fx( IF( st->hFdCngEnc == NULL ) { - IF( NE_32( ( error = createFdCngEnc( &st->hFdCngEnc ) ), IVAS_ERR_OK ) ) - { - return error; - } + createFdCngEnc_fx( &st->hFdCngEnc ); + #ifdef IVAS_FLOAT_FIXED initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); #else diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c index b0e3355c8..5c0b6a6f7 100644 --- a/lib_enc/ivas_stereo_td_enc.c +++ b/lib_enc/ivas_stereo_td_enc.c @@ -380,10 +380,7 @@ ivas_error stereo_set_tdm_fx( { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); } -#ifdef IVAS_FLOAT_FIXED stereo_icBWE_init_enc_fx( hCPE->hStereoICBWE ); -#endif - stereo_icBWE_init_enc( hCPE->hStereoICBWE ); } } ELSE /* tdm_LRTD_flag == 1 */ diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 223778e89..4558945b9 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -1812,7 +1812,9 @@ typedef struct tcx_enc_structure #else Word16 tcxltp_gain_past; /* Q15 */ #endif +#ifndef IVAS_FLOAT_FIXED float tcxltp_norm_corr_past_flt; +#endif Word16 tcxltp_norm_corr_past; /* Q15 */ float tcxltp_norm_corr_mem_flt; Word16 tcxltp_norm_corr_mem; /* Q15 */ -- GitLab From eb2c3f85981324c5e7811f79c923142919d2fc96 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Tue, 19 Nov 2024 14:38:06 +0530 Subject: [PATCH 2/2] Clang formatting changes --- lib_enc/ivas_core_enc.c | 4 ++-- lib_enc/ivas_mdct_core_enc.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index 39a87514f..9c187d031 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -442,7 +442,7 @@ ivas_error ivas_core_enc( { nSubframes = 2; } - //hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); + // hTcxEnc->tcxltp_norm_corr_past = float_to_fix16( hTcxEnc->tcxltp_norm_corr_past_flt, Q15 ); floatToFixed_arr16( st->lspold_enc, st->lspold_enc_fx, Q15, M ); Word16 q_spectrum = L_get_q_buf1( hTcxEnc->spectrum[0], st->hTcxEnc->L_frameTCX / nSubframes ); @@ -494,7 +494,7 @@ ivas_error ivas_core_enc( } #endif #ifdef IVAS_FLOAT_FIXED_CONVERSIONS - //hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); + // hTcxEnc->tcxltp_norm_corr_past_flt = fix16_to_float( hTcxEnc->tcxltp_norm_corr_past, Q15 ); fixedToFloat_arr( pitch_buf_fx[n], pitch_buf[n], Q6, NB_SUBFR16k ); fixedToFloat_arr( st->hTcxEnc->old_out_fx, st->hTcxEnc->old_out, st->hTcxEnc->Q_old_out, L_FRAME32k ); diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index 73327fbae..819596af2 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -2099,7 +2099,7 @@ void ivas_mdct_core_whitening_enc( } nrg = 0.25f * ( fix16_to_float( hTcxEnc0->tcxltp_norm_corr_past, 15 ) + hTcxEnc0->tcxltp_norm_corr_mem_flt + /* tcxltp_norm_corr_past already contains the */ - fix16_to_float( hTcxEnc1->tcxltp_norm_corr_past, 15 ) + hTcxEnc1->tcxltp_norm_corr_mem_flt ); /* normalized correlation of the current frame */ + fix16_to_float( hTcxEnc1->tcxltp_norm_corr_past, 15 ) + hTcxEnc1->tcxltp_norm_corr_mem_flt ); /* normalized correlation of the current frame */ L_subframe = max( 512, L_subframe ); nSubframes = ( hTcxEnc0->tcxMode == TCX_20 ) ? 1 : NB_DIV; -- GitLab