From dc760cb2bce27b91313a51986d0253159d90ee44 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Tue, 3 Feb 2026 10:42:50 -0500 Subject: [PATCH 1/2] harmonisation of smc init --- lib_com/options.h | 2 +- lib_enc/init_enc_fx.c | 4 + lib_enc/ivas_stereo_switching_enc_fx.c | 4 + lib_enc/prot_fx_enc.h | 5 + lib_enc/speech_music_classif_fx.c | 173 +++++++++++++------------ 5 files changed, 103 insertions(+), 85 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 0ea316a82..e0498d2df 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -109,7 +109,7 @@ #define FIX_2391_INIT_HQ_GENERIC_OFFSET /* FhG/Eri: basop issue 2391: make sure hq_generic_offset is initialized inside hq_hr_dec_fx() */ #define FIX_2397_COPY_AQ_MDCT_CORE_BFI /* FhG: prevent copying of uninit memory in MDCT stereo core if bfi is set */ #define HARMONIZE_TBE /* VA: harmonize core-coder TBE function duplications */ - +#define FIX_2405_HARM_SMC_INIT /* VA, basop 2405, harmonisation of SMC init */ /* #################### End BE switches ################################## */ /* #################### Start NON-BE switches ############################ */ diff --git a/lib_enc/init_enc_fx.c b/lib_enc/init_enc_fx.c index b30b95806..0bb93ddc3 100644 --- a/lib_enc/init_enc_fx.c +++ b/lib_enc/init_enc_fx.c @@ -545,6 +545,7 @@ ivas_error init_encoder_fx( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); } +#ifndef FIX_2405_HARM_SMC_INIT IF( st->element_mode == EVS_MONO ) { speech_music_clas_init_fx( st->hSpMusClas ); @@ -553,6 +554,9 @@ ivas_error init_encoder_fx( { speech_music_clas_init_ivas_fx( st->hSpMusClas ); } +#else + speech_music_clas_init_fx( st->element_mode, st->hSpMusClas ); +#endif st->sp_aud_decision0 = 0; move16(); st->sp_aud_decision1 = 0; diff --git a/lib_enc/ivas_stereo_switching_enc_fx.c b/lib_enc/ivas_stereo_switching_enc_fx.c index a4a3080a7..32d54deb6 100644 --- a/lib_enc/ivas_stereo_switching_enc_fx.c +++ b/lib_enc/ivas_stereo_switching_enc_fx.c @@ -93,7 +93,11 @@ static ivas_error allocate_CoreCoder_enc_fx( { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); } +#ifndef FIX_2405_HARM_SMC_INIT speech_music_clas_init_ivas_fx( st->hSpMusClas ); +#else + speech_music_clas_init_fx( st->element_mode, st->hSpMusClas ); +#endif } return IVAS_ERR_OK; diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index 49c438515..3b5a0f615 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -1132,12 +1132,17 @@ void coder_type_modif_fx( ); void speech_music_clas_init_fx( +#ifdef FIX_2405_HARM_SMC_INIT + const Word16 element_mode, /* element mode to differentiate IVAS only init */ +#endif SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ ); +#ifndef FIX_2405_HARM_SMC_INIT void speech_music_clas_init_ivas_fx( SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ ); +#endif void pitchDoubling_det_fx( Word16 *wspeech, diff --git a/lib_enc/speech_music_classif_fx.c b/lib_enc/speech_music_classif_fx.c index a60539047..d8fc932f7 100644 --- a/lib_enc/speech_music_classif_fx.c +++ b/lib_enc/speech_music_classif_fx.c @@ -70,7 +70,7 @@ Word32 log_weights_noise_compute[N_SMC_MIXTURES] = { * * Initialization of speech/music classifier *---------------------------------------------------------------------*/ - +#ifndef FIX_2405_HARM_SMC_INIT void speech_music_clas_init_fx( SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ ) @@ -223,67 +223,40 @@ void speech_music_clas_init_fx( } void speech_music_clas_init_ivas_fx( +#else +void speech_music_clas_init_fx( + const Word16 element_mode, /* element mode to differentiate IVAS only init */ +#endif SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ + ) { Word16 i; - set32_fx( hSpMusClas->FV_st_fx, 0, N_SMC_FEATURES ); - hSpMusClas->inact_cnt = 0; move16(); set16_fx( hSpMusClas->past_dec, 0, HANG_LEN - 1 ); set16_fx( hSpMusClas->past_dlp_fx, 0, HANG_LEN - 1 ); - set32_fx( hSpMusClas->past_dlp_mean_ST_fx, 0, HANG_LEN - 1 ); - hSpMusClas->dlp_mean_ST_fx = 0; - move32(); - hSpMusClas->dlp_mean_LT_fx = 0; - move32(); - hSpMusClas->dlp_var_LT_fx = 0; - move32(); - - FOR( i = 0; i < N_SMC_FEATURES; i++ ) - { - hSpMusClas->prev_FV_fx[i] = L_add( L_shr( hout_intervals_fx[2 * i], 1 ), L_shr( hout_intervals_fx[2 * i + 1], 1 ) ); - move32(); - } - - FOR( i = 0; i < NB_BANDS_SPMUS; i++ ) - { - hSpMusClas->past_log_enr_fx[i] = -1448; /* log(E_MIN) in Q8 */ - move16(); - } + set16_fx( hSpMusClas->past_log_enr_fx, -1448, NB_BANDS_SPMUS ); /* log(E_MIN) in Q8 */ hSpMusClas->sp_mus_state = -8; move16(); - hSpMusClas->wdrop_32fx = 0; - move32(); - hSpMusClas->wrise_fx = 0; + hSpMusClas->wdrop_fx = 0; move16(); + hSpMusClas->wdlp_0_95_sp_fx = 0; move16(); - hSpMusClas->wdlp_0_95_sp_32fx = 0; - move32(); - hSpMusClas->wdlp_xtalk_fx = 0; - move16(); set16_fx( hSpMusClas->last_lsp_fx, 0, M_LSP_SPMUS ); hSpMusClas->last_cor_map_sum_fx = 0; move16(); hSpMusClas->last_non_sta_fx = 0; move16(); set32_fx( hSpMusClas->past_PS_fx, 0, HIGHEST_FBIN - LOWEST_FBIN ); - hSpMusClas->past_PS_Q = Q31; - move16(); hSpMusClas->past_ps_diff_fx = 0; move16(); hSpMusClas->past_epsP2_fx = 1024; /* 1.0f in Q10 */ move16(); - hSpMusClas->past_epsP_fx = 0; - move16(); - hSpMusClas->flag_spitch_cnt = 0; - move16(); - hSpMusClas->gsc_thres_fx[0] = TH_0_MIN_FX; move16(); @@ -309,19 +282,6 @@ void speech_music_clas_init_ivas_fx( hSpMusClas->last_sw_dyn_fx = 2560; /* 10.0f in Q7 */ move16(); - hSpMusClas->relE_attack_cnt = 0; - move16(); - hSpMusClas->prev_relE_fx = 0; - move16(); - hSpMusClas->prev_Etot_fx = 0; - move16(); - hSpMusClas->prev_vad = 0; - move16(); - hSpMusClas->vad_0_1_cnt = 0; - move16(); - hSpMusClas->relE_attack_sum_fx = 0; - move16(); - /* speech/music classifier improvement */ FOR( i = 0; i < BUF_LEN; i++ ) { @@ -351,8 +311,6 @@ void speech_music_clas_init_ivas_fx( move16(); hSpMusClas->gsc_cnt = 0; move16(); - hSpMusClas->last_vad_spa = 0; - move16(); set16_fx( hSpMusClas->old_Bin_E_fx, 0, 3 * N_OLD_BIN_E ); set16_fx( hSpMusClas->buf_etot_fx, 0, 4 ); @@ -377,30 +335,18 @@ void speech_music_clas_init_ivas_fx( hSpMusClas->old_lt_diff_fx[1] = 0; move16(); - set32_fx( hSpMusClas->finc_prev_fx, 0, ATT_NSEG ); - hSpMusClas->q_finc_prev = Q31; - move16(); - hSpMusClas->lt_finc_fx = 0; - move32(); - hSpMusClas->Q_lt_finc = Q31; - move16(); - - hSpMusClas->last_strong_attack = 0; + /* GSC - pitch excitation parameters */ + hSpMusClas->high_stable_cor = 0; move16(); - hSpMusClas->tdm_lt_Etot_fx = 3; /* 0.01f in Q8 */ + set16_fx( hSpMusClas->var_cor_t_fx, 0, VAR_COR_LEN ); + hSpMusClas->lps_fx = 0; move16(); - set32_fx( hSpMusClas->tod_lt_Bin_E_fx, 0, TOD_NSPEC ); - hSpMusClas->Q_tod_lt_Bin_E = Q31; + hSpMusClas->lpm_fx = 0; move16(); - set32_fx( hSpMusClas->tod_S_map_lt_fx, 0, TOD_NSPEC ); - hSpMusClas->tod_thr_lt_fx = TOD_THR_MASS_FX_Q22; - move32(); - hSpMusClas->tod_weight_fx = 0; + hSpMusClas->lt_dec_thres_fx = 5120; + move16(); /*10 in Q9 */ + hSpMusClas->ener_RAT_fx = 0; move16(); - hSpMusClas->tod_S_mass_prev_fx = 0; - move32(); - hSpMusClas->tod_S_mass_lt_fx = 0; - move32(); /* speech/music classification */ set16_fx( hSpMusClas->lt_old_mode, 1, 3 ); @@ -428,21 +374,80 @@ void speech_music_clas_init_ivas_fx( hSpMusClas->lt_speech_hangover = 0; move16(); - hSpMusClas->lt_dec_thres_fx = 5120; /* 10.0f in Q9 */ - move16(); - hSpMusClas->ener_RAT_fx = 0; - move16(); +#ifdef FIX_2405_HARM_SMC_INIT + IF( element_mode > EVS_MONO ) + { + set32_fx( hSpMusClas->FV_st_fx, 0, N_SMC_FEATURES ); + set32_fx( hSpMusClas->past_dlp_mean_ST_fx, 0, HANG_LEN - 1 ); + hSpMusClas->dlp_mean_ST_fx = 0; + move32(); + hSpMusClas->dlp_mean_LT_fx = 0; + move32(); + hSpMusClas->dlp_var_LT_fx = 0; + move32(); - hSpMusClas->high_stable_cor = 0; - move16(); - set16_fx( hSpMusClas->var_cor_t_fx, 0, VAR_COR_LEN ); + FOR( i = 0; i < N_SMC_FEATURES; i++ ) + { + hSpMusClas->prev_FV_fx[i] = L_add( L_shr( hout_intervals_fx[2 * i], 1 ), L_shr( hout_intervals_fx[2 * i + 1], 1 ) ); + move32(); + } + hSpMusClas->wdrop_32fx = 0; + move32(); + hSpMusClas->wrise_fx = 0; + move16(); + hSpMusClas->wdlp_0_95_sp_32fx = 0; + move32(); + hSpMusClas->wdlp_xtalk_fx = 0; + move16(); + hSpMusClas->past_PS_Q = Q31; + move16(); + hSpMusClas->past_epsP_fx = 0; + move16(); + hSpMusClas->flag_spitch_cnt = 0; + move16(); + hSpMusClas->relE_attack_cnt = 0; + move16(); + hSpMusClas->prev_relE_fx = 0; + move16(); + hSpMusClas->prev_Etot_fx = 0; + move16(); + hSpMusClas->prev_vad = 0; + move16(); + hSpMusClas->vad_0_1_cnt = 0; + move16(); + hSpMusClas->relE_attack_sum_fx = 0; + move16(); + hSpMusClas->last_vad_spa = 0; + move16(); + set32_fx( hSpMusClas->finc_prev_fx, 0, ATT_NSEG ); + hSpMusClas->q_finc_prev = Q31; + move16(); + hSpMusClas->lt_finc_fx = 0; + move32(); + hSpMusClas->Q_lt_finc = Q31; + move16(); - hSpMusClas->lps_fx = 0; - move16(); - hSpMusClas->lpm_fx = 0; - move16(); - hSpMusClas->lpn_fx = 0; - move16(); + hSpMusClas->last_strong_attack = 0; + move16(); + hSpMusClas->tdm_lt_Etot_fx = 3; /* 0.01f in Q8 */ + move16(); + set32_fx( hSpMusClas->tod_lt_Bin_E_fx, 0, TOD_NSPEC ); + hSpMusClas->Q_tod_lt_Bin_E = Q31; + move16(); + set32_fx( hSpMusClas->tod_S_map_lt_fx, 0, TOD_NSPEC ); + hSpMusClas->tod_thr_lt_fx = TOD_THR_MASS_FX_Q22; + move32(); + hSpMusClas->tod_weight_fx = 0; + move16(); + hSpMusClas->tod_S_mass_prev_fx = 0; + move32(); + hSpMusClas->tod_S_mass_lt_fx = 0; + move32(); + hSpMusClas->lpn_fx = 0; + move16(); + + } +#endif return; } -- GitLab From a566bf327acb565255a15371db8e10affad1addc Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Tue, 3 Feb 2026 11:22:04 -0500 Subject: [PATCH 2/2] fix clang-format --- lib_enc/prot_fx_enc.h | 2 +- lib_enc/speech_music_classif_fx.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index 3b5a0f615..769e34b67 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -1133,7 +1133,7 @@ void coder_type_modif_fx( void speech_music_clas_init_fx( #ifdef FIX_2405_HARM_SMC_INIT - const Word16 element_mode, /* element mode to differentiate IVAS only init */ + const Word16 element_mode, /* element mode to differentiate IVAS only init */ #endif SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ ); diff --git a/lib_enc/speech_music_classif_fx.c b/lib_enc/speech_music_classif_fx.c index d8fc932f7..6edaa31a3 100644 --- a/lib_enc/speech_music_classif_fx.c +++ b/lib_enc/speech_music_classif_fx.c @@ -70,7 +70,7 @@ Word32 log_weights_noise_compute[N_SMC_MIXTURES] = { * * Initialization of speech/music classifier *---------------------------------------------------------------------*/ -#ifndef FIX_2405_HARM_SMC_INIT +#ifndef FIX_2405_HARM_SMC_INIT void speech_music_clas_init_fx( SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ ) @@ -225,7 +225,7 @@ void speech_music_clas_init_fx( void speech_music_clas_init_ivas_fx( #else void speech_music_clas_init_fx( - const Word16 element_mode, /* element mode to differentiate IVAS only init */ + const Word16 element_mode, /* element mode to differentiate IVAS only init */ #endif SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ @@ -445,7 +445,6 @@ void speech_music_clas_init_fx( move32(); hSpMusClas->lpn_fx = 0; move16(); - } #endif -- GitLab