From 87afc44cee615095bf7eedce2b5c5188e8f12602 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Fri, 19 Jul 2024 08:57:11 -0400 Subject: [PATCH 01/77] prepare lib_com for wmc_tools usage --- lib_com/basop32.c | 9 +++------ lib_com/core_com_config.c | 3 +++ lib_com/enh1632.c | 3 +-- lib_com/enh64.c | 24 ++++++++---------------- lib_com/float_to_fix_ops.c | 10 ++++++---- 5 files changed, 21 insertions(+), 28 deletions(-) diff --git a/lib_com/basop32.c b/lib_com/basop32.c index 3c45383b7..20d309f11 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -896,11 +896,10 @@ Word16 shl_sat( Word16 var1, Word16 var2 ) */ #ifdef BASOP_NOGLOB Word16 shr_o( Word16 var1, Word16 var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word16 shr( Word16 var1, Word16 var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word16 var_out; if ( var2 < 0 ) @@ -995,11 +994,10 @@ Word16 shr_sat( Word16 var1, Word16 var2 ) */ #ifdef BASOP_NOGLOB Word16 mult_o( Word16 var1, Word16 var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word16 mult( Word16 var1, Word16 var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word16 var_out; Word32 L_product; @@ -1589,11 +1587,10 @@ Word32 DEPR_L_macNs( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry ) #endif #ifdef BASOP_NOGLOB Word32 L_macNs_co( Word32 L_var3, Word16 var1, Word16 var2, Flag *Carry, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word32 L_macNs( Word32 L_var3, Word16 var1, Word16 var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word32 L_var_out; #ifdef BASOP_NOGLOB diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index a10ecac19..764f22f05 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -288,6 +288,9 @@ Word16 getTcxonly( tcxonly = 1; } break; +#endif +#ifdef IVAS_CODE_SWITCHING + } #endif return tcxonly; } diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index 3704c2bd3..d802dfed9 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -382,11 +382,10 @@ Word32 L_lshr( Word32 L_var1, Word16 var2 ) *****************************************************************************/ #ifdef BASOP_NOGLOB Word16 shl_ro( Word16 var1, Word16 var2, Flag *Overflow ) -{ #else Word16 shl_r( Word16 var1, Word16 var2 ) -{ #endif +{ Word16 var_out; if ( var2 >= 0 ) diff --git a/lib_com/enh64.c b/lib_com/enh64.c index f0b804076..99b8f4275 100644 --- a/lib_com/enh64.c +++ b/lib_com/enh64.c @@ -167,11 +167,10 @@ Word64 W_sub_nosat( Word64 L64_var1, Word64 L64_var2 ) */ #ifdef BASOP_NOGLOB Word64 W_shl_o( Word64 L64_var1, Word16 var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_shl( Word64 L64_var1, Word16 var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out = 0LL; @@ -1142,11 +1141,10 @@ Word32 W_shl_sat_l( Word64 L64_var, Word16 n ) */ #ifdef BASOP_NOGLOB Word32 W_round48_L_o( Word64 L64_var1, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word32 W_round48_L( Word64 L64_var1 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; Word32 L_result; @@ -1216,11 +1214,10 @@ Word32 W_round48_L( Word64 L64_var1 ) */ #ifdef BASOP_NOGLOB Word16 W_round32_s_o( Word64 L64_var1, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word16 W_round32_s( Word64 L64_var1 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; Word32 L_var; Word16 var_out; @@ -1357,11 +1354,10 @@ Word16 W_norm( Word64 L64_var1 ) */ #ifdef BASOP_NOGLOB Word64 W_add_o( Word64 L64_var1, Word64 L64_var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_add( Word64 L64_var1, Word64 L64_var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; L64_var_out = L64_var1 + L64_var2; @@ -1425,11 +1421,10 @@ Word64 W_add( Word64 L64_var1, Word64 L64_var2 ) */ #ifdef BASOP_NOGLOB Word64 W_sub_o( Word64 L64_var1, Word64 L64_var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_sub( Word64 L64_var1, Word64 L64_var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; L64_var_out = L64_var1 - L64_var2; @@ -1490,11 +1485,10 @@ Word64 W_sub( Word64 L64_var1, Word64 L64_var2 ) */ #ifdef BASOP_NOGLOB Word64 W_neg_o( Word64 L64_var1, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_neg( Word64 L64_var1 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; if ( L64_var1 == MIN_64 ) @@ -1555,11 +1549,10 @@ Word64 W_neg( Word64 L64_var1 ) */ #ifdef BASOP_NOGLOB Word64 W_abs_o( Word64 L64_var1, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_abs( Word64 L64_var1 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; if ( L64_var1 == MIN_64 ) @@ -1631,11 +1624,10 @@ Word64 W_abs( Word64 L64_var1 ) */ #ifdef BASOP_NOGLOB Word64 W_mult_32_32_o( Word32 L_var1, Word32 L_var2, Flag *Overflow ) -{ #else /* BASOP_NOGLOB */ Word64 W_mult_32_32( Word32 L_var1, Word32 L_var2 ) -{ #endif /* BASOP_NOGLOB */ +{ Word64 L64_var_out; if ( ( L_var1 == MIN_32 ) && ( L_var2 == MIN_32 ) ) diff --git a/lib_com/float_to_fix_ops.c b/lib_com/float_to_fix_ops.c index 5ba9b55a6..df6ad7c39 100644 --- a/lib_com/float_to_fix_ops.c +++ b/lib_com/float_to_fix_ops.c @@ -5,6 +5,7 @@ #include "options.h" #include "prot.h" #include "prot_fx.h" +#define WMC_TOOL_SKIP Word32 floatToFixed( float f, Word16 Q ) { @@ -14,9 +15,9 @@ Word32 floatToFixed( float f, Word16 Q ) if ( f == 1.0f && Q == Q31 ) return MAXVAL_WORD32; if ( Q < 0 ) - result_32 = (Word64) ( (float) ( f ) / (double) ( 1llu << ( -Q ) ) + ( f >= 0 ? 0.5 : -0.5 ) ); + result_32 = (Word64) ( (float) ( f ) / (double) ( (Word64) 1 << ( -Q ) ) + ( f >= 0 ? 0.5 : -0.5 ) ); else - result_32 = (Word64) ( f * (double) ( 1llu << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); + result_32 = (Word64) ( f * (double) ( ( Word64 )1 << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); if ( result_32 > MAX_32 ) return MAX_32; if ( result_32 < MIN_32 ) @@ -36,7 +37,7 @@ void floatToFixed_arrL( float *f, Word32 *i, Word16 Q, Word16 l ) for ( int j = 0; j < l; j++ ) { #if 0 - i[j] = floatToFixed(f[j], Q); + i[j] = floatToFixed(f[j], Q); #else Word64 i64_val = floatToFixed( f[j], Q ); IF( i64_val > MAX_32 ) @@ -150,7 +151,7 @@ void floatToFixed_arr( float *f, Word16 *i, Word16 Q, Word16 l ) for ( int j = 0; j < l; j++ ) { #if 0 - i[j] = (Word16)floatToFixed(f[j], Q); + i[j] = (Word16)floatToFixed(f[j], Q); #else Word32 i32_val = floatToFixed( f[j], Q ); IF( i32_val > MAX_16 ) @@ -296,3 +297,4 @@ Word16 L_get_q_buf1( float *ptr_flt, Word16 length ) } } #endif +#undef WMC_TOOL_SKIP -- GitLab From 35147c349bdb596b18eb399626864dcd1b04d3b4 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Fri, 19 Jul 2024 09:19:58 -0400 Subject: [PATCH 02/77] prepare lib_dec and lib_enc for wmc_tools usage --- lib_dec/FEC_HQ_core_fx.c | 4 +++- lib_dec/acelp_core_dec_ivas_fx.c | 5 ++--- lib_dec/ivas_core_dec.c | 6 ++---- lib_dec/ivas_qmetadata_dec.c | 12 ++++++++++-- lib_dec/jbm_pcmdsp_apa.c | 14 +++++++------- lib_dec/tonalMDCTconcealment_fx.c | 2 +- lib_enc/ext_sig_ana_fx.c | 1 + lib_enc/find_uv_fx.c | 15 ++++++++++----- lib_enc/igf_enc_fx.c | 7 ++++++- 9 files changed, 42 insertions(+), 24 deletions(-) diff --git a/lib_dec/FEC_HQ_core_fx.c b/lib_dec/FEC_HQ_core_fx.c index 3a5b71cff..e536ddab5 100644 --- a/lib_dec/FEC_HQ_core_fx.c +++ b/lib_dec/FEC_HQ_core_fx.c @@ -1015,7 +1015,9 @@ void HQ_FEC_Mem_update_fx( move16(); hHQ_core->old_is_transient[0] = is_transient; move16(); - +#ifdef ADD_IVAS_HQ_CODE_FEC + } +#endif return; } #endif diff --git a/lib_dec/acelp_core_dec_ivas_fx.c b/lib_dec/acelp_core_dec_ivas_fx.c index 62d6dc171..d91c053bc 100644 --- a/lib_dec/acelp_core_dec_ivas_fx.c +++ b/lib_dec/acelp_core_dec_ivas_fx.c @@ -1261,12 +1261,11 @@ ivas_error acelp_core_dec_ivas_fx( FEC_lsf2lsp_interp( st, st->L_frame, Aq_fx, lsf_new_fx, lsp_new_fx ); #ifndef MSAN_FIX for ( int nsf = 0; nsf < NB_SUBFR16k; nsf++ ) - { #else FOR( Word32 nsf = 0; nsf < st->nb_subfr; nsf++ ) - { #endif - Scale_sig( Aq_fx + ( nsf * ( M + 1 ) ), M + 1, sub( norm_s( Aq_fx[imult3216( nsf, M + 1 )] ), Q2 ) ); + { + Scale_sig( Aq_fx + ( nsf * ( M + 1 ) ), M + 1, sub( norm_s( Aq_fx[imult3216( nsf, M + 1 )] ), Q2 ) ); Aq_fx[imult3216( nsf, M + 1 )] = ONE_IN_Q12; move16(); } diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 9d2aa6d7e..626a9c1d6 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -805,12 +805,11 @@ ivas_error ivas_core_dec_fx( #ifdef NONBE_MDCT_ST_DTX_SKIP_DEWHITENING_OF_NOISE_SHAPES_ON_SID_FRAMES /* On first good active frame after frameloss undo the whitening of the bg noise shape */ IF( GT_32( sts[0]->core_brate, SID_2k40 ) && sts[0]->bfi == 0 && EQ_16( sts[0]->prev_bfi, 1 ) ) - { #else IF( sts[0]->bfi == 0 && EQ_16( sts[0]->prev_bfi, 1 ) ) - { /* On first good frame after frameloss undo the whitening of the bg noise shape */ #endif + { FOR( n = 0; n < n_channels; ++n ) { IF( NE_16( sts[n]->last_core_bfi, ACELP_CORE ) ) @@ -1988,12 +1987,11 @@ ivas_error ivas_core_dec( /* On first good active frame after frameloss undo the whitening of the bg noise shape */ if ( sts[0]->core_brate > SID_2k40 && sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) - { #else if ( sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) - { /* On first good frame after frameloss undo the whitening of the bg noise shape */ #endif + { for ( n = 0; n < n_channels; ++n ) { if ( sts[n]->last_core_bfi != ACELP_CORE ) diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index c80e1dbfb..d21afb72f 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -1708,16 +1708,20 @@ Word16 ivas_qmetadata_dec_decode_hr_384_512( { FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) { + hQMetaData->q_direction[0].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[0][b][m] ); + move32(); + } + } #else FOR( b = 0; b < MASA_MAXIMUM_CODING_SUBBANDS; b++ ) { FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) { -#endif // MSAN_FIX hQMetaData->q_direction[0].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[0][b][m] ); move32(); } } +#endif // MSAN_FIX IF( EQ_32( hQMetaData->no_directions, 2 ) ) { #ifdef MSAN_FIX @@ -1725,16 +1729,20 @@ Word16 ivas_qmetadata_dec_decode_hr_384_512( { FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { + hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); + move32(); + } + } #else FOR( b = 0; b < MASA_MAXIMUM_CODING_SUBBANDS; b++ ) { FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) { -#endif // MSAN_FIX hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); move32(); } } +#endif // MSAN_FIX } /* Store status information for renderer use */ hQMetaData->ec_flag = 0; diff --git a/lib_dec/jbm_pcmdsp_apa.c b/lib_dec/jbm_pcmdsp_apa.c index 9e11f8085..8bf338146 100644 --- a/lib_dec/jbm_pcmdsp_apa.c +++ b/lib_dec/jbm_pcmdsp_apa.c @@ -1685,25 +1685,25 @@ static Word8 logarithmic_search_fx( const apa_state_t *ps, /* update max corr */ IF( LT_16( ps->scale, 100 ) ){ /* shrinking: prefer greater synchpos for equal coeff */ - BASOP_SATURATE_WARNING_OFF_EVS + BASOP_SATURATE_WARNING_OFF_EVS; IF( GE_32( coeff, coeff_max ) ){ coeff_max = L_add( coeff, 0 ); *synchpos = i; move16(); } - BASOP_SATURATE_WARNING_ON_EVS + BASOP_SATURATE_WARNING_ON_EVS; } - ELSE - { - /* extending: prefer smaller synchpos for equal coeff */ - BASOP_SATURATE_WARNING_OFF_EVS + ELSE + { + /* extending: prefer smaller synchpos for equal coeff */ + BASOP_SATURATE_WARNING_OFF_EVS; IF( GT_32( coeff, coeff_max ) ) { coeff_max = L_add( coeff, 0 ); *synchpos = i; move16(); } - BASOP_SATURATE_WARNING_ON_EVS + BASOP_SATURATE_WARNING_ON_EVS; } } /* backup old search range */ diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index bccb9ea3f..d0530a6b6 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2778,7 +2778,7 @@ void TonalMDCTConceal_Apply( Word32 *mdctSpectrum, /*IN/OUT*/ Word16 *mdctSpectrum_exp /*IN */ #ifdef IVAS_CODE_MDCT_GSHAPE - ,const PsychoacousticParameters* psychParamsCurrent) + ,const PsychoacousticParameters* psychParamsCurrent #endif ) { diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index f4c60b16f..de288efbd 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -551,6 +551,7 @@ void core_signal_analysis_high_bitrate_fx( { set_f( &mdst_spectrum[frameno][MCT_LFE_MAX_LINE], 0.f, L_subframe - MCT_LFE_MAX_LINE ); } + } #endif } IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) diff --git a/lib_enc/find_uv_fx.c b/lib_enc/find_uv_fx.c index ec934ad9c..6cb4ecec7 100644 --- a/lib_enc/find_uv_fx.c +++ b/lib_enc/find_uv_fx.c @@ -476,14 +476,18 @@ Word16 find_uv_fx( /* o : coding type test(); #ifdef BASOP_NOGLOB if ( ( ( LT_16( add_o( mean_voi3, corr_shift, &Overflow ), add( 22774, mean_voi3_offset ) ) ) && /* normalized correlation low */ -#else /* BASOP_NOGLOB */ - if ( ( ( LT_16( add( mean_voi3, corr_shift ), add( 22774, mean_voi3_offset ) ) ) && /* normalized correlation low */ -#endif -#ifdef BASOP_NOGLOB ( LT_16( add_sat( st_fx->voicing_fx[2], corr_shift ), 25887 ) ) && /* normalized correlation low on look-ahead - onset detection */ + ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ + ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ + ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ + /*( st_fx->music_hysteresis_fx == 0 ) && */ /* ... and in segment after AUDIO frames */ + ( LE_32( dE1, 245760 ) ) && /* Avoid on sharp energy spikes */ + ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ + ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ + || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ #else + if ( ( ( LT_16( add( mean_voi3, corr_shift ), add( 22774, mean_voi3_offset ) ) ) && /* normalized correlation low */ ( LT_16( add( st_fx->voicing_fx[2], corr_shift ), 25887 ) ) && /* normalized correlation low on look-ahead - onset detection */ -#endif ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ @@ -492,6 +496,7 @@ Word16 find_uv_fx( /* o : coding type ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ +#endif { coder_type = UNVOICED; move16(); diff --git a/lib_enc/igf_enc_fx.c b/lib_enc/igf_enc_fx.c index 1bcb7698f..bb9569715 100644 --- a/lib_enc/igf_enc_fx.c +++ b/lib_enc/igf_enc_fx.c @@ -251,14 +251,19 @@ static void IGF_CalculateEnvelope( const IGF_ENC_INSTANCE_HANDLE hInstance, /**< } #ifdef BASOP_NOGLOB BASOP_Util_Divide_MantExp( round_fx_sat( sfbEnergyR[sfb] ), + sfbEnergyR_exp[sfb], + width, + 15, + &gain, + &gain_exp ); #else BASOP_Util_Divide_MantExp( round_fx( sfbEnergyR[sfb] ), -#endif sfbEnergyR_exp[sfb], width, 15, &gain, &gain_exp ); +#endif L_tmp = L_deposit_h( gain ); } -- GitLab From 4c9c745a6c2e2425de7f2080b907c663458426e0 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Fri, 19 Jul 2024 09:43:51 -0400 Subject: [PATCH 03/77] Fix clang format --- lib_com/core_com_config.c | 2368 ++++++++++++++--------------- lib_com/float_to_fix_ops.c | 2 +- lib_dec/FEC_HQ_core_fx.c | 1730 ++++++++++----------- lib_dec/acelp_core_dec_ivas_fx.c | 2 +- lib_dec/ivas_core_dec.c | 4 +- lib_dec/jbm_pcmdsp_apa.c | 78 +- lib_dec/tonalMDCTconcealment_fx.c | 11 +- lib_enc/ext_sig_ana_fx.c | 96 +- lib_enc/find_uv_fx.c | 34 +- 9 files changed, 2164 insertions(+), 2161 deletions(-) diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index 764f22f05..25352bbe7 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -290,240 +290,240 @@ Word16 getTcxonly( break; #endif #ifdef IVAS_CODE_SWITCHING - } -#endif - return tcxonly; } +#endif + return tcxonly; +} - Word16 getTcxonly_fx( - const Word16 element_mode, /* i : IVAS element mode */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ - const Word16 is_ism_format /* i : flag indicating ISM format */ - ) - { - Word16 tcxonly; - tcxonly = 0; - move16(); +Word16 getTcxonly_fx( + const Word16 element_mode, /* i : IVAS element mode */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ + const Word16 is_ism_format /* i : flag indicating ISM format */ +) +{ + Word16 tcxonly; + tcxonly = 0; + move16(); - SWITCH( element_mode ) - { - case EVS_MONO: - if ( GT_32( total_brate, ACELP_32k ) ) + SWITCH( element_mode ) + { + case EVS_MONO: + if ( GT_32( total_brate, ACELP_32k ) ) + { + tcxonly = 1; + move16(); + } + BREAK; + case IVAS_SCE: + IF( is_ism_format ) + { + if ( GT_32( total_brate, MAX_ACELP_BRATE_ISM ) ) { tcxonly = 1; move16(); } - BREAK; - case IVAS_SCE: - IF( is_ism_format ) - { - if ( GT_32( total_brate, MAX_ACELP_BRATE_ISM ) ) - { - tcxonly = 1; - move16(); - } - } - ELSE - { - if ( GT_32( total_brate, MAX_ACELP_BRATE ) ) - { - tcxonly = 1; - move16(); - } - } - BREAK; - - case IVAS_CPE_DFT: - case IVAS_CPE_TD: + } + ELSE + { if ( GT_32( total_brate, MAX_ACELP_BRATE ) ) { tcxonly = 1; move16(); } - BREAK; - case IVAS_CPE_MDCT: - IF( MCT_flag ) - { + } + BREAK; + + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( GT_32( total_brate, MAX_ACELP_BRATE ) ) + { + tcxonly = 1; + move16(); + } + BREAK; + case IVAS_CPE_MDCT: + IF( MCT_flag ) + { - if ( GE_32( total_brate, IVAS_32k ) ) - { - tcxonly = 1; - move16(); - } + if ( GE_32( total_brate, IVAS_32k ) ) + { + tcxonly = 1; + move16(); } - ELSE + } + ELSE + { + if ( GE_32( total_brate, IVAS_48k ) ) { - if ( GE_32( total_brate, IVAS_48k ) ) - { - tcxonly = 1; - move16(); - } + tcxonly = 1; + move16(); } - BREAK; - } - - return tcxonly; + } + BREAK; } - /*-------------------------------------------------------------------* - * getCtxHm() - * - * - *-------------------------------------------------------------------*/ - - Word16 getCtxHm( - const Word16 element_mode, /* i : IVAS element mode */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 rf_flag /* i : flag to signal the RF mode */ - ) - { - Word16 ctx_hm; - - ctx_hm = 0; - move16(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - if ( ( ( LE_16( element_mode, IVAS_SCE ) && GT_32( total_brate, LPC_SHAPED_ARI_MAX_RATE ) ) || ( GT_16( element_mode, IVAS_SCE ) && GT_32( total_brate, LPC_SHAPED_ARI_MAX_RATE_CPE ) ) ) && !rf_flag && ( ( LE_32( total_brate, IVAS_64k ) && NE_16( element_mode, IVAS_CPE_DFT ) ) || ( LT_32( total_brate, 24400 ) && EQ_16( element_mode, IVAS_CPE_DFT ) ) ) && NE_16( element_mode, IVAS_CPE_MDCT ) ) - { - ctx_hm = 1; - move16(); - } + return tcxonly; +} - return ctx_hm; - } +/*-------------------------------------------------------------------* + * getCtxHm() + * + * + *-------------------------------------------------------------------*/ - /*-------------------------------------------------------------------* - * getResq() - * - * - *-------------------------------------------------------------------*/ +Word16 getCtxHm( + const Word16 element_mode, /* i : IVAS element mode */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 rf_flag /* i : flag to signal the RF mode */ +) +{ + Word16 ctx_hm; - Word16 getResq( - const Word32 total_brate /* i : total bitrate */ - ) + ctx_hm = 0; + move16(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + if ( ( ( LE_16( element_mode, IVAS_SCE ) && GT_32( total_brate, LPC_SHAPED_ARI_MAX_RATE ) ) || ( GT_16( element_mode, IVAS_SCE ) && GT_32( total_brate, LPC_SHAPED_ARI_MAX_RATE_CPE ) ) ) && !rf_flag && ( ( LE_32( total_brate, IVAS_64k ) && NE_16( element_mode, IVAS_CPE_DFT ) ) || ( LT_32( total_brate, 24400 ) && EQ_16( element_mode, IVAS_CPE_DFT ) ) ) && NE_16( element_mode, IVAS_CPE_MDCT ) ) { - Word16 resq; - - resq = 0; + ctx_hm = 1; move16(); - if ( LE_32( total_brate, IVAS_64k ) ) - { - resq = 1; - move16(); - } - - return resq; } - /*-------------------------------------------------------------------* - * getTnsAllowed() - * - * - *-------------------------------------------------------------------*/ + return ctx_hm; +} - Word16 getTnsAllowed( - const Word32 total_brate, /* i : total bitrate */ - const Word16 igf, /* i : flag indicating IGF activity*/ - const Word16 element_mode /* i : IVAS element mode */ - ) - { - Word16 tnsAllowed; +/*-------------------------------------------------------------------* + * getResq() + * + * + *-------------------------------------------------------------------*/ - tnsAllowed = 0; - move16(); - IF( igf != 0 ) - { - test(); - test(); - if ( GT_32( total_brate, HQ_16k40 ) || ( GT_32( total_brate, HQ_13k20 ) && EQ_16( element_mode, IVAS_CPE_DFT ) ) ) - { - tnsAllowed = 1; - move16(); - } - } - ELSE - { - if ( GT_32( total_brate, HQ_32k ) ) - { - tnsAllowed = 1; - move16(); - } - } +Word16 getResq( + const Word32 total_brate /* i : total bitrate */ +) +{ + Word16 resq; - return tnsAllowed; + resq = 0; + move16(); + if ( LE_32( total_brate, IVAS_64k ) ) + { + resq = 1; + move16(); } - /*-------------------------------------------------------------------* - * getRestrictedMode() - * - * - *-------------------------------------------------------------------*/ + return resq; +} - Word16 getRestrictedMode( - const Word16 element_mode, /* i : IVAS element mode */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ - ) - { - Word16 restrictedMode; - restrictedMode = 3; - move16(); +/*-------------------------------------------------------------------* + * getTnsAllowed() + * + * + *-------------------------------------------------------------------*/ +Word16 getTnsAllowed( + const Word32 total_brate, /* i : total bitrate */ + const Word16 igf, /* i : flag indicating IGF activity*/ + const Word16 element_mode /* i : IVAS element mode */ +) +{ + Word16 tnsAllowed; + + tnsAllowed = 0; + move16(); + IF( igf != 0 ) + { test(); test(); - test(); - test(); - IF( !Opt_AMR_WB && ( GT_32( total_brate, HQ_32k ) && NE_16( element_mode, IVAS_SCE ) ) ) - { - restrictedMode = 6; - move16(); - } - ELSE IF( !Opt_AMR_WB && ( GT_32( total_brate, HQ_48k ) && EQ_16( element_mode, IVAS_SCE ) ) ) + if ( GT_32( total_brate, HQ_16k40 ) || ( GT_32( total_brate, HQ_13k20 ) && EQ_16( element_mode, IVAS_CPE_DFT ) ) ) { - restrictedMode = 6; + tnsAllowed = 1; move16(); } - ELSE IF( Opt_AMR_WB ) + } + ELSE + { + if ( GT_32( total_brate, HQ_32k ) ) { - restrictedMode = 1; + tnsAllowed = 1; move16(); } - - return restrictedMode; } - /*-------------------------------------------------------------------* - * getMdctWindowLength() - * - * - *-------------------------------------------------------------------*/ + return tnsAllowed; +} - int16_t getMdctWindowLength( - const int16_t fscale ) - { - int16_t mdctWindowLength; +/*-------------------------------------------------------------------* + * getRestrictedMode() + * + * + *-------------------------------------------------------------------*/ - mdctWindowLength = ( L_LOOK_12k8 * fscale ) / FSCALE_DENOM; +Word16 getRestrictedMode( + const Word16 element_mode, /* i : IVAS element mode */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ +) +{ + Word16 restrictedMode; + restrictedMode = 3; + move16(); - return mdctWindowLength; + test(); + test(); + test(); + test(); + IF( !Opt_AMR_WB && ( GT_32( total_brate, HQ_32k ) && NE_16( element_mode, IVAS_SCE ) ) ) + { + restrictedMode = 6; + move16(); } -#ifdef IVAS_FLOAT_FIXED - Word16 getMdctWindowLength_fx( - const Word16 fscale ) + ELSE IF( !Opt_AMR_WB && ( GT_32( total_brate, HQ_48k ) && EQ_16( element_mode, IVAS_SCE ) ) ) { - Word16 mdctWindowLength; - mdctWindowLength = extract_l( L_shr( L_mult0( L_LOOK_12k8, fscale ), LD_FSCALE_DENOM ) ); - - return mdctWindowLength; + restrictedMode = 6; + move16(); + } + ELSE IF( Opt_AMR_WB ) + { + restrictedMode = 1; + move16(); } + + return restrictedMode; +} + +/*-------------------------------------------------------------------* + * getMdctWindowLength() + * + * + *-------------------------------------------------------------------*/ + +int16_t getMdctWindowLength( + const int16_t fscale ) +{ + int16_t mdctWindowLength; + + mdctWindowLength = ( L_LOOK_12k8 * fscale ) / FSCALE_DENOM; + + return mdctWindowLength; +} +#ifdef IVAS_FLOAT_FIXED +Word16 getMdctWindowLength_fx( + const Word16 fscale ) +{ + Word16 mdctWindowLength; + mdctWindowLength = extract_l( L_shr( L_mult0( L_LOOK_12k8, fscale ), LD_FSCALE_DENOM ) ); + + return mdctWindowLength; +} #endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -532,1140 +532,1140 @@ Word16 getTcxonly( * *-------------------------------------------------------------------*/ #ifdef IVAS_FLOAT_FIXED - Word16 sr2fscale_fx( - const Word32 sr_core /* i : internal sampling rate */ - ) - { - return extract_l( Mpy_32_16_1( sr_core, FSCALE_DENOM_BY_12800_Q15 ) ); - } +Word16 sr2fscale_fx( + const Word32 sr_core /* i : internal sampling rate */ +) +{ + return extract_l( Mpy_32_16_1( sr_core, FSCALE_DENOM_BY_12800_Q15 ) ); +} #endif - int16_t sr2fscale( - const int32_t sr_core /* i : internal sampling rate */ - ) - { +int16_t sr2fscale( + const int32_t sr_core /* i : internal sampling rate */ +) +{ - return (int16_t) ( ( FSCALE_DENOM * sr_core ) / 12800 ); - } + return (int16_t) ( ( FSCALE_DENOM * sr_core ) / 12800 ); +} - /*-------------------------------------------------------------------* - * getCoreSamplerateMode2_flt() - * - * - *-------------------------------------------------------------------*/ +/*-------------------------------------------------------------------* + * getCoreSamplerateMode2_flt() + * + * + *-------------------------------------------------------------------*/ - int32_t getCoreSamplerateMode2_flt( - const int16_t element_mode, /* i : IVAS element mode */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ - const int16_t rf_mode, /* i : flag to signal the RF mode */ - const IVAS_FORMAT is_ism_format /* i : flag indicating ISM format */ - ) +int32_t getCoreSamplerateMode2_flt( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ + const int16_t rf_mode, /* i : flag to signal the RF mode */ + const IVAS_FORMAT is_ism_format /* i : flag indicating ISM format */ +) +{ + int32_t sr_core = 0; + + if ( bwidth == NB ) + { + sr_core = INT_FS_12k8; + } + else if ( element_mode == EVS_MONO && ( ( bwidth == WB && total_brate < ACELP_13k20 ) || ( bwidth == SWB && total_brate <= ACELP_13k20 ) || ( rf_mode == 1 ) ) ) + { + sr_core = INT_FS_12k8; + } + else if ( element_mode > EVS_MONO && flag_ACELP16k == 0 ) + { + sr_core = INT_FS_12k8; + } + else if ( bwidth == WB || ( bwidth == SWB && total_brate <= ACELP_32k ) || ( bwidth == FB && total_brate <= ACELP_32k ) ) + { + sr_core = INT_FS_16k; + } + else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE && !is_ism_format ) + { + sr_core = INT_FS_16k; + } + else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE_ISM && element_mode == IVAS_SCE && is_ism_format ) + { + sr_core = INT_FS_16k; + } + else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE && is_ism_format ) + { + sr_core = 25600; + } + else if ( ( ( bwidth == SWB || bwidth == FB ) && element_mode == EVS_MONO && total_brate <= HQ_64k ) || ( element_mode > IVAS_SCE && ( ( bwidth == SWB && total_brate <= IVAS_96k ) || ( bwidth == FB && total_brate <= IVAS_96k ) ) ) ) + { + sr_core = 25600; + } + else if ( bwidth == SWB || bwidth == FB ) { - int32_t sr_core = 0; + sr_core = 32000; + } - if ( bwidth == NB ) - { - sr_core = INT_FS_12k8; - } - else if ( element_mode == EVS_MONO && ( ( bwidth == WB && total_brate < ACELP_13k20 ) || ( bwidth == SWB && total_brate <= ACELP_13k20 ) || ( rf_mode == 1 ) ) ) - { - sr_core = INT_FS_12k8; - } - else if ( element_mode > EVS_MONO && flag_ACELP16k == 0 ) - { - sr_core = INT_FS_12k8; - } - else if ( bwidth == WB || ( bwidth == SWB && total_brate <= ACELP_32k ) || ( bwidth == FB && total_brate <= ACELP_32k ) ) - { - sr_core = INT_FS_16k; - } - else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE && !is_ism_format ) - { - sr_core = INT_FS_16k; - } - else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE_ISM && element_mode == IVAS_SCE && is_ism_format ) - { - sr_core = INT_FS_16k; - } - else if ( ( bwidth == SWB || bwidth == FB ) && total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE && is_ism_format ) - { - sr_core = 25600; - } - else if ( ( ( bwidth == SWB || bwidth == FB ) && element_mode == EVS_MONO && total_brate <= HQ_64k ) || ( element_mode > IVAS_SCE && ( ( bwidth == SWB && total_brate <= IVAS_96k ) || ( bwidth == FB && total_brate <= IVAS_96k ) ) ) ) - { - sr_core = 25600; - } - else if ( bwidth == SWB || bwidth == FB ) - { - sr_core = 32000; - } + return sr_core; +} - return sr_core; - } +Word32 getCoreSamplerateMode2( + const Word16 element_mode, /* i : IVAS element mode */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 bwidth, /* i : audio bandwidth */ + const Word16 flag_ACELP16k, /* i : ACELP@16kHz flag */ + const Word16 rf_mode, /* i : flag to signal the RF mode */ + const IVAS_FORMAT is_ism_format /* i : flag indicating ISM format */ +) +{ - Word32 getCoreSamplerateMode2( - const Word16 element_mode, /* i : IVAS element mode */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 bwidth, /* i : audio bandwidth */ - const Word16 flag_ACELP16k, /* i : ACELP@16kHz flag */ - const Word16 rf_mode, /* i : flag to signal the RF mode */ - const IVAS_FORMAT is_ism_format /* i : flag indicating ISM format */ - ) + Word32 sr_core; + Word16 bwd_swb_or_fb_flag; + sr_core = -1; /* to suppress MSVC warning */ + move32(); + + bwd_swb_or_fb_flag = s_or( (Word16) EQ_16( bwidth, SWB ), (Word16) EQ_16( bwidth, FB ) ); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( bwidth == NB ) { - - Word32 sr_core; - Word16 bwd_swb_or_fb_flag; - sr_core = -1; /* to suppress MSVC warning */ + sr_core = INT_FS_12k8; move32(); - - bwd_swb_or_fb_flag = s_or( (Word16) EQ_16( bwidth, SWB ), (Word16) EQ_16( bwidth, FB ) ); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - IF( bwidth == NB ) - { - sr_core = INT_FS_12k8; - move32(); - } - ELSE IF( element_mode == EVS_MONO && ( L_and( EQ_32( bwidth, WB ), LT_32( total_brate, ACELP_13k20 ) ) || - L_and( EQ_32( bwidth, SWB ), LE_32( total_brate, ACELP_13k20 ) ) || EQ_16( rf_mode, 1 ) ) ) - { - sr_core = INT_FS_12k8; - move32(); - } - ELSE IF( element_mode > EVS_MONO && flag_ACELP16k == 0 ) - { - sr_core = INT_FS_12k8; - move32(); - } - ELSE IF( EQ_32( bwidth, WB ) || ( ( LE_32( total_brate, ACELP_32k ) ) && ( ( EQ_32( bwidth, SWB ) ) || ( EQ_32( bwidth, FB ) ) ) ) ) - { - sr_core = INT_FS_16k; - move32(); - } - ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE ) && EQ_16( element_mode, IVAS_SCE ) && !is_ism_format ) - { - sr_core = INT_FS_16k; - move32(); - } - ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE_ISM ) && EQ_16( element_mode, IVAS_SCE ) && is_ism_format ) - { - sr_core = INT_FS_16k; - move32(); - } - ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE ) && EQ_16( element_mode, IVAS_SCE ) && is_ism_format ) - { - sr_core = 25600; - move32(); - } - ELSE IF( ( element_mode == EVS_MONO && ( bwd_swb_or_fb_flag && LE_32( total_brate, HQ_64k ) ) ) || ( GT_16( element_mode, IVAS_SCE ) && ( ( EQ_16( bwidth, SWB ) && LE_32( total_brate, IVAS_96k ) ) || ( EQ_16( bwidth, FB ) && LE_32( total_brate, IVAS_96k ) ) ) ) ) - { - sr_core = 25600; - move32(); - } - ELSE IF( bwd_swb_or_fb_flag ) - { - sr_core = 32000; - move32(); - } - ELSE - { - assert( 0 ); - } - - return sr_core; } - - Word16 getTcxBandwidth( - const Word16 bwidth /* i : audio bandwidth */ - ) + ELSE IF( element_mode == EVS_MONO && ( L_and( EQ_32( bwidth, WB ), LT_32( total_brate, ACELP_13k20 ) ) || + L_and( EQ_32( bwidth, SWB ), LE_32( total_brate, ACELP_13k20 ) ) || EQ_16( rf_mode, 1 ) ) ) + { + sr_core = INT_FS_12k8; + move32(); + } + ELSE IF( element_mode > EVS_MONO && flag_ACELP16k == 0 ) { + sr_core = INT_FS_12k8; + move32(); + } + ELSE IF( EQ_32( bwidth, WB ) || ( ( LE_32( total_brate, ACELP_32k ) ) && ( ( EQ_32( bwidth, SWB ) ) || ( EQ_32( bwidth, FB ) ) ) ) ) + { + sr_core = INT_FS_16k; + move32(); + } + ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE ) && EQ_16( element_mode, IVAS_SCE ) && !is_ism_format ) + { + sr_core = INT_FS_16k; + move32(); + } + ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE_ISM ) && EQ_16( element_mode, IVAS_SCE ) && is_ism_format ) + { + sr_core = INT_FS_16k; + move32(); + } + ELSE IF( bwd_swb_or_fb_flag && LE_32( total_brate, MAX_ACELP_BRATE ) && EQ_16( element_mode, IVAS_SCE ) && is_ism_format ) + { + sr_core = 25600; + move32(); + } + ELSE IF( ( element_mode == EVS_MONO && ( bwd_swb_or_fb_flag && LE_32( total_brate, HQ_64k ) ) ) || ( GT_16( element_mode, IVAS_SCE ) && ( ( EQ_16( bwidth, SWB ) && LE_32( total_brate, IVAS_96k ) ) || ( EQ_16( bwidth, FB ) && LE_32( total_brate, IVAS_96k ) ) ) ) ) + { + sr_core = 25600; + move32(); + } + ELSE IF( bwd_swb_or_fb_flag ) + { + sr_core = 32000; + move32(); + } + ELSE + { + assert( 0 ); + } - Word16 tcxBandwidth; + return sr_core; +} - tcxBandwidth = 16384 /*0.5f Q15*/; - move16(); - if ( bwidth == NB ) - { - tcxBandwidth = 10240 /*0.3125f Q15*/; - move16(); - } +Word16 getTcxBandwidth( + const Word16 bwidth /* i : audio bandwidth */ +) +{ + + Word16 tcxBandwidth; - return tcxBandwidth; + tcxBandwidth = 16384 /*0.5f Q15*/; + move16(); + if ( bwidth == NB ) + { + tcxBandwidth = 10240 /*0.3125f Q15*/; + move16(); } - /*-------------------------------------------------------------------* - * getTcxBandwidth_flt() - * - * - *-------------------------------------------------------------------*/ + return tcxBandwidth; +} - float getTcxBandwidth_flt( - const int16_t bwidth /* i : audio bandwidth */ - ) - { - float tcxBandwidth = 0.5f; +/*-------------------------------------------------------------------* + * getTcxBandwidth_flt() + * + * + *-------------------------------------------------------------------*/ - if ( bwidth == NB ) - { - tcxBandwidth = 0.3125f; - } +float getTcxBandwidth_flt( + const int16_t bwidth /* i : audio bandwidth */ +) +{ + float tcxBandwidth = 0.5f; - return tcxBandwidth; + if ( bwidth == NB ) + { + tcxBandwidth = 0.3125f; } - /*-------------------------------------------------------------------* - * getIgfPresent() - * - * - *-------------------------------------------------------------------*/ + return tcxBandwidth; +} - int16_t getIgfPresent( - const int16_t element_mode, /* i : IVAS element mode */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t rf_mode /* i : flag to signal the RF mode */ - ) - { - int16_t igfPresent = 0; +/*-------------------------------------------------------------------* + * getIgfPresent() + * + * + *-------------------------------------------------------------------*/ +int16_t getIgfPresent( + const int16_t element_mode, /* i : IVAS element mode */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth, /* i : audio bandwidth */ + const int16_t rf_mode /* i : flag to signal the RF mode */ +) +{ + int16_t igfPresent = 0; - if ( bwidth == SWB ) - { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= HQ_64k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( total_brate <= HQ_48k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_MDCT: - if ( total_brate <= IVAS_96k ) - { - igfPresent = 1; - } - break; - } - } - else if ( bwidth == FB ) + + if ( bwidth == SWB ) + { + switch ( element_mode ) { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= IVAS_128k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( total_brate <= IVAS_48k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_MDCT: - if ( total_brate <= IVAS_128k ) - { - igfPresent = 1; - } - break; - } + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= HQ_64k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( total_brate <= HQ_48k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_MDCT: + if ( total_brate <= IVAS_96k ) + { + igfPresent = 1; + } + break; } - else if ( bwidth == WB ) + } + else if ( bwidth == FB ) + { + switch ( element_mode ) { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= ACELP_9k60 ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - case IVAS_CPE_MDCT: - if ( total_brate <= ACELP_13k20 ) - { - igfPresent = 1; - } - break; - } + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= IVAS_128k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( total_brate <= IVAS_48k ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_MDCT: + if ( total_brate <= IVAS_128k ) + { + igfPresent = 1; + } + break; } - - if ( ( ( bwidth == WB ) || ( bwidth == SWB ) ) && ( rf_mode == 1 ) && ( total_brate == ACELP_13k20 ) ) + } + else if ( bwidth == WB ) + { + switch ( element_mode ) { - igfPresent = 1; + case EVS_MONO: + case IVAS_SCE: + if ( total_brate <= ACELP_9k60 ) + { + igfPresent = 1; + } + break; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + case IVAS_CPE_MDCT: + if ( total_brate <= ACELP_13k20 ) + { + igfPresent = 1; + } + break; } - - return igfPresent; } - Word16 getIgfPresent_fx( - const Word16 element_mode, /* i : IVAS element mode */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 bwidth, /* i : audio bandwidth */ - const Word16 rf_mode /* i : flag to signal the RF mode */ - ) + if ( ( ( bwidth == WB ) || ( bwidth == SWB ) ) && ( rf_mode == 1 ) && ( total_brate == ACELP_13k20 ) ) { - Word16 igfPresent; - igfPresent = 0; - move16(); + igfPresent = 1; + } - IF( EQ_16( bwidth, SWB ) ) - { - SWITCH( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( LE_32( total_brate, HQ_64k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( LE_32( total_brate, HQ_48k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - case IVAS_CPE_MDCT: - if ( LE_32( total_brate, IVAS_96k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - } - } - ELSE IF( EQ_16( bwidth, FB ) ) + return igfPresent; +} + +Word16 getIgfPresent_fx( + const Word16 element_mode, /* i : IVAS element mode */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 bwidth, /* i : audio bandwidth */ + const Word16 rf_mode /* i : flag to signal the RF mode */ +) +{ + Word16 igfPresent; + igfPresent = 0; + move16(); + + IF( EQ_16( bwidth, SWB ) ) + { + SWITCH( element_mode ) { - SWITCH( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( LE_32( total_brate, IVAS_128k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( LE_32( total_brate, IVAS_48k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - case IVAS_CPE_MDCT: - if ( LE_32( total_brate, IVAS_128k ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - } + case EVS_MONO: + case IVAS_SCE: + if ( LE_32( total_brate, HQ_64k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( LE_32( total_brate, HQ_48k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; + case IVAS_CPE_MDCT: + if ( LE_32( total_brate, IVAS_96k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; } - ELSE IF( EQ_16( bwidth, WB ) ) + } + ELSE IF( EQ_16( bwidth, FB ) ) + { + SWITCH( element_mode ) { - SWITCH( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( LE_32( total_brate, ACELP_9k60 ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - case IVAS_CPE_MDCT: - if ( LE_32( total_brate, ACELP_13k20 ) ) - { - igfPresent = 1; - move16(); - } - BREAK; - } + case EVS_MONO: + case IVAS_SCE: + if ( LE_32( total_brate, IVAS_128k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + if ( LE_32( total_brate, IVAS_48k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; + case IVAS_CPE_MDCT: + if ( LE_32( total_brate, IVAS_128k ) ) + { + igfPresent = 1; + move16(); + } + BREAK; } - test(); - test(); - test(); - if ( ( ( EQ_16( bwidth, WB ) ) || ( EQ_16( bwidth, SWB ) ) ) && ( EQ_16( rf_mode, 1 ) ) && ( EQ_32( total_brate, ACELP_13k20 ) ) ) + } + ELSE IF( EQ_16( bwidth, WB ) ) + { + SWITCH( element_mode ) { - igfPresent = 1; - move16(); + case EVS_MONO: + case IVAS_SCE: + if ( LE_32( total_brate, ACELP_9k60 ) ) + { + igfPresent = 1; + move16(); + } + BREAK; + case IVAS_CPE_DFT: + case IVAS_CPE_TD: + case IVAS_CPE_MDCT: + if ( LE_32( total_brate, ACELP_13k20 ) ) + { + igfPresent = 1; + move16(); + } + BREAK; } - - return igfPresent; } - /*-------------------------------------------------------------------* - * getCnaPresent() - * - * - *-------------------------------------------------------------------*/ - - int16_t getCnaPresent( - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth /* i : audio bandwidth */ - ) + test(); + test(); + test(); + if ( ( ( EQ_16( bwidth, WB ) ) || ( EQ_16( bwidth, SWB ) ) ) && ( EQ_16( rf_mode, 1 ) ) && ( EQ_32( total_brate, ACELP_13k20 ) ) ) { - int16_t flag_cna = 0; + igfPresent = 1; + move16(); + } + + return igfPresent; +} +/*-------------------------------------------------------------------* + * getCnaPresent() + * + * + *-------------------------------------------------------------------*/ + +int16_t getCnaPresent( + const int16_t element_mode, /* i : element mode */ + const int32_t element_brate, /* i : element bitrate */ + const int32_t total_brate, /* i : total bitrate */ + const int16_t bwidth /* i : audio bandwidth */ +) +{ + int16_t flag_cna = 0; - if ( element_mode == IVAS_CPE_DFT && element_brate <= CNA_MAX_BRATE_DFT_STEREO ) + if ( element_mode == IVAS_CPE_DFT && element_brate <= CNA_MAX_BRATE_DFT_STEREO ) + { + flag_cna = 1; + } + else + { + if ( bwidth == NB && total_brate <= ACELP_13k20 ) { flag_cna = 1; } - else - { - if ( bwidth == NB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } - - if ( bwidth == WB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } - if ( bwidth == SWB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } + if ( bwidth == WB && total_brate <= ACELP_13k20 ) + { + flag_cna = 1; } - return flag_cna; + if ( bwidth == SWB && total_brate <= ACELP_13k20 ) + { + flag_cna = 1; + } } - Word16 getCnaPresent_fx( - const Word16 element_mode, /* i : element mode */ - const Word32 element_brate, /* i : element bitrate */ - const Word32 total_brate, /* i : total bitrate */ - const Word16 bwidth /* i : audio bandwidth */ - ) + return flag_cna; +} + +Word16 getCnaPresent_fx( + const Word16 element_mode, /* i : element mode */ + const Word32 element_brate, /* i : element bitrate */ + const Word32 total_brate, /* i : total bitrate */ + const Word16 bwidth /* i : audio bandwidth */ +) +{ + Word16 flag_cna; + flag_cna = 0; + move16(); + + test(); + IF( EQ_16( element_mode, IVAS_CPE_DFT ) && LE_32( element_brate, CNA_MAX_BRATE_DFT_STEREO ) ) { - Word16 flag_cna; - flag_cna = 0; + flag_cna = 1; move16(); - + } + ELSE + { test(); - IF( EQ_16( element_mode, IVAS_CPE_DFT ) && LE_32( element_brate, CNA_MAX_BRATE_DFT_STEREO ) ) + if ( LE_16( bwidth, SWB ) && ( LE_32( total_brate, ACELP_13k20 ) ) ) { flag_cna = 1; move16(); } - ELSE - { - test(); - if ( LE_16( bwidth, SWB ) && ( LE_32( total_brate, ACELP_13k20 ) ) ) - { - flag_cna = 1; - move16(); - } - } - - return flag_cna; } - /*-------------------------------------------------------------------* - * getTcxLtp() - * - * - *-------------------------------------------------------------------*/ - Word16 getTcxLtp( - const Word32 sr_core /* i : internal sampling rate */ - ) - { - Word16 tcxltp; + return flag_cna; +} +/*-------------------------------------------------------------------* + * getTcxLtp() + * + * + *-------------------------------------------------------------------*/ - tcxltp = 0; - move16(); +Word16 getTcxLtp( + const Word32 sr_core /* i : internal sampling rate */ +) +{ + Word16 tcxltp; - if ( ( LE_32( sr_core, 25600 ) ) ) - { - tcxltp = 1; - move16(); - } + tcxltp = 0; + move16(); - return tcxltp; + if ( ( LE_32( sr_core, 25600 ) ) ) + { + tcxltp = 1; + move16(); } - /*-------------------------------------------------------------------* - * initPitchLagParameters() - * - * - *-------------------------------------------------------------------*/ + return tcxltp; +} + +/*-------------------------------------------------------------------* + * initPitchLagParameters() + * + * + *-------------------------------------------------------------------*/ + +Word16 initPitchLagParameters( + const Word32 sr_core, + Word16 *pit_min, + Word16 *pit_fr1, + Word16 *pit_fr1b, + Word16 *pit_fr2, + Word16 *pit_max ) +{ + Word16 pit_res_max; - Word16 initPitchLagParameters( - const Word32 sr_core, - Word16 *pit_min, - Word16 *pit_fr1, - Word16 *pit_fr1b, - Word16 *pit_fr2, - Word16 *pit_max ) + IF( EQ_32( sr_core, INT_FS_12k8 ) ) + { + *pit_min = PIT_MIN_12k8; + move16(); + *pit_max = PIT_MAX_12k8; + move16(); + *pit_fr2 = PIT_FR2_12k8; + move16(); + *pit_fr1 = PIT_FR1_12k8; + move16(); + *pit_fr1b = PIT_FR1_8b_12k8; + move16(); + pit_res_max = 4; + move16(); + } + ELSE IF( EQ_32( sr_core, INT_FS_16k ) ) + { + *pit_min = PIT_MIN_16k; + move16(); + *pit_max = PIT16k_MAX; + move16(); + *pit_fr2 = PIT_FR2_16k; + move16(); + *pit_fr1 = PIT_FR1_16k; + move16(); + *pit_fr1b = PIT_FR1_8b_16k; + move16(); + pit_res_max = 6; + move16(); + } + ELSE IF( EQ_32( sr_core, 25600 ) ) + { + *pit_min = PIT_MIN_25k6; + move16(); + *pit_max = PIT_MAX_25k6; + move16(); + *pit_fr2 = PIT_FR2_25k6; + move16(); + *pit_fr1 = PIT_FR1_25k6; + move16(); + *pit_fr1b = PIT_FR1_8b_25k6; + move16(); + pit_res_max = 4; + move16(); + } + ELSE /* sr_core==32000 */ { - Word16 pit_res_max; + *pit_min = PIT_MIN_32k; + move16(); + *pit_max = PIT_MAX_32k; + move16(); + *pit_fr2 = PIT_FR2_32k; + move16(); + *pit_fr1 = PIT_FR1_32k; + move16(); + *pit_fr1b = PIT_FR1_8b_32k; + move16(); + pit_res_max = 6; + move16(); + } - IF( EQ_32( sr_core, INT_FS_12k8 ) ) - { - *pit_min = PIT_MIN_12k8; - move16(); - *pit_max = PIT_MAX_12k8; - move16(); - *pit_fr2 = PIT_FR2_12k8; - move16(); - *pit_fr1 = PIT_FR1_12k8; - move16(); - *pit_fr1b = PIT_FR1_8b_12k8; - move16(); - pit_res_max = 4; - move16(); - } - ELSE IF( EQ_32( sr_core, INT_FS_16k ) ) - { - *pit_min = PIT_MIN_16k; - move16(); - *pit_max = PIT16k_MAX; - move16(); - *pit_fr2 = PIT_FR2_16k; - move16(); - *pit_fr1 = PIT_FR1_16k; - move16(); - *pit_fr1b = PIT_FR1_8b_16k; - move16(); - pit_res_max = 6; - move16(); - } - ELSE IF( EQ_32( sr_core, 25600 ) ) - { - *pit_min = PIT_MIN_25k6; - move16(); - *pit_max = PIT_MAX_25k6; - move16(); - *pit_fr2 = PIT_FR2_25k6; - move16(); - *pit_fr1 = PIT_FR1_25k6; - move16(); - *pit_fr1b = PIT_FR1_8b_25k6; - move16(); - pit_res_max = 4; - move16(); - } - ELSE /* sr_core==32000 */ - { - *pit_min = PIT_MIN_32k; - move16(); - *pit_max = PIT_MAX_32k; + return pit_res_max; +} + +/*-------------------------------------------------------------------* + * getNumTcxCodedLines() + * + * + *-------------------------------------------------------------------*/ + +Word16 getNumTcxCodedLines( + const Word16 bwidth /* i : audio bandwidth */ +) +{ + Word16 tcx_coded_lines; + + tcx_coded_lines = 0; + move16(); + + SWITCH( bwidth ) + { + case NB: + tcx_coded_lines = 160; move16(); - *pit_fr2 = PIT_FR2_32k; + BREAK; + case WB: + tcx_coded_lines = 320; move16(); - *pit_fr1 = PIT_FR1_32k; + BREAK; + case SWB: + tcx_coded_lines = 640; move16(); - *pit_fr1b = PIT_FR1_8b_32k; + BREAK; + case FB: + tcx_coded_lines = 960; move16(); - pit_res_max = 6; + BREAK; + default: + tcx_coded_lines = 0; move16(); - } + BREAK; + } + + return tcx_coded_lines; +} + +/*-------------------------------------------------------------------* + * getTcxLpcShapedAri() + * + * + *-------------------------------------------------------------------*/ + +Word16 getTcxLpcShapedAri( + const Word32 total_brate, /* i : total bitrate */ + const Word16 rf_mode, /* i : flag to signal the RF mode */ + const Word16 element_mode /* i : IVAS element mode */ +) +{ + Word16 tcx_lpc_shaped_ari; + tcx_lpc_shaped_ari = 0; + move16(); + + test(); + test(); + test(); + test(); + if ( ( ( LE_16( element_mode, IVAS_SCE ) && LE_32( total_brate, LPC_SHAPED_ARI_MAX_RATE ) ) || ( GT_16( element_mode, IVAS_SCE ) && LE_32( total_brate, LPC_SHAPED_ARI_MAX_RATE_CPE ) ) ) || rf_mode ) + { + tcx_lpc_shaped_ari = 1; + move16(); + } + + return tcx_lpc_shaped_ari; +} + + +/*-----------------------------------------------------------------------* + * init_tcx_window_cfg() + * + * Initialization of TCX windows + *-----------------------------------------------------------------------*/ + +void init_tcx_window_cfg( + TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ + const int32_t sr_core, /* i : SR core */ + const int32_t input_Fs, /* i : input/output SR */ + const int16_t L_frame, /* i : L_frame at sr_core */ + const int16_t L_frameTCX, /* i : L_frame at i/o SR */ + const int16_t encoderLookahead_enc, /* i : encoder LA at sr_core */ + const int16_t encoderLookahead_FB, /* i : encoder LA at i/o SR */ + const int16_t mdctWindowLength, /* i : window length at sr_core */ + const int16_t mdctWindowLengthFB, /* i : window length at i/o SR */ + const int16_t element_mode /* i : mode of CPE/SCE */ +) +{ + /* Symmetric window = sine LD window*/ + hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; + hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; + hTcxCfg->tcx_mdct_window_length = mdctWindowLength; + hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; + + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_flt, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); + if ( hTcxCfg->tcx_mdct_window_length == hTcxCfg->tcx_mdct_window_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_flt, hTcxCfg->tcx_mdct_windowFB_flt, hTcxCfg->tcx_mdct_window_length ); + } + else + { + mdct_window_sine_flt( hTcxCfg->tcx_mdct_windowFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); + } + + /*ALDO windows for MODE2*/ + mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_flt, hTcxCfg->tcx_aldo_window_2_flt, L_frame ); + mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_FB_flt, hTcxCfg->tcx_aldo_window_2_FB_flt, NS2SA( input_Fs, FRAME_SIZE_NS ) ); + hTcxCfg->tcx_aldo_window_1_trunc_flt = hTcxCfg->tcx_aldo_window_1_flt + NS2SA( sr_core, N_ZERO_MDCT_NS ); + hTcxCfg->tcx_aldo_window_1_FB_trunc_flt = hTcxCfg->tcx_aldo_window_1_FB_flt + NS2SA( input_Fs, N_ZERO_MDCT_NS ); + + /*1.25ms transition window for ACELP->TCX*/ + hTcxCfg->tcx_mdct_window_trans_length = NS2SA( sr_core, ACELP_TCX_TRANS_NS ); + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_trans_flt, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); + hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA( input_Fs, ACELP_TCX_TRANS_NS ); + if ( hTcxCfg->tcx_mdct_window_trans_length == hTcxCfg->tcx_mdct_window_trans_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_trans_length ); + } + else + { + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_transFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); + } + + /*Mid-OLA*/ + /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ + hTcxCfg->tcx_mdct_window_half_length = 2 * ( ( encoderLookahead_enc - (int16_t) ( 0.005f * sr_core + 0.5f ) ) >> 1 ); + hTcxCfg->tcx_mdct_window_half_lengthFB = 2 * ( ( encoderLookahead_FB - (int16_t) ( 0.005f * input_Fs + 0.5f ) ) >> 1 ); + assert( ( hTcxCfg->tcx_mdct_window_half_length > 16 ) && "Half window can not be large enough!" ); + + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_half_flt, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); + if ( hTcxCfg->tcx_mdct_window_half_length == hTcxCfg->tcx_mdct_window_half_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_half_flt, hTcxCfg->tcx_mdct_window_halfFB_flt, hTcxCfg->tcx_mdct_window_half_length ); + } + else + { + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_halfFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); + } - return pit_res_max; + /* minimum overlap 1.25 ms */ + hTcxCfg->tcx_mdct_window_min_length = (int16_t) ( sr_core * INV_CLDFB_BANDWIDTH ); + hTcxCfg->tcx_mdct_window_min_lengthFB = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); + /* save complexity by copying the small windows if they have the same length */ + if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_trans_length ) + { + mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_min_length ); + } + else + { + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimum_flt, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); } - /*-------------------------------------------------------------------* - * getNumTcxCodedLines() - * - * - *-------------------------------------------------------------------*/ - - Word16 getNumTcxCodedLines( - const Word16 bwidth /* i : audio bandwidth */ - ) + if ( hTcxCfg->tcx_mdct_window_min_lengthFB == hTcxCfg->tcx_mdct_window_trans_lengthFB ) { - Word16 tcx_coded_lines; - - tcx_coded_lines = 0; - move16(); + mvr2r( hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); + } + else if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_min_lengthFB ) + { + mvr2r( hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); + } + else + { + mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimumFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); + } - SWITCH( bwidth ) - { - case NB: - tcx_coded_lines = 160; - move16(); - BREAK; - case WB: - tcx_coded_lines = 320; - move16(); - BREAK; - case SWB: - tcx_coded_lines = 640; - move16(); - BREAK; - case FB: - tcx_coded_lines = 960; - move16(); - BREAK; - default: - tcx_coded_lines = 0; - move16(); - BREAK; - } + /* TCX Offset */ + hTcxCfg->tcx_offset = ( hTcxCfg->tcx_mdct_window_delay >> 1 ); + hTcxCfg->tcx_offsetFB = ( hTcxCfg->tcx_mdct_window_delayFB >> 1 ); + /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ + hTcxCfg->lfacNext = hTcxCfg->tcx_offset - L_frame / 4; + hTcxCfg->lfacNextFB = hTcxCfg->tcx_offsetFB - L_frameTCX / 4; - return tcx_coded_lines; - } + return; +} - /*-------------------------------------------------------------------* - * getTcxLpcShapedAri() - * - * - *-------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------* + * init_tcx() + * + * Initialization of TCX + *-----------------------------------------------------------------------*/ + +void init_tcx_cfg( + TCX_CONFIG_HANDLE hTcxCfg, + const int32_t total_brate, + const int32_t sr_core, + const int32_t input_Fs, + const int16_t L_frame, + const int16_t bwidth, + const int16_t L_frameTCX, + const int16_t fscale, + const int16_t encoderLookahead_enc, + const int16_t encoderLookahead_FB, + const float preemph_fac, + const int16_t tcxonly, + const int16_t rf_mode, + const int16_t igf, + const int16_t infoIGFStopFreq, + const int16_t element_mode, + const int16_t ini_frame, + const int16_t MCT_flag ) +{ + int16_t i; + int16_t mdctWindowLength; + int16_t mdctWindowLengthFB; + int16_t na_scale_bwidth; - Word16 getTcxLpcShapedAri( - const Word32 total_brate, /* i : total bitrate */ - const Word16 rf_mode, /* i : flag to signal the RF mode */ - const Word16 element_mode /* i : IVAS element mode */ - ) - { - Word16 tcx_lpc_shaped_ari; - tcx_lpc_shaped_ari = 0; - move16(); + hTcxCfg->preemph_fac_flt = preemph_fac; + hTcxCfg->tcx5Size = NS2SA( sr_core, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ + hTcxCfg->tcx5SizeFB = NS2SA( input_Fs, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ - test(); - test(); - test(); - test(); - if ( ( ( LE_16( element_mode, IVAS_SCE ) && LE_32( total_brate, LPC_SHAPED_ARI_MAX_RATE ) ) || ( GT_16( element_mode, IVAS_SCE ) && LE_32( total_brate, LPC_SHAPED_ARI_MAX_RATE_CPE ) ) ) || rf_mode ) - { - tcx_lpc_shaped_ari = 1; - move16(); - } + hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; + mdctWindowLength = getMdctWindowLength( fscale ); + mdctWindowLengthFB = (int16_t) ( mdctWindowLength * input_Fs / sr_core ); - return tcx_lpc_shaped_ari; - } - - - /*-----------------------------------------------------------------------* - * init_tcx_window_cfg() - * - * Initialization of TCX windows - *-----------------------------------------------------------------------*/ - - void init_tcx_window_cfg( - TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ - const int32_t sr_core, /* i : SR core */ - const int32_t input_Fs, /* i : input/output SR */ - const int16_t L_frame, /* i : L_frame at sr_core */ - const int16_t L_frameTCX, /* i : L_frame at i/o SR */ - const int16_t encoderLookahead_enc, /* i : encoder LA at sr_core */ - const int16_t encoderLookahead_FB, /* i : encoder LA at i/o SR */ - const int16_t mdctWindowLength, /* i : window length at sr_core */ - const int16_t mdctWindowLengthFB, /* i : window length at i/o SR */ - const int16_t element_mode /* i : mode of CPE/SCE */ - ) - { - /* Symmetric window = sine LD window*/ - hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; - hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; - hTcxCfg->tcx_mdct_window_length = mdctWindowLength; - hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; - - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_flt, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); - if ( hTcxCfg->tcx_mdct_window_length == hTcxCfg->tcx_mdct_window_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_flt, hTcxCfg->tcx_mdct_windowFB_flt, hTcxCfg->tcx_mdct_window_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_windowFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); - } + init_tcx_window_cfg( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, encoderLookahead_enc, encoderLookahead_FB, mdctWindowLength, mdctWindowLengthFB, element_mode ); - /*ALDO windows for MODE2*/ - mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_flt, hTcxCfg->tcx_aldo_window_2_flt, L_frame ); - mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_FB_flt, hTcxCfg->tcx_aldo_window_2_FB_flt, NS2SA( input_Fs, FRAME_SIZE_NS ) ); - hTcxCfg->tcx_aldo_window_1_trunc_flt = hTcxCfg->tcx_aldo_window_1_flt + NS2SA( sr_core, N_ZERO_MDCT_NS ); - hTcxCfg->tcx_aldo_window_1_FB_trunc_flt = hTcxCfg->tcx_aldo_window_1_FB_flt + NS2SA( input_Fs, N_ZERO_MDCT_NS ); - - /*1.25ms transition window for ACELP->TCX*/ - hTcxCfg->tcx_mdct_window_trans_length = NS2SA( sr_core, ACELP_TCX_TRANS_NS ); - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_trans_flt, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); - hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA( input_Fs, ACELP_TCX_TRANS_NS ); - if ( hTcxCfg->tcx_mdct_window_trans_length == hTcxCfg->tcx_mdct_window_trans_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_trans_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_transFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); - } + /* SQ deadzone & memory quantization*/ + hTcxCfg->sq_rounding_flt = 0.375f; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ - /*Mid-OLA*/ - /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ - hTcxCfg->tcx_mdct_window_half_length = 2 * ( ( encoderLookahead_enc - (int16_t) ( 0.005f * sr_core + 0.5f ) ) >> 1 ); - hTcxCfg->tcx_mdct_window_half_lengthFB = 2 * ( ( encoderLookahead_FB - (int16_t) ( 0.005f * input_Fs + 0.5f ) ) >> 1 ); - assert( ( hTcxCfg->tcx_mdct_window_half_length > 16 ) && "Half window can not be large enough!" ); + /* TCX rate loop */ + hTcxCfg->tcxRateLoopOpt = ( tcxonly ) ? 2 : 0; + hTcxCfg->tcxRateLoopOpt = ( element_mode == IVAS_CPE_MDCT ) ? 3 : hTcxCfg->tcxRateLoopOpt; - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_half_flt, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); - if ( hTcxCfg->tcx_mdct_window_half_length == hTcxCfg->tcx_mdct_window_half_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_half_flt, hTcxCfg->tcx_mdct_window_halfFB_flt, hTcxCfg->tcx_mdct_window_half_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_halfFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); - } + /* TCX bandwidth */ + hTcxCfg->bandwidth_flt = getTcxBandwidth_flt( bwidth ); - /* minimum overlap 1.25 ms */ - hTcxCfg->tcx_mdct_window_min_length = (int16_t) ( sr_core * INV_CLDFB_BANDWIDTH ); - hTcxCfg->tcx_mdct_window_min_lengthFB = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); - /* save complexity by copying the small windows if they have the same length */ - if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_trans_length ) - { - mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_min_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimum_flt, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); - } + /* set number of coded lines */ + hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); - if ( hTcxCfg->tcx_mdct_window_min_lengthFB == hTcxCfg->tcx_mdct_window_trans_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); - } - else if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_min_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimumFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); - } + /* TNS in TCX */ + hTcxCfg->pCurrentTnsConfig = NULL; + hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode ); - /* TCX Offset */ - hTcxCfg->tcx_offset = ( hTcxCfg->tcx_mdct_window_delay >> 1 ); - hTcxCfg->tcx_offsetFB = ( hTcxCfg->tcx_mdct_window_delayFB >> 1 ); - /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ - hTcxCfg->lfacNext = hTcxCfg->tcx_offset - L_frame / 4; - hTcxCfg->lfacNextFB = hTcxCfg->tcx_offsetFB - L_frameTCX / 4; - - return; - } - - /*-----------------------------------------------------------------------* - * init_tcx() - * - * Initialization of TCX - *-----------------------------------------------------------------------*/ - - void init_tcx_cfg( - TCX_CONFIG_HANDLE hTcxCfg, - const int32_t total_brate, - const int32_t sr_core, - const int32_t input_Fs, - const int16_t L_frame, - const int16_t bwidth, - const int16_t L_frameTCX, - const int16_t fscale, - const int16_t encoderLookahead_enc, - const int16_t encoderLookahead_FB, - const float preemph_fac, - const int16_t tcxonly, - const int16_t rf_mode, - const int16_t igf, - const int16_t infoIGFStopFreq, - const int16_t element_mode, - const int16_t ini_frame, - const int16_t MCT_flag ) - { - int16_t i; - int16_t mdctWindowLength; - int16_t mdctWindowLengthFB; - int16_t na_scale_bwidth; - - hTcxCfg->preemph_fac_flt = preemph_fac; - hTcxCfg->tcx5Size = NS2SA( sr_core, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ - hTcxCfg->tcx5SizeFB = NS2SA( input_Fs, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ - - hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; - mdctWindowLength = getMdctWindowLength( fscale ); - mdctWindowLengthFB = (int16_t) ( mdctWindowLength * input_Fs / sr_core ); - - init_tcx_window_cfg( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, encoderLookahead_enc, encoderLookahead_FB, mdctWindowLength, mdctWindowLengthFB, element_mode ); - - /* SQ deadzone & memory quantization*/ - hTcxCfg->sq_rounding_flt = 0.375f; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ - - /* TCX rate loop */ - hTcxCfg->tcxRateLoopOpt = ( tcxonly ) ? 2 : 0; - hTcxCfg->tcxRateLoopOpt = ( element_mode == IVAS_CPE_MDCT ) ? 3 : hTcxCfg->tcxRateLoopOpt; - - /* TCX bandwidth */ - hTcxCfg->bandwidth_flt = getTcxBandwidth_flt( bwidth ); - - /* set number of coded lines */ - hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); - - /* TNS in TCX */ - hTcxCfg->pCurrentTnsConfig = NULL; - hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode ); - - if ( hTcxCfg->fIsTNSAllowed ) - { - InitTnsConfigs_flt( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, MCT_flag ); + if ( hTcxCfg->fIsTNSAllowed ) + { + InitTnsConfigs_flt( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, MCT_flag ); - SetAllowTnsOnWhite_flt( hTcxCfg->tnsConfig, element_mode == IVAS_CPE_MDCT ); - } + SetAllowTnsOnWhite_flt( hTcxCfg->tnsConfig, element_mode == IVAS_CPE_MDCT ); + } - if ( ini_frame == 0 ) - { - hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - hTcxCfg->last_aldo = 1; - } + if ( ini_frame == 0 ) + { + hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + hTcxCfg->last_aldo = 1; + } - /* Context HM*/ - hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); + /* Context HM*/ + hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); - /* Residual Coding*/ - hTcxCfg->resq = getResq( total_brate ); - hTcxCfg->tcxRateLoopOpt = ( hTcxCfg->resq && !tcxonly ) ? 1 : hTcxCfg->tcxRateLoopOpt; + /* Residual Coding*/ + hTcxCfg->resq = getResq( total_brate ); + hTcxCfg->tcxRateLoopOpt = ( hTcxCfg->resq && !tcxonly ) ? 1 : hTcxCfg->tcxRateLoopOpt; - /*Set bandwidth scale*/ - if ( bwidth == NB ) - { - na_scale_bwidth = NB; - } - else if ( sr_core <= INT_FS_16k ) - { - na_scale_bwidth = WB; - } - else - { - na_scale_bwidth = SWB; - } + /*Set bandwidth scale*/ + if ( bwidth == NB ) + { + na_scale_bwidth = NB; + } + else if ( sr_core <= INT_FS_16k ) + { + na_scale_bwidth = WB; + } + else + { + na_scale_bwidth = SWB; + } - /* Scale TCX for non-active frames to adjust loudness with ACELP*/ - hTcxCfg->na_scale_flt = 1.f; + /* Scale TCX for non-active frames to adjust loudness with ACELP*/ + hTcxCfg->na_scale_flt = 1.f; - if ( na_scale_bwidth < SWB && !tcxonly ) + if ( na_scale_bwidth < SWB && !tcxonly ) + { + for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) { - for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) + if ( ( na_scale_bwidth == scaleTcxTable[i].bwmode ) && + ( total_brate >= scaleTcxTable[i].bitrateFrom ) && + ( total_brate < scaleTcxTable[i].bitrateTo ) ) { - if ( ( na_scale_bwidth == scaleTcxTable[i].bwmode ) && - ( total_brate >= scaleTcxTable[i].bitrateFrom ) && - ( total_brate < scaleTcxTable[i].bitrateTo ) ) + if ( rf_mode ) { - if ( rf_mode ) - { - i--; - } - hTcxCfg->na_scale_flt = scaleTcxTable[i].scale_flt; - break; + i--; } + hTcxCfg->na_scale_flt = scaleTcxTable[i].scale_flt; + break; } } + } - if ( tcxonly ) - { - InitPsychLPC( sr_core, L_frame, hTcxCfg ); - } - else - { - hTcxCfg->psychParamsCurrent = NULL; - } - - return; + if ( tcxonly ) + { + InitPsychLPC( sr_core, L_frame, hTcxCfg ); } + else + { + hTcxCfg->psychParamsCurrent = NULL; + } + + return; +} #ifdef IVAS_FLOAT_FIXED - void init_tcx_window_cfg_fx( - TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ - const Word32 sr_core, /* i : SR core */ - const Word32 input_Fs, /* i : input/output SR */ - const Word16 L_frame, /* i : L_frame at sr_core */ - const Word16 L_frameTCX, /* i : L_frame at i/o SR */ - const Word16 mdctWindowLength, /* i : window length at sr_core */ - const Word16 mdctWindowLengthFB, /* i : window length at i/o SR */ - const Word16 element_mode /* i : mode of CPE/SCE */ - ) - { - /* Symmetric window = sine LD window*/ - hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; - hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; - hTcxCfg->tcx_mdct_window_length = mdctWindowLength; - hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; - move16(); - move16(); - move16(); - move16(); - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); +void init_tcx_window_cfg_fx( + TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ + const Word32 sr_core, /* i : SR core */ + const Word32 input_Fs, /* i : input/output SR */ + const Word16 L_frame, /* i : L_frame at sr_core */ + const Word16 L_frameTCX, /* i : L_frame at i/o SR */ + const Word16 mdctWindowLength, /* i : window length at sr_core */ + const Word16 mdctWindowLengthFB, /* i : window length at i/o SR */ + const Word16 element_mode /* i : mode of CPE/SCE */ +) +{ + /* Symmetric window = sine LD window*/ + hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; + hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; + hTcxCfg->tcx_mdct_window_length = mdctWindowLength; + hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; + move16(); + move16(); + move16(); + move16(); + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); - IF( EQ_16( hTcxCfg->tcx_mdct_window_length, hTcxCfg->tcx_mdct_window_lengthFB ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window, hTcxCfg->tcx_mdct_windowFB, shr( hTcxCfg->tcx_mdct_window_length, 1 ) ); - } - ELSE - { - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_windowFB, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); - } + IF( EQ_16( hTcxCfg->tcx_mdct_window_length, hTcxCfg->tcx_mdct_window_lengthFB ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window, hTcxCfg->tcx_mdct_windowFB, shr( hTcxCfg->tcx_mdct_window_length, 1 ) ); + } + ELSE + { + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_windowFB, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); + } - /*ALDO windows for MODE2*/ - mdct_window_aldo( hTcxCfg->tcx_aldo_window_1, hTcxCfg->tcx_aldo_window_1_trunc, hTcxCfg->tcx_aldo_window_2, L_frame ); - mdct_window_aldo( hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, NS2SA_fx2( input_Fs, FRAME_SIZE_NS ) ); + /*ALDO windows for MODE2*/ + mdct_window_aldo( hTcxCfg->tcx_aldo_window_1, hTcxCfg->tcx_aldo_window_1_trunc, hTcxCfg->tcx_aldo_window_2, L_frame ); + mdct_window_aldo( hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, NS2SA_fx2( input_Fs, FRAME_SIZE_NS ) ); - /*1.25ms transition window for ACELP->TCX*/ - hTcxCfg->tcx_mdct_window_trans_length = NS2SA_fx2( sr_core, ACELP_TCX_TRANS_NS ); - move16(); - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_trans, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); - hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA_fx2( input_Fs, ACELP_TCX_TRANS_NS ); - move16(); - IF( EQ_16( hTcxCfg->tcx_mdct_window_trans_length, hTcxCfg->tcx_mdct_window_trans_lengthFB ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_transFB, shr( hTcxCfg->tcx_mdct_window_trans_length, 1 ) ); - } - ELSE - { - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_transFB, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); - } - /*Mid-OLA*/ - /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ - hTcxCfg->tcx_mdct_window_half_length = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( sr_core ) ), LD_FSCALE_DENOM ) ); - hTcxCfg->tcx_mdct_window_half_lengthFB = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( input_Fs ) ), LD_FSCALE_DENOM ) ); - move16(); - move16(); - assert( GT_16( hTcxCfg->tcx_mdct_window_half_length, 16 ) && "Half window can not be large enough!" ); + /*1.25ms transition window for ACELP->TCX*/ + hTcxCfg->tcx_mdct_window_trans_length = NS2SA_fx2( sr_core, ACELP_TCX_TRANS_NS ); + move16(); + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_trans, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); + hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA_fx2( input_Fs, ACELP_TCX_TRANS_NS ); + move16(); + IF( EQ_16( hTcxCfg->tcx_mdct_window_trans_length, hTcxCfg->tcx_mdct_window_trans_lengthFB ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_transFB, shr( hTcxCfg->tcx_mdct_window_trans_length, 1 ) ); + } + ELSE + { + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_transFB, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); + } + /*Mid-OLA*/ + /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ + hTcxCfg->tcx_mdct_window_half_length = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( sr_core ) ), LD_FSCALE_DENOM ) ); + hTcxCfg->tcx_mdct_window_half_lengthFB = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( input_Fs ) ), LD_FSCALE_DENOM ) ); + move16(); + move16(); + assert( GT_16( hTcxCfg->tcx_mdct_window_half_length, 16 ) && "Half window can not be large enough!" ); - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_half, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); - IF( EQ_16( hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_half_lengthFB ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window_half, hTcxCfg->tcx_mdct_window_halfFB, shr( hTcxCfg->tcx_mdct_window_half_length, 1 ) ); - } - ELSE - { - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_halfFB, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); - } + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_half, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); + IF( EQ_16( hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_half_lengthFB ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window_half, hTcxCfg->tcx_mdct_window_halfFB, shr( hTcxCfg->tcx_mdct_window_half_length, 1 ) ); + } + ELSE + { + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_halfFB, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); + } - /* minimum overlap 1.25 ms */ - hTcxCfg->tcx_mdct_window_min_length = shr( L_frame, 4 ); /* 1.25ms */ - hTcxCfg->tcx_mdct_window_min_lengthFB = shr( L_frameTCX, 4 ); /* 1.25ms */ - move16(); - move16(); - /* save complexity by copying the small windows if they have the same length */ - IF( EQ_16( hTcxCfg->tcx_mdct_window_min_length, hTcxCfg->tcx_mdct_window_trans_length ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_minimum, shr( hTcxCfg->tcx_mdct_window_min_length, 1 ) ); - } - ELSE - { - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_minimum, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); - } + /* minimum overlap 1.25 ms */ + hTcxCfg->tcx_mdct_window_min_length = shr( L_frame, 4 ); /* 1.25ms */ + hTcxCfg->tcx_mdct_window_min_lengthFB = shr( L_frameTCX, 4 ); /* 1.25ms */ + move16(); + move16(); + /* save complexity by copying the small windows if they have the same length */ + IF( EQ_16( hTcxCfg->tcx_mdct_window_min_length, hTcxCfg->tcx_mdct_window_trans_length ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window_trans, hTcxCfg->tcx_mdct_window_minimum, shr( hTcxCfg->tcx_mdct_window_min_length, 1 ) ); + } + ELSE + { + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_minimum, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); + } - IF( EQ_16( hTcxCfg->tcx_mdct_window_min_lengthFB, hTcxCfg->tcx_mdct_window_trans_lengthFB ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_minimumFB, shr( hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ) ); - } - ELSE IF( EQ_16( hTcxCfg->tcx_mdct_window_min_length, hTcxCfg->tcx_mdct_window_min_lengthFB ) ) - { - Copy_pword( hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_minimumFB, shr( hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ) ); - } - ELSE - { - mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_minimumFB, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); - } - /* TCX Offset */ - hTcxCfg->tcx_offset = shr( hTcxCfg->tcx_mdct_window_delay, 1 ); - hTcxCfg->tcx_offsetFB = shr( hTcxCfg->tcx_mdct_window_delayFB, 1 ); - /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ - hTcxCfg->lfacNext = sub( hTcxCfg->tcx_offset, shr( L_frame, 2 ) ); - hTcxCfg->lfacNextFB = sub( hTcxCfg->tcx_offsetFB, shr( L_frameTCX, 2 ) ); - move16(); - move16(); - move16(); - move16(); + IF( EQ_16( hTcxCfg->tcx_mdct_window_min_lengthFB, hTcxCfg->tcx_mdct_window_trans_lengthFB ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window_transFB, hTcxCfg->tcx_mdct_window_minimumFB, shr( hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ) ); + } + ELSE IF( EQ_16( hTcxCfg->tcx_mdct_window_min_length, hTcxCfg->tcx_mdct_window_min_lengthFB ) ) + { + Copy_pword( hTcxCfg->tcx_mdct_window_minimum, hTcxCfg->tcx_mdct_window_minimumFB, shr( hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ) ); + } + ELSE + { + mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_minimumFB, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); + } + /* TCX Offset */ + hTcxCfg->tcx_offset = shr( hTcxCfg->tcx_mdct_window_delay, 1 ); + hTcxCfg->tcx_offsetFB = shr( hTcxCfg->tcx_mdct_window_delayFB, 1 ); + /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ + hTcxCfg->lfacNext = sub( hTcxCfg->tcx_offset, shr( L_frame, 2 ) ); + hTcxCfg->lfacNextFB = sub( hTcxCfg->tcx_offsetFB, shr( L_frameTCX, 2 ) ); + move16(); + move16(); + move16(); + move16(); - return; - } - - void init_tcx_cfg_fx( - TCX_CONFIG_HANDLE hTcxCfg, - const Word32 total_brate, - const Word32 sr_core, - const Word32 input_Fs, - const Word16 L_frame, - const Word16 bwidth, - const Word16 L_frameTCX, - const Word16 fscale, - const Word16 preemph_fac, - const Word16 tcxonly, - const Word16 rf_mode, - const Word16 igf, - const Word16 infoIGFStopFreq, - const Word16 element_mode, - const Word16 ini_frame, - const Word16 MCT_flag, - const Word16 fscaleFB ) - { - Word16 i; - Word16 mdctWindowLength; - Word16 mdctWindowLengthFB; - Word16 na_scale_bwidth; - - hTcxCfg->preemph_fac = preemph_fac; - move16(); + return; +} - hTcxCfg->tcx5Size = shr( L_frame, 2 ); /* Always 5 ms */ - hTcxCfg->tcx5SizeFB = shr( L_frameTCX, 2 ); /* Always 5 ms */ - move16(); - move16(); +void init_tcx_cfg_fx( + TCX_CONFIG_HANDLE hTcxCfg, + const Word32 total_brate, + const Word32 sr_core, + const Word32 input_Fs, + const Word16 L_frame, + const Word16 bwidth, + const Word16 L_frameTCX, + const Word16 fscale, + const Word16 preemph_fac, + const Word16 tcxonly, + const Word16 rf_mode, + const Word16 igf, + const Word16 infoIGFStopFreq, + const Word16 element_mode, + const Word16 ini_frame, + const Word16 MCT_flag, + const Word16 fscaleFB ) +{ + Word16 i; + Word16 mdctWindowLength; + Word16 mdctWindowLengthFB; + Word16 na_scale_bwidth; - hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; - move16(); - mdctWindowLength = getMdctWindowLength_fx( fscale ); - mdctWindowLengthFB = getMdctWindowLength_fx( fscaleFB ); - init_tcx_window_cfg_fx( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, mdctWindowLength, mdctWindowLengthFB, element_mode ); - /* SQ deadzone & memory quantization*/ - hTcxCfg->sq_rounding = 12288 /*0.375f Q15*/; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ - move16(); + hTcxCfg->preemph_fac = preemph_fac; + move16(); - /* TCX rate loop */ - hTcxCfg->tcxRateLoopOpt = 0; - move16(); + hTcxCfg->tcx5Size = shr( L_frame, 2 ); /* Always 5 ms */ + hTcxCfg->tcx5SizeFB = shr( L_frameTCX, 2 ); /* Always 5 ms */ + move16(); + move16(); - if ( tcxonly != 0 ) - { - hTcxCfg->tcxRateLoopOpt = 2; - move16(); - } - if ( EQ_16( element_mode, IVAS_CPE_MDCT ) ) - { - hTcxCfg->tcxRateLoopOpt = 3; - move16(); - } - hTcxCfg->bandwidth = getTcxBandwidth( bwidth ); - move16(); + hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; + move16(); + mdctWindowLength = getMdctWindowLength_fx( fscale ); + mdctWindowLengthFB = getMdctWindowLength_fx( fscaleFB ); + init_tcx_window_cfg_fx( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, mdctWindowLength, mdctWindowLengthFB, element_mode ); + /* SQ deadzone & memory quantization*/ + hTcxCfg->sq_rounding = 12288 /*0.375f Q15*/; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ + move16(); - /* set number of coded lines */ - hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); - move16(); + /* TCX rate loop */ + hTcxCfg->tcxRateLoopOpt = 0; + move16(); - /* TNS in TCX */ - hTcxCfg->pCurrentTnsConfig = NULL; - hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode ); + if ( tcxonly != 0 ) + { + hTcxCfg->tcxRateLoopOpt = 2; + move16(); + } + if ( EQ_16( element_mode, IVAS_CPE_MDCT ) ) + { + hTcxCfg->tcxRateLoopOpt = 3; move16(); + } + hTcxCfg->bandwidth = getTcxBandwidth( bwidth ); + move16(); - IF( hTcxCfg->fIsTNSAllowed ) - { - InitTnsConfigs( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, MCT_flag ); + /* set number of coded lines */ + hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); + move16(); - SetAllowTnsOnWhite( hTcxCfg->tnsConfig, (Word8) EQ_16( element_mode, IVAS_CPE_MDCT ) ); - } + /* TNS in TCX */ + hTcxCfg->pCurrentTnsConfig = NULL; + hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode ); + move16(); - IF( ini_frame == 0 ) - { - hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - hTcxCfg->last_aldo = 1; - move16(); - move16(); - move16(); - } + IF( hTcxCfg->fIsTNSAllowed ) + { + InitTnsConfigs( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, MCT_flag ); - /* Context HM*/ - hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); - move16(); + SetAllowTnsOnWhite( hTcxCfg->tnsConfig, (Word8) EQ_16( element_mode, IVAS_CPE_MDCT ) ); + } - /* Residual Coding*/ - hTcxCfg->resq = getResq( total_brate ); + IF( ini_frame == 0 ) + { + hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; + hTcxCfg->last_aldo = 1; move16(); - test(); - if ( hTcxCfg->resq && !tcxonly ) - { - hTcxCfg->tcxRateLoopOpt = 1; - move16(); - } - - /*Set bandwidth scale*/ - IF( bwidth == NB ) - { - na_scale_bwidth = NB; - } - ELSE IF( LE_32( sr_core, INT_FS_16k ) ) - { - na_scale_bwidth = WB; - } - ELSE - { - na_scale_bwidth = SWB; - } move16(); - hTcxCfg->na_scale = 32767 /*1.0f Q15*/; move16(); + } - test(); - IF( LT_16( na_scale_bwidth, SWB ) && !tcxonly ) + /* Context HM*/ + hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); + move16(); + + /* Residual Coding*/ + hTcxCfg->resq = getResq( total_brate ); + move16(); + test(); + if ( hTcxCfg->resq && !tcxonly ) + { + hTcxCfg->tcxRateLoopOpt = 1; + move16(); + } + + /*Set bandwidth scale*/ + IF( bwidth == NB ) + { + na_scale_bwidth = NB; + } + ELSE IF( LE_32( sr_core, INT_FS_16k ) ) + { + na_scale_bwidth = WB; + } + ELSE + { + na_scale_bwidth = SWB; + } + move16(); + hTcxCfg->na_scale = 32767 /*1.0f Q15*/; + move16(); + + test(); + IF( LT_16( na_scale_bwidth, SWB ) && !tcxonly ) + { + FOR( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) { - FOR( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) + test(); + test(); + IF( ( EQ_16( na_scale_bwidth, scaleTcxTable[i].bwmode ) ) && + ( GE_32( total_brate, scaleTcxTable[i].bitrateFrom ) ) && + ( LT_32( total_brate, scaleTcxTable[i].bitrateTo ) ) ) { - test(); - test(); - IF( ( EQ_16( na_scale_bwidth, scaleTcxTable[i].bwmode ) ) && - ( GE_32( total_brate, scaleTcxTable[i].bitrateFrom ) ) && - ( LT_32( total_brate, scaleTcxTable[i].bitrateTo ) ) ) + if ( rf_mode ) { - if ( rf_mode ) - { - i = sub( i, 1 ); - } - hTcxCfg->na_scale = scaleTcxTable[i].scale; - move16(); - BREAK; + i = sub( i, 1 ); } + hTcxCfg->na_scale = scaleTcxTable[i].scale; + move16(); + BREAK; } } + } - IF( tcxonly ) - { - InitPsychLPC( sr_core, L_frame, hTcxCfg ); - } - ELSE - { - hTcxCfg->psychParamsCurrent = NULL; - } - - return; + IF( tcxonly ) + { + InitPsychLPC( sr_core, L_frame, hTcxCfg ); + } + ELSE + { + hTcxCfg->psychParamsCurrent = NULL; } + + return; +} #endif // IVAS_FLOAT_FIXED diff --git a/lib_com/float_to_fix_ops.c b/lib_com/float_to_fix_ops.c index df6ad7c39..297ebca91 100644 --- a/lib_com/float_to_fix_ops.c +++ b/lib_com/float_to_fix_ops.c @@ -17,7 +17,7 @@ Word32 floatToFixed( float f, Word16 Q ) if ( Q < 0 ) result_32 = (Word64) ( (float) ( f ) / (double) ( (Word64) 1 << ( -Q ) ) + ( f >= 0 ? 0.5 : -0.5 ) ); else - result_32 = (Word64) ( f * (double) ( ( Word64 )1 << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); + result_32 = (Word64) ( f * (double) ( (Word64) 1 << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); if ( result_32 > MAX_32 ) return MAX_32; if ( result_32 < MIN_32 ) diff --git a/lib_dec/FEC_HQ_core_fx.c b/lib_dec/FEC_HQ_core_fx.c index e536ddab5..49dab9358 100644 --- a/lib_dec/FEC_HQ_core_fx.c +++ b/lib_dec/FEC_HQ_core_fx.c @@ -1018,1098 +1018,1098 @@ void HQ_FEC_Mem_update_fx( #ifdef ADD_IVAS_HQ_CODE_FEC } #endif - return; - } + return; +} #endif #ifdef IVAS_FLOAT_FIXED - static Word16 find_best_delay_fx( - Word16 * mu_o_fx, - Word16 * in_fx, - Word16 mind1, - Word16 maxd1, - Word16 lin, - Word16 delta, - Word16 * false_flag ) - { - Word16 i, d1, k; - Word16 d1m = 0; - - Word16 tmp, exp1, exp2; - Word32 L_tmp1, L_tmp2; - - Word32 min_sq_cross_fx, min_corr_fx; - Word32 accA_fx, accB_fx; - Word32 Rxy_fx[MAXDELAY_FEC], Ryy_fx[MAXDELAY_FEC]; +static Word16 find_best_delay_fx( + Word16 *mu_o_fx, + Word16 *in_fx, + Word16 mind1, + Word16 maxd1, + Word16 lin, + Word16 delta, + Word16 *false_flag ) +{ + Word16 i, d1, k; + Word16 d1m = 0; + + Word16 tmp, exp1, exp2; + Word32 L_tmp1, L_tmp2; + + Word32 min_sq_cross_fx, min_corr_fx; + Word32 accA_fx, accB_fx; + Word32 Rxy_fx[MAXDELAY_FEC], Ryy_fx[MAXDELAY_FEC]; #ifdef BASOP_NOGLOB_DECLARE_LOCAL - Flag Overflow = 0; - move32(); + Flag Overflow = 0; + move32(); #endif - move16(); // d1m + move16(); // d1m - d1 = mind1; - move16(); - FOR( k = 0; k < idiv1616( sub( maxd1, mind1 ), delta ); k++ ) + d1 = mind1; + move16(); + FOR( k = 0; k < idiv1616( sub( maxd1, mind1 ), delta ); k++ ) + { + accA_fx = L_deposit_l( 0 ); + accB_fx = L_deposit_l( 0 ); + FOR( i = 0; i < lin; i += delta ) { - accA_fx = L_deposit_l( 0 ); - accB_fx = L_deposit_l( 0 ); - FOR( i = 0; i < lin; i += delta ) - { #ifdef BASOP_NOGLOB - accA_fx = L_add_sat( accA_fx, L_shr( L_mult_sat( mu_o_fx[add( d1, i )], mu_o_fx[add( d1, i )] ), 2 ) ); - accB_fx = L_add_sat( accB_fx, L_shr( L_mult_sat( mu_o_fx[add( d1, i )], in_fx[i] ), 2 ) ); + accA_fx = L_add_sat( accA_fx, L_shr( L_mult_sat( mu_o_fx[add( d1, i )], mu_o_fx[add( d1, i )] ), 2 ) ); + accB_fx = L_add_sat( accB_fx, L_shr( L_mult_sat( mu_o_fx[add( d1, i )], in_fx[i] ), 2 ) ); #else accA_fx = L_add( accA_fx, L_shr( L_mult( mu_o_fx[d1 + i], mu_o_fx[d1 + i] ), 2 ) ); accB_fx = L_add( accB_fx, L_shr( L_mult( mu_o_fx[d1 + i], in_fx[i] ), 2 ) ); #endif - } - - Rxy_fx[k] = accB_fx; - move32(); - Ryy_fx[k] = accA_fx; - move32(); - - d1 = add( d1, delta ); } - /* Obtain the best delay values */ - min_sq_cross_fx = 0x80000000; + Rxy_fx[k] = accB_fx; + move32(); + Ryy_fx[k] = accA_fx; move32(); - min_corr_fx = L_deposit_l( 0 ); - exp2 = 0; - move16(); - FOR( d1 = 0; d1 < ( maxd1 - mind1 ) / delta; d1++ ) - { - IF( GT_32( L_abs( Rxy_fx[d1] ), L_abs( Ryy_fx[d1] ) ) ) - exp1 = norm_l( Rxy_fx[d1] ); - ELSE - exp1 = norm_l( Ryy_fx[d1] ); - L_tmp1 = Mult_32_32( L_shl( Rxy_fx[d1], exp1 ), L_shl( min_corr_fx, exp2 ) ); - L_tmp2 = Mult_32_32( L_shl( Ryy_fx[d1], exp1 ), L_shl( min_sq_cross_fx, exp2 ) ); - IF( GE_32( L_tmp1, L_tmp2 ) ) - { - d1m = d1; - move16(); - min_corr_fx = L_add( Ryy_fx[d1], 0 ); /*12 + 12 - 31 */ - min_sq_cross_fx = L_add( Rxy_fx[d1], 0 ); /*12 + 12 - 31 */ - exp2 = exp1; - move16(); - } - } + d1 = add( d1, delta ); + } - test(); - IF( ( min_sq_cross_fx <= 0 ) || ( min_corr_fx <= 0 ) ) - { - tmp = 0; - move16(); /* If cross correlation is negative, the division per the energy will always be negative --> tmp will be < 8192, no need to do the division per say */ - } + /* Obtain the best delay values */ + min_sq_cross_fx = 0x80000000; + move32(); + min_corr_fx = L_deposit_l( 0 ); + exp2 = 0; + move16(); + FOR( d1 = 0; d1 < ( maxd1 - mind1 ) / delta; d1++ ) + { + IF( GT_32( L_abs( Rxy_fx[d1] ), L_abs( Ryy_fx[d1] ) ) ) + exp1 = norm_l( Rxy_fx[d1] ); ELSE - { - /*d1m *= delta; */ - d1m = extract_l( L_mult0( d1m, delta ) ); - - exp1 = sub( norm_l( min_sq_cross_fx ), 1 ); - exp2 = norm_l( min_corr_fx ); - L_tmp1 = L_shl( min_sq_cross_fx, exp1 ); - L_tmp2 = L_shl( min_corr_fx, exp2 ); - tmp = div_s( extract_h( L_tmp1 ), extract_h( L_tmp2 ) ); /*15 + exp1 - exp2 */ -#ifdef BASOP_NOGLOB - tmp = shl_o( tmp, sub( exp2, add( exp1, 1 ) ), &Overflow ); /*14 */ -#else - tmp = shl( tmp, sub( exp2, add( exp1, 1 ) ) ); /*14 */ -#endif - } + exp1 = norm_l( Ryy_fx[d1] ); - *false_flag = 0; - move16(); - test(); - if ( LT_16( tmp, 8192 ) || GT_16( tmp, 24576 ) ) + L_tmp1 = Mult_32_32( L_shl( Rxy_fx[d1], exp1 ), L_shl( min_corr_fx, exp2 ) ); + L_tmp2 = Mult_32_32( L_shl( Ryy_fx[d1], exp1 ), L_shl( min_sq_cross_fx, exp2 ) ); + IF( GE_32( L_tmp1, L_tmp2 ) ) { - *false_flag = 1; + d1m = d1; + move16(); + min_corr_fx = L_add( Ryy_fx[d1], 0 ); /*12 + 12 - 31 */ + min_sq_cross_fx = L_add( Rxy_fx[d1], 0 ); /*12 + 12 - 31 */ + exp2 = exp1; move16(); } + } - return d1m; + test(); + IF( ( min_sq_cross_fx <= 0 ) || ( min_corr_fx <= 0 ) ) + { + tmp = 0; + move16(); /* If cross correlation is negative, the division per the energy will always be negative --> tmp will be < 8192, no need to do the division per say */ + } + ELSE + { + /*d1m *= delta; */ + d1m = extract_l( L_mult0( d1m, delta ) ); + + exp1 = sub( norm_l( min_sq_cross_fx ), 1 ); + exp2 = norm_l( min_corr_fx ); + L_tmp1 = L_shl( min_sq_cross_fx, exp1 ); + L_tmp2 = L_shl( min_corr_fx, exp2 ); + tmp = div_s( extract_h( L_tmp1 ), extract_h( L_tmp2 ) ); /*15 + exp1 - exp2 */ +#ifdef BASOP_NOGLOB + tmp = shl_o( tmp, sub( exp2, add( exp1, 1 ) ), &Overflow ); /*14 */ +#else + tmp = shl( tmp, sub( exp2, add( exp1, 1 ) ) ); /*14 */ +#endif } - static Word16 Search_Max_Corr_fx( - Word16 * mu_o_fx, /* i : *old_auOut_2fr, */ - Word16 old_Min_ind, /* i : *old_auOut_2fr, */ - const Word16 L /* i : L/2 */ - ) + *false_flag = 0; + move16(); + test(); + if ( LT_16( tmp, 8192 ) || GT_16( tmp, 24576 ) ) { - Word16 pos; - Word16 pos2, delta2; - Word16 lin, delta; - Word16 mind1, maxd1; - Word16 false_flag; - Word16 min_d1, max_d1; - Word16 tmp1, tmp2; - Word16 *in_fx; + *false_flag = 1; + move16(); + } - IF( old_Min_ind == 0 ) - { - /*lin = 8*L/20; */ /* Basic size of the block for phase matching */ - lin = mult_r( L, 13107 ); /* Basic size of the block for phase matching */ - /*min_dist = -1e35f; */ - mind1 = 0; - move16(); /* min value of delay d1 to search for */ - /*maxd1 = 12*L/20; */ /* max value of delay d1 to search for */ - maxd1 = mult_r( L, 19661 ); /* max value of delay d1 to search for */ - - /*in = mu_o + 2*L -lin; */ - in_fx = mu_o_fx + sub( shl( L, 1 ), lin ); - move16(); + return d1m; +} - /* generate correlation */ - delta = 2; - move16(); - delta2 = 1; - move16(); +static Word16 Search_Max_Corr_fx( + Word16 *mu_o_fx, /* i : *old_auOut_2fr, */ + Word16 old_Min_ind, /* i : *old_auOut_2fr, */ + const Word16 L /* i : L/2 */ +) +{ + Word16 pos; + Word16 pos2, delta2; + Word16 lin, delta; + Word16 mind1, maxd1; + Word16 false_flag; + Word16 min_d1, max_d1; + Word16 tmp1, tmp2; + Word16 *in_fx; + + IF( old_Min_ind == 0 ) + { + /*lin = 8*L/20; */ /* Basic size of the block for phase matching */ + lin = mult_r( L, 13107 ); /* Basic size of the block for phase matching */ + /*min_dist = -1e35f; */ + mind1 = 0; + move16(); /* min value of delay d1 to search for */ + /*maxd1 = 12*L/20; */ /* max value of delay d1 to search for */ + maxd1 = mult_r( L, 19661 ); /* max value of delay d1 to search for */ + + /*in = mu_o + 2*L -lin; */ + in_fx = mu_o_fx + sub( shl( L, 1 ), lin ); + move16(); - pos = find_best_delay_fx( mu_o_fx, in_fx, mind1, maxd1, lin, delta, &false_flag ); + /* generate correlation */ + delta = 2; + move16(); + delta2 = 1; + move16(); - IF( false_flag ) - { - return 0; - } + pos = find_best_delay_fx( mu_o_fx, in_fx, mind1, maxd1, lin, delta, &false_flag ); - tmp1 = add( mind1, sub( add( pos, 1 ), delta ) ); - tmp2 = add( mind1, add( pos, delta ) ); - min_d1 = s_max( mind1, tmp1 ); - max_d1 = s_min( maxd1, tmp2 ); - pos2 = find_best_delay_fx( mu_o_fx, in_fx, min_d1, max_d1, lin, delta2, &false_flag ); - IF( GT_16( mind1, tmp1 ) ) - { - pos = pos2; - move16(); - } - ELSE - { - pos = add( pos, add( sub( pos2, delta ), 1 ) ); - } + IF( false_flag ) + { + return 0; + } - pos = add( pos, add( lin, mind1 ) ); + tmp1 = add( mind1, sub( add( pos, 1 ), delta ) ); + tmp2 = add( mind1, add( pos, delta ) ); + min_d1 = s_max( mind1, tmp1 ); + max_d1 = s_min( maxd1, tmp2 ); + pos2 = find_best_delay_fx( mu_o_fx, in_fx, min_d1, max_d1, lin, delta2, &false_flag ); + IF( GT_16( mind1, tmp1 ) ) + { + pos = pos2; + move16(); } ELSE { - lin = mult_r( L, 9830 ); - mind1 = mult_r( L, 14746 ); /* min value of delay d1 to search for */ - maxd1 = mult_r( L, 22938 ); /* max value of delay d1 to search for */ - in_fx = mu_o_fx + sub( shl( L, 1 ), lin ); - move16(); - - /* generate correlation */ - delta = 2; - move16(); - delta2 = 1; - move16(); - - pos = find_best_delay_fx( mu_o_fx, in_fx, mind1, maxd1, lin, delta, &false_flag ); - - IF( false_flag ) - { - return 0; - } - - tmp1 = add( mind1, add( sub( pos, delta ), 1 ) ); - tmp2 = add( mind1, add( pos, delta ) ); - min_d1 = s_max( mind1, tmp1 ); - max_d1 = s_min( maxd1, tmp2 ); - pos2 = find_best_delay_fx( mu_o_fx, in_fx, min_d1, max_d1, lin, delta2, &false_flag ); - - IF( GT_16( mind1, tmp1 ) ) - { - pos = pos2; - move16(); - } - ELSE - { - pos = add( pos, add( sub( pos2, delta ), 1 ) ); - } - pos = add( pos, add( lin, mind1 ) ); + pos = add( pos, add( sub( pos2, delta ), 1 ) ); } - return pos; + pos = add( pos, add( lin, mind1 ) ); } - - static Word16 FEC_phase_matching_fx( - HQ_NBFEC_HANDLE st_fx, /* i : Decoder State */ - Word32 * ImdctOut_fx, /* i : input */ - Word16 * auOut_fx, /* o : output audio */ - Word16 * OldauOut_fx, - Word16 OldauOut_pha_fx[2][N_LEAD_NB] ) + ELSE { - Word16 i; - Word16 pos, remain; - Word16 ol_size; - Word16 L_overlap, L; - Word16 ImdctOutWin_fx[2 * L_FRAME8k]; - Word16 OldauOutnoWin_fx[L_FRAME8k]; - Word16 OldauOut2_fx[L_FRAME8k]; - Word16 win_NB_fx[L_FRAME8k + 25]; - Word16 exp1, exp2, tmp; - Word32 pow1_fx, pow22_fx; - Word16 SmoothingWin_NB3_fx[24]; - - L = L_FRAME8k; + lin = mult_r( L, 9830 ); + mind1 = mult_r( L, 14746 ); /* min value of delay d1 to search for */ + maxd1 = mult_r( L, 22938 ); /* max value of delay d1 to search for */ + in_fx = mu_o_fx + sub( shl( L, 1 ), lin ); move16(); - ol_size = idiv1616( shl( L, 1 ), 20 ); + + /* generate correlation */ + delta = 2; move16(); - L_overlap = idiv1616( imult1616( 3, L ), 20 ); + delta2 = 1; move16(); - FOR( i = 0; i < L_overlap; i++ ) - { - SmoothingWin_NB3_fx[i] = SmoothingWin_NB875_fx[imult1616( i, 3 )]; - move16(); - } - - FOR( i = 0; i < add( L, 25 ); i++ ) - { - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } - set16_fx( ImdctOutWin_fx, 0, shl( L, 1 ) ); - - pos = Search_Max_Corr_fx( st_fx->old_auOut_2fr_fx, st_fx->old_Min_ind, L ); + pos = find_best_delay_fx( mu_o_fx, in_fx, mind1, maxd1, lin, delta, &false_flag ); - IF( pos == 0 ) + IF( false_flag ) { - return 1; + return 0; } - /* Repetition */ - remain = sub( add( L, N_Z_L_NB ), sub( shl( L, 1 ), pos ) ); - Copy( &st_fx->old_auOut_2fr_fx[pos], &ImdctOutWin_fx[N_ZERO_NB], sub( shl( L, 1 ), pos ) ); + tmp1 = add( mind1, add( sub( pos, delta ), 1 ) ); + tmp2 = add( mind1, add( pos, delta ) ); + min_d1 = s_max( mind1, tmp1 ); + max_d1 = s_min( maxd1, tmp2 ); + pos2 = find_best_delay_fx( mu_o_fx, in_fx, min_d1, max_d1, lin, delta2, &false_flag ); - /* OldauOut without windowing */ - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + IF( GT_16( mind1, tmp1 ) ) { - OldauOutnoWin_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( st_fx->oldIMDCTout_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + pos = pos2; move16(); } - FOR( i = 0; i < shr( L, 1 ); i++ ) + ELSE { - OldauOutnoWin_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( st_fx->oldIMDCTout_fx[i] ), 6 ) ); - move16(); + pos = add( pos, add( sub( pos2, delta ), 1 ) ); } + pos = add( pos, add( lin, mind1 ) ); + } - Copy( OldauOutnoWin_fx, &ImdctOutWin_fx[add( N_ZERO_NB, sub( shl( L, 1 ), pos ) )], remain ); + return pos; +} - pow1_fx = L_deposit_l( 0 ); - pow22_fx = L_deposit_l( 0 ); - FOR( i = 0; i < L; i++ ) - { - pow1_fx = L_add( pow1_fx, shr( abs_s( st_fx->old_auOut_2fr_fx[add( L, i )] ), 1 ) ); - pow22_fx = L_add( pow22_fx, shr( abs_s( ImdctOutWin_fx[N_ZERO_NB + i] ), 1 ) ); - } - IF( pow22_fx != 0 ) +static Word16 FEC_phase_matching_fx( + HQ_NBFEC_HANDLE st_fx, /* i : Decoder State */ + Word32 *ImdctOut_fx, /* i : input */ + Word16 *auOut_fx, /* o : output audio */ + Word16 *OldauOut_fx, + Word16 OldauOut_pha_fx[2][N_LEAD_NB] ) +{ + Word16 i; + Word16 pos, remain; + Word16 ol_size; + Word16 L_overlap, L; + Word16 ImdctOutWin_fx[2 * L_FRAME8k]; + Word16 OldauOutnoWin_fx[L_FRAME8k]; + Word16 OldauOut2_fx[L_FRAME8k]; + Word16 win_NB_fx[L_FRAME8k + 25]; + Word16 exp1, exp2, tmp; + Word32 pow1_fx, pow22_fx; + Word16 SmoothingWin_NB3_fx[24]; + + L = L_FRAME8k; + move16(); + ol_size = idiv1616( shl( L, 1 ), 20 ); + move16(); + L_overlap = idiv1616( imult1616( 3, L ), 20 ); + move16(); + + FOR( i = 0; i < L_overlap; i++ ) + { + SmoothingWin_NB3_fx[i] = SmoothingWin_NB875_fx[imult1616( i, 3 )]; + move16(); + } + + FOR( i = 0; i < add( L, 25 ); i++ ) + { + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; + move16(); + } + set16_fx( ImdctOutWin_fx, 0, shl( L, 1 ) ); + + pos = Search_Max_Corr_fx( st_fx->old_auOut_2fr_fx, st_fx->old_Min_ind, L ); + + IF( pos == 0 ) + { + return 1; + } + + /* Repetition */ + remain = sub( add( L, N_Z_L_NB ), sub( shl( L, 1 ), pos ) ); + Copy( &st_fx->old_auOut_2fr_fx[pos], &ImdctOutWin_fx[N_ZERO_NB], sub( shl( L, 1 ), pos ) ); + + /* OldauOut without windowing */ + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + { + OldauOutnoWin_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( st_fx->oldIMDCTout_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + move16(); + } + FOR( i = 0; i < shr( L, 1 ); i++ ) + { + OldauOutnoWin_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( st_fx->oldIMDCTout_fx[i] ), 6 ) ); + move16(); + } + + Copy( OldauOutnoWin_fx, &ImdctOutWin_fx[add( N_ZERO_NB, sub( shl( L, 1 ), pos ) )], remain ); + + pow1_fx = L_deposit_l( 0 ); + pow22_fx = L_deposit_l( 0 ); + FOR( i = 0; i < L; i++ ) + { + pow1_fx = L_add( pow1_fx, shr( abs_s( st_fx->old_auOut_2fr_fx[add( L, i )] ), 1 ) ); + pow22_fx = L_add( pow22_fx, shr( abs_s( ImdctOutWin_fx[N_ZERO_NB + i] ), 1 ) ); + } + IF( pow22_fx != 0 ) + { + exp1 = sub( norm_l( pow1_fx ), 1 ); + exp2 = norm_l( pow22_fx ); + tmp = div_s( extract_h( L_shl( pow1_fx, exp1 ) ), extract_h( L_shl( pow22_fx, exp2 ) ) ); /*15 + exp1 - exp2*/ + tmp = shl( tmp, sub( sub( exp2, exp1 ), 1 ) ); /*14*/ + FOR( i = N_ZERO_NB; i < shl( L, 1 ); i++ ) { - exp1 = sub( norm_l( pow1_fx ), 1 ); - exp2 = norm_l( pow22_fx ); - tmp = div_s( extract_h( L_shl( pow1_fx, exp1 ) ), extract_h( L_shl( pow22_fx, exp2 ) ) ); /*15 + exp1 - exp2*/ - tmp = shl( tmp, sub( sub( exp2, exp1 ), 1 ) ); /*14*/ - FOR( i = N_ZERO_NB; i < shl( L, 1 ); i++ ) - { #ifdef BASOP_NOGLOB - ImdctOutWin_fx[i] = shl_sat( mult( ImdctOutWin_fx[i], tmp ), 1 ); + ImdctOutWin_fx[i] = shl_sat( mult( ImdctOutWin_fx[i], tmp ), 1 ); #else ImdctOutWin_fx[i] = shl( mult( ImdctOutWin_fx[i], tmp ), 1 ); #endif - move16(); - } - } - Smoothing_vector_NB_fx( OldauOutnoWin_fx, &ImdctOutWin_fx[N_ZERO_NB], SmoothingWin_NB2_fx, auOut_fx, ol_size ); - - FOR( i = 0; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin[3*L/2 + i] *= win_NB[L/2-i-1];*/ - ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = mult( ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )], win_NB_fx[sub( sub( shr( L, 1 ), i ), 1 )] ); move16(); } + } + Smoothing_vector_NB_fx( OldauOutnoWin_fx, &ImdctOutWin_fx[N_ZERO_NB], SmoothingWin_NB2_fx, auOut_fx, ol_size ); - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin_fx[L + i] *= win_NB_fx[(L-1-i)];*/ - ImdctOutWin_fx[add( L, i )] = mult( ImdctOutWin_fx[add( L, i )], win_NB_fx[sub( sub( L, 1 ), i )] ); - move16(); - } + FOR( i = 0; i < shr( L, 1 ); i++ ) + { + /*ImdctOutWin[3*L/2 + i] *= win_NB[L/2-i-1];*/ + ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = mult( ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )], win_NB_fx[sub( sub( shr( L, 1 ), i ), 1 )] ); + move16(); + } - Copy( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut_pha_fx[0][0], N_LEAD_NB ); - Copy( &ImdctOutWin_fx[add( ol_size, N_ZERO_NB )], &auOut_fx[ol_size], sub( N_Z_L_NB, ol_size ) ); - Copy( &ImdctOutWin_fx[L], &auOut_fx[N_Z_L_NB], N_ZERO_NB ); - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + { + /*ImdctOutWin_fx[L + i] *= win_NB_fx[(L-1-i)];*/ + ImdctOutWin_fx[add( L, i )] = mult( ImdctOutWin_fx[add( L, i )], win_NB_fx[sub( sub( L, 1 ), i )] ); + move16(); + } - FOR( i = 0; i < shr( L, 1 ); i++ ) - { - OldauOut2_fx[i] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); - move16(); - OldauOut2_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); - move16(); - } + Copy( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut_pha_fx[0][0], N_LEAD_NB ); + Copy( &ImdctOutWin_fx[add( ol_size, N_ZERO_NB )], &auOut_fx[ol_size], sub( N_Z_L_NB, ol_size ) ); + Copy( &ImdctOutWin_fx[L], &auOut_fx[N_Z_L_NB], N_ZERO_NB ); + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); - Smoothing_vector_NB_fx( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut2_fx[N_ZERO_NB], SmoothingWin_NB3_fx, &OldauOut_pha_fx[1][0], L_overlap ); + FOR( i = 0; i < shr( L, 1 ); i++ ) + { + OldauOut2_fx[i] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + move16(); + OldauOut2_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); + move16(); + } - FOR( i = L_overlap; i < N_LEAD_NB; i++ ) - { - OldauOut_pha_fx[1][i] = OldauOut2_fx[i + N_ZERO_NB]; - move32(); - } + Smoothing_vector_NB_fx( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut2_fx[N_ZERO_NB], SmoothingWin_NB3_fx, &OldauOut_pha_fx[1][0], L_overlap ); - return 0; + FOR( i = L_overlap; i < N_LEAD_NB; i++ ) + { + OldauOut_pha_fx[1][i] = OldauOut2_fx[i + N_ZERO_NB]; + move32(); } - static void FEC_phase_matching_nextgood_fx( - const Word32 *ImdctOut_fx, /* i : input */ - Word16 *auOut_fx, /* o : output audio */ - Word16 *OldauOut_fx, /* i/o: audio from previous frame */ - Word16 OldauOut_pha_fx[2][N_LEAD_NB], - Word16 mean_en_high_fx /*Q5 */ - ) - { - Word16 i; - Word16 L_overlap, L; - Word16 oldout_pha_idx; - Word16 *OldOut_pha_fx; - Word16 ImdctOutWin_fx[2 * L_FRAME48k]; - Word16 win_NB_fx[L_FRAME8k + 25]; + return 0; +} - L = L_FRAME8k; - move16(); - FOR( i = 0; i < L + 25; i++ ) - { - /* win_NB[i] = window_48kHz[i*6+3]; */ - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } +static void FEC_phase_matching_nextgood_fx( + const Word32 *ImdctOut_fx, /* i : input */ + Word16 *auOut_fx, /* o : output audio */ + Word16 *OldauOut_fx, /* i/o: audio from previous frame */ + Word16 OldauOut_pha_fx[2][N_LEAD_NB], + Word16 mean_en_high_fx /*Q5 */ +) +{ + Word16 i; + Word16 L_overlap, L; + Word16 oldout_pha_idx; + Word16 *OldOut_pha_fx; + Word16 ImdctOutWin_fx[2 * L_FRAME48k]; + Word16 win_NB_fx[L_FRAME8k + 25]; - test(); - IF( ( GT_16( mean_en_high_fx, 64 ) ) || ( LT_16( mean_en_high_fx, 16 ) ) ) - { - oldout_pha_idx = 1; - move16(); - } - ELSE - { - oldout_pha_idx = 0; - move16(); - } + L = L_FRAME8k; + move16(); + FOR( i = 0; i < L + 25; i++ ) + { + /* win_NB[i] = window_48kHz[i*6+3]; */ + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; + move16(); + } - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - L_overlap = N_LEAD_NB; + test(); + IF( ( GT_16( mean_en_high_fx, 64 ) ) || ( LT_16( mean_en_high_fx, 16 ) ) ) + { + oldout_pha_idx = 1; move16(); - OldOut_pha_fx = OldauOut_pha_fx[oldout_pha_idx]; - FOR( i = 0; i < N_LEAD_NB; i++ ) - { - /* OldOut_pha[i] *= SmoothingWin_NB875[L_overlap-i-1]; */ - OldOut_pha_fx[i] = mult( OldOut_pha_fx[i], SmoothingWin_NB875_fx[sub( sub( L_overlap, i ), 1 )] ); - move16(); - } + } + ELSE + { + oldout_pha_idx = 0; + move16(); + } - IF( EQ_16( oldout_pha_idx, 1 ) ) - { - /* Use phase matching and overlapping with the Oldauout*/ - /* Windowing */ - /*Windowing_1st_NB(ImdctOutWin, ImdctOut, win_NB, NULL, 0);*/ - /*Windowing_2nd_NB(ImdctOutWin, ImdctOut, win_NB); */ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); - } - ELSE - { - /* Only use phase matching */ - /* Windowing */ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, SmoothingWin_NB875_fx, 1 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); - } - /* common_overlapping(auOut, ImdctOutWin, OldOut_pha, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0, L);*/ - common_overlapping_fx( auOut_fx, ImdctOutWin_fx, OldOut_pha_fx, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0 ); - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + L_overlap = N_LEAD_NB; + move16(); + OldOut_pha_fx = OldauOut_pha_fx[oldout_pha_idx]; + FOR( i = 0; i < N_LEAD_NB; i++ ) + { + /* OldOut_pha[i] *= SmoothingWin_NB875[L_overlap-i-1]; */ + OldOut_pha_fx[i] = mult( OldOut_pha_fx[i], SmoothingWin_NB875_fx[sub( sub( L_overlap, i ), 1 )] ); + move16(); + } - return; + IF( EQ_16( oldout_pha_idx, 1 ) ) + { + /* Use phase matching and overlapping with the Oldauout*/ + /* Windowing */ + /*Windowing_1st_NB(ImdctOutWin, ImdctOut, win_NB, NULL, 0);*/ + /*Windowing_2nd_NB(ImdctOutWin, ImdctOut, win_NB); */ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + } + ELSE + { + /* Only use phase matching */ + /* Windowing */ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, SmoothingWin_NB875_fx, 1 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); } + /* common_overlapping(auOut, ImdctOutWin, OldOut_pha, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0, L);*/ + common_overlapping_fx( auOut_fx, ImdctOutWin_fx, OldOut_pha_fx, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0 ); + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + + return; +} #endif #ifdef IVAS_FLOAT_FIXED - static void FEC_phase_matching_burst_fx( - const Word32 *ImdctOut_fx, /* i : input */ - Word16 *auOut_fx, /* o : output audio */ - Word16 *OldauOut_fx, /* i/o: audio from previous frame */ - Word16 OldauOut_pha_fx[2][N_LEAD_NB], - Word16 *prev_oldauOut_fx /* i : OldauOut from previous frame */ - ) - { - Word16 i; - Word16 L_overlap; - Word16 L; - Word16 OldauOut2_fx[L_FRAME8k]; - Word16 ImdctOutWin_fx[2 * L_FRAME8k]; - Word16 win_NB_fx[L_FRAME8k + 25]; - Word16 SmoothingWin_NB3_fx[24]; +static void FEC_phase_matching_burst_fx( + const Word32 *ImdctOut_fx, /* i : input */ + Word16 *auOut_fx, /* o : output audio */ + Word16 *OldauOut_fx, /* i/o: audio from previous frame */ + Word16 OldauOut_pha_fx[2][N_LEAD_NB], + Word16 *prev_oldauOut_fx /* i : OldauOut from previous frame */ +) +{ + Word16 i; + Word16 L_overlap; + Word16 L; + Word16 OldauOut2_fx[L_FRAME8k]; + Word16 ImdctOutWin_fx[2 * L_FRAME8k]; + Word16 win_NB_fx[L_FRAME8k + 25]; + Word16 SmoothingWin_NB3_fx[24]; + + L = L_FRAME8k; + move16(); + L_overlap = idiv1616( imult1616( 3, L ), 20 ); + move16(); - L = L_FRAME8k; + FOR( i = 0; i < L_overlap; i++ ) + { + SmoothingWin_NB3_fx[i] = SmoothingWin_NB875_fx[i * 3]; move16(); - L_overlap = idiv1616( imult1616( 3, L ), 20 ); + } + + FOR( i = 0; i < add( L, 25 ); i++ ) + { + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; move16(); + } - FOR( i = 0; i < L_overlap; i++ ) - { - SmoothingWin_NB3_fx[i] = SmoothingWin_NB875_fx[i * 3]; - move16(); - } + /* Windowing */ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); - FOR( i = 0; i < add( L, 25 ); i++ ) - { - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } + /* Repetition with old frame to reserve energy */ + /*common_overlapping(auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0, L);*/ + common_overlapping_fx( auOut_fx, ImdctOutWin_fx, prev_oldauOut_fx, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); - /* Windowing */ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + /* data transition from OldauOut to auOut using smoothing win*/ + Smoothing_vector_NB_fx( OldauOut_pha_fx[0], auOut_fx, SmoothingWin_NB875_fx, auOut_fx, N_LEAD_NB ); + + /* Update the OldauOut array for next overlapping */ + Copy( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut_pha_fx[0][0], N_LEAD_NB ); + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + Scaledown_fx( prev_oldauOut_fx, prev_oldauOut_fx, 23170, L ); - /* Repetition with old frame to reserve energy */ - /*common_overlapping(auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0, L);*/ - common_overlapping_fx( auOut_fx, ImdctOutWin_fx, prev_oldauOut_fx, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); + FOR( i = 0; i < shr( L, 1 ); i++ ) + { + /* OldauOut2[i] = -ImdctOut[L/2 - 1 - i];*/ + /* OldauOut2[L/2+i] = -ImdctOut[i];*/ + OldauOut2_fx[i] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + move16(); + OldauOut2_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); + move16(); + } - /* data transition from OldauOut to auOut using smoothing win*/ - Smoothing_vector_NB_fx( OldauOut_pha_fx[0], auOut_fx, SmoothingWin_NB875_fx, auOut_fx, N_LEAD_NB ); + Smoothing_vector_NB_fx( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut2_fx[N_ZERO_NB], SmoothingWin_NB3_fx, &OldauOut_pha_fx[1][0], L_overlap ); - /* Update the OldauOut array for next overlapping */ - Copy( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut_pha_fx[0][0], N_LEAD_NB ); - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); - Scaledown_fx( prev_oldauOut_fx, prev_oldauOut_fx, 23170, L ); + FOR( i = L_overlap; i < N_LEAD_NB; i++ ) + { + /* OldauOut_pha[1][i] = OldauOut2[i+N_ZERO_NB]; */ + OldauOut_pha_fx[1][i] = OldauOut2_fx[i + N_ZERO_NB]; + move16(); + } - FOR( i = 0; i < shr( L, 1 ); i++ ) - { - /* OldauOut2[i] = -ImdctOut[L/2 - 1 - i];*/ - /* OldauOut2[L/2+i] = -ImdctOut[i];*/ - OldauOut2_fx[i] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); - move16(); - OldauOut2_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); - move16(); - } + return; +} - Smoothing_vector_NB_fx( &ImdctOutWin_fx[N_Z_L_O_NB], &OldauOut2_fx[N_ZERO_NB], SmoothingWin_NB3_fx, &OldauOut_pha_fx[1][0], L_overlap ); +static void Repetition_smoothing_nextgood_fx( + const Word32 *ImdctOut_fx, /* i : input */ + Word16 *auOut_fx, /* o : output audio */ + Word32 *OldImdctOut_fx, /* i : input */ + Word16 *OldauOut_fx, /* i/o: audio from previous frame */ + Word16 cur_data_use_flag, /* i : current imdct data use flag */ + Word16 overlap_time ) +{ + Word16 i; + Word16 L_overlap; + Word16 ol_size; + Word16 L; + Word16 ImdctOutWin_fx[2 * L_FRAME8k]; + Word16 win_NB_fx[L_FRAME8k + 25]; - FOR( i = L_overlap; i < N_LEAD_NB; i++ ) - { - /* OldauOut_pha[1][i] = OldauOut2[i+N_ZERO_NB]; */ - OldauOut_pha_fx[1][i] = OldauOut2_fx[i + N_ZERO_NB]; - move16(); - } + L = L_FRAME8k; + move16(); - return; + FOR( i = 0; i < L_FRAME8k + 25; i++ ) + { + /*win_NB[i] = window_48kHz[i*6+3];*/ + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; + move16(); } - static void Repetition_smoothing_nextgood_fx( - const Word32 *ImdctOut_fx, /* i : input */ - Word16 *auOut_fx, /* o : output audio */ - Word32 *OldImdctOut_fx, /* i : input */ - Word16 *OldauOut_fx, /* i/o: audio from previous frame */ - Word16 cur_data_use_flag, /* i : current imdct data use flag */ - Word16 overlap_time ) + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) { - Word16 i; - Word16 L_overlap; - Word16 ol_size; - Word16 L; - Word16 ImdctOutWin_fx[2 * L_FRAME8k]; - Word16 win_NB_fx[L_FRAME8k + 25]; - - L = L_FRAME8k; + /*OldauOut[i-N_ZERO_NB] = -OldImdctOut[L/2 - 1 - i];*/ + OldauOut_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); /* Q6 -> Q0 */ + move16(); + } + FOR( i = 0; i < shr( L, 2 ); i++ ) + { + /*OldauOut[i+N_ZERO_O_NB] = -OldImdctOut[i];*/ + OldauOut_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[i] ), 6 ) ); /* Q6 -> Q0 */ move16(); + } - FOR( i = 0; i < L_FRAME8k + 25; i++ ) - { - /*win_NB[i] = window_48kHz[i*6+3];*/ - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + IF( cur_data_use_flag ) + { + ol_size = N_LEAD_NB; + move16(); FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) { - /*OldauOut[i-N_ZERO_NB] = -OldImdctOut[L/2 - 1 - i];*/ - OldauOut_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); /* Q6 -> Q0 */ + /* ImdctOutWin[i+L] = -ImdctOut[L/2 - 1 - i]; */ + ImdctOutWin_fx[add( i, L )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); move16(); } - FOR( i = 0; i < shr( L, 2 ); i++ ) + FOR( i = 0; i < shr( L, 1 ); i++ ) { - /*OldauOut[i+N_ZERO_O_NB] = -OldImdctOut[i];*/ - OldauOut_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[i] ), 6 ) ); /* Q6 -> Q0 */ + ImdctOutWin_fx[add( i, shr( imult1616( 3, L ), 1 ) )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); move16(); } - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - IF( cur_data_use_flag ) - { - ol_size = N_LEAD_NB; - move16(); + /*a = (float)(1./(float)(ol_size)); y = ax */ + Smoothing_vector_scaledown_NB_fx( OldauOut_fx, &ImdctOutWin_fx[N_Z_L_O_NB], SmoothingWin_NB875_fx, OldauOut_fx, ol_size ); - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - /* ImdctOutWin[i+L] = -ImdctOut[L/2 - 1 - i]; */ - ImdctOutWin_fx[add( i, L )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); - move16(); - } - FOR( i = 0; i < shr( L, 1 ); i++ ) - { - ImdctOutWin_fx[add( i, shr( imult1616( 3, L ), 1 ) )] = extract_l( L_shr( L_negate( ImdctOut_fx[i] ), 6 ) ); - move16(); - } - - /*a = (float)(1./(float)(ol_size)); y = ax */ - Smoothing_vector_scaledown_NB_fx( OldauOut_fx, &ImdctOutWin_fx[N_Z_L_O_NB], SmoothingWin_NB875_fx, OldauOut_fx, ol_size ); - - /* Scale down the overlapped signal */ - Scaledown_fx( &ImdctOutWin_fx[add( ol_size, N_Z_L_O_NB )], &OldauOut_fx[ol_size], 23170, sub( N_Z_L_NB, ol_size ) ); - } + /* Scale down the overlapped signal */ + Scaledown_fx( &ImdctOutWin_fx[add( ol_size, N_Z_L_O_NB )], &OldauOut_fx[ol_size], 23170, sub( N_Z_L_NB, ol_size ) ); + } - L_overlap = overlap_time; + L_overlap = overlap_time; + move16(); + FOR( i = 0; i < L_overlap; i++ ) + { + /*OldauOut[i] *= SmoothingWin_NB875[L_overlap-i-1];*/ + OldauOut_fx[i] = mult( OldauOut_fx[i], SmoothingWin_NB875_fx[sub( sub( L_overlap, i ), 1 )] ); move16(); - FOR( i = 0; i < L_overlap; i++ ) - { - /*OldauOut[i] *= SmoothingWin_NB875[L_overlap-i-1];*/ - OldauOut_fx[i] = mult( OldauOut_fx[i], SmoothingWin_NB875_fx[sub( sub( L_overlap, i ), 1 )] ); - move16(); - } - FOR( i = L_overlap; i < L; i++ ) - { - OldauOut_fx[i] = 0; - move16(); - } + } + FOR( i = L_overlap; i < L; i++ ) + { + OldauOut_fx[i] = 0; + move16(); + } - /* Windowing */ - /*Windowing_1st_NB(ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1);*/ - /*Windowing_2nd_NB(ImdctOutWin, ImdctOut, win_NB);*/ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, SmoothingWin_NB875_fx, 1 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + /* Windowing */ + /*Windowing_1st_NB(ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1);*/ + /*Windowing_2nd_NB(ImdctOutWin, ImdctOut, win_NB);*/ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, SmoothingWin_NB875_fx, 1 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); - /*v_add(&ImdctOutWin[N_ZERO_NB], OldauOut, auOut, L);*/ - /*mvr2r(&ImdctOutWin[L], OldauOut, L);*/ - FOR( i = 0; i < L; i++ ) - { + /*v_add(&ImdctOutWin[N_ZERO_NB], OldauOut, auOut, L);*/ + /*mvr2r(&ImdctOutWin[L], OldauOut, L);*/ + FOR( i = 0; i < L; i++ ) + { #ifdef BASOP_NOGLOB - auOut_fx[i] = add_sat( ImdctOutWin_fx[N_ZERO_NB + i], OldauOut_fx[i] ); + auOut_fx[i] = add_sat( ImdctOutWin_fx[N_ZERO_NB + i], OldauOut_fx[i] ); #else auOut_fx[i] = add( ImdctOutWin_fx[N_ZERO_NB + i], OldauOut_fx[i] ); #endif - move16(); - } - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + move16(); + } + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + + return; +} + +static Word16 Repetition_smoothing_fx( + const Word32 *ImdctOut_fx, /* i : input */ + Word16 *auOut_fx, /* o : output audio */ + Word32 *OldImdctOut_fx, /* i : input */ + Word16 *OldauOut_fx, /* i/o: audio from previous frame */ + const Word16 L, /* i : length */ + Word16 *prev_oldauOut_fx, /* i : OldauOut from previous frame */ + Word16 overlap_time /* i : overlap time */ +) +{ + Word16 i; + Word32 pow1_fx; + Word32 pow22_fx; + Word16 ImdctOutWin_fx[2 * L_FRAME8k]; + Word16 OldauOutnoWin_fx[L_FRAME8k]; + Word16 win_NB_fx[L_FRAME8k + 25]; - return; + FOR( i = 0; i < L_FRAME8k + 25; i++ ) + { + /*win_NB[i] = window_48kHz[i*6+3];*/ + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; + move16(); } - static Word16 Repetition_smoothing_fx( - const Word32 *ImdctOut_fx, /* i : input */ - Word16 *auOut_fx, /* o : output audio */ - Word32 *OldImdctOut_fx, /* i : input */ - Word16 *OldauOut_fx, /* i/o: audio from previous frame */ - const Word16 L, /* i : length */ - Word16 *prev_oldauOut_fx, /* i : OldauOut from previous frame */ - Word16 overlap_time /* i : overlap time */ - ) + /* Windowing */ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + + /* Repetition with old frame to reserve energy */ + common_overlapping_fx( auOut_fx, ImdctOutWin_fx, prev_oldauOut_fx, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); + + /* OldauOut without windowing */ + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + { + OldauOutnoWin_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + move16(); + } + FOR( i = 0; i < shr( L, 1 ); i++ ) { - Word16 i; - Word32 pow1_fx; - Word32 pow22_fx; - Word16 ImdctOutWin_fx[2 * L_FRAME8k]; - Word16 OldauOutnoWin_fx[L_FRAME8k]; - Word16 win_NB_fx[L_FRAME8k + 25]; + OldauOutnoWin_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[i] ), 6 ) ); + move16(); + } - FOR( i = 0; i < L_FRAME8k + 25; i++ ) - { - /*win_NB[i] = window_48kHz[i*6+3];*/ - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } + /* data transition from OldauOut to auOut using smoothing win*/ + Smoothing_vector_NB_fx( OldauOutnoWin_fx, auOut_fx, SmoothingWin_NB875_fx, auOut_fx, overlap_time ); - /* Windowing */ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + pow1_fx = L_deposit_l( 0 ); + pow22_fx = L_deposit_l( 0 ); + FOR( i = 0; i < idiv1616( imult1616( 4, L ), 20 ); i++ ) + { + pow1_fx = L_add( pow1_fx, Mult_32_32( L_shl( (Word32) auOut_fx[add( idiv1616( L, 20 ), i )], 6 ), L_shl( (Word32) auOut_fx[add( idiv1616( L, 20 ), i )], 6 ) ) ); + pow22_fx = L_add( pow22_fx, Mult_32_32( L_shl( (Word32) auOut_fx[N_LEAD_NB + i], 6 ), L_shl( (Word32) auOut_fx[N_LEAD_NB + i], 6 ) ) ); + } - /* Repetition with old frame to reserve energy */ - common_overlapping_fx( auOut_fx, ImdctOutWin_fx, prev_oldauOut_fx, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); - /* OldauOut without windowing */ - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - OldauOutnoWin_fx[i - N_ZERO_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); - move16(); - } - FOR( i = 0; i < shr( L, 1 ); i++ ) - { - OldauOutnoWin_fx[i + N_ZERO_O_NB] = extract_l( L_shr( L_negate( OldImdctOut_fx[i] ), 6 ) ); - move16(); - } + IF( GT_32( pow22_fx, L_add( pow1_fx, L_shl( pow1_fx, 1 ) ) ) ) + { + return 1; + } - /* data transition from OldauOut to auOut using smoothing win*/ - Smoothing_vector_NB_fx( OldauOutnoWin_fx, auOut_fx, SmoothingWin_NB875_fx, auOut_fx, overlap_time ); + /* Update the OldauOut array for next overlapping */ + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + Scaledown_fx( prev_oldauOut_fx, prev_oldauOut_fx, 23170, L ); - pow1_fx = L_deposit_l( 0 ); - pow22_fx = L_deposit_l( 0 ); - FOR( i = 0; i < idiv1616( imult1616( 4, L ), 20 ); i++ ) - { - pow1_fx = L_add( pow1_fx, Mult_32_32( L_shl( (Word32) auOut_fx[add( idiv1616( L, 20 ), i )], 6 ), L_shl( (Word32) auOut_fx[add( idiv1616( L, 20 ), i )], 6 ) ) ); - pow22_fx = L_add( pow22_fx, Mult_32_32( L_shl( (Word32) auOut_fx[N_LEAD_NB + i], 6 ), L_shl( (Word32) auOut_fx[N_LEAD_NB + i], 6 ) ) ); - } + return 0; +} +static void common_overlapping_fx( + Word16 *auOut_fx, /* i : Input */ + Word16 *ImdctOutWin_fx, /* o : Output */ + Word16 *OldauOut_fx, /* i : Window */ + Word16 end1, /* i : Decay */ + Word16 offset1, + Word16 start2, + Word16 end2, + Word16 offset_i2, + Word16 offset2 ) +{ + Word16 i; - IF( GT_32( pow22_fx, L_add( pow1_fx, L_shl( pow1_fx, 1 ) ) ) ) - { - return 1; - } + /* Common Overlapping */ + FOR( i = 0; i < end1; i++ ) + { + /*auOut_fx[i] = L_add(ImdctOutWin_fx[i+7*L/20], OldauOut_fx[i+offset1]);*/ +#ifdef BASOP_NOGLOB + auOut_fx[i] = add_sat( ImdctOutWin_fx[i + N_ZERO_NB], OldauOut_fx[add( i, offset1 )] ); +#else + auOut_fx[i] = add( ImdctOutWin_fx[i + N_ZERO_NB], OldauOut_fx[i + offset1] ); +#endif + move16(); + } + FOR( i = start2; i < end2; i++ ) + { + /*auOut_fx[i+offset2] = ImdctOutWin_fx[i+offset_i2]; move32();*/ + auOut_fx[add( i, offset2 )] = ImdctOutWin_fx[add( i, offset_i2 )]; + move16(); + } + + return; +} - /* Update the OldauOut array for next overlapping */ - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); - Scaledown_fx( prev_oldauOut_fx, prev_oldauOut_fx, 23170, L ); - return 0; +static void Smoothing_vector_NB_fx( + const Word16 OldauOutnoWin_fx[], /* i : Input vector 1 */ + const Word16 ImdctOutWin_fx[], /* i : Input vector 2 */ + const Word16 SmoothingWin_fx[], /* i : Smoothing window */ + Word16 auOut_fx[], /* o : Output vector that contains vector 1 .* vector 2 */ + const Word16 ol_size /* i : Overlap size */ +) +{ + Word16 i; + Word16 weight_fx; + + FOR( i = 0; i < ol_size; i++ ) + { + weight_fx = SmoothingWin_fx[i]; + move16(); + auOut_fx[i] = add( mult( OldauOutnoWin_fx[i], sub( 32767, weight_fx ) ), mult( ImdctOutWin_fx[i], weight_fx ) ); + move16(); } - static void common_overlapping_fx( - Word16 * auOut_fx, /* i : Input */ - Word16 * ImdctOutWin_fx, /* o : Output */ - Word16 * OldauOut_fx, /* i : Window */ - Word16 end1, /* i : Decay */ - Word16 offset1, - Word16 start2, - Word16 end2, - Word16 offset_i2, - Word16 offset2 ) + return; +} + + +static void Windowing_1st_NB_fx( + Word16 *ImdctOutWin_fx, /* o : Output */ + const Word32 *ImdctOut_fx, /* i : Input */ + const Word16 *win_fx, /* i : Window */ + const Word16 *smoothingWin_fx, /* i : Smoothing Window */ + Word16 smoothing_flag /* i : 1=Smoothing window, 0=Original window */ +) +{ + Word16 i; + Word16 L; + + L = L_FRAME8k; + move16(); + IF( smoothing_flag == 0 ) { - Word16 i; - - /* Common Overlapping */ - FOR( i = 0; i < end1; i++ ) + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) { - /*auOut_fx[i] = L_add(ImdctOutWin_fx[i+7*L/20], OldauOut_fx[i+offset1]);*/ -#ifdef BASOP_NOGLOB - auOut_fx[i] = add_sat( ImdctOutWin_fx[i + N_ZERO_NB], OldauOut_fx[add( i, offset1 )] ); -#else - auOut_fx[i] = add( ImdctOutWin_fx[i + N_ZERO_NB], OldauOut_fx[i + offset1] ); -#endif + /*ImdctOutWin[i] = ImdctOut[L/2 + i] * win[(2*L-1-i)-N_LEAD_O_NB];*/ + ImdctOutWin_fx[i] = extract_l( L_shr( Mult_32_16( ImdctOut_fx[add( shr( L, 1 ), i )], win_fx[sub( sub( sub( shl( L, 1 ), 1 ), i ), N_LEAD_O_NB )] ), 6 ) ); move16(); } - FOR( i = start2; i < end2; i++ ) + + FOR( i = 0; i < N_ZERO_O_NB; i++ ) { - /*auOut_fx[i+offset2] = ImdctOutWin_fx[i+offset_i2]; move32();*/ - auOut_fx[add( i, offset2 )] = ImdctOutWin_fx[add( i, offset_i2 )]; + /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i] * win[(3*L/2-1-i)-N_LEAD_O_NB];*/ + /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[(L/2-i-1)];*/ + ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), win_fx[sub( ( sub( sub( shr( imult1616( 3, L ), 1 ), 1 ), i ) ), N_LEAD_O_NB )] ), 6 ) ); + move16(); + ImdctOutWin_fx[add( idiv1616( imult1616( 3, L ), 2 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); move16(); } - - return; } - - - static void Smoothing_vector_NB_fx( - const Word16 OldauOutnoWin_fx[], /* i : Input vector 1 */ - const Word16 ImdctOutWin_fx[], /* i : Input vector 2 */ - const Word16 SmoothingWin_fx[], /* i : Smoothing window */ - Word16 auOut_fx[], /* o : Output vector that contains vector 1 .* vector 2 */ - const Word16 ol_size /* i : Overlap size */ - ) + ELSE { - Word16 i; - Word16 weight_fx; + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + { + /*ImdctOutWin[i] = ImdctOut[L/2 + i] * smoothingWin[(i-N_ZERO_NB)];*/ /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ + ImdctOutWin_fx[i] = extract_l( L_shr( Mult_32_16( ImdctOut_fx[add( shr( L, 1 ), i )], smoothingWin_fx[sub( i, N_ZERO_NB )] ), 6 ) ); /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ + move16(); + } - FOR( i = 0; i < ol_size; i++ ) + FOR( i = 0; i < N_ZERO_O_NB; i++ ) { - weight_fx = SmoothingWin_fx[i]; + /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i] * smoothingWin[(i+N_ZERO_O_NB)];*/ /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ + /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[(L/2-i-1)];*/ + ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), smoothingWin_fx[add( i, N_ZERO_O_NB )] ), 6 ) ); /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ move16(); - auOut_fx[i] = add( mult( OldauOutnoWin_fx[i], sub( 32767, weight_fx ) ), mult( ImdctOutWin_fx[i], weight_fx ) ); + ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); move16(); } - - return; } + return; +} +static void Windowing_2nd_NB_fx( + Word16 *ImdctOutWin_fx, /* o : Output */ + const Word32 *ImdctOut_fx, /* i : Input */ + const Word16 *win_fx /* i : Window */ +) +{ + Word16 i; + Word16 L; - static void Windowing_1st_NB_fx( - Word16 * ImdctOutWin_fx, /* o : Output */ - const Word32 *ImdctOut_fx, /* i : Input */ - const Word16 *win_fx, /* i : Window */ - const Word16 *smoothingWin_fx, /* i : Smoothing Window */ - Word16 smoothing_flag /* i : 1=Smoothing window, 0=Original window */ - ) + L = L_FRAME8k; + move16(); + FOR( i = N_ZERO_O_NB; i < shr( L, 1 ); i++ ) { - Word16 i; - Word16 L; - - L = L_FRAME8k; + /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i];*/ + /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[L/2-i-1];*/ + ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), 6 ) ); + move16(); + ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); move16(); - IF( smoothing_flag == 0 ) - { - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin[i] = ImdctOut[L/2 + i] * win[(2*L-1-i)-N_LEAD_O_NB];*/ - ImdctOutWin_fx[i] = extract_l( L_shr( Mult_32_16( ImdctOut_fx[add( shr( L, 1 ), i )], win_fx[sub( sub( sub( shl( L, 1 ), 1 ), i ), N_LEAD_O_NB )] ), 6 ) ); - move16(); - } - - FOR( i = 0; i < N_ZERO_O_NB; i++ ) - { - /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i] * win[(3*L/2-1-i)-N_LEAD_O_NB];*/ - /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[(L/2-i-1)];*/ - ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), win_fx[sub( ( sub( sub( shr( imult1616( 3, L ), 1 ), 1 ), i ) ), N_LEAD_O_NB )] ), 6 ) ); - move16(); - ImdctOutWin_fx[add( idiv1616( imult1616( 3, L ), 2 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); - move16(); - } - } - ELSE - { - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin[i] = ImdctOut[L/2 + i] * smoothingWin[(i-N_ZERO_NB)];*/ /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ - ImdctOutWin_fx[i] = extract_l( L_shr( Mult_32_16( ImdctOut_fx[add( shr( L, 1 ), i )], smoothingWin_fx[sub( i, N_ZERO_NB )] ), 6 ) ); /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ - move16(); - } - - FOR( i = 0; i < N_ZERO_O_NB; i++ ) - { - /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i] * smoothingWin[(i+N_ZERO_O_NB)];*/ /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ - /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[(L/2-i-1)];*/ - ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), smoothingWin_fx[add( i, N_ZERO_O_NB )] ), 6 ) ); /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ - move16(); - ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); - move16(); - } - } - - return; } - static void Windowing_2nd_NB_fx( - Word16 * ImdctOutWin_fx, /* o : Output */ - const Word32 *ImdctOut_fx, /* i : Input */ - const Word16 *win_fx /* i : Window */ - ) + + FOR( i = 0; i < N_ZERO_NB; i++ ) { - Word16 i; - Word16 L; + /*ImdctOutWin[L + i] = -ImdctOut[L/2 - 1 - i];*/ + ImdctOutWin_fx[add( L, i )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); + move16(); + } - L = L_FRAME8k; + FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) + { + /*ImdctOutWin[L + i] = -ImdctOut[L/2 - 1 - i] * win[L - 1 - i];*/ + ImdctOutWin_fx[add( L, i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), win_fx[sub( sub( L, 1 ), i )] ), 6 ) ); move16(); - FOR( i = N_ZERO_O_NB; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin[L/2 + i] = -ImdctOut[L - 1 - i];*/ - /*ImdctOutWin[3*L/2 + i] = -ImdctOut[i] * win[L/2-i-1];*/ - ImdctOutWin_fx[add( shr( L, 1 ), i )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( L, 1 ), i )] ), 6 ) ); - move16(); - ImdctOutWin_fx[add( shr( imult1616( 3, L ), 1 ), i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[i] ), win_fx[sub( sub( shr( L, 1 ), i ), 1 )] ), 6 ) ); - move16(); - } + } - FOR( i = 0; i < N_ZERO_NB; i++ ) - { - /*ImdctOutWin[L + i] = -ImdctOut[L/2 - 1 - i];*/ - ImdctOutWin_fx[add( L, i )] = extract_l( L_shr( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), 6 ) ); - move16(); - } + return; +} - FOR( i = N_ZERO_NB; i < shr( L, 1 ); i++ ) - { - /*ImdctOutWin[L + i] = -ImdctOut[L/2 - 1 - i] * win[L - 1 - i];*/ - ImdctOutWin_fx[add( L, i )] = extract_l( L_shr( Mult_32_16( L_negate( ImdctOut_fx[sub( sub( shr( L, 1 ), 1 ), i )] ), win_fx[sub( sub( L, 1 ), i )] ), 6 ) ); - move16(); - } +static void Smoothing_vector_scaledown_NB_fx( + const Word16 OldauOutnoWin_fx[], /* i : Input vector 1 */ + const Word16 ImdctOutWin_fx[], /* i : Input vector 2 */ + const Word16 SmoothingWin_fx[], /* i : Smoothing window */ + Word16 auOut_fx[], /* o : Output vector that contains vector 1 .* vector 2 */ + const Word16 ol_size /* i : Overlap size */ + +) +{ + Word16 i; + Word16 weight_fx; - return; + FOR( i = 0; i < ol_size; i++ ) + { + weight_fx = SmoothingWin_fx[i]; + move16(); + auOut_fx[i] = add( mult( OldauOutnoWin_fx[i], sub( 32767, weight_fx ) ), + mult( ImdctOutWin_fx[i], mult_r( 23170, weight_fx ) ) ); + move16(); } - static void Smoothing_vector_scaledown_NB_fx( - const Word16 OldauOutnoWin_fx[], /* i : Input vector 1 */ - const Word16 ImdctOutWin_fx[], /* i : Input vector 2 */ - const Word16 SmoothingWin_fx[], /* i : Smoothing window */ - Word16 auOut_fx[], /* o : Output vector that contains vector 1 .* vector 2 */ - const Word16 ol_size /* i : Overlap size */ + return; +} - ) - { - Word16 i; - Word16 weight_fx; - FOR( i = 0; i < ol_size; i++ ) - { - weight_fx = SmoothingWin_fx[i]; - move16(); - auOut_fx[i] = add( mult( OldauOutnoWin_fx[i], sub( 32767, weight_fx ) ), - mult( ImdctOutWin_fx[i], mult_r( 23170, weight_fx ) ) ); - move16(); - } +static void Scaledown_fx( + Word16 x[], /* i : Input vector */ + Word16 y[], /* o : Output vector that contains vector 1 .* vector 2 */ + Word16 scale_v, /*Q15 */ + const Word16 N /* i : Overlap size */ +) +{ + Word16 i; - return; + FOR( i = 0; i < N; i++ ) + { + y[i] = mult( x[i], scale_v ); + move16(); } + return; +} + +void time_domain_FEC_HQ_fx( + Decoder_State *st_fx, /* i : Decoder State */ + Word32 *wtda_audio_fx, /* i : input */ + Word16 *out_fx, /* o : output audio */ + Word16 mean_en_high_fx, /* i : transient flag */ + const Word16 output_frame, + Word16 *Q_synth ) +{ + HQ_NBFEC_HANDLE hHQ_nbfec; + HQ_DEC_HANDLE hHQ_core; + hHQ_nbfec = st_fx->hHQ_nbfec; + hHQ_core = st_fx->hHQ_core; - static void Scaledown_fx( - Word16 x[], /* i : Input vector */ - Word16 y[], /* o : Output vector that contains vector 1 .* vector 2 */ - Word16 scale_v, /*Q15 */ - const Word16 N /* i : Overlap size */ - ) + IF( hHQ_core->Q_old_wtda != 0 ) { - Word16 i; + Scale_sig( hHQ_core->old_out_fx, output_frame, negate( hHQ_core->Q_old_wtda ) ); + hHQ_core->Q_old_wtda = 0; + move16(); + } - FOR( i = 0; i < N; i++ ) + test(); + test(); + test(); + test(); + test(); + test(); + IF( ( EQ_16( st_fx->nbLostCmpt, 1 ) ) && ( EQ_16( hHQ_nbfec->phase_mat_flag, 1 ) ) && ( hHQ_nbfec->phase_mat_next == 0 ) ) + { + IF( FEC_phase_matching_fx( hHQ_nbfec, wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx ) ) { - y[i] = mult( x[i], scale_v ); + /* window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0 ); */ + window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); + hHQ_nbfec->phase_mat_next = 0; move16(); } - - return; - } - - void time_domain_FEC_HQ_fx( - Decoder_State * st_fx, /* i : Decoder State */ - Word32 * wtda_audio_fx, /* i : input */ - Word16 * out_fx, /* o : output audio */ - Word16 mean_en_high_fx, /* i : transient flag */ - const Word16 output_frame, - Word16 *Q_synth ) - { - HQ_NBFEC_HANDLE hHQ_nbfec; - HQ_DEC_HANDLE hHQ_core; - hHQ_nbfec = st_fx->hHQ_nbfec; - hHQ_core = st_fx->hHQ_core; - - IF( hHQ_core->Q_old_wtda != 0 ) + ELSE { - Scale_sig( hHQ_core->old_out_fx, output_frame, negate( hHQ_core->Q_old_wtda ) ); - hHQ_core->Q_old_wtda = 0; + hHQ_nbfec->phase_mat_next = 1; + move16(); + *Q_synth = 0; move16(); } + } + ELSE IF( ( EQ_16( st_fx->prev_bfi, 1 ) ) && ( st_fx->bfi == 0 ) && ( EQ_16( hHQ_nbfec->phase_mat_next, 1 ) ) ) + { + FEC_phase_matching_nextgood_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx, mean_en_high_fx ); + hHQ_nbfec->phase_mat_next = 0; + move16(); + *Q_synth = 0; + move16(); + } + ELSE IF( ( EQ_16( st_fx->prev_bfi, 1 ) ) && ( EQ_16( st_fx->bfi, 1 ) ) && ( EQ_16( hHQ_nbfec->phase_mat_next, 1 ) ) ) + { + FEC_phase_matching_burst_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx, hHQ_nbfec->prev_oldauOut_fx ); + hHQ_nbfec->phase_mat_next = 1; + move16(); + *Q_synth = 0; + move16(); + } + ELSE + { + /*n4 = (short)(N_LEAD_MDCT*(float)(output_frame/20));*/ test(); - test(); - test(); - test(); - test(); - test(); - IF( ( EQ_16( st_fx->nbLostCmpt, 1 ) ) && ( EQ_16( hHQ_nbfec->phase_mat_flag, 1 ) ) && ( hHQ_nbfec->phase_mat_next == 0 ) ) + IF( st_fx->bfi == 0 && EQ_16( st_fx->prev_bfi, 1 ) ) { - IF( FEC_phase_matching_fx( hHQ_nbfec, wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx ) ) + test(); + IF( ( EQ_16( hHQ_nbfec->stat_mode_out, 1 ) ) || ( LT_16( hHQ_nbfec->diff_energy_fx, ED_THRES_50P_fx ) ) ) /* Q11 */ { - /* window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0 ); */ - window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); - hHQ_nbfec->phase_mat_next = 0; + Word16 tmp; + + tmp = 0; + move16(); + if ( GT_16( st_fx->old_bfi_cnt, 1 ) ) + { + tmp = 1; + move16(); + } + Repetition_smoothing_nextgood_fx( wtda_audio_fx, out_fx, hHQ_nbfec->oldIMDCTout_fx, hHQ_core->old_out_fx, tmp, N_LEAD_NB ); + *Q_synth = 0; move16(); } - ELSE + ELSE IF( GT_16( st_fx->old_bfi_cnt, 1 ) ) { - hHQ_nbfec->phase_mat_next = 1; - move16(); + Next_good_after_burst_erasures_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, N_LEAD_NB ); *Q_synth = 0; move16(); } + ELSE + { + /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0); */ + window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, + st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); + } } - ELSE IF( ( EQ_16( st_fx->prev_bfi, 1 ) ) && ( st_fx->bfi == 0 ) && ( EQ_16( hHQ_nbfec->phase_mat_next, 1 ) ) ) - { - FEC_phase_matching_nextgood_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx, mean_en_high_fx ); - - hHQ_nbfec->phase_mat_next = 0; - move16(); - *Q_synth = 0; - move16(); - } - ELSE IF( ( EQ_16( st_fx->prev_bfi, 1 ) ) && ( EQ_16( st_fx->bfi, 1 ) ) && ( EQ_16( hHQ_nbfec->phase_mat_next, 1 ) ) ) - { - FEC_phase_matching_burst_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, hHQ_nbfec->old_out_pha_fx, hHQ_nbfec->prev_oldauOut_fx ); - hHQ_nbfec->phase_mat_next = 1; - move16(); - *Q_synth = 0; - move16(); - } - ELSE + ELSE /* if(st->bfi == 1) */ { - /*n4 = (short)(N_LEAD_MDCT*(float)(output_frame/20));*/ test(); - IF( st_fx->bfi == 0 && EQ_16( st_fx->prev_bfi, 1 ) ) + IF( ( EQ_16( hHQ_nbfec->stat_mode_out, 1 ) ) || ( LT_16( hHQ_nbfec->diff_energy_fx, ED_THRES_50P_fx ) ) ) { - test(); - IF( ( EQ_16( hHQ_nbfec->stat_mode_out, 1 ) ) || ( LT_16( hHQ_nbfec->diff_energy_fx, ED_THRES_50P_fx ) ) ) /* Q11 */ + /* if( window_ola_bfi( wtda_audio, out, st->oldIMDCTout, st->old_out, output_frame, st->prev_oldauOut, N_LEAD_NB) ) */ + IF( Repetition_smoothing_fx( wtda_audio_fx, out_fx, hHQ_nbfec->oldIMDCTout_fx, hHQ_core->old_out_fx, output_frame, hHQ_nbfec->prev_oldauOut_fx, N_LEAD_NB ) ) { - Word16 tmp; - - tmp = 0; - move16(); - if ( GT_16( st_fx->old_bfi_cnt, 1 ) ) - { - tmp = 1; - move16(); - } - Repetition_smoothing_nextgood_fx( wtda_audio_fx, out_fx, hHQ_nbfec->oldIMDCTout_fx, hHQ_core->old_out_fx, tmp, N_LEAD_NB ); - *Q_synth = 0; - move16(); + /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0);*/ + window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, + st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); } - ELSE IF( GT_16( st_fx->old_bfi_cnt, 1 ) ) + ELSE { - Next_good_after_burst_erasures_fx( wtda_audio_fx, out_fx, hHQ_core->old_out_fx, N_LEAD_NB ); *Q_synth = 0; move16(); } - ELSE - { - /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0); */ - window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, - st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); - } } - ELSE /* if(st->bfi == 1) */ + ELSE { - test(); - IF( ( EQ_16( hHQ_nbfec->stat_mode_out, 1 ) ) || ( LT_16( hHQ_nbfec->diff_energy_fx, ED_THRES_50P_fx ) ) ) - { - /* if( window_ola_bfi( wtda_audio, out, st->oldIMDCTout, st->old_out, output_frame, st->prev_oldauOut, N_LEAD_NB) ) */ - IF( Repetition_smoothing_fx( wtda_audio_fx, out_fx, hHQ_nbfec->oldIMDCTout_fx, hHQ_core->old_out_fx, output_frame, hHQ_nbfec->prev_oldauOut_fx, N_LEAD_NB ) ) - { - /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0);*/ - window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, - st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); - } - ELSE - { - *Q_synth = 0; - move16(); - } - } - ELSE - { - /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0 );*/ - window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, - st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); - } + /*window_ola( wtda_audio, out, st->old_out, output_frame, 0, 0, 0 );*/ + window_ola_fx( wtda_audio_fx, out_fx, Q_synth, hHQ_core->old_out_fx, &hHQ_core->Q_old_wtda, output_frame, + st_fx->hTcxCfg->tcx_last_overlap_mode, st_fx->hTcxCfg->tcx_curr_overlap_mode, st_fx->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth_fx ); } - hHQ_nbfec->phase_mat_next = 0; - move16(); } - - return; + hHQ_nbfec->phase_mat_next = 0; + move16(); } - static void Next_good_after_burst_erasures_fx( - const Word32 *ImdctOut_fx, - Word16 *auOut_fx, - Word16 *OldauOut_fx, - const Word16 ol_size ) - { - Word16 i, L; - Word16 ImdctOutWin_fx[2 * L_FRAME48k]; - Word16 win_NB_fx[L_FRAME8k + 25]; + return; +} + +static void Next_good_after_burst_erasures_fx( + const Word32 *ImdctOut_fx, + Word16 *auOut_fx, + Word16 *OldauOut_fx, + const Word16 ol_size ) +{ + Word16 i, L; + Word16 ImdctOutWin_fx[2 * L_FRAME48k]; + Word16 win_NB_fx[L_FRAME8k + 25]; - L = L_FRAME8k; + L = L_FRAME8k; + move16(); + FOR( i = 0; i < add( L, 25 ); i++ ) + { + win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; move16(); - FOR( i = 0; i < add( L, 25 ); i++ ) - { - win_NB_fx[i] = window_48kHz_fx[add( imult1616( i, 6 ), 3 )]; - move16(); - } + } - /* Windowing */ - Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); - Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); + /* Windowing */ + Windowing_1st_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx, NULL, 0 ); + Windowing_2nd_NB_fx( ImdctOutWin_fx, ImdctOut_fx, win_NB_fx ); - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - Smoothing_vector_scaledown_NB_fx( &OldauOut_fx[N_ZERO_NB], &ImdctOutWin_fx[N_Z_L_O_NB], SmoothingWin_NB875_fx, &OldauOut_fx[N_ZERO_NB], ol_size ); + /* Overlapping with next good frame : Overlapping to remove the discontinuity */ + Smoothing_vector_scaledown_NB_fx( &OldauOut_fx[N_ZERO_NB], &ImdctOutWin_fx[N_Z_L_O_NB], SmoothingWin_NB875_fx, &OldauOut_fx[N_ZERO_NB], ol_size ); - /* Scale down the overlapped signal */ - Scaledown_fx( &ImdctOutWin_fx[add( ol_size, N_Z_L_O_NB )], &OldauOut_fx[add( ol_size, N_ZERO_NB )], 23170, sub( N_Z_L_NB, ol_size ) ); + /* Scale down the overlapped signal */ + Scaledown_fx( &ImdctOutWin_fx[add( ol_size, N_Z_L_O_NB )], &OldauOut_fx[add( ol_size, N_ZERO_NB )], 23170, sub( N_Z_L_NB, ol_size ) ); - /* Common Overlapping */ - common_overlapping_fx( auOut_fx, ImdctOutWin_fx, OldauOut_fx, N_Z_L_NB, N_ZERO_NB, 0, N_ZERO_NB, L, N_Z_L_NB ); - Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); + /* Common Overlapping */ + common_overlapping_fx( auOut_fx, ImdctOutWin_fx, OldauOut_fx, N_Z_L_NB, N_ZERO_NB, 0, N_ZERO_NB, L, N_Z_L_NB ); + Copy( &ImdctOutWin_fx[L], OldauOut_fx, L ); - return; - } + return; +} #endif #ifdef ADD_IVAS_HQ_CODE_FEC - /*-------------------------------------------------------------------------- - * save_synthesis_hq_fec() - * - * Save synthesis for HQ FEC - *-------------------------------------------------------------------------*/ - - void save_synthesis_hq_fec( - Decoder_State * st, /* i/o: decoder state structure */ - const float *output, /* i : decoded synthesis */ - const int16_t output_frame, /* i : decoded synthesis */ - CPE_DEC_HANDLE hCPE /* i : CPE decoder structure */ - ) - { - int16_t post_hq_delay; - - switch ( st->element_mode ) - { - case EVS_MONO: - post_hq_delay = NS2SA( st->output_Fs, POST_HQ_DELAY_NS ); - break; - case IVAS_SCE: +/*-------------------------------------------------------------------------- + * save_synthesis_hq_fec() + * + * Save synthesis for HQ FEC + *-------------------------------------------------------------------------*/ + +void save_synthesis_hq_fec( + Decoder_State *st, /* i/o: decoder state structure */ + const float *output, /* i : decoded synthesis */ + const int16_t output_frame, /* i : decoded synthesis */ + CPE_DEC_HANDLE hCPE /* i : CPE decoder structure */ +) +{ + int16_t post_hq_delay; + + switch ( st->element_mode ) + { + case EVS_MONO: + post_hq_delay = NS2SA( st->output_Fs, POST_HQ_DELAY_NS ); + break; + case IVAS_SCE: + post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); + break; + case IVAS_CPE_DFT: + if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) + { post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - break; - case IVAS_CPE_DFT: - if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - } - else - { - post_hq_delay = 0; - } - break; - default: + } + else + { post_hq_delay = 0; - break; - } + } + break; + default: + post_hq_delay = 0; + break; + } - if ( ( st->codec_mode == MODE1 && st->hTcxDec != NULL ) && ( ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) || st->core == HQ_CORE ) ) + if ( ( st->codec_mode == MODE1 && st->hTcxDec != NULL ) && ( ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) || st->core == HQ_CORE ) ) + { + mvr2r( st->hTcxDec->synth_history + output_frame, st->hTcxDec->synth_history, output_frame - post_hq_delay + NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); + mvr2r( output, st->hTcxDec->old_synthFB + output_frame - post_hq_delay, output_frame ); + + if ( st->element_mode == EVS_MONO ) { - mvr2r( st->hTcxDec->synth_history + output_frame, st->hTcxDec->synth_history, output_frame - post_hq_delay + NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); - mvr2r( output, st->hTcxDec->old_synthFB + output_frame - post_hq_delay, output_frame ); + /* reset the remaining buffer, which is read in TCX concealment the necessary samples to fill + this buffer are not available for all cases, the impact on the output is limited */ + set_f( st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, 0.f, post_hq_delay ); + if ( output_frame >= L_FRAME16k ) + { + mvr2r( st->prev_synth_buffer, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + } + else + { + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + } - if ( st->element_mode == EVS_MONO ) + if ( st->core != ACELP_CORE ) { - /* reset the remaining buffer, which is read in TCX concealment the necessary samples to fill - this buffer are not available for all cases, the impact on the output is limited */ - set_f( st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, 0.f, post_hq_delay ); if ( output_frame >= L_FRAME16k ) { - mvr2r( st->prev_synth_buffer, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); - } - else - { + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_CLDFB_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); } - - if ( st->core != ACELP_CORE ) + else { - if ( output_frame >= L_FRAME16k ) - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_CLDFB_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - else - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); } } - else + } + else + { + if ( st->core != ACELP_CORE ) { - if ( st->core != ACELP_CORE ) - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, post_hq_delay ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } + mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, post_hq_delay ); + mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); } } - - return; } + + return; +} #endif diff --git a/lib_dec/acelp_core_dec_ivas_fx.c b/lib_dec/acelp_core_dec_ivas_fx.c index d91c053bc..a6c69730e 100644 --- a/lib_dec/acelp_core_dec_ivas_fx.c +++ b/lib_dec/acelp_core_dec_ivas_fx.c @@ -1265,7 +1265,7 @@ ivas_error acelp_core_dec_ivas_fx( FOR( Word32 nsf = 0; nsf < st->nb_subfr; nsf++ ) #endif { - Scale_sig( Aq_fx + ( nsf * ( M + 1 ) ), M + 1, sub( norm_s( Aq_fx[imult3216( nsf, M + 1 )] ), Q2 ) ); + Scale_sig( Aq_fx + ( nsf * ( M + 1 ) ), M + 1, sub( norm_s( Aq_fx[imult3216( nsf, M + 1 )] ), Q2 ) ); Aq_fx[imult3216( nsf, M + 1 )] = ONE_IN_Q12; move16(); } diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 626a9c1d6..346e9d1fa 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -807,7 +807,7 @@ ivas_error ivas_core_dec_fx( IF( GT_32( sts[0]->core_brate, SID_2k40 ) && sts[0]->bfi == 0 && EQ_16( sts[0]->prev_bfi, 1 ) ) #else IF( sts[0]->bfi == 0 && EQ_16( sts[0]->prev_bfi, 1 ) ) - /* On first good frame after frameloss undo the whitening of the bg noise shape */ + /* On first good frame after frameloss undo the whitening of the bg noise shape */ #endif { FOR( n = 0; n < n_channels; ++n ) @@ -1989,7 +1989,7 @@ ivas_error ivas_core_dec( if ( sts[0]->core_brate > SID_2k40 && sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) #else if ( sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) - /* On first good frame after frameloss undo the whitening of the bg noise shape */ + /* On first good frame after frameloss undo the whitening of the bg noise shape */ #endif { for ( n = 0; n < n_channels; ++n ) diff --git a/lib_dec/jbm_pcmdsp_apa.c b/lib_dec/jbm_pcmdsp_apa.c index 8bf338146..b3a7886ea 100644 --- a/lib_dec/jbm_pcmdsp_apa.c +++ b/lib_dec/jbm_pcmdsp_apa.c @@ -1683,54 +1683,56 @@ static Word8 logarithmic_search_fx( const apa_state_t *ps, } /* update max corr */ - IF( LT_16( ps->scale, 100 ) ){ + IF( LT_16( ps->scale, 100 ) ) + { /* shrinking: prefer greater synchpos for equal coeff */ BASOP_SATURATE_WARNING_OFF_EVS; - IF( GE_32( coeff, coeff_max ) ){ - coeff_max = L_add( coeff, 0 ); - *synchpos = i; - move16(); - } - BASOP_SATURATE_WARNING_ON_EVS; - } + IF( GE_32( coeff, coeff_max ) ) + { + coeff_max = L_add( coeff, 0 ); + *synchpos = i; + move16(); + } + BASOP_SATURATE_WARNING_ON_EVS; + } ELSE { /* extending: prefer smaller synchpos for equal coeff */ BASOP_SATURATE_WARNING_OFF_EVS; - IF( GT_32( coeff, coeff_max ) ) + IF( GT_32( coeff, coeff_max ) ) + { + coeff_max = L_add( coeff, 0 ); + *synchpos = i; + move16(); + } + BASOP_SATURATE_WARNING_ON_EVS; + } + } + /* backup old search range */ + s_start_old = s_start; + move16(); + s_len_old = inlen; + move16(); + + css = shr( css, 1 ); + inlen = shr( inlen, 1 ); + s_start_old = s_start; + move16(); + s_start = sub( *synchpos, shr( inlen, 1 ) ); + + if ( LT_16( s_start, s_start_old ) ) { - coeff_max = L_add( coeff, 0 ); - *synchpos = i; + s_start = s_start_old; move16(); } - BASOP_SATURATE_WARNING_ON_EVS; - } -} -/* backup old search range */ -s_start_old = s_start; -move16(); -s_len_old = inlen; -move16(); - -css = shr( css, 1 ); -inlen = shr( inlen, 1 ); -s_start_old = s_start; -move16(); -s_start = sub( *synchpos, shr( inlen, 1 ) ); - -if ( LT_16( s_start, s_start_old ) ) -{ - s_start = s_start_old; - move16(); -} -IF( GT_16( add( s_start, inlen ), add( s_start_old, s_len_old ) ) ) -{ - inlen = add( sub( s_start_old, s_start ), s_len_old ); -} -} -WHILE( GT_16( css, 2 ) ); -return 0; + IF( GT_16( add( s_start, inlen ), add( s_start_old, s_len_old ) ) ) + { + inlen = add( sub( s_start_old, s_start ), s_len_old ); + } + } + WHILE( GT_16( css, 2 ) ); + return 0; } #endif /* diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index d0530a6b6..88549f51d 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -2774,13 +2774,14 @@ void TonalMDCTConceal_InsertNoise( } void TonalMDCTConceal_Apply( - const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ - Word32 *mdctSpectrum, /*IN/OUT*/ - Word16 *mdctSpectrum_exp /*IN */ + const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ + Word32 *mdctSpectrum, /*IN/OUT*/ + Word16 *mdctSpectrum_exp /*IN */ #ifdef IVAS_CODE_MDCT_GSHAPE - ,const PsychoacousticParameters* psychParamsCurrent + , + const PsychoacousticParameters *psychParamsCurrent #endif - ) +) { Word16 i, l, exp; Word16 *phaseDiff, *pCurrentPhase; diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index de288efbd..3b0cdf6fa 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -553,66 +553,66 @@ void core_signal_analysis_high_bitrate_fx( } } #endif - } - IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) - { - test(); - test(); - TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, - st->hTcxCfg->tcx_coded_lines, - transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), - spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns_fx[frameno], NULL ); + } + IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) + { + test(); + test(); + TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, + st->hTcxCfg->tcx_coded_lines, + transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), + spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns_fx[frameno], NULL ); #ifdef IVAS_CODE - IF( st->hTcxCfg->fIsTNSAllowed ) + IF( st->hTcxCfg->fIsTNSAllowed ) #endif + { + EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], + param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); + } + IF( EQ_16( transform_type[frameno], TCX_5 ) ) + { + /* group sub-windows: interleave bins according to their frequencies */ + FOR( i = 0; i < tcx5SizeFB; i++ ) { - EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], - param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); - } - IF( EQ_16( transform_type[frameno], TCX_5 ) ) - { - /* group sub-windows: interleave bins according to their frequencies */ - FOR( i = 0; i < tcx5SizeFB; i++ ) - { - interleaveBuf[2 * i] = spectrum[frameno][i]; - move32(); - interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; - move32(); - } - Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); + interleaveBuf[2 * i] = spectrum[frameno][i]; + move32(); + interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; + move32(); } + Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); + } - /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ + /*--------------------------------------------------------------* + * LPC analysis + *---------------------------------------------------------------*/ #ifdef IVAS_CODE - IF( st->tcxonly ) + IF( st->tcxonly ) #endif - { - HBAutocorrelation_fx( st->hTcxCfg, lpc_left_overlap_mode, lpc_right_overlap_mode, &st->speech_enc_pe[frameno * tcx10Size], - shr( L_frame, sub( nSubframes, 1 ) ), r, M ); - - FOR( i = 0; i <= M; i++ ) - { - move16(); - move16(); - r_l[frameno][i] = L_Extract_lc( r[i], &r_h[frameno][i] ); - } - - adapt_lag_wind( r_h[frameno], r_l[frameno], M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); - - E_LPC_lev_dur( r_h[frameno], r_l[frameno], A, epsP, M, NULL ); + { + HBAutocorrelation_fx( st->hTcxCfg, lpc_left_overlap_mode, lpc_right_overlap_mode, &st->speech_enc_pe[frameno * tcx10Size], + shr( L_frame, sub( nSubframes, 1 ) ), r, M ); - E_LPC_a_lsp_conversion( A, lsp[nSubframes - 1 - frameno], st->lspold_enc_fx, M ); - } - IF( st->igf ) + FOR( i = 0; i <= M; i++ ) { - ProcessIGF_fx( st->hIGFEnc, st, spectrum[frameno], &( spectrum_e[frameno] ), powerSpec, &powerSpec_e, transform_type[frameno] == TCX_20, hTcxEnc->fUseTns_fx[frameno], ( st->last_core == ACELP_CORE ), frameno ); + move16(); + move16(); + r_l[frameno][i] = L_Extract_lc( r[i], &r_h[frameno][i] ); } - /* Copy memory */ - mvr2r_Word16( lsp_new, st->lspold_enc_fx, M ); + adapt_lag_wind( r_h[frameno], r_l[frameno], M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); + + E_LPC_lev_dur( r_h[frameno], r_l[frameno], A, epsP, M, NULL ); + + E_LPC_a_lsp_conversion( A, lsp[nSubframes - 1 - frameno], st->lspold_enc_fx, M ); + } + IF( st->igf ) + { + ProcessIGF_fx( st->hIGFEnc, st, spectrum[frameno], &( spectrum_e[frameno] ), powerSpec, &powerSpec_e, transform_type[frameno] == TCX_20, hTcxEnc->fUseTns_fx[frameno], ( st->last_core == ACELP_CORE ), frameno ); } + + /* Copy memory */ + mvr2r_Word16( lsp_new, st->lspold_enc_fx, M ); } } +} diff --git a/lib_enc/find_uv_fx.c b/lib_enc/find_uv_fx.c index 6cb4ecec7..778e7b51a 100644 --- a/lib_enc/find_uv_fx.c +++ b/lib_enc/find_uv_fx.c @@ -476,26 +476,26 @@ Word16 find_uv_fx( /* o : coding type test(); #ifdef BASOP_NOGLOB if ( ( ( LT_16( add_o( mean_voi3, corr_shift, &Overflow ), add( 22774, mean_voi3_offset ) ) ) && /* normalized correlation low */ - ( LT_16( add_sat( st_fx->voicing_fx[2], corr_shift ), 25887 ) ) && /* normalized correlation low on look-ahead - onset detection */ - ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ - ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ - ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ - /*( st_fx->music_hysteresis_fx == 0 ) && */ /* ... and in segment after AUDIO frames */ - ( LE_32( dE1, 245760 ) ) && /* Avoid on sharp energy spikes */ - ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ - ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ - || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ + ( LT_16( add_sat( st_fx->voicing_fx[2], corr_shift ), 25887 ) ) && /* normalized correlation low on look-ahead - onset detection */ + ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ + ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ + ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ + /*( st_fx->music_hysteresis_fx == 0 ) && */ /* ... and in segment after AUDIO frames */ + ( LE_32( dE1, 245760 ) ) && /* Avoid on sharp energy spikes */ + ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ + ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ + || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ #else if ( ( ( LT_16( add( mean_voi3, corr_shift ), add( 22774, mean_voi3_offset ) ) ) && /* normalized correlation low */ ( LT_16( add( st_fx->voicing_fx[2], corr_shift ), 25887 ) ) && /* normalized correlation low on look-ahead - onset detection */ - ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ - ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ - ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ - /*( st_fx->music_hysteresis_fx == 0 ) && */ /* ... and in segment after AUDIO frames */ - ( LE_32( dE1, 245760 ) ) && /* Avoid on sharp energy spikes */ - ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ - ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ - || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ + ( LT_32( ee[0], 397 ) ) && ( GT_32( hp_E[0], E_min_th ) ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ + ( LT_32( ee[1], 397 ) ) && ( GT_32( hp_E[1], E_min_th ) ) && /* ... biased towards look-ahead to detect onsets */ + ( tmp_offset_flag == 0 ) && /* Take care of voiced offsets */ + /*( st_fx->music_hysteresis_fx == 0 ) && */ /* ... and in segment after AUDIO frames */ + ( LE_32( dE1, 245760 ) ) && /* Avoid on sharp energy spikes */ + ( LE_32( st_fx->old_dE1_fx, 245760 ) ) && /* + one frame hysteresis */ + ( st_fx->spike_hyst < 0 ) ) /* Avoid after sharp energy spikes followed by decay (e.g. castanets) */ + || ( flag_low_relE && ( LE_32( st_fx->old_dE1_fx, 245760 ) ) ) ) /* low relative frame energy (only for SC-VBR) */ #endif { coder_type = UNVOICED; -- GitLab From 11c679940616367b1dc952332c2ae627e8e946ef Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Fri, 19 Jul 2024 11:15:41 -0400 Subject: [PATCH 04/77] more adaptation for wmc_tool --- lib_com/wtda.c | 4 ++-- lib_dec/bass_psfilter.c | 4 ++-- lib_dec/dec_higher_acelp.c | 4 ++-- lib_dec/dec_tcx.c | 4 ++-- lib_dec/ivas_ism_dec.c | 4 ++-- lib_dec/ivas_mct_dec.c | 4 ++-- lib_dec/ivas_mdct_core_dec.c | 4 ++-- lib_dec/ivas_osba_dec.c | 4 ++-- lib_dec/ivas_sba_rendering_internal.c | 8 ++++---- lib_dec/ivas_spar_decoder.c | 8 ++++---- lib_dec/ivas_stereo_dft_dec.c | 4 ++-- lib_dec/ivas_stereo_mdct_stereo_dec.c | 4 ++-- lib_dec/swb_bwe_dec.c | 2 -- lib_dec/swb_bwe_dec_hr.c | 4 ++-- lib_dec/tonalMDCTconcealment.c | 4 ++-- lib_enc/ivas_lfe_enc.c | 4 ++-- lib_rend/ivas_masa_merge.c | 4 ++-- lib_rend/ivas_mcmasa_ana.c | 4 ++-- lib_rend/ivas_objectRenderer_mix.c | 4 ++-- lib_rend/ivas_objectRenderer_sources.c | 4 ++-- lib_rend/ivas_orient_trk.c | 4 ++-- 21 files changed, 44 insertions(+), 46 deletions(-) diff --git a/lib_com/wtda.c b/lib_com/wtda.c index f1b47ee6c..6384138d4 100644 --- a/lib_com/wtda.c +++ b/lib_com/wtda.c @@ -41,9 +41,9 @@ #include "rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * mvr2r_inv() diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c index c33edf96c..bae6953c7 100644 --- a/lib_dec/bass_psfilter.c +++ b/lib_dec/bass_psfilter.c @@ -45,9 +45,9 @@ #include "rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c index 962bbc686..904bae3ed 100644 --- a/lib_dec/dec_higher_acelp.c +++ b/lib_dec/dec_higher_acelp.c @@ -41,9 +41,9 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif /*-----------------------------------------------------------------* * transf_cdbk_dec() diff --git a/lib_dec/dec_tcx.c b/lib_dec/dec_tcx.c index ab4558791..b2bc532ad 100644 --- a/lib_dec/dec_tcx.c +++ b/lib_dec/dec_tcx.c @@ -46,9 +46,9 @@ #include "wmc_auto.h" #include "ivas_rom_com.h" #include "ivas_prot_fx.h" -#ifndef IVAS_FLOAT_FIXED_UNIT_TESTING +//#ifndef IVAS_FLOAT_FIXED_UNIT_TESTING #include "debug.h" -#endif // !IVAS_FLOAT_FIXED_UNIT_TESTING +//#endif #ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 71a9514d8..0e01b3030 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -37,10 +37,10 @@ #include "ivas_prot_fx.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif #define IVAS_FLOAT_FIXED_TO_BE_REMOVED /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 34ab57de5..4f17b6595 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -43,9 +43,9 @@ #include "ivas_prot_rend.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index 36c68e3cf..921a220b0 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -44,10 +44,10 @@ #include "ivas_stat_dec.h" #include "ivas_stat_com.h" #include -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 4b9951065..d3d1026d3 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -39,9 +39,9 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index 5a2ee5c77..b290f1228 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -39,13 +39,13 @@ #include "ivas_cnst.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED -#ifdef DUMPS_ENABLED +//#endif // IVAS_FLOAT_FIXED +//#ifdef DUMPS_ENABLED #include "debug.h" -#endif // DUMPS_ENABLED +//#endif // DUMPS_ENABLED /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 007074796..ea3177d30 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -44,13 +44,13 @@ #include #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED -#ifdef DUMPS_ENABLED +//#endif +//#ifdef DUMPS_ENABLED #include "debug.h" -#endif // DUMPS_ENABLED +//#endif /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index 09fc9f2fd..75175699c 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -45,9 +45,9 @@ #include "ivas_rom_com_fx.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index 9177bf69c..dc97335f4 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -38,10 +38,10 @@ #include "ivas_prot.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* diff --git a/lib_dec/swb_bwe_dec.c b/lib_dec/swb_bwe_dec.c index a1b61cdc6..64c5ed90c 100644 --- a/lib_dec/swb_bwe_dec.c +++ b/lib_dec/swb_bwe_dec.c @@ -45,8 +45,6 @@ #include "basop_proto_func.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED -#endif // IVAS_FLOAT_FIXED #ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index 1332bec60..8051a93b5 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -40,9 +40,9 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * swb_bwe_dec_hr() diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index f3456310a..93ef3e61e 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -43,10 +43,10 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*******************************************************/ diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index 6719ae1d7..24599558b 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -39,10 +39,10 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_masa_merge.c b/lib_rend/ivas_masa_merge.c index 8652e2c71..6cbe27d28 100644 --- a/lib_rend/ivas_masa_merge.c +++ b/lib_rend/ivas_masa_merge.c @@ -38,10 +38,10 @@ #include "ivas_cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_mcmasa_ana.c b/lib_rend/ivas_mcmasa_ana.c index 8149ee639..9389c66b2 100644 --- a/lib_rend/ivas_mcmasa_ana.c +++ b/lib_rend/ivas_mcmasa_ana.c @@ -42,10 +42,10 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * Local constants diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 997477c5d..496efca37 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -40,9 +40,9 @@ #include "ivas_rom_rend.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED #define IVAS_FLOAT_FIXED_TO_BE_REMOVED diff --git a/lib_rend/ivas_objectRenderer_sources.c b/lib_rend/ivas_objectRenderer_sources.c index 6fa37e77f..d90a5afa5 100644 --- a/lib_rend/ivas_objectRenderer_sources.c +++ b/lib_rend/ivas_objectRenderer_sources.c @@ -36,10 +36,10 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED +//#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_orient_trk.c b/lib_rend/ivas_orient_trk.c index 6f308742c..88a8b35f4 100644 --- a/lib_rend/ivas_orient_trk.c +++ b/lib_rend/ivas_orient_trk.c @@ -39,9 +39,9 @@ #include #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED +//#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif +//#endif /*------------------------------------------------------------------------------------------* * Local constants -- GitLab From 54b49662314699d382110e63a3ef7e2d55b49442 Mon Sep 17 00:00:00 2001 From: Tommy Vaillancourt Date: Fri, 19 Jul 2024 11:38:52 -0400 Subject: [PATCH 05/77] more adaptation for wmc_tool --- lib_com/count.c | 3 +++ lib_com/enh1632.c | 3 +++ lib_com/enh32.c | 3 +++ lib_com/enh64.c | 3 +++ lib_com/enhUL32.c | 3 +++ lib_com/oper_32b.c | 3 +++ 6 files changed, 18 insertions(+) diff --git a/lib_com/count.c b/lib_com/count.c index 999229e3d..593ae38c5 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -49,6 +49,8 @@ #include "stl.h" #include +#define WMC_TOOL_SKIP + #ifdef WMOPS static double frameRate = FRAME_RATE; /* default value : 10 ms */ #endif /* ifdef WMOPS */ @@ -1378,3 +1380,4 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ) UNUSED_PARAM( avg ); } /* end of file */ +#undef WMC_TOOL_SKIP diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index d802dfed9..520459c21 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -56,6 +56,8 @@ #include #include "stl.h" +#define WMC_TOOL_SKIP + #if ( WMOPS ) extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; @@ -685,5 +687,6 @@ Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) return ( L_var_out ); } +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/enh32.c b/lib_com/enh32.c index 3fb1148fc..563b7f4a7 100644 --- a/lib_com/enh32.c +++ b/lib_com/enh32.c @@ -23,6 +23,8 @@ #include #include "enh32.h" +#define WMC_TOOL_SKIP + #if ( WMOPS ) extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; @@ -244,5 +246,6 @@ Word32 Msub_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 ) } #endif /* #ifdef ENH_32_BIT_OPERATOR */ +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/enh64.c b/lib_com/enh64.c index 99b8f4275..e70b8c9f0 100644 --- a/lib_com/enh64.c +++ b/lib_com/enh64.c @@ -18,6 +18,8 @@ #include #include "enh64.h" +#define WMC_TOOL_SKIP + #if ( WMOPS ) extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; @@ -1854,5 +1856,6 @@ Word32 W_round64_L( Word64 L64_var1 ) } #endif /* #ifdef ENH_64_BIT_OPERATOR */ +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/enhUL32.c b/lib_com/enhUL32.c index 0aa21b4fc..81a966159 100644 --- a/lib_com/enhUL32.c +++ b/lib_com/enhUL32.c @@ -27,6 +27,8 @@ #include "stl.h" #include "enhUL32.h" +#define WMC_TOOL_SKIP + #if ( WMOPS ) extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; @@ -417,5 +419,6 @@ UWord32 UL_addNsD( UWord32 UL_var1, UWord32 UL_var2 ) #endif #endif /* ENH_U_32_BIT_OPERATOR */ +#undef WMC_TOOL_SKIP /* end of file */ diff --git a/lib_com/oper_32b.c b/lib_com/oper_32b.c index 9f1ce2157..30b97811b 100644 --- a/lib_com/oper_32b.c +++ b/lib_com/oper_32b.c @@ -25,6 +25,8 @@ #include "stl.h" #include "basop32.h" +#define WMC_TOOL_SKIP + /***************************************************************************** * * * Function L_Extract() * @@ -407,3 +409,4 @@ Word32 Div_32( Word32 L_num, Word16 denom_hi, Word16 denom_lo ) #endif return ( L_32 ); } +#undef WMC_TOOL_SKIP -- GitLab From 02ab924213b71a27bf4593fe643f7918f749bbe7 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 13:52:42 +0200 Subject: [PATCH 06/77] rename NS2SA_fx2 to NS2SA_FX2 in order to be recognized as local macro by the WMC tool --- lib_com/cnst.h | 2 +- lib_com/core_com_config.c | 10 ++--- lib_com/ivas_lfe_com.c | 2 +- lib_com/tcx_ltp_fx.c | 2 +- lib_dec/FEC_HQ_phase_ecu_fx.c | 2 +- lib_dec/acelp_core_switch_dec_fx.c | 4 +- lib_dec/amr_wb_dec_fx.c | 14 +++---- lib_dec/core_dec_init_fx.c | 10 ++--- lib_dec/core_switching_dec_fx.c | 6 +-- lib_dec/dec_LPD_fx.c | 4 +- lib_dec/dec_tcx_fx.c | 2 +- lib_dec/evs_dec_fx.c | 42 ++++++++++---------- lib_dec/hq_core_dec_fx.c | 4 +- lib_dec/init_dec_fx.c | 14 +++---- lib_dec/ivas_agc_dec_fx.c | 2 +- lib_dec/ivas_core_dec.c | 4 +- lib_dec/ivas_cpe_dec_fx.c | 20 +++++----- lib_dec/ivas_jbm_dec.c | 20 +++++----- lib_dec/ivas_lfe_dec_fx.c | 2 +- lib_dec/ivas_mc_paramupmix_dec.c | 4 +- lib_dec/ivas_post_proc.c | 6 +-- lib_dec/ivas_sba_dec.c | 2 +- lib_dec/ivas_sba_dirac_stereo_dec_fx.c | 16 ++++---- lib_dec/ivas_sce_dec_fx.c | 6 +-- lib_dec/ivas_spar_decoder.c | 6 +-- lib_dec/ivas_stereo_mdct_stereo_dec.c | 2 +- lib_dec/ivas_tcx_core_dec.c | 4 +- lib_dec/lib_dec_fx.c | 4 +- lib_dec/updt_dec_fx.c | 6 +-- lib_enc/acelp_core_switch_enc_fx.c | 2 +- lib_enc/amr_wb_enc_fx.c | 4 +- lib_enc/cod_tcx_fx.c | 2 +- lib_enc/core_enc_init_fx.c | 4 +- lib_enc/core_switching_enc_fx.c | 4 +- lib_enc/evs_enc_fx.c | 2 +- lib_enc/init_enc.c | 4 +- lib_enc/init_enc_fx.c | 4 +- lib_enc/ivas_agc_enc.c | 2 +- lib_enc/pre_proc_fx.c | 10 ++--- lib_enc/swb_pre_proc_fx.c | 10 ++--- lib_rend/ivas_dirac_dec_binaural_functions.c | 6 +-- 41 files changed, 138 insertions(+), 138 deletions(-) diff --git a/lib_com/cnst.h b/lib_com/cnst.h index 4bcab73ec..31042789c 100644 --- a/lib_com/cnst.h +++ b/lib_com/cnst.h @@ -3040,7 +3040,7 @@ extern const Word16 Idx2Freq_Tbl[]; /* 'x' is converted to Q6, 'Freq_Tbl'/1000 in Q9 */ /* only works for 'fs' = [8000,12800,16000,25600,32000,48000] (unpredictable otherwise) */ /* 15625 is 1000000.0f/Q6 but we use the calculated value to avoid float point code */ -#define NS2SA_fx2(fs,x) (chk_fs(fs) mult((&Idx2Freq_Tbl[-2])[L_and(L_shr(fs,8),7)], (Word16)((x)/15625))) +#define NS2SA_FX2(fs,x) (chk_fs(fs) mult((&Idx2Freq_Tbl[-2])[L_and(L_shr(fs,8),7)], (Word16)((x)/15625))) #define L_FRAME_12k8 256 /* Frame size at 12k8Hz: 20ms = 256 samples */ #define L_FRAME_16k 320 /* Frame size at 16kHz: 20ms = 320 samples */ diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index 25352bbe7..293f5b5b7 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -1446,13 +1446,13 @@ void init_tcx_window_cfg_fx( /*ALDO windows for MODE2*/ mdct_window_aldo( hTcxCfg->tcx_aldo_window_1, hTcxCfg->tcx_aldo_window_1_trunc, hTcxCfg->tcx_aldo_window_2, L_frame ); - mdct_window_aldo( hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, NS2SA_fx2( input_Fs, FRAME_SIZE_NS ) ); + mdct_window_aldo( hTcxCfg->tcx_aldo_window_1_FB, hTcxCfg->tcx_aldo_window_1_FB_trunc, hTcxCfg->tcx_aldo_window_2_FB, NS2SA_FX2( input_Fs, FRAME_SIZE_NS ) ); /*1.25ms transition window for ACELP->TCX*/ - hTcxCfg->tcx_mdct_window_trans_length = NS2SA_fx2( sr_core, ACELP_TCX_TRANS_NS ); + hTcxCfg->tcx_mdct_window_trans_length = NS2SA_FX2( sr_core, ACELP_TCX_TRANS_NS ); move16(); mdct_window_sine_IVAS_updated( hTcxCfg->tcx_mdct_window_trans, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); - hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA_fx2( input_Fs, ACELP_TCX_TRANS_NS ); + hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA_FX2( input_Fs, ACELP_TCX_TRANS_NS ); move16(); IF( EQ_16( hTcxCfg->tcx_mdct_window_trans_length, hTcxCfg->tcx_mdct_window_trans_lengthFB ) ) { @@ -1464,8 +1464,8 @@ void init_tcx_window_cfg_fx( } /*Mid-OLA*/ /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ - hTcxCfg->tcx_mdct_window_half_length = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( sr_core ) ), LD_FSCALE_DENOM ) ); - hTcxCfg->tcx_mdct_window_half_lengthFB = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_fx2( 12800, 5000000L ), sr2fscale( input_Fs ) ), LD_FSCALE_DENOM ) ); + hTcxCfg->tcx_mdct_window_half_length = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_FX2( 12800, 5000000L ), sr2fscale( sr_core ) ), LD_FSCALE_DENOM ) ); + hTcxCfg->tcx_mdct_window_half_lengthFB = extract_l( L_shr( L_mult0( L_LOOK_12k8 - NS2SA_FX2( 12800, 5000000L ), sr2fscale( input_Fs ) ), LD_FSCALE_DENOM ) ); move16(); move16(); assert( GT_16( hTcxCfg->tcx_mdct_window_half_length, 16 ) && "Half window can not be large enough!" ); diff --git a/lib_com/ivas_lfe_com.c b/lib_com/ivas_lfe_com.c index 7fdfe40fa..95797ef84 100644 --- a/lib_com/ivas_lfe_com.c +++ b/lib_com/ivas_lfe_com.c @@ -192,7 +192,7 @@ void ivas_lfe_window_init_fx( move16(); /* 8ms of latency */ - hLFEWindow->fade_len = NS2SA_fx2( sampling_rate, IVAS_LFE_FADE_NS ); + hLFEWindow->fade_len = NS2SA_FX2( sampling_rate, IVAS_LFE_FADE_NS ); hLFEWindow->zero_pad_len = ( mult( IVAS_ZERO_PAD_LEN_MULT_FAC_fx, sub( hLFEWindow->dct_len, hLFEWindow->fade_len ) ) ); hLFEWindow->full_len = add( add( hLFEWindow->zero_pad_len, hLFEWindow->fade_len ), hLFEWindow->dct_len ); move16(); diff --git a/lib_com/tcx_ltp_fx.c b/lib_com/tcx_ltp_fx.c index 9d18d4841..fb5a8e27d 100644 --- a/lib_com/tcx_ltp_fx.c +++ b/lib_com/tcx_ltp_fx.c @@ -1704,7 +1704,7 @@ void tcx_ltp_post32( filtIdx = 0; /* just to avoid comilation warnings */ move16(); - tcx_buf_len = NS2SA_fx2( st->output_Fs, TCXLTP_DELAY_NS ); + tcx_buf_len = NS2SA_FX2( st->output_Fs, TCXLTP_DELAY_NS ); move16(); SideInfoOnly = 0; move16(); diff --git a/lib_dec/FEC_HQ_phase_ecu_fx.c b/lib_dec/FEC_HQ_phase_ecu_fx.c index 972e7f4f8..d31fa5a7f 100644 --- a/lib_dec/FEC_HQ_phase_ecu_fx.c +++ b/lib_dec/FEC_HQ_phase_ecu_fx.c @@ -3279,7 +3279,7 @@ static void rec_wtda_fx( p_ecu++; } - timesh = NS2SA_fx2( fs, 10000000L - PH_ECU_ALDO_OLP2_NS ); + timesh = NS2SA_FX2( fs, 10000000L - PH_ECU_ALDO_OLP2_NS ); move16(); set16_fx( rec_buf, 0, output_frame ); diff --git a/lib_dec/acelp_core_switch_dec_fx.c b/lib_dec/acelp_core_switch_dec_fx.c index d2a81d11b..7877c8519 100644 --- a/lib_dec/acelp_core_switch_dec_fx.c +++ b/lib_dec/acelp_core_switch_dec_fx.c @@ -316,10 +316,10 @@ ivas_error acelp_core_switch_dec_fx( move16(); } - i = NS2SA_fx2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ); + i = NS2SA_FX2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ); move16(); Copy( st_fx->old_synth_sw_fx, hb_synth_tmp, i ); - set16_fx( hb_synth_tmp + i, 0, NS2SA_fx2( st_fx->output_Fs, 10000000L ) - i ); + set16_fx( hb_synth_tmp + i, 0, NS2SA_FX2( st_fx->output_Fs, 10000000L ) - i ); fir_fx( hb_synth_tmp, hp_filter, hb_synth_tmp, tmp_mem2, shr( output_frame, 1 ), fdelay, 1, 0 ); set16_fx( tmp_synth_bwe, 0, SWITCH_MAX_GAP ); diff --git a/lib_dec/amr_wb_dec_fx.c b/lib_dec/amr_wb_dec_fx.c index b5d194c6d..132322c06 100644 --- a/lib_dec/amr_wb_dec_fx.c +++ b/lib_dec/amr_wb_dec_fx.c @@ -1014,7 +1014,7 @@ ivas_error amr_wb_dec_fx( } } - delay_comp = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); Scale_sig( st_fx->delay_buf_out_fx, delay_comp, sub( st_fx->Q_syn2, hHQ_core->Q_old_postdec ) ); hHQ_core->Q_old_postdec = st_fx->Q_syn2; move16(); @@ -1030,8 +1030,8 @@ ivas_error amr_wb_dec_fx( i = 15; move16(); - tmps = NS2SA_fx2( st_fx->output_Fs, 6000000L ); - nz = NS2SA_fx2( st_fx->output_Fs, N_ZERO_MDCT_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, 6000000L ); + nz = NS2SA_FX2( st_fx->output_Fs, N_ZERO_MDCT_NS ); step = Inv16( tmps, &i ); step = shl( step, i ); alpha = 0; @@ -1063,7 +1063,7 @@ ivas_error amr_wb_dec_fx( /* Delay ACELP synthesis by DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS delay */ IF( GE_16( output_frame, L_FRAME16k ) ) { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); Scale_sig( st_fx->prev_synth_buffer_fx, tmps, sub( st_fx->Q_syn2, st_fx->Qprev_synth_buffer_fx ) ); delay_signal( synth_out_fx, output_frame, st_fx->prev_synth_buffer_fx, tmps ); } @@ -1074,7 +1074,7 @@ ivas_error amr_wb_dec_fx( move16(); IF( GE_16( output_frame, L_FRAME16k ) ) { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); move16(); } @@ -1090,11 +1090,11 @@ ivas_error amr_wb_dec_fx( hp20( synth_out_fx, 1 /*stride*/, output_frame, st_fx->L_mem_hp_out_fx, L_mult0( output_frame, 50 ) ); /* save synthesis for core switching */ - Copy_Scale_sig( synth_out_fx + NS2SA_fx2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_fx2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), sub( hHQ_core->Q_old_postdec, st_fx->Q_syn2 ) ); + Copy_Scale_sig( synth_out_fx + NS2SA_FX2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_FX2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), sub( hHQ_core->Q_old_postdec, st_fx->Q_syn2 ) ); { /* TCX-LTP Postfilter: used in AMR-WB IO to update memories and to avoid discontinuities when the past frame was TCX */ - Word16 delta = NS2SA_fx2( st_fx->output_Fs, TCXLTP_DELAY_NS ); + Word16 delta = NS2SA_FX2( st_fx->output_Fs, TCXLTP_DELAY_NS ); move16(); Scale_sig( hTcxLtpDec->tcxltp_mem_in, delta, sub( st_fx->Q_syn2, st_fx->Qprev_synth_buffer_fx ) ); Scale_sig( hTcxLtpDec->tcxltp_mem_out, output_frame, sub( st_fx->Q_syn2, st_fx->Qprev_synth_buffer_fx ) ); diff --git a/lib_dec/core_dec_init_fx.c b/lib_dec/core_dec_init_fx.c index 960ef827d..bcee30766 100644 --- a/lib_dec/core_dec_init_fx.c +++ b/lib_dec/core_dec_init_fx.c @@ -450,9 +450,9 @@ void open_decoder_LPD_fx( W2 = shr( st->hTcxCfg->tcx_mdct_window_lengthFB, 1 ); w = st->hTcxCfg->tcx_mdct_windowFB; /*pointer - no need to instrument*/ - nz = NS2SA_fx2( st->output_Fs, N_ZERO_MDCT_NS ); + nz = NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ); move16(); - delay_comp = NS2SA_fx2( st->output_Fs, DELAY_CLDFB_NS ); /*CLDFB delay*/ + delay_comp = NS2SA_FX2( st->output_Fs, DELAY_CLDFB_NS ); /*CLDFB delay*/ move16(); Copy( hHQ_core->fer_samples_fx + delay_comp, hTcxDec->syn_OverlFB, shr( hTcxDec->L_frameTCX, 1 ) ); @@ -480,7 +480,7 @@ void open_decoder_LPD_fx( lerp( hHQ_core->old_out_fx, hHQ_core->old_out_LB_fx, st->L_frame, hTcxDec->L_frameTCX ); Copy( hHQ_core->old_out_fx + nz, hTcxDec->syn_Overl_TDACFB, shr( hTcxDec->L_frameTCX, 1 ) ); - nz = NS2SA_fx2( st->sr_core, N_ZERO_MDCT_NS ); + nz = NS2SA_FX2( st->sr_core, N_ZERO_MDCT_NS ); move16(); Copy( hHQ_core->old_out_LB_fx + nz, hTcxDec->syn_Overl_TDAC, shr( st->L_frame, 1 ) ); hHQ_core->Q_old_wtda_LB = hHQ_core->Q_old_wtda; @@ -1170,9 +1170,9 @@ void acelp_plc_mdct_transition_fx( W2 = shr( st->hTcxCfg->tcx_mdct_window_lengthFB, 1 ); w = st->hTcxCfg->tcx_mdct_windowFB; /*pointer - no need to instrument*/ - nz = NS2SA_fx2( st->output_Fs, N_ZERO_MDCT_NS ); + nz = NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ); move16(); - delay_comp = NS2SA_fx2( st->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st->output_Fs, DELAY_CLDFB_NS ); move16(); /*CLDFB delay*/ Copy( st->hHQ_core->fer_samples_fx + delay_comp, st->hTcxDec->syn_OverlFB, shr( st->hTcxDec->L_frameTCX, 1 ) ); diff --git a/lib_dec/core_switching_dec_fx.c b/lib_dec/core_switching_dec_fx.c index b6f6f7276..a0e74feb6 100644 --- a/lib_dec/core_switching_dec_fx.c +++ b/lib_dec/core_switching_dec_fx.c @@ -542,11 +542,11 @@ ivas_error core_switching_pre_dec_fx( /* reset old HB synthesis buffer */ IF( EQ_16( st_fx->last_L_frame, L_FRAME ) ) { - st_fx->old_bwe_delay = NS2SA_fx2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + st_fx->old_bwe_delay = NS2SA_FX2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); } ELSE { - st_fx->old_bwe_delay = NS2SA_fx2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + st_fx->old_bwe_delay = NS2SA_FX2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); } set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ); @@ -639,7 +639,7 @@ ivas_error core_switching_pre_dec_fx( move16(); } - delay_comp = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); IF( !st_fx->last_con_tcx && st_fx->last_core_bfi == ACELP_CORE && EQ_16( st_fx->core, HQ_CORE ) ) { diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 3b840fc5e..c870b04a0 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -894,9 +894,9 @@ void decoder_LPD_fx( /* Update */ Copy( synth_buf + L_frame, hTcxDec->old_synth, hTcxDec->old_synth_len ); - Copy( hTcxDec->old_synthFB_fx + L_frameTCX - NS2SA_fx2( st->output_Fs, PH_ECU_MEM_NS ), hTcxDec->synth_history_fx, NS2SA_fx2( st->output_Fs, PH_ECU_MEM_NS ) ); + Copy( hTcxDec->old_synthFB_fx + L_frameTCX - NS2SA_FX2( st->output_Fs, PH_ECU_MEM_NS ), hTcxDec->synth_history_fx, NS2SA_FX2( st->output_Fs, PH_ECU_MEM_NS ) ); Copy( synth_bufFB + L_frameTCX, hTcxDec->old_synthFB_fx, hTcxDec->old_synth_lenFB ); - Copy_Scale_sig( st->hHQ_core->old_out_fx + NS2SA_fx2( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + hTcxDec->old_synth_lenFB, NS2SA_fx2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( st->hHQ_core->Q_old_wtda ) ); + Copy_Scale_sig( st->hHQ_core->old_out_fx + NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + hTcxDec->old_synth_lenFB, NS2SA_FX2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( st->hHQ_core->Q_old_wtda ) ); Copy( &xspnew_uw[imult1616( sub( st->numlpc, 1 ), M )], st->lspold_uw, M ); Copy( &xsfnew_uw[imult1616( sub( st->numlpc, 1 ), M )], st->lsfold_uw, M ); diff --git a/lib_dec/dec_tcx_fx.c b/lib_dec/dec_tcx_fx.c index 064ae2849..4c22ab756 100644 --- a/lib_dec/dec_tcx_fx.c +++ b/lib_dec/dec_tcx_fx.c @@ -2015,7 +2015,7 @@ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_T { tmp32 = L_add( st->output_Fs, 0 ); } - nz = NS2SA_fx2( tmp32, N_ZERO_MDCT_NS ); + nz = NS2SA_FX2( tmp32, N_ZERO_MDCT_NS ); tmp_offset = 0; move16(); diff --git a/lib_dec/evs_dec_fx.c b/lib_dec/evs_dec_fx.c index ee9bc103c..ba94c988a 100644 --- a/lib_dec/evs_dec_fx.c +++ b/lib_dec/evs_dec_fx.c @@ -532,7 +532,7 @@ ivas_error evs_dec_fx( IF( GE_16( output_frame, L_FRAME16k ) ) { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); exp = s_min( Qpostd, st_fx->Qprev_synth_buffer_fx ); Scale_sig( synth_fx, output_frame, sub( exp, Qpostd ) ); @@ -570,7 +570,7 @@ ivas_error evs_dec_fx( move16(); IF( GE_16( output_frame, L_FRAME16k ) ) { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); } waveform_adj2_fix( st_fx->tonalMDCTconceal.secondLastPcmOut, @@ -602,7 +602,7 @@ ivas_error evs_dec_fx( IF( EQ_16( st_fx->L_frame, L_FRAME ) ) { /* TBE on top of ACELP@12.8kHz */ - tmps = NS2SA_fx2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); } ELSE { @@ -610,12 +610,12 @@ ivas_error evs_dec_fx( IF( EQ_16( st_fx->extl, SWB_BWE_HIGHRATE ) || EQ_16( st_fx->extl, FB_BWE_HIGHRATE ) ) { /* HR SWB BWE on top of ACELP@16kHz */ - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); } ELSE { /* TBE on top of ACELP@16kHz */ - tmps = NS2SA_fx2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); } } @@ -766,7 +766,7 @@ ivas_error evs_dec_fx( move16(); /* TCX-LTP Postfilter: used in MODE1 to update memories and to avoid discontinuities when the past frame was TCX */ - delta = NS2SA_fx2( st_fx->output_Fs, TCXLTP_DELAY_NS ); + delta = NS2SA_FX2( st_fx->output_Fs, TCXLTP_DELAY_NS ); Scale_sig( hTcxLtpDec->tcxltp_mem_in, delta, sub( Qpostd, Qpostd_prev ) ); Scale_sig( hTcxLtpDec->tcxltp_mem_out, output_frame, sub( Qpostd, Qpostd_prev ) ); tcx_ltp_post( st_fx, hTcxLtpDec, ACELP_CORE, output_frame, 0, synth_fx, NULL ); @@ -1175,11 +1175,11 @@ ivas_error evs_dec_fx( /*CLDFB output always in timeIn_e*/ /* MODE1 MDCT to ACELP 2 transition */ - delay_comp = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); Scale_sig( st_fx->delay_buf_out_fx, delay_comp, negate( hHQ_core->Q_old_postdec ) ); hHQ_core->Q_old_postdec = 0; move16(); - delay_tdbwe = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); + delay_tdbwe = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); IF( GE_16( output_frame, L_FRAME16k ) ) { Scale_sig( st_fx->prev_synth_buffer_fx, delay_tdbwe, sub( Qpostd, st_fx->Qprev_synth_buffer_fx ) ); @@ -1195,8 +1195,8 @@ ivas_error evs_dec_fx( i = 15; move16(); - tmps = NS2SA_fx2( st_fx->output_Fs, 3000000L ); - nz = NS2SA_fx2( st_fx->output_Fs, N_ZERO_MDCT_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, 3000000L ); + nz = NS2SA_FX2( st_fx->output_Fs, N_ZERO_MDCT_NS ); step = Inv16( tmps, &i ); step = shl( step, i ); alpha = 0; @@ -1308,13 +1308,13 @@ ivas_error evs_dec_fx( IF( EQ_32( st_fx->output_Fs, 8000 ) ) { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); } ELSE { - tmps = NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); + tmps = NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ); } - delta = NS2SA_fx2( st_fx->output_Fs, TCXLTP_DELAY_NS ); + delta = NS2SA_FX2( st_fx->output_Fs, TCXLTP_DELAY_NS ); test(); test(); @@ -1404,7 +1404,7 @@ ivas_error evs_dec_fx( Scale_sig( output_sp, output_frame, timeIn_e ); - tcx_ltp_post( st_fx, hTcxLtpDec, st_fx->core, output_frame /*hTcxDec->L_frameTCX*/, NS2SA_fx2( st_fx->output_Fs, ACELP_LOOK_NS ) + tmps, + tcx_ltp_post( st_fx, hTcxLtpDec, st_fx->core, output_frame /*hTcxDec->L_frameTCX*/, NS2SA_FX2( st_fx->output_Fs, ACELP_LOOK_NS ) + tmps, output_sp, hTcxDec->FBTCXdelayBuf ); Copy( output_sp, synth_fx, output_frame ); @@ -1415,11 +1415,11 @@ ivas_error evs_dec_fx( * Save synthesis for HQ FEC *----------------------------------------------------------------*/ // PMT("The code below could be move to save_synthesis_hq_fec") - post_hq_delay = NS2SA_fx2( st_fx->output_Fs, POST_HQ_DELAY_NS ); + post_hq_delay = NS2SA_FX2( st_fx->output_Fs, POST_HQ_DELAY_NS ); IF( EQ_16( st_fx->codec_mode, MODE1 ) ) { - Copy( hTcxDec->synth_history_fx + output_frame, hTcxDec->synth_history_fx, add( sub( output_frame, post_hq_delay ), NS2SA_fx2( st_fx->output_Fs, PH_ECU_MEM_NS ) ) ); + Copy( hTcxDec->synth_history_fx + output_frame, hTcxDec->synth_history_fx, add( sub( output_frame, post_hq_delay ), NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS ) ) ); Copy_Scale_sig( synth_fx, hTcxDec->old_synthFB_fx + sub( output_frame, post_hq_delay ), output_frame, negate( Qpostd ) ); /* output_sp not initialized yet */ /* reset the remaining buffer, which is read in TCX concealment the necessary samples to fill this buffer are not available for all cases, the impact on the output is limited */ @@ -1427,20 +1427,20 @@ ivas_error evs_dec_fx( IF( GE_16( output_frame, L_FRAME16k ) ) { - Copy_Scale_sig( st_fx->prev_synth_buffer_fx, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ) ), NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), negate( st_fx->Qprev_synth_buffer_fx ) ); + Copy_Scale_sig( st_fx->prev_synth_buffer_fx, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ) ), NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), negate( st_fx->Qprev_synth_buffer_fx ) ); } IF( NE_16( st_fx->core, ACELP_CORE ) ) { IF( GE_16( output_frame, L_FRAME16k ) ) { - Copy_Scale_sig( synth_fx + output_frame, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ) ), NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ), negate( Qpostd ) ); - Copy_Scale_sig( hHQ_core->old_out_fx + NS2SA_fx2( st_fx->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + shl( output_frame, 1 ), NS2SA_fx2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( hHQ_core->Q_old_wtda ) ); + Copy_Scale_sig( synth_fx + output_frame, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ) ), NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ), negate( Qpostd ) ); + Copy_Scale_sig( hHQ_core->old_out_fx + NS2SA_FX2( st_fx->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + shl( output_frame, 1 ), NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( hHQ_core->Q_old_wtda ) ); } ELSE { - Copy_Scale_sig( synth_fx + output_frame, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ) ), NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ), negate( Qpostd ) ); - Copy_Scale_sig( hHQ_core->old_out_fx + NS2SA_fx2( st_fx->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + shl( output_frame, 1 ) - NS2SA_fx2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA_fx2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( hHQ_core->Q_old_wtda ) ); + Copy_Scale_sig( synth_fx + output_frame, hTcxDec->old_synthFB_fx + sub( shl( output_frame, 1 ), NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS ) ), NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ), negate( Qpostd ) ); + Copy_Scale_sig( hHQ_core->old_out_fx + NS2SA_FX2( st_fx->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + shl( output_frame, 1 ) - NS2SA_FX2( st_fx->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ), negate( hHQ_core->Q_old_wtda ) ); } } } diff --git a/lib_dec/hq_core_dec_fx.c b/lib_dec/hq_core_dec_fx.c index d629365f3..a71f37895 100644 --- a/lib_dec/hq_core_dec_fx.c +++ b/lib_dec/hq_core_dec_fx.c @@ -196,7 +196,7 @@ void hq_core_dec_fx( IF( GE_16( output_frame, L_FRAME16k ) ) { /* keep st->previoussynth updated as in FEC_HQ_pitch_analysis but no LP analysis */ - delay_comp = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); Copy( st_fx->previoussynth_fx + delay_comp, st_fx->previoussynth_fx, sub( output_frame, delay_comp ) ); Copy( st_fx->delay_buf_out_fx, st_fx->previoussynth_fx + output_frame - delay_comp, delay_comp ); @@ -781,7 +781,7 @@ void ivas_hq_core_dec_fx( IF( GE_16( output_frame, L_FRAME16k ) ) { /* keep st->previoussynth updated as in FEC_HQ_pitch_analysis but no LP analysis */ - delay_comp = NS2SA_fx2( st_fx->output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( st_fx->output_Fs, DELAY_CLDFB_NS ); Copy( st_fx->previoussynth_fx + delay_comp, st_fx->previoussynth_fx, sub( output_frame, delay_comp ) ); Copy( st_fx->delay_buf_out_fx, st_fx->previoussynth_fx + output_frame - delay_comp, delay_comp ); diff --git a/lib_dec/init_dec_fx.c b/lib_dec/init_dec_fx.c index 05cda5a46..6169bba77 100644 --- a/lib_dec/init_dec_fx.c +++ b/lib_dec/init_dec_fx.c @@ -528,8 +528,8 @@ ivas_error init_decoder_fx( st_fx->tilt_wb_fx = 0; move16(); - set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_fx2( 48000, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); - set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_fx2( 48000, DELAY_BWE_TOTAL_NS ) ); + set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) ); st_fx->old_bwe_delay = -1; /*Q0*/ move16(); @@ -1091,10 +1091,10 @@ ivas_error init_decoder_ivas_fx( st_fx->last_voice_factor_fx = 0; move16(); - set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); + set16_fx( st_fx->prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); st_fx->Qprev_synth_buffer_fx = 15; move16(); - set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); + set32_fx( st_fx->prev_synth_buffer32_fx, 0, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); st_fx->old_bfi_cnt = 0; move16(); @@ -1325,7 +1325,7 @@ ivas_error init_decoder_ivas_fx( st_fx->old_bwe_delay = -1; /*Q0*/ move16(); - set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_fx2( 48000, DELAY_BWE_TOTAL_NS ) ); + set16_fx( st_fx->hb_prev_synth_buffer_fx, 0, NS2SA_FX2( 48000, DELAY_BWE_TOTAL_NS ) ); /*-----------------------------------------------------------------* * SWB BWE parameters @@ -1592,8 +1592,8 @@ ivas_error init_decoder_ivas_fx( set32_fx( st_fx->hTcxDec->FBTCXdelayBuf_32, 0, 111 ); - st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_fx2( st_fx->output_Fs, PH_ECU_MEM_NS ); - st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_fx2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ); + st_fx->hTcxDec->old_synthFB_fx = st_fx->hTcxDec->synth_history_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_MEM_NS ); + st_fx->hTcxDec->prev_good_synth_fx = st_fx->hTcxDec->old_synthFB_fx + NS2SA_FX2( st_fx->output_Fs, PH_ECU_LOOKAHEAD_NS ); } ELSE { diff --git a/lib_dec/ivas_agc_dec_fx.c b/lib_dec/ivas_agc_dec_fx.c index 26aad59c1..bd01d2f04 100644 --- a/lib_dec/ivas_agc_dec_fx.c +++ b/lib_dec/ivas_agc_dec_fx.c @@ -108,7 +108,7 @@ ivas_error ivas_spar_agc_dec_open_fx( } output_frame = extract_l( Mpy_32_16_1( output_Fs, INV_FRAME_PER_SEC_Q15 ) ); - delay = NS2SA_fx2( output_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); + delay = NS2SA_FX2( output_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); move16(); IF( ( hAgc->agc_com.winFunc_fx = (Word16 *) malloc( sizeof( Word16 ) * ( output_frame - delay ) ) ) == NULL ) diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 346e9d1fa..84b5a9ca8 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -877,7 +877,7 @@ ivas_error ivas_core_dec_fx( IF( p_output_mem_fx != NULL ) { p_output_mem_16 = output_mem_16_fx; - Copy_Scale_sig_32_16( p_output_mem_fx, p_output_mem_16, NS2SA_fx2( output_Fs, STEREO_DFT32MS_OVL_NS ), negate( Q11 ) ); + Copy_Scale_sig_32_16( p_output_mem_fx, p_output_mem_16, NS2SA_FX2( output_Fs, STEREO_DFT32MS_OVL_NS ), negate( Q11 ) ); } ELSE { @@ -1271,7 +1271,7 @@ ivas_error ivas_core_dec_fx( test(); IF( EQ_16( st->core, ACELP_CORE ) && !st->bfi && st->prev_bfi && GE_32( st->last_total_brate, HQ_48k ) && EQ_16( st->last_codec_mode, MODE2 ) && ( EQ_16( st->last_core_bfi, TCX_20_CORE ) || EQ_16( st->last_core_bfi, TCX_10_CORE ) ) && EQ_16( st->hPlcInfo->concealment_method, TCX_NONTONAL ) && LT_16( st->hPlcInfo->nbLostCmpt, 4 ) ) { - tmps = NS2SA_fx2( output_Fs, DELAY_CLDFB_NS ); + tmps = NS2SA_FX2( output_Fs, DELAY_CLDFB_NS ); waveform_adj2_fix( st->hTonalMDCTConc->secondLastPcmOut, synth_16_fx[n] + tmps, st->plcInfo.data_noise, &st->plcInfo.outx_new_n1_fx, &st->plcInfo.nsapp_gain_fx, &st->plcInfo.nsapp_gain_n_fx, &st->plcInfo.recovery_gain, st->plcInfo.step_concealgain_fx, diff --git a/lib_dec/ivas_cpe_dec_fx.c b/lib_dec/ivas_cpe_dec_fx.c index 59969dba2..55821f895 100644 --- a/lib_dec/ivas_cpe_dec_fx.c +++ b/lib_dec/ivas_cpe_dec_fx.c @@ -758,7 +758,7 @@ ivas_error ivas_cpe_dec_fx( FOR( n = 0; n < hCPE->nchan_out; n++ ) { Scale_sig32( output[n], L_FRAME48k, sub( hCPE->hStereoDft->q_dft, Q11 ) ); - scale_sig32( hCPE->output_mem_fx[n], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); + scale_sig32( hCPE->output_mem_fx[n], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); hCPE->q_output_mem_fx[n] = hCPE->hStereoDft->q_dft; move16(); } @@ -773,7 +773,7 @@ ivas_error ivas_cpe_dec_fx( FOR( n = 0; n < hCPE->nchan_out; n++ ) { Scale_sig32( output[n], L_FRAME48k, sub( Q11, hCPE->hStereoDft->q_dft ) ); - scale_sig32( hCPE->output_mem_fx[n], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + scale_sig32( hCPE->output_mem_fx[n], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); hCPE->q_output_mem_fx[n] = Q11; move16(); } @@ -1001,8 +1001,8 @@ ivas_error create_cpe_dec( FOR( n = 0; n < CPE_CHANNELS; n++ ) { - set32_fx( hCPE->prev_hb_synth_fx[n], 0, NS2SA_fx2( output_Fs, L_sub( IVAS_DEC_DELAY_NS, DELAY_BWE_TOTAL_NS ) ) ); - set32_fx( hCPE->prev_synth_fx[n], 0, NS2SA_fx2( output_Fs, L_sub( IVAS_DEC_DELAY_NS, STEREO_DFT32MS_OVL_NS ) ) ); + set32_fx( hCPE->prev_hb_synth_fx[n], 0, NS2SA_FX2( output_Fs, L_sub( IVAS_DEC_DELAY_NS, DELAY_BWE_TOTAL_NS ) ) ); + set32_fx( hCPE->prev_synth_fx[n], 0, NS2SA_FX2( output_Fs, L_sub( IVAS_DEC_DELAY_NS, STEREO_DFT32MS_OVL_NS ) ) ); } hCPE->q_prev_synth_fx = 0; move16(); @@ -1023,11 +1023,11 @@ ivas_error create_cpe_dec( IF( EQ_16( (Word16) st_ivas->ivas_format, STEREO_FORMAT ) || EQ_16( (Word16) st_ivas->ivas_format, MASA_FORMAT ) || EQ_16( (Word16) st_ivas->ivas_format, MASA_ISM_FORMAT ) || ( EQ_16( (Word16) st_ivas->ivas_format, MC_FORMAT ) && EQ_16( (Word16) st_ivas->mc_mode, MC_MODE_MCMASA ) ) || st_ivas->sba_dirac_stereo_flag ) { - IF( ( hCPE->input_mem_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_fx2( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + IF( ( hCPE->input_mem_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_FX2( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } - set32_fx( hCPE->input_mem_fx[i], 0, NS2SA_fx2( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + set32_fx( hCPE->input_mem_fx[i], 0, NS2SA_FX2( output_Fs, STEREO_DFT32MS_OVL_NS ) ); IF( ( hCPE->input_mem_LB_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) { @@ -1044,20 +1044,20 @@ ivas_error create_cpe_dec( set32_fx( hCPE->input_mem_BPF_fx[0], 0, STEREO_DFT32MS_OVL_16k ); } - IF( ( hCPE->output_mem_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_fx2( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) + IF( ( hCPE->output_mem_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_FX2( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } - set32_fx( hCPE->output_mem_fx[i], 0, NS2SA_fx2( output_Fs, STEREO_DFT32MS_OVL_NS ) ); + set32_fx( hCPE->output_mem_fx[i], 0, NS2SA_FX2( output_Fs, STEREO_DFT32MS_OVL_NS ) ); hCPE->q_output_mem_fx[i] = Q11; move16(); IF( LT_16( i, hCPE->nchan_out ) ) { - IF( ( hCPE->prev_synth_chs_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_fx2( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) + IF( ( hCPE->prev_synth_chs_fx[i] = (Word32 *) malloc( sizeof( Word32 ) * NS2SA_FX2( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); } - set32_fx( hCPE->prev_synth_chs_fx[i], 0, NS2SA_fx2( output_Fs, FRAME_SIZE_NS ) ); + set32_fx( hCPE->prev_synth_chs_fx[i], 0, NS2SA_FX2( output_Fs, FRAME_SIZE_NS ) ); } ELSE { diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 42605102d..36f33fe25 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -471,7 +471,7 @@ ivas_error ivas_jbm_dec_tc_fx( st_ivas->hSpar->hMdDec->Q_mixer_mat = 30; FOR( Word16 ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); hCPE->q_output_mem_fx[ii] = hCPE->hStereoDft->q_dft; } #ifdef MSAN_FIX @@ -550,7 +550,7 @@ ivas_error ivas_jbm_dec_tc_fx( st_ivas->hSpar->hMdDec->Q_mixer_mat = 30; FOR( Word16 ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); hCPE->q_output_mem_fx[ii] = Q11; } } @@ -915,12 +915,12 @@ ivas_error ivas_jbm_dec_tc_fx( } FOR( Word16 ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); hCPE->q_output_mem_fx[ii] = hCPE->hStereoDft->q_dft; } #ifdef MSAN_FIX FOR( i = 0; i < CPE_CHANNELS; i++ ) - Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), hCPE->q_prev_synth_fx - 11 ); + Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), hCPE->q_prev_synth_fx - 11 ); #else Scale_sig32( &hCPE->prev_synth_fx[0][0], sizeof( hCPE->prev_synth_fx ) / sizeof( hCPE->prev_synth_fx[0][0] ), hCPE->q_prev_synth_fx - 11 ); #endif @@ -932,7 +932,7 @@ ivas_error ivas_jbm_dec_tc_fx( #ifdef MSAN_FIX FOR( i = 0; i < CPE_CHANNELS; i++ ) - Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), 11 - hCPE->q_prev_synth_fx ); + Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), 11 - hCPE->q_prev_synth_fx ); #else Scale_sig32( &hCPE->prev_synth_fx[0][0], sizeof( hCPE->prev_synth_fx ) / sizeof( hCPE->prev_synth_fx[0][0] ), 11 - hCPE->q_prev_synth_fx ); #endif @@ -959,7 +959,7 @@ ivas_error ivas_jbm_dec_tc_fx( st_ivas->hSpar->hMdDec->Q_mixer_mat = 30; FOR( int ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); hCPE->q_output_mem_fx[ii] = Q11; } } @@ -1320,12 +1320,12 @@ ivas_error ivas_jbm_dec_tc_fx( } FOR( Word16 ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( hCPE->hStereoDft->q_dft, Q11 ) ); hCPE->q_output_mem_fx[ii] = hCPE->hStereoDft->q_dft; } #ifdef MSAN_FIX FOR( i = 0; i < CPE_CHANNELS; i++ ) - Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), hCPE->q_prev_synth_fx - 11 ); + Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), hCPE->q_prev_synth_fx - 11 ); #else Scale_sig32( &hCPE->prev_synth_fx[0][0], sizeof( hCPE->prev_synth_fx ) / sizeof( hCPE->prev_synth_fx[0][0] ), hCPE->q_prev_synth_fx - 11 ); #endif @@ -1336,7 +1336,7 @@ ivas_error ivas_jbm_dec_tc_fx( } #ifdef MSAN_FIX FOR( i = 0; i < CPE_CHANNELS; i++ ) - Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), 11 - hCPE->q_prev_synth_fx ); + Scale_sig32( hCPE->prev_synth_fx[i], NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ), 11 - hCPE->q_prev_synth_fx ); #else Scale_sig32( &hCPE->prev_synth_fx[0][0], sizeof( hCPE->prev_synth_fx ) / sizeof( hCPE->prev_synth_fx[0][0] ), 11 - hCPE->q_prev_synth_fx ); #endif // MSAN_FIX @@ -1365,7 +1365,7 @@ ivas_error ivas_jbm_dec_tc_fx( move16(); FOR( Word16 ii = 0; ii < CPE_CHANNELS; ii++ ) { - scale_sig32( hCPE->output_mem_fx[ii], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + scale_sig32( hCPE->output_mem_fx[ii], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, STEREO_DFT32MS_OVL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); hCPE->q_output_mem_fx[ii] = Q11; move16(); } diff --git a/lib_dec/ivas_lfe_dec_fx.c b/lib_dec/ivas_lfe_dec_fx.c index 775535614..0b38566e1 100644 --- a/lib_dec/ivas_lfe_dec_fx.c +++ b/lib_dec/ivas_lfe_dec_fx.c @@ -470,7 +470,7 @@ ivas_error ivas_create_lfe_dec_fx( move16(); hLFE->lfe_block_delay_s_fx = add( hLFE->lfe_block_delay_s_fx, low_pass_delay_dec_out ); move16(); - hLFE->lfe_prior_buf_len = NS2SA_fx2( output_Fs, IVAS_LFE_FADE_NS ); + hLFE->lfe_prior_buf_len = NS2SA_FX2( output_Fs, IVAS_LFE_FADE_NS ); move16(); hLFE->bfi_count = 0; diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 246e81643..eebfc6af0 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -352,11 +352,11 @@ ivas_error ivas_mc_paramupmix_dec_open( FOR( i = 0; i < MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; i++ ) { - IF( ( hMCParamUpmix->pcm_delay_fx[i] = (Word32 *) malloc( NS2SA_fx2( output_Fs, IVAS_FB_DEC_DELAY_NS ) * sizeof( Word32 ) ) ) == NULL ) + IF( ( hMCParamUpmix->pcm_delay_fx[i] = (Word32 *) malloc( NS2SA_FX2( output_Fs, IVAS_FB_DEC_DELAY_NS ) * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for delay buffer\n" ) ); } - set32_fx( hMCParamUpmix->pcm_delay_fx[i], 0, NS2SA_fx2( output_Fs, IVAS_FB_DEC_DELAY_NS ) ); + set32_fx( hMCParamUpmix->pcm_delay_fx[i], 0, NS2SA_FX2( output_Fs, IVAS_FB_DEC_DELAY_NS ) ); } /* Head or external rotation */ diff --git a/lib_dec/ivas_post_proc.c b/lib_dec/ivas_post_proc.c index c2decb8c5..ed7cc13c4 100644 --- a/lib_dec/ivas_post_proc.c +++ b/lib_dec/ivas_post_proc.c @@ -198,7 +198,7 @@ void ivas_post_proc_fx( ELSE { /* set delay */ - delay_comp = NS2SA_fx2( output_Fs, DELAY_CLDFB_NS ); + delay_comp = NS2SA_FX2( output_Fs, DELAY_CLDFB_NS ); move16(); test(); @@ -212,12 +212,12 @@ void ivas_post_proc_fx( } ELSE IF( sba_dirac_stereo_flag && EQ_16( sts[n]->element_mode, IVAS_CPE_MDCT ) ) { - Word16 numZeros = (Word16) ( NS2SA_fx2( output_Fs, N_ZERO_MDCT_NS ) ); + Word16 numZeros = (Word16) ( NS2SA_FX2( output_Fs, N_ZERO_MDCT_NS ) ); move16(); Copy32( sts[n]->hHQ_core->oldOut_fx + numZeros, sts[n]->hTcxDec->FBTCXdelayBuf_32, delay_comp ); } - tcx_ltp_post32( sts[n], hTcxLtpDec, sts[n]->core, output_frame, add( NS2SA_fx2( output_Fs, ACELP_LOOK_NS ), delay_comp ), synth, sts[n]->hTcxDec->FBTCXdelayBuf_32 ); + tcx_ltp_post32( sts[n], hTcxLtpDec, sts[n]->core, output_frame, add( NS2SA_FX2( output_Fs, ACELP_LOOK_NS ), delay_comp ), synth, sts[n]->hTcxDec->FBTCXdelayBuf_32 ); } } } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 5bc296fbc..2288f9536 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -1801,7 +1801,7 @@ ivas_error ivas_sba_dec_render_fx( output_f_local_fx[ch] = output_fx[ch]; } - slot_size = NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); + slot_size = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); move16(); /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ diff --git a/lib_dec/ivas_sba_dirac_stereo_dec_fx.c b/lib_dec/ivas_sba_dirac_stereo_dec_fx.c index 16e93aeb6..d520b6568 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec_fx.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec_fx.c @@ -1244,16 +1244,16 @@ void ivas_sba_dirac_stereo_dec_fx( move16(); #ifdef MSAN_FIX - Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), negate( sub( Q11, hCPE->hStereoDft->q_dft ) ) ); + Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), negate( sub( Q11, hCPE->hStereoDft->q_dft ) ) ); #else - Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), -( Q11 - hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), -( Q11 - hCPE->hStereoDft->q_dft ) ); #endif IF( hSCE != NULL ) { #ifdef MSAN_FIX - Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), negate( sub( Q11, hCPE->hStereoDft->q_dft ) ) ); + Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), negate( sub( Q11, hCPE->hStereoDft->q_dft ) ) ); #else - Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), -( Q11 - hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), -( Q11 - hCPE->hStereoDft->q_dft ) ); #endif // MSAN_FIX hSCE->q_prev_hb_synth_fx = hCPE->hStereoDft->q_dft; move16(); @@ -1381,16 +1381,16 @@ void ivas_sba_dirac_stereo_dec_fx( } #ifdef MSAN_FIX - Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); #else - Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), ( Q11 - hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hCPE->prev_hb_synth_fx[0], NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), ( Q11 - hCPE->hStereoDft->q_dft ) ); #endif IF( hSCE != NULL ) { #ifdef MSAN_FIX - Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), sub( Q11, hCPE->hStereoDft->q_dft ) ); #else - Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_fx2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), ( Q11 - hCPE->hStereoDft->q_dft ) ); + Scale_sig32( hSCE->prev_hb_synth_fx, NS2SA_FX2( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ), ( Q11 - hCPE->hStereoDft->q_dft ) ); #endif // MSAN_FIX hSCE->q_prev_hb_synth_fx = Q11; move16(); diff --git a/lib_dec/ivas_sce_dec_fx.c b/lib_dec/ivas_sce_dec_fx.c index 8e1b5d140..f6d717dc7 100644 --- a/lib_dec/ivas_sce_dec_fx.c +++ b/lib_dec/ivas_sce_dec_fx.c @@ -320,13 +320,13 @@ ivas_error ivas_sce_dec_fx( * LB synthesis synchronization between IVAS formats *----------------------------------------------------------------*/ - delay_signal_fx( output[0], output_frame, st->prev_synth_buffer32_fx, NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); + delay_signal_fx( output[0], output_frame, st->prev_synth_buffer32_fx, NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); /*----------------------------------------------------------------* * HB synthesis synchronization between IVAS formats *----------------------------------------------------------------*/ - delay_signal_fx( outputHB[0], output_frame, hSCE->prev_hb_synth_fx, NS2SA_fx2( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + delay_signal_fx( outputHB[0], output_frame, hSCE->prev_hb_synth_fx, NS2SA_FX2( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); /*----------------------------------------------------------------* * output LB and HB mix @@ -390,7 +390,7 @@ ivas_error create_sce_dec( hSCE->element_brate = element_brate; move32(); - set32_fx( hSCE->prev_hb_synth_fx, 0, NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); + set32_fx( hSCE->prev_hb_synth_fx, 0, NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); /*-----------------------------------------------------------------* * Core Coder, 1 instance: allocate and initialize diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index ea3177d30..e2fe7cb4d 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -1162,9 +1162,9 @@ void ivas_spar_get_cldfb_gains_fx( num_cldfb_bands = cldfbAnaDec0->no_channels; move16(); - stride = NS2SA_fx2( output_Fs_fx, DELAY_CLDFB_NS ); - encfb_delay = NS2SA_fx2( output_Fs_fx, IVAS_FB_ENC_DELAY_NS ); - decfb_delay = NS2SA_fx2( output_Fs_fx, IVAS_FB_DEC_DELAY_NS ); + stride = NS2SA_FX2( output_Fs_fx, DELAY_CLDFB_NS ); + encfb_delay = NS2SA_FX2( output_Fs_fx, IVAS_FB_ENC_DELAY_NS ); + decfb_delay = NS2SA_FX2( output_Fs_fx, IVAS_FB_DEC_DELAY_NS ); cf_start = add( sub( hSpar->hFbMixer->cross_fade_start_offset, encfb_delay ), decfb_delay ); /* time domain after CLDFB synthesis*/ cf_end = add( sub( hSpar->hFbMixer->cross_fade_end_offset, encfb_delay ), decfb_delay ); diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index dc97335f4..f0104eaa1 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -1295,7 +1295,7 @@ void updateBuffersForDmxMdctStereo_fx( } delay_buf_out_len = i_mult( delta, HQ_DELAY_COMP ); - tcxltp_mem_in_len = NS2SA_fx2( sts[0]->output_Fs, TCXLTP_DELAY_NS ); + tcxltp_mem_in_len = NS2SA_FX2( sts[0]->output_Fs, TCXLTP_DELAY_NS ); move16(); assert( delay_buf_out_len > tcxltp_mem_in_len ); diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index 922f6e369..55464bd2c 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -814,9 +814,9 @@ void stereo_tcx_core_dec_fx( /* Update past buffers */ Copy_Scale_sig( synth_buf_fx + st->L_frame, hTcxDec->old_synth, hTcxDec->old_synth_len, 0 ); - Copy( hTcxDec->old_synthFB_fx + sub( hTcxDec->L_frameTCX, NS2SA_fx2( st->output_Fs, PH_ECU_MEM_NS ) ), hTcxDec->synth_history_fx, NS2SA_fx2( st->output_Fs, PH_ECU_MEM_NS ) ); + Copy( hTcxDec->old_synthFB_fx + sub( hTcxDec->L_frameTCX, NS2SA_FX2( st->output_Fs, PH_ECU_MEM_NS ) ), hTcxDec->synth_history_fx, NS2SA_FX2( st->output_Fs, PH_ECU_MEM_NS ) ); Copy( synth_bufFB_fx + hTcxDec->L_frameTCX, hTcxDec->old_synthFB_fx, hTcxDec->old_synth_lenFB ); - Copy( st->hHQ_core->old_out_fx + NS2SA_fx2( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + hTcxDec->old_synth_lenFB, NS2SA_fx2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); + Copy( st->hHQ_core->old_out_fx + NS2SA_FX2( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB_fx + hTcxDec->old_synth_lenFB, NS2SA_FX2( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); Copy( &lspnew_uw_fx[imult1616( sub( st->numlpc, 1 ), M )], st->lspold_uw, M ); Copy( &lsfnew_uw_fx[imult1616( sub( st->numlpc, 1 ), M )], st->lsfold_uw, M ); diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index c2b52ecd1..d258c26d8 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -2703,7 +2703,7 @@ ivas_error IVAS_DEC_GetDelay( } move32(); - nSamples[1] = NS2SA_fx2( hDecoderConfig->output_Fs, get_delay_fx( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0] ) ); + nSamples[1] = NS2SA_FX2( hDecoderConfig->output_Fs, get_delay_fx( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0] ) ); move16(); nSamples[2] = (Word16) W_round64_L( W_mult0_32_32( L_shl( st_ivas->binaural_latency_ns, 1 ), out_fs_fx ) ); move16(); @@ -2713,7 +2713,7 @@ ivas_error IVAS_DEC_GetDelay( IF( EQ_16( (Word16) st_ivas->ivas_format, MASA_FORMAT ) ) { /* note: in MASA, all delay is compensated at the decoder by default, so subtract the encoder delay for print-out */ - nSamples[1] = sub( nSamples[1], NS2SA_fx2( hDecoderConfig->output_Fs, IVAS_ENC_DELAY_NS ) ); + nSamples[1] = sub( nSamples[1], NS2SA_FX2( hDecoderConfig->output_Fs, IVAS_ENC_DELAY_NS ) ); move16(); } diff --git a/lib_dec/updt_dec_fx.c b/lib_dec/updt_dec_fx.c index 28de7cca5..1518fa50c 100644 --- a/lib_dec/updt_dec_fx.c +++ b/lib_dec/updt_dec_fx.c @@ -575,7 +575,7 @@ void updt_dec_common_fx( test(); IF( EQ_16( st_fx->element_mode, EVS_MONO ) && NE_16( st_fx->core, AMR_WB_CORE ) ) { - Copy_Scale_sig( synth + NS2SA_fx2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_fx2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), st_fx->hHQ_core->Q_old_postdec ); + Copy_Scale_sig( synth + NS2SA_FX2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_FX2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), st_fx->hHQ_core->Q_old_postdec ); } test(); test(); @@ -968,7 +968,7 @@ void ivas_updt_dec_common_fx( test(); IF( EQ_16( st_fx->element_mode, EVS_MONO ) && NE_16( st_fx->core, AMR_WB_CORE ) ) { - Copy_Scale_sig_32_16( synth + NS2SA_fx2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_fx2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), st_fx->hHQ_core->Q_old_postdec ); + Copy_Scale_sig_32_16( synth + NS2SA_FX2( st_fx->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st_fx->old_synth_sw_fx, NS2SA_FX2( st_fx->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ), st_fx->hHQ_core->Q_old_postdec ); } test(); test(); @@ -993,7 +993,7 @@ void ivas_updt_dec_common_fx( IF( st_fx->element_mode != EVS_MONO ) { Word16 q_div = sub( Q31, shl( Qpostd, 1 ) ); - Word16 output_frame = NS2SA_fx2( st_fx->output_Fs, FRAME_SIZE_NS ); + Word16 output_frame = NS2SA_FX2( st_fx->output_Fs, FRAME_SIZE_NS ); move16(); Word32 sum_val = sum_32_32_fx( synth, output_frame ); Word32 div_val = BASOP_Util_Divide3232_Scale( sum_val, output_frame, &q_div ); diff --git a/lib_enc/acelp_core_switch_enc_fx.c b/lib_enc/acelp_core_switch_enc_fx.c index f2558851b..9ab60f5d7 100644 --- a/lib_enc/acelp_core_switch_enc_fx.c +++ b/lib_enc/acelp_core_switch_enc_fx.c @@ -437,7 +437,7 @@ static void bwe_switch_enc_fx( Flag Overflow = 0; #endif hBstr = st_fx->hBstr; - L = NS2SA_fx2( st_fx->input_Fs, FRAME_SIZE_NS ); + L = NS2SA_FX2( st_fx->input_Fs, FRAME_SIZE_NS ); /* set multiplication factor according to the sampling rate */ tmp = extract_l( L_shr( st_fx->input_Fs, 14 ) ); diff --git a/lib_enc/amr_wb_enc_fx.c b/lib_enc/amr_wb_enc_fx.c index 8edf03a4c..4a3d44fe3 100644 --- a/lib_enc/amr_wb_enc_fx.c +++ b/lib_enc/amr_wb_enc_fx.c @@ -160,7 +160,7 @@ void amr_wb_enc_fx( *----------------------------------------------------------------*/ /* get delay to synchronize ACELP and MDCT frame */ - delay = NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + delay = NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); Copy( st->input_fx - delay, st->old_input_signal_fx, input_frame + delay ); @@ -451,7 +451,7 @@ void amr_wb_enc_fx( IF( EQ_32( st->input_Fs, 16000 ) ) { /* no resampling needed, only delay adjustement to account for the FIR resampling delay */ - tmps = NS2SA_fx2( 16000, DELAY_FIR_RESAMPL_NS ); + tmps = NS2SA_FX2( 16000, DELAY_FIR_RESAMPL_NS ); Copy_Scale_sig( &st->mem_decim16k_fx[tmps], new_inp_16k, tmps, -1 ); /* Input in Q0 -> Output in Q-1 to mimic the resampling filter */ Copy_Scale_sig( st->input_fx, new_inp_16k + tmps, sub( input_frame, tmps ), -1 ); /* Input in Q0 -> Output in Q-1 to mimic the resampling filter */ Copy( st->input_fx + input_frame - shl( tmps, 1 ), st->mem_decim16k_fx, shl( tmps, 1 ) ); /* memory still in Q0 */ diff --git a/lib_enc/cod_tcx_fx.c b/lib_enc/cod_tcx_fx.c index 0b74d6de4..78d183f57 100644 --- a/lib_enc/cod_tcx_fx.c +++ b/lib_enc/cod_tcx_fx.c @@ -1201,7 +1201,7 @@ void QuantizeSpectrum_fx( move16(); aldo = 0; move16(); - nz = NS2SA_fx2( st->sr_core, N_ZERO_MDCT_NS ); + nz = NS2SA_FX2( st->sr_core, N_ZERO_MDCT_NS ); move16(); /* Modified the overlap to the delay in case of short blocks*/ tcx_offset = hTcxCfg->tcx_offset; diff --git a/lib_enc/core_enc_init_fx.c b/lib_enc/core_enc_init_fx.c index b3b305673..a38b778a7 100644 --- a/lib_enc/core_enc_init_fx.c +++ b/lib_enc/core_enc_init_fx.c @@ -97,9 +97,9 @@ void init_coder_ace_plus_fx( } /* Core Lookahead */ - st->encoderLookahead_enc = NS2SA_fx2( st->sr_core, ACELP_LOOK_NS ); + st->encoderLookahead_enc = NS2SA_FX2( st->sr_core, ACELP_LOOK_NS ); move16(); - st->encoderLookahead_FB = NS2SA_fx2( st->input_Fs, ACELP_LOOK_NS ); + st->encoderLookahead_FB = NS2SA_FX2( st->input_Fs, ACELP_LOOK_NS ); move16(); IF( st->ini_frame == 0 ) diff --git a/lib_enc/core_switching_enc_fx.c b/lib_enc/core_switching_enc_fx.c index 4494f0104..fe470af2d 100644 --- a/lib_enc/core_switching_enc_fx.c +++ b/lib_enc/core_switching_enc_fx.c @@ -430,8 +430,8 @@ void core_switching_post_enc_fx( test(); IF( ( EQ_16( st_fx->last_core, ACELP_CORE ) || EQ_16( st_fx->last_core, AMR_WB_CORE ) ) && EQ_16( st_fx->element_mode, EVS_MONO ) ) /* core switching ==> CELP subframe encoding */ { - acelp_core_switch_enc_fx( st_fx, old_inp_12k8 + L_INP_MEM - NS2SA_fx2( INT_FS_FX, ACELP_LOOK_NS ), - old_inp_16k + L_INP_MEM - NS2SA_fx2( INT_FS_16k, ACELP_LOOK_NS ), A, Qshift, Q_new ); + acelp_core_switch_enc_fx( st_fx, old_inp_12k8 + L_INP_MEM - NS2SA_FX2( INT_FS_FX, ACELP_LOOK_NS ), + old_inp_16k + L_INP_MEM - NS2SA_FX2( INT_FS_16k, ACELP_LOOK_NS ), A, Qshift, Q_new ); } hBWE_TD->bwe_non_lin_prev_scale_fx = L_deposit_l( 0 ); diff --git a/lib_enc/evs_enc_fx.c b/lib_enc/evs_enc_fx.c index 92cb87000..40b1d7b56 100644 --- a/lib_enc/evs_enc_fx.c +++ b/lib_enc/evs_enc_fx.c @@ -137,7 +137,7 @@ ivas_error evs_enc_fx( *----------------------------------------------------------------*/ /* get delay to synchronize ACELP and MDCT frame */ - delay = NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + delay = NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); Copy( st->input_fx - delay, st->old_input_signal_fx, input_frame + delay ); diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 56144429e..bd39b693f 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -351,8 +351,8 @@ ivas_error init_encoder( if ( st->element_mode == EVS_MONO ) { #ifdef IVAS_FLOAT_FIXED - st->input_fx = st->input_buff_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + st->input_fx = st->input_buff_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); #endif // IVAS_FLOAT_FIXED st->input = st->input_buff + st->input_Fs / FRAMES_PER_SEC + NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); } diff --git a/lib_enc/init_enc_fx.c b/lib_enc/init_enc_fx.c index 7d1f55302..2316b4f89 100644 --- a/lib_enc/init_enc_fx.c +++ b/lib_enc/init_enc_fx.c @@ -746,7 +746,7 @@ ivas_error init_encoder_fx( st_fx->input_fx = st_fx->input_buff_fx + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ); set16_fx( st_fx->input_buff_fx + L_FRAME48k, 0, L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); - st_fx->old_input_signal_fx = st_fx->input_fx - add( NS2SA_fx2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), st_fx->input_frame_fx ); + st_fx->old_input_signal_fx = st_fx->input_fx - add( NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), st_fx->input_frame_fx ); st_fx->Energy_Old_fx = 0; @@ -907,7 +907,7 @@ ivas_error init_encoder_fx( init_coder_ace_plus_fx( st_fx, st_fx->last_total_brate, 0, -10 /*hack*/ ); // PMT("Transient detector init needs review, handle hTranDet is missing") InitTransientDetection_fx( extract_l( Mult_32_16( st_fx->input_Fs, 0x0290 ) ), - NS2SA_fx2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), + NS2SA_FX2( st_fx->input_Fs, DELAY_FIR_RESAMPL_NS ), &st_fx->transientDetection ); // reset_indices_enc_fx( st_fx->hBstr); diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index 8e7055410..2e4c17c83 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -398,7 +398,7 @@ ivas_error ivas_spar_agc_enc_open_fx( } input_frame = (Word16) Mpy_32_16_1( input_Fs, INV_FRAME_PER_SEC_Q15 ); - delay = NS2SA_fx2( input_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); + delay = NS2SA_FX2( input_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); if ( ( hAgc->agc_com.winFunc_fx = (Word16 *) malloc( sizeof( Word16 ) * ( input_frame - delay ) ) ) == NULL ) { diff --git a/lib_enc/pre_proc_fx.c b/lib_enc/pre_proc_fx.c index 421694532..e55f488df 100644 --- a/lib_enc/pre_proc_fx.c +++ b/lib_enc/pre_proc_fx.c @@ -672,7 +672,7 @@ void pre_proc_fx( } st->sr_core = L_mult0( FRAMES_PER_SEC, st->L_frame ); - st->encoderLookahead_enc = NS2SA_fx2( st->sr_core, ACELP_LOOK_NS ); + st->encoderLookahead_enc = NS2SA_FX2( st->sr_core, ACELP_LOOK_NS ); move16(); st->encoderPastSamples_enc = shr( imult1616( st->L_frame, 9 ), 4 ); } @@ -829,7 +829,7 @@ void pre_proc_fx( Mpy_32_16_ss( st->sr_core, 5243, &L_tmp, &lsb ); /* 5243 is 1/50 in Q18. (0+18-15=3) */ st->L_frame = extract_l( L_shr( L_tmp, 3 ) ); /* Q0 */ - st->encoderLookahead_enc = NS2SA_fx2( st->sr_core, ACELP_LOOK_NS ); + st->encoderLookahead_enc = NS2SA_FX2( st->sr_core, ACELP_LOOK_NS ); move16(); st->encoderPastSamples_enc = shr( imult1616( st->L_frame, 9 ), 4 ); assert( st->L_frame == st->sr_core / 50 ); @@ -995,7 +995,7 @@ void pre_proc_fx( L_frame_tmp = L_FRAME16k; move16(); } - L_look = NS2SA_fx2( sr_core_tmp, ACELP_LOOK_NS ); + L_look = NS2SA_FX2( sr_core_tmp, ACELP_LOOK_NS ); move16(); /* lookahead at other sampling rate (16kHz, 25.5kHz, 32kHz) */ new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ @@ -1010,7 +1010,7 @@ void pre_proc_fx( IF( EQ_32( st->input_Fs, sr_core_tmp ) ) { /* no resampling needed, only delay adjustement to account for the FIR resampling delay */ - delay = NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + delay = NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); Copy_Scale_sig( st->mem_decim16k_fx + delay, new_inp_16k, delay, -1 ); /* Input in Q0 -> Output in Q-1 to mimic the resampling filter */ Copy_Scale_sig( signal_in, new_inp_16k + delay, input_frame - delay, -1 ); /* Input in Q0 -> Output in Q-1 to mimic the resampling filter */ Copy( signal_in + input_frame - shl( delay, 1 ), st->mem_decim16k_fx, shl( delay, 1 ) ); /* memory still in Q0 */ @@ -1022,7 +1022,7 @@ void pre_proc_fx( ELSE /* keep memories up-to-date in case of bitrate switching */ { /* no resampling needed, only delay adjustement to account for the FIR resampling delay */ - delay = NS2SA_fx2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); + delay = NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); Copy( st->mem_decim16k_fx + delay, new_inp_16k, delay ); Copy( signal_in, new_inp_16k + delay, sub( input_frame, delay ) ); Copy( signal_in + sub( input_frame, shl( delay, 1 ) ), st->mem_decim16k_fx, shl( delay, 1 ) ); diff --git a/lib_enc/swb_pre_proc_fx.c b/lib_enc/swb_pre_proc_fx.c index 463f0a96a..dbd41484e 100644 --- a/lib_enc/swb_pre_proc_fx.c +++ b/lib_enc/swb_pre_proc_fx.c @@ -75,7 +75,7 @@ void wb_pre_proc_fx( move16(); } - set16_fx( old_input, 0, NS2SA_fx2( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k ); + set16_fx( old_input, 0, NS2SA_FX2( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k ); max_wb = 1; move16(); @@ -153,7 +153,7 @@ void wb_pre_proc_fx( test(); IF( ( NE_16( st_fx->extl, WB_BWE ) || ( EQ_16( st_fx->extl, WB_BWE ) && LE_32( st_fx->total_brate, ACELP_8k00 ) ) ) && !hSC_VBR->ppp_mode ) { - Sample_Delay_WB_BWE = NS2SA_fx2( 16000, DELAY_FD_BWE_ENC_12k8_NS ); + Sample_Delay_WB_BWE = NS2SA_FX2( 16000, DELAY_FD_BWE_ENC_12k8_NS ); Copy( new_inp_resamp16k, &old_input[Sample_Delay_WB_BWE], L_FRAME16k ); Copy( hBWE_FD->old_input_wb_fx, old_input, Sample_Delay_WB_BWE ); @@ -232,7 +232,7 @@ void swb_pre_proc_fx( imagBufferFlipped[j] = imagBufferTmp[j]; } - set16_fx( old_input_fx, 0, NS2SA_fx2( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k ); + set16_fx( old_input_fx, 0, NS2SA_FX2( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k ); IF( EQ_32( st_fx->input_Fs, 32000 ) ) { @@ -241,7 +241,7 @@ void swb_pre_proc_fx( test(); IF( NE_16( st_fx->last_extl, SWB_BWE ) && NE_16( st_fx->last_extl, FB_BWE ) && NE_16( st_fx->extl, SWB_BWE_HIGHRATE ) ) { - Sample_Delay_SWB_BWE = NS2SA_fx2( 32000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); + Sample_Delay_SWB_BWE = NS2SA_FX2( 32000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); Copy( hBWE_FD->old_fdbwe_speech_fx, &old_input_fx[Sample_Delay_SWB_BWE], L_FRAME32k ); set16_fx( old_input_fx, 0, Sample_Delay_SWB_BWE ); Copy( hBWE_FD->old_fdbwe_speech_fx + L_FRAME32k - Sample_Delay_SWB_BWE, hBWE_FD->old_input_fx, Sample_Delay_SWB_BWE ); @@ -290,7 +290,7 @@ void swb_pre_proc_fx( decimate_3_ov_2_lowpass_num_fx, decimate_3_ov_2_lowpass_den_fx, hBWE_TD->dec_2_over_3_mem_lp_fx ); } - Sample_Delay_SWB_BWE = NS2SA_fx2( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); + Sample_Delay_SWB_BWE = NS2SA_FX2( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); Copy( new_swb_speech_fx, &old_input_fx[Sample_Delay_SWB_BWE], inner_frame ); set16_fx( old_input_fx, 0, Sample_Delay_SWB_BWE ); Copy( new_swb_speech_fx + inner_frame - Sample_Delay_SWB_BWE, hBWE_FD->old_input_fx, Sample_Delay_SWB_BWE ); diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 590704a99..ce93066cd 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -578,12 +578,12 @@ ivas_error ivas_dirac_dec_init_binaural_data_fx( move16(); } - n_samples_granularity = NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); + n_samples_granularity = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); test(); test(); IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) && EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - n_samples_granularity = NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); /* Use the same granularity as tdrend */ + n_samples_granularity = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); /* Use the same granularity as tdrend */ } IF( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, ivas_jbm_dec_get_num_tc_channels( st_ivas ), nchan_to_allocate, nchan_to_allocate, n_samples_granularity ) ) != IVAS_ERR_OK ) @@ -885,7 +885,7 @@ void ivas_dirac_dec_binaural_render_fx( { output_fx_local[ch] = output_fx_local_buff[ch]; } - slot_size = NS2SA_fx2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); + slot_size = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ slots_to_render = s_min( sub( hSpatParamRendCom->num_slots, hSpatParamRendCom->slots_rendered ), idiv1616( (Word16) nSamplesAsked, (Word16) slot_size ) ); -- GitLab From 0a39da33a99e399d655b7dcb7e49f85bab2fa859 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 22 Jul 2024 13:55:01 +0200 Subject: [PATCH 07/77] relax the condition checking for 70% of capital letters in local macros --- scripts/tools/Linux/wmc_tool_v151 | Bin 0 -> 359896 bytes scripts/tools/Win32/wmc_tool_v151.exe | Bin 0 -> 262656 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/tools/Linux/wmc_tool_v151 create mode 100644 scripts/tools/Win32/wmc_tool_v151.exe diff --git a/scripts/tools/Linux/wmc_tool_v151 b/scripts/tools/Linux/wmc_tool_v151 new file mode 100644 index 0000000000000000000000000000000000000000..a3e54d18baa8119388bef35dd3bf9c4f2fe80c9e GIT binary patch literal 359896 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 `&z4K#6>y${gDVeNz$ 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⩔h9V|Lsw}2`g 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
    Y}mWs69fB~uwG_9IkT2zFg0JN?u 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 &IHRthAhAd0pw0_c!44U>=Ljr*x&kE3duRC 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 literal 0 HcmV?d00001 -- GitLab From c709140d0e8c4dd638f56cdcde3c16535f2e7c25 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 13:57:39 +0200 Subject: [PATCH 08/77] rename preemph_fx() to PREEMPH_FX() in order to be recognized as macro by the WMC tool --- lib_com/modif_fs_fx.c | 2 +- lib_com/prot_fx.h | 2 +- lib_com/stat_noise_uv_mod_fx.c | 2 +- lib_com/swb_tbe_com_fx.c | 10 +++++----- lib_dec/acelp_core_dec_ivas_fx.c | 2 +- lib_dec/dec_higher_acelp_fx.c | 2 +- lib_enc/enc_higher_acelp_fx.c | 4 ++-- lib_enc/ivas_core_pre_proc_front.c | 16 ++++++++-------- lib_enc/updt_enc_fx.c | 2 +- 9 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib_com/modif_fs_fx.c b/lib_com/modif_fs_fx.c index c0c42d319..1e64cc13b 100644 --- a/lib_com/modif_fs_fx.c +++ b/lib_com/modif_fs_fx.c @@ -190,7 +190,7 @@ Word16 modify_Fs_fx( /* o : length of output Q0 */ mu_preemph_fx = extract_h( t0 ); /*r_fx[1] / r_fx[0]; */ mem_preemph_fx = signal_ana_fx[mem_len_ana + lg - LEN_WIN_SSS - 1]; move16(); - preemph_fx( signal_ana_fx + mem_len_ana + lg - LEN_WIN_SSS, mu_preemph_fx, LEN_WIN_SSS, &mem_preemph_fx ); + PREEMPH_FX( signal_ana_fx + mem_len_ana + lg - LEN_WIN_SSS, mu_preemph_fx, LEN_WIN_SSS, &mem_preemph_fx ); /* Autocorrelations */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index b3e016846..9a3890a79 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -2417,7 +2417,7 @@ void lag_wind_32( ); // preemp_fx.c -#define preemph_fx( signal, mu, L, mem ) preemph_copy_fx( ( signal ), ( signal ), ( mu ), ( L ), ( mem ) ) +#define PREEMPH_FX( signal, mu, L, mem ) preemph_copy_fx( ( signal ), ( signal ), ( mu ), ( L ), ( mem ) ) void preemph_copy_fx( const Word16 x[], /* i : i signal Qx */ diff --git a/lib_com/stat_noise_uv_mod_fx.c b/lib_com/stat_noise_uv_mod_fx.c index 9869019fa..e91ea907e 100644 --- a/lib_com/stat_noise_uv_mod_fx.c +++ b/lib_com/stat_noise_uv_mod_fx.c @@ -171,7 +171,7 @@ void stat_noise_uv_mod_fx( exctilt = mult( shl( sub( TILT_COMP_LIM_FX, min_alpha ), 2 ), exctilt ); /*Q15 */ #endif /* BASOP_NOGLOB */ - preemph_fx( &Exc2_local[i_subfr], exctilt, L_SUBFR, exc_pe ); + PREEMPH_FX( &Exc2_local[i_subfr], exctilt, L_SUBFR, exc_pe ); } } diff --git a/lib_com/swb_tbe_com_fx.c b/lib_com/swb_tbe_com_fx.c index 55ca77c35..b5f418fc6 100644 --- a/lib_com/swb_tbe_com_fx.c +++ b/lib_com/swb_tbe_com_fx.c @@ -2510,7 +2510,7 @@ void GenShapedSHBExcitation_fx( move16(); /* exc16kWhtnd: Q_bwe_exc */ } - preemph_fx( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); + PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); /* i/o: exc16kWhtnd (Q_bwe_exc) */ /* i/o: tbe_premph (Q_bwe_exc) */ } @@ -2605,7 +2605,7 @@ void GenShapedSHBExcitation_fx( temp = div_s( temp, temp2 ); /* Q15 */ temp = mult_r( PREEMPH_FAC, temp ); - preemph_fx( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); + PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); /* exc16kWhtnd: Q_bwe_exc; tbe_premph: Q_bwe_exc*/ } @@ -3434,7 +3434,7 @@ void GenShapedSHBExcitation_ivas_fx( } } // preemph(exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph); - preemph_fx( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); + PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); } ELSE #endif @@ -3460,7 +3460,7 @@ void GenShapedSHBExcitation_ivas_fx( move16(); /* exc16kWhtnd: Q_bwe_exc */ } - preemph_fx( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); + PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); /* i/o: exc16kWhtnd (Q_bwe_exc) */ /* i/o: tbe_premph (Q_bwe_exc) */ } @@ -3558,7 +3558,7 @@ void GenShapedSHBExcitation_ivas_fx( temp = div_s( temp, temp2 ); /* Q15 */ temp = mult_r( PREEMPH_FAC, temp ); - preemph_fx( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); + PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); /* exc16kWhtnd: Q_bwe_exc; tbe_premph: Q_bwe_exc*/ } diff --git a/lib_dec/acelp_core_dec_ivas_fx.c b/lib_dec/acelp_core_dec_ivas_fx.c index a6c69730e..ecb9b0ec2 100644 --- a/lib_dec/acelp_core_dec_ivas_fx.c +++ b/lib_dec/acelp_core_dec_ivas_fx.c @@ -931,7 +931,7 @@ ivas_error acelp_core_dec_ivas_fx( tmpF_fx = *old_exc_s_fx; st->mem_deemph_fx = old_exc_s_fx[sub( st->L_frame, 1 )]; move16(); - preemph_fx( old_exc_s_fx, st->preemph_fac, L_FRAME16k, &tmpF_fx ); + PREEMPH_FX( old_exc_s_fx, st->preemph_fac, L_FRAME16k, &tmpF_fx ); Copy( old_exc_s_fx + st->L_frame - M, st->mem_syn2_fx, M ); Residu3_fx( Aq_fx, old_exc_s_fx, old_exc_fx + L_EXC_MEM_DEC - st->L_frame, st->L_frame, 0 ); #ifdef FIX_737_HQ_ACELP_SWITCH_SCALING_ERROR diff --git a/lib_dec/dec_higher_acelp_fx.c b/lib_dec/dec_higher_acelp_fx.c index eea2c8a62..68468cbbf 100644 --- a/lib_dec/dec_higher_acelp_fx.c +++ b/lib_dec/dec_higher_acelp_fx.c @@ -218,7 +218,7 @@ void transf_cdbk_dec_fx( st_fx->last_code_preq = extract_h( code_preQ[L_SUBFR - 1] ); move16(); #endif - preemph_fx( code_preQ, FAC_PRE_AVQ_FX, L_SUBFR, &st_fx->mem_preemp_preQ_fx ); + PREEMPH_FX( code_preQ, FAC_PRE_AVQ_FX, L_SUBFR, &st_fx->mem_preemp_preQ_fx ); /*--------------------------------------------------------------* * Compute normalized prequantizer excitation gain for FEC * diff --git a/lib_enc/enc_higher_acelp_fx.c b/lib_enc/enc_higher_acelp_fx.c index 59e2a359e..a228b0b6d 100644 --- a/lib_enc/enc_higher_acelp_fx.c +++ b/lib_enc/enc_higher_acelp_fx.c @@ -374,7 +374,7 @@ void transf_cdbk_enc_fx( st->last_code_preq = (int16_t) code_preQ[L_SUBFR - 1]; #endif - preemph_fx( code_preQ, FAC_PRE_AVQ_FX, L_SUBFR, &( st_fx->mem_preemp_preQ_fx ) ); + PREEMPH_FX( code_preQ, FAC_PRE_AVQ_FX, L_SUBFR, &( st_fx->mem_preemp_preQ_fx ) ); /*--------------------------------------------------------------* * For inactive segments @@ -440,7 +440,7 @@ static void find_cn_fx( Copy( xn, tmp_fl + M, L_SUBFR ); tmp = 0; move16(); - preemph_fx( tmp_fl + M, PREEMPH_FAC_16k, L_SUBFR, &tmp ); + PREEMPH_FX( tmp_fl + M, PREEMPH_FAC_16k, L_SUBFR, &tmp ); syn_filt_s_lc_fx( 0, Ap, tmp_fl + M, tmp_fl + M, L_SUBFR ); Residu3_lc_fx( p_Aq, M, tmp_fl + M, cn, L_SUBFR, 1 ); diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 239e57cfc..33a06a43a 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -1469,9 +1469,9 @@ ivas_error pre_proc_front_ivas_fx( st->mem_preemph_fx = st->mem_preemph_DFT_fx; st->mem_preemph_DFT_fx = old_inp_12k8_fx[L_INP_MEM - STEREO_DFT_OVL_12k8 + L_FRAME - 1]; - preemph_fx( new_inp_12k8_fx - STEREO_DFT_OVL_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); + PREEMPH_FX( new_inp_12k8_fx - STEREO_DFT_OVL_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); dummy_fx = st->mem_preemph_fx; - preemph_fx( new_inp_12k8_fx - STEREO_DFT_OVL_12k8 + L_FRAME, PREEMPH_FAC_FLT, STEREO_DFT_OVL_12k8, &dummy_fx ); + PREEMPH_FX( new_inp_12k8_fx - STEREO_DFT_OVL_12k8 + L_FRAME, PREEMPH_FAC_FLT, STEREO_DFT_OVL_12k8, &dummy_fx ); fixedToFloat_arr( new_inp_12k8_fx - STEREO_DFT_OVL_12k8, new_inp_12k8 - STEREO_DFT_OVL_12k8, 0, L_FRAME + STEREO_DFT_OVL_12k8 ); // To be removed st->mem_preemph = (float) st->mem_preemph_fx; @@ -1494,7 +1494,7 @@ ivas_error pre_proc_front_ivas_fx( #endif st->mem_preemph_fx = st->mem_preemph_DFT_fx; Copy( st->inp_12k8_mem_stereo_sw_fx, new_inp_12k8_fx - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); - preemph_fx( new_inp_12k8_fx - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), PREEMPH_FAC, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT, &st->mem_preemph_fx ); + PREEMPH_FX( new_inp_12k8_fx - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), PREEMPH_FAC, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT, &st->mem_preemph_fx ); fixedToFloat_arr( new_inp_12k8_fx - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), new_inp_12k8 - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); // To be removed } @@ -1512,16 +1512,16 @@ ivas_error pre_proc_front_ivas_fx( floatToFixed_arr( new_inp_12k8 - lMemRecalc_12k8 - length_12k8, new_inp_12k8_fx - lMemRecalc_12k8 - length_12k8, 0, length_12k8 ); // To be removed - preemph_fx( new_inp_12k8_fx - lMemRecalc_12k8 - length_12k8, PREEMPH_FAC, length_12k8, &st->mem_preemph_fx ); + PREEMPH_FX( new_inp_12k8_fx - lMemRecalc_12k8 - length_12k8, PREEMPH_FAC, length_12k8, &st->mem_preemph_fx ); fixedToFloat_arr( new_inp_12k8_fx - lMemRecalc_12k8 - length_12k8, new_inp_12k8 - lMemRecalc_12k8 - length_12k8, 0, length_12k8 ); // To be removed } floatToFixed_arr( new_inp_12k8 - lMemRecalc_12k8, new_inp_12k8_fx - lMemRecalc_12k8, 0, L_FRAME + lMemRecalc_12k8 + L_FILT ); // To be removed - preemph_fx( new_inp_12k8_fx - lMemRecalc_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); + PREEMPH_FX( new_inp_12k8_fx - lMemRecalc_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); dummy_fx = st->mem_preemph_fx; - preemph_fx( new_inp_12k8_fx - lMemRecalc_12k8 + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy_fx ); + PREEMPH_FX( new_inp_12k8_fx - lMemRecalc_12k8 + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy_fx ); fixedToFloat_arr( new_inp_12k8_fx - lMemRecalc_12k8, new_inp_12k8 - lMemRecalc_12k8, 0, L_FRAME + lMemRecalc_12k8 + L_FILT ); // To be removed } @@ -1530,9 +1530,9 @@ ivas_error pre_proc_front_ivas_fx( floatToFixed_arr( new_inp_12k8, new_inp_12k8_fx, 0, L_FRAME + L_FILT ); // To be removed st->mem_preemph_fx = (Word16) st->mem_preemph; - preemph_fx( new_inp_12k8_fx, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); + PREEMPH_FX( new_inp_12k8_fx, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); dummy_fx = st->mem_preemph_fx; - preemph_fx( new_inp_12k8_fx + L_FRAME, PREEMPH_FAC, L_FILT, &dummy_fx ); + PREEMPH_FX( new_inp_12k8_fx + L_FRAME, PREEMPH_FAC, L_FILT, &dummy_fx ); st->mem_preemph = (float) st->mem_preemph_fx; dummy = (float) dummy_fx; diff --git a/lib_enc/updt_enc_fx.c b/lib_enc/updt_enc_fx.c index 1b153f387..6a3202a15 100644 --- a/lib_enc/updt_enc_fx.c +++ b/lib_enc/updt_enc_fx.c @@ -190,7 +190,7 @@ void updt_IO_switch_enc_fx( /* Perform preemphasis of the old input signal @16kHz */ st->mem_preemph16k_fx = 0; move16(); - preemph_fx( st->old_inp_16k_fx, PREEMPH_FAC_16k, L_INP_MEM, &( st->mem_preemph16k_fx ) ); + PREEMPH_FX( st->old_inp_16k_fx, PREEMPH_FAC_16k, L_INP_MEM, &( st->mem_preemph16k_fx ) ); Scale_sig( st->old_inp_16k_fx, L_INP_MEM, st->prev_Q_new ); /* reset TD BWE buffers */ set16_fx( hBWE_TD->old_speech_shb_fx, 0, L_LOOK_16k + L_SUBFR16k ); -- GitLab From a74cea303cd7d1a151d7390333c487cc15f49a20 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 14:09:54 +0200 Subject: [PATCH 09/77] replace count_malloc() by malloc() --- lib_com/cldfb_evs.c | 12 ++-- lib_com/fd_cng_com_fx.c | 4 +- lib_com/prot_fx.h | 14 ---- lib_com/wi_fx.c | 6 +- lib_dec/dec_gen_voic_fx.c | 8 +-- lib_dec/fd_cng_dec_fx.c | 4 +- lib_dec/init_dec_fx.c | 56 ++++++++-------- lib_dec/ppp_dec_fx.c | 2 +- lib_dec/voiced_dec_fx.c | 6 +- lib_enc/init_enc_fx.c | 42 ++++++------ lib_enc/ppp_enc_fx.c | 2 +- lib_enc/voiced_enc_fx.c | 132 +++++++++++++++++++------------------- 12 files changed, 137 insertions(+), 151 deletions(-) diff --git a/lib_com/cldfb_evs.c b/lib_com/cldfb_evs.c index 2a27fbb24..aba971a90 100644 --- a/lib_com/cldfb_evs.c +++ b/lib_com/cldfb_evs.c @@ -1003,7 +1003,7 @@ ivas_error openCldfb( { HANDLE_CLDFB_FILTER_BANK hs; - hs = (HANDLE_CLDFB_FILTER_BANK) count_malloc( sizeof( CLDFB_FILTER_BANK ) ); + hs = (HANDLE_CLDFB_FILTER_BANK) malloc( sizeof( CLDFB_FILTER_BANK ) ); if ( hs == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); @@ -1017,11 +1017,11 @@ ivas_error openCldfb( IF( type == CLDFB_ANALYSIS ) { - hs->FilterStates = (Word16 *) count_malloc( STATE_BUFFER_SIZE * maxCldfbBands * sizeof( Word16 ) ); + hs->FilterStates = (Word16 *) malloc( STATE_BUFFER_SIZE * maxCldfbBands * sizeof( Word16 ) ); } ELSE { - hs->FilterStates = (Word16 *) count_malloc( 2 * STATE_BUFFER_SIZE * maxCldfbBands * sizeof( Word16 ) ); + hs->FilterStates = (Word16 *) malloc( 2 * STATE_BUFFER_SIZE * maxCldfbBands * sizeof( Word16 ) ); } if ( hs->FilterStates == NULL ) { @@ -1480,9 +1480,9 @@ void deleteCldfb( HANDLE_CLDFB_FILTER_BANK *h_cldfb ) /* i: cldfb handle */ { IF( ( *h_cldfb )->FilterStates != NULL ) { - count_free( ( *h_cldfb )->FilterStates ); + free( ( *h_cldfb )->FilterStates ); } - count_free( *h_cldfb ); + free( *h_cldfb ); } *h_cldfb = NULL; } @@ -1671,7 +1671,7 @@ void cldfb_restore_memory( HANDLE_CLDFB_FILTER_BANK hs ) /* i/o: cldfb handle */ } hs->memory_length = 0; - count_free( hs->memory ); + free( hs->memory ); hs->memory = NULL; return; diff --git a/lib_com/fd_cng_com_fx.c b/lib_com/fd_cng_com_fx.c index f439bbe28..bbf51810d 100644 --- a/lib_com/fd_cng_com_fx.c +++ b/lib_com/fd_cng_com_fx.c @@ -35,7 +35,7 @@ ivas_error createFdCngCom( HANDLE_FD_CNG_COM hs; /* Allocate memory */ - hs = (HANDLE_FD_CNG_COM) count_malloc( sizeof( FD_CNG_COM ) ); + hs = (HANDLE_FD_CNG_COM) malloc( sizeof( FD_CNG_COM ) ); if ( hs == NULL ) { @@ -287,7 +287,7 @@ void deleteFdCngCom( HANDLE_FD_CNG_COM *hFdCngCom ) /* i/o: Contains the variabl move16(); IF( hsCom != NULL ) { - count_free( hsCom ); + free( hsCom ); *hFdCngCom = NULL; move16(); } diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 9a3890a79..2d5ce5faf 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -36,20 +36,6 @@ * Prototypes of RAM counting tool macros *----------------------------------------------------------------------------------*/ -#ifdef RAM_COUNTING_TOOL -#define count_malloc( n1 ) MALLOC_FCT_CALL( n1 ) -#define count_calloc( n1, n2 ) CALLOC_FCT_CALL( n1, n2 ) -#define count_free( ptr ) FREE_FCT_CALL( ptr ) -#else -#define count_malloc( n1 ) malloc( n1 ) -#define count_calloc( n1, n2 ) calloc( n1, n2 ) -#define count_free( ptr ) free( ptr ) -#endif - -#define dynamic_malloc( n1 ) malloc( n1 ) -#define dynamic_calloc( n1, n2 ) calloc( n1, n2 ) -#define dynamic_free( n1 ) free( n1 ) - #define mvr2r_Word32( x, y, n ) Copy32( x, y, n ) #define mvr2r_Word16( x, y, n ) Copy( x, y, n ) diff --git a/lib_com/wi_fx.c b/lib_com/wi_fx.c index 233a2f6ba..675ba31aa 100644 --- a/lib_com/wi_fx.c +++ b/lib_com/wi_fx.c @@ -1258,9 +1258,9 @@ static void DTFS_transform_fx( } - count_free( tmp1_dtfs_fx ); - count_free( tmp2_dtfs_fx ); - count_free( tmp3_dtfs_fx ); + free( tmp1_dtfs_fx ); + free( tmp2_dtfs_fx ); + free( tmp3_dtfs_fx ); return; } /*===================================================================*/ diff --git a/lib_dec/dec_gen_voic_fx.c b/lib_dec/dec_gen_voic_fx.c index 597cfea19..493e3fed3 100644 --- a/lib_dec/dec_gen_voic_fx.c +++ b/lib_dec/dec_gen_voic_fx.c @@ -486,8 +486,8 @@ ivas_error decod_gen_voic_fx( interp_code_4over2_fx( exc_fx + i_subfr_fx, bwe_exc_fx + shl( i_subfr_fx, 1 ), L_SUBFR ); } - count_free( PREVP ); - count_free( CURRP ); + free( PREVP ); + free( CURRP ); } } @@ -985,8 +985,8 @@ ivas_error decod_gen_voic_ivas_fx( interp_code_4over2_fx( exc_fx + i_subfr_fx, bwe_exc_fx + ( i_subfr_fx * 2 ), L_SUBFR ); } - count_free( PREVP ); - count_free( CURRP ); + free( PREVP ); + free( CURRP ); } } diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index df0da5137..2cad9793d 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -51,7 +51,7 @@ ivas_error createFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) error = IVAS_ERR_OK; /* Allocate memory */ - hs = (HANDLE_FD_CNG_DEC) count_malloc( sizeof( FD_CNG_DEC ) ); + hs = (HANDLE_FD_CNG_DEC) malloc( sizeof( FD_CNG_DEC ) ); IF( hs == NULL ) { @@ -544,7 +544,7 @@ void deleteFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) IF( hsDec != NULL ) { deleteFdCngCom( &( hsDec->hFdCngCom ) ); - count_free( hsDec ); + free( hsDec ); *hFdCngDec = NULL; } } diff --git a/lib_dec/init_dec_fx.c b/lib_dec/init_dec_fx.c index 6169bba77..bed5c11bb 100644 --- a/lib_dec/init_dec_fx.c +++ b/lib_dec/init_dec_fx.c @@ -131,7 +131,7 @@ ivas_error init_decoder_fx( test(); IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) count_malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -150,7 +150,7 @@ ivas_error init_decoder_fx( test(); IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) + IF( ( st_fx->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) ); } @@ -170,7 +170,7 @@ ivas_error init_decoder_fx( IF( EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) count_malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) ); } @@ -210,7 +210,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -228,7 +228,7 @@ ivas_error init_decoder_fx( test(); IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) ) { - IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) count_malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) ); } @@ -249,7 +249,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); } @@ -337,7 +337,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); } @@ -355,7 +355,7 @@ ivas_error init_decoder_fx( test(); IF( idchan == 0 && ( ( st_fx->element_mode == EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) ) { - IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -432,7 +432,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, IVAS_SCE ) || ( st_fx->element_mode == EVS_MONO ) ) ) { - IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) count_malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -443,7 +443,7 @@ ivas_error init_decoder_fx( IF( st_fx->element_mode == EVS_MONO ) { /* HQ NB FEC initialization */ - IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) count_malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) ); } @@ -481,7 +481,7 @@ ivas_error init_decoder_fx( /* TCX-LTP */ IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) ) { - IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); } @@ -495,7 +495,7 @@ ivas_error init_decoder_fx( // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) count_malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) ); } @@ -512,7 +512,7 @@ ivas_error init_decoder_fx( /* TCX config. data structure */ IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } @@ -540,7 +540,7 @@ ivas_error init_decoder_fx( test(); IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) count_malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -627,7 +627,7 @@ ivas_error init_decoder_fx( test(); IF( st_fx->Opt_AMR_WB || st_fx->element_mode == EVS_MONO ) { - IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) count_malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); } @@ -649,7 +649,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) count_malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); } @@ -676,7 +676,7 @@ ivas_error init_decoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) count_malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); } @@ -735,7 +735,7 @@ ivas_error init_decoder_fx( IF( st_fx->element_mode == EVS_MONO ) { - IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) count_malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); } @@ -1114,7 +1114,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) count_malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -1133,7 +1133,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( EQ_32( st_fx->output_Fs, 16000 ) && ( st_fx->element_mode == EVS_MONO ) ) { - IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) count_malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) ); } @@ -1153,7 +1153,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) count_malloc( sizeof( PFSTAT ) ) ) == NULL ) + IF( ( st_fx->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); } @@ -1197,7 +1197,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) count_malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) + IF( ( st_fx->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); } @@ -1231,7 +1231,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( idchan == 0 && ( EQ_16( st_fx->element_mode, EVS_MONO ) || EQ_16( st_fx->element_mode, IVAS_CPE_DFT ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) ) { - IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) count_malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -1378,7 +1378,7 @@ ivas_error init_decoder_ivas_fx( IF( ( st_fx->element_mode == EVS_MONO ) ) { - IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) count_malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) ); } @@ -1396,7 +1396,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( st_fx->Opt_AMR_WB || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) count_malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); } @@ -1532,7 +1532,7 @@ ivas_error init_decoder_ivas_fx( IF( EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) count_malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); } @@ -1571,7 +1571,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) ) { - IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) count_malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); } @@ -1604,7 +1604,7 @@ ivas_error init_decoder_ivas_fx( test(); IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) ) { - IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } diff --git a/lib_dec/ppp_dec_fx.c b/lib_dec/ppp_dec_fx.c index 275229e36..098af5b9b 100644 --- a/lib_dec/ppp_dec_fx.c +++ b/lib_dec/ppp_dec_fx.c @@ -365,6 +365,6 @@ ivas_error ppp_quarter_decoder_fx( Q2phaseShift_fx( CURRCW_Q_DTFS_FX, temp_fx, CURRCW_Q_DTFS_FX->lag_fx, S_fx, C_fx ); } - count_free( PREVDTFS_FX ); + free( PREVDTFS_FX ); return error; } diff --git a/lib_dec/voiced_dec_fx.c b/lib_dec/voiced_dec_fx.c index a52332fa0..56b677f43 100644 --- a/lib_dec/voiced_dec_fx.c +++ b/lib_dec/voiced_dec_fx.c @@ -395,9 +395,9 @@ ivas_error ppp_voiced_decoder_fx( hSC_VBR->dtfs_dec_Q = dtfs_temp_fx->Q; move16(); - count_free( TMPDTFS_FX ); - count_free( CURRP_Q_D_FX ); - count_free( dtfs_temp_fx ); + free( TMPDTFS_FX ); + free( CURRP_Q_D_FX ); + free( dtfs_temp_fx ); return IVAS_ERR_OK; } diff --git a/lib_enc/init_enc_fx.c b/lib_enc/init_enc_fx.c index 2316b4f89..aa7a29549 100644 --- a/lib_enc/init_enc_fx.c +++ b/lib_enc/init_enc_fx.c @@ -40,7 +40,7 @@ ivas_error init_encoder_fx( *-----------------------------------------------------------------*/ IF( !vad_only_flag ) { - IF( ( st_fx->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) count_malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) ); } @@ -129,7 +129,7 @@ ivas_error init_encoder_fx( IF( !vad_only_flag ) { - IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) ); } @@ -174,7 +174,7 @@ ivas_error init_encoder_fx( test(); IF( st_fx->Opt_AMR_WB || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) count_malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); } @@ -299,7 +299,7 @@ ivas_error init_encoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hGSCEnc = (GSC_ENC_HANDLE) count_malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); } @@ -349,7 +349,7 @@ ivas_error init_encoder_fx( test(); IF( ( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) && ( !vad_only_flag ) ) { - if ( ( st_fx->hVAD = (VAD_HANDLE) count_malloc( sizeof( VAD_DATA ) ) ) == NULL ) + if ( ( st_fx->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); } @@ -403,7 +403,7 @@ ivas_error init_encoder_fx( // PMT("deal with idchan ") IF( /*idchan == 0 ||*/ EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - if ( ( st_fx->hNoiseEst = (NOISE_EST_HANDLE) count_malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) + if ( ( st_fx->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ); } @@ -421,7 +421,7 @@ ivas_error init_encoder_fx( test(); IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hSpMusClas = (SP_MUS_CLAS_HANDLE) count_malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) + IF( ( st_fx->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); } @@ -500,7 +500,7 @@ ivas_error init_encoder_fx( test(); IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) || ( EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) && st_fx->Opt_DTX_ON ) ) { - if ( ( st_fx->hDtxEnc = (DTX_ENC_HANDLE) count_malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) + if ( ( st_fx->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); } @@ -533,7 +533,7 @@ ivas_error init_encoder_fx( test(); IF( ( ( idchan == 0 && st_fx->Opt_DTX_ON && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, EVS_MONO ) ) && !( EQ_16( ism_mode, ISM_MODE_PARAM ) || EQ_16( ism_mode, ISM_MODE_DISC ) ) ) { - IF( ( st_fx->hTdCngEnc = (TD_CNG_ENC_HANDLE) count_malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); } @@ -554,7 +554,7 @@ ivas_error init_encoder_fx( test(); IF( ( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_TD ) ) { - IF( ( st_fx->hLPDmem = (LPD_state_HANDLE) count_malloc( sizeof( LPD_state ) ) ) == NULL ) + IF( ( st_fx->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); } @@ -621,7 +621,7 @@ ivas_error init_encoder_fx( test(); IF( st_fx->Opt_SC_VBR || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hSC_VBR = (SC_VBR_ENC_HANDLE) count_malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); } @@ -635,7 +635,7 @@ ivas_error init_encoder_fx( /* PLC encoder */ IF( EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hPlcExt = (PLC_ENC_EVS_HANDLE) count_malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) + IF( ( st_fx->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) ); } @@ -650,7 +650,7 @@ ivas_error init_encoder_fx( IF( st_fx->element_mode == EVS_MONO ) { - IF( ( st_fx->hTECEnc = (TEC_ENC_HANDLE) count_malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); } @@ -666,7 +666,7 @@ ivas_error init_encoder_fx( IF( !vad_only_flag ) { - IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) count_malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) ); } @@ -681,7 +681,7 @@ ivas_error init_encoder_fx( *-----------------------------------------------------------------*/ IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hBWE_FD = (FD_BWE_ENC_HANDLE) count_malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); } @@ -704,7 +704,7 @@ ivas_error init_encoder_fx( IF( idchan == 0 && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hBWE_TD = (TD_BWE_ENC_HANDLE) count_malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); } @@ -726,7 +726,7 @@ ivas_error init_encoder_fx( IF( st_fx->Opt_RF_ON || EQ_16( st_fx->element_mode, EVS_MONO ) ) { - IF( ( st_fx->hRF = (RF_ENC_HANDLE) count_malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) ); } @@ -767,7 +767,7 @@ ivas_error init_encoder_fx( // VE: reduction possible for MCT_CHAN_MODE_LFE channel - see I1-172 IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hTcxEnc = (TCX_ENC_HANDLE) count_malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); } @@ -786,7 +786,7 @@ ivas_error init_encoder_fx( /* MDCT classifier */ MDCT_classifier_reset_fx( st_fx->hTcxEnc ); - IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) count_malloc( sizeof( TCX_config ) ) ) == NULL ) + IF( ( st_fx->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); } @@ -804,7 +804,7 @@ ivas_error init_encoder_fx( test(); IF( NE_16( st_fx->element_mode, IVAS_CPE_TD ) && NE_16( st_fx->element_mode, IVAS_CPE_MDCT ) && idchan == 0 ) { - IF( ( st_fx->hHQ_core = (HQ_ENC_HANDLE) count_malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) + IF( ( st_fx->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); } @@ -865,7 +865,7 @@ ivas_error init_encoder_fx( test(); IF( idchan == 0 || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - IF( ( st_fx->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) + IF( ( st_fx->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); } diff --git a/lib_enc/ppp_enc_fx.c b/lib_enc/ppp_enc_fx.c index 29c0fefe7..3e5de17fa 100644 --- a/lib_enc/ppp_enc_fx.c +++ b/lib_enc/ppp_enc_fx.c @@ -200,7 +200,7 @@ ivas_error ppp_quarter_encoder_fx( push_indice_fx( hBstr, IND_GLOBAL_ALIGNMENT, shr( add( tmp_fx, 12 ), 2 ), 3 ); - count_free( PREVDTFS_FX ); + free( PREVDTFS_FX ); return error; } diff --git a/lib_enc/voiced_enc_fx.c b/lib_enc/voiced_enc_fx.c index 0e3d7b20b..b9e0b9c42 100644 --- a/lib_enc/voiced_enc_fx.c +++ b/lib_enc/voiced_enc_fx.c @@ -205,12 +205,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } @@ -236,12 +236,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } @@ -267,12 +267,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } @@ -594,12 +594,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } } @@ -641,12 +641,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } } @@ -661,12 +661,12 @@ ivas_error ppp_voiced_encoder_fx( IF( hSC_VBR->bump_up == 1 ) { - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } @@ -675,12 +675,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } /* -----End Open-loop Bump-Up */ @@ -694,12 +694,12 @@ ivas_error ppp_voiced_encoder_fx( { if ( ( error = ppp_quarter_encoder_fx( &flag, CURRP_Q_E_FX, TMPDTFS_FX, dtfs_temp_fx->lag_fx, *CURRP_NQ_FX, lpc2_fx, &hSC_VBR->lastLgainE_fx, &hSC_VBR->lastHgainE_fx, hSC_VBR->lasterbE_fx, *dtfs_temp_fx, S_fx, C_fx, hBstr ) ) != IVAS_ERR_OK ) { - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } } @@ -1172,12 +1172,12 @@ ivas_error ppp_voiced_encoder_fx( { hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } @@ -1192,12 +1192,12 @@ ivas_error ppp_voiced_encoder_fx( move16(); hSC_VBR->bump_up = 1; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } } @@ -1244,12 +1244,12 @@ ivas_error ppp_voiced_encoder_fx( hSC_VBR->dtfs_enc_Q = dtfs_temp_fx->Q; move16(); - count_free( CURRP_NQ_FX ); - count_free( TMPDTFS_FX ); - count_free( TMPDTFS2_FX ); - count_free( TMPDTFS3_FX ); - count_free( CURRP_Q_E_FX ); - count_free( dtfs_temp_fx ); + free( CURRP_NQ_FX ); + free( TMPDTFS_FX ); + free( TMPDTFS2_FX ); + free( TMPDTFS3_FX ); + free( CURRP_Q_E_FX ); + free( dtfs_temp_fx ); return error; } -- GitLab From f24cb6dab454fb80cadb0480bc4b106957777647 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 14:25:35 +0200 Subject: [PATCH 10/77] update the list of in-built mathematical functions recognized by the WMC tool --- lib_debug/wmc_auto.h | 121 ++++++++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 53 deletions(-) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 7d07a84a0..587fe37f9 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -692,63 +692,78 @@ static int wmc_flag_ = 0; #define MISC_( x ) ABS_( x ) /* Math Operations */ -#define abs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), abs ) -#define fabs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), fabs ) -#define labs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), labs ) -#define floor_ OP_COUNT_WRAPPER1_( MISC_( 1 ), floor ) -#define sqrt_ OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrt ) -#define pow_ OP_COUNT_WRAPPER1_( POWER_( 1 ), pow ) -#define exp_ OP_COUNT_WRAPPER1_( POWER_( 1 ), exp ) -#define log_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log ) -#define log10_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log10 ) -#define cos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cos ) -#define sin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sin ) -#define tan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tan ) -#define acos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), acos ) -#define asin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), asin ) -#define atan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan ) -#define atan2_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan2 ) -#define cosh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cosh ) -#define sinh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sinh ) -#define tanh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tanh ) -#define fmod_ OP_COUNT_WRAPPER1_( DIV_( 1 ), fmod ) -/* these macros use any local macros already defined */ -/* min/max and their Variants */ -#define min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), min( ( a ), ( b ) ) ) -#define max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), max( ( a ), ( b ) ) ) -#define MIN_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MIN( ( a ), ( b ) ) ) -#define MAX_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MAX( ( a ), ( b ) ) ) -#define Min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Min( ( a ), ( b ) ) ) -#define Max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Max( ( a ), ( b ) ) ) -/* Square and its Variants */ -#define sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), sqr( ( x ) ) ) -#define Sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Sqr( ( x ) ) ) -#define SQR_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQR( ( x ) ) ) -#define square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), square( ( x ) ) ) -#define Square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Square( ( x ) ) ) -#define SQUARE_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQUARE( ( x ) ) ) -/* Sign and its Variants */ -#define sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), sign( ( x ) ) ) -#define Sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), Sign( ( x ) ) ) -#define SIGN_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), SIGN( ( x ) ) ) -/* Square Root and its Variants */ -#define sqrtf_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrtf( ( x ) ) ) -/* Invert Square Root and its Variants */ -#define inv_sqrt_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), inv_sqrt( ( x ) ) ) -/* Others */ +#define abs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), abs ) +#define fabs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), fabs ) +#define fabsf_ OP_COUNT_WRAPPER1_( ABS_( 1 ), fabsf ) +#define labs_ OP_COUNT_WRAPPER1_( ABS_( 1 ), labs ) +#define floor_ OP_COUNT_WRAPPER1_( MISC_( 1 ), floor ) +#define floorf_ OP_COUNT_WRAPPER1_( MISC_( 1 ), floorf ) +#define sqrt_ OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrt ) +#define sqrtf_ OP_COUNT_WRAPPER1_( SQRT_( 1 ), sqrtf ) +#define pow_ OP_COUNT_WRAPPER1_( POWER_( 1 ), pow ) +#define powf_ OP_COUNT_WRAPPER1_( POWER_( 1 ), powf ) +#define exp_ OP_COUNT_WRAPPER1_( POWER_( 1 ), exp ) +#define expf_ OP_COUNT_WRAPPER1_( POWER_( 1 ), expf ) +#define log_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log ) +#define logf_ OP_COUNT_WRAPPER1_( LOG_( 1 ), logf ) +#define log10_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log10 ) +#define log10f_ OP_COUNT_WRAPPER1_( LOG_( 1 ), log10f ) +#define cos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cos ) +#define cosf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cosf ) +#define sin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sin ) +#define sinf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sinf ) +#define tan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tan ) +#define tanf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tanf ) +#define acos_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), acos ) +#define acosf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), acosf ) +#define asin_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), asin ) +#define asinf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), asinf ) +#define atan_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan ) +#define atanf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atanf ) +#define atan2_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan2 ) +#define atan2f_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), atan2f ) +#define cosh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), cosh ) +#define coshf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), coshf ) +#define sinh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sinh ) +#define sinhf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), sinhf ) +#define tanh_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tanh ) +#define tanhf_ OP_COUNT_WRAPPER1_( TRANS_( 1 ), tanhf ) +#define fmod_ OP_COUNT_WRAPPER1_( DIV_( 1 ), fmod ) +#define fmodf_ OP_COUNT_WRAPPER1_( DIV_( 1 ), fmodf ) +#define frexp_ OP_COUNT_WRAPPER1_( MISC_( 2 ), frexp ) +#define frexpf_ OP_COUNT_WRAPPER1_( MISC_( 2 ), frexpf ) + +/* the macros below are instrumented versions of user-defined macros that might be used in the source code +/* representing some well-known and recognized mathematical operations (that are not defined in math.h) */ +/* Note: the 'wmc_flag_=wmc_flag_' is used to avoid warning: left-hand operand of comma expression has no effect with gcc */ + +#define min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), min( ( a ), ( b ) ) ) +#define max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), max( ( a ), ( b ) ) ) +#define MIN_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MIN( ( a ), ( b ) ) ) +#define MAX_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), MAX( ( a ), ( b ) ) ) +#define Min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Min( ( a ), ( b ) ) ) +#define Max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), Max( ( a ), ( b ) ) ) +#define sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), sqr( ( x ) ) ) +#define Sqr_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Sqr( ( x ) ) ) +#define SQR_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQR( ( x ) ) ) +#define square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), square( ( x ) ) ) +#define Square_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), Square( ( x ) ) ) +#define SQUARE_( x ) OP_COUNT_WRAPPER1_( MULT_( 1 ), SQUARE( ( x ) ) ) +#define sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), sign( ( x ) ) ) +#define Sign_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), Sign( ( x ) ) ) +#define SIGN_( x ) OP_COUNT_WRAPPER1_( MOVE_( 1 ), SIGN( ( x ) ) ) +#define inv_sqrt_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), inv_sqrt( ( x ) ) ) +#define inv_sqrtf_( x ) OP_COUNT_WRAPPER1_( SQRT_( 1 ), inv_sqrtf( ( x ) ) ) #define log_base_2_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log_base_2( ( x ) ) ) +#define log2_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log2( ( x ) ) ) +#define log2f_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log2f( ( x ) ) ) #define log2_f_( x ) OP_COUNT_WRAPPER1_( ( LOG_( 1 ), MULT_( 1 ) ), log2_f( ( x ) ) ) -/* The 'wmc_flag_=wmc_flag_' is Used to Avoid: "warning: left-hand operand of comma expression has no effect" - with Cygwin gcc Compiler */ -#define _round_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, _round( ( x ) ) ) -#define round_f_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, round_f( ( x ) ) ) -#define _squant_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, _squant( ( x ) ) ) -/* Set Min/Max */ +#define _round_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, _round( ( x ) ) ) +#define round_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, round( ( x ) ) ) +#define round_f_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, round_f( ( x ) ) ) +#define roundf_( x ) OP_COUNT_WRAPPER1_( wmc_flag_ = wmc_flag_, roundf( ( x ) ) ) #define set_min_( a, b ) OP_COUNT_WRAPPER3_( ( ADD_( 1 ), BRANCH_( 1 ), MOVE_( 1 ) ), set_min( ( a ), ( b ) ) ) #define set_max_( a, b ) OP_COUNT_WRAPPER3_( ( ADD_( 1 ), BRANCH_( 1 ), MOVE_( 1 ) ), set_max( ( a ), ( b ) ) ) -/* mac & msu (Instrumented Versions) */ -#define mac_( a, b, c ) OP_COUNT_WRAPPER1_( MAC_( 1 ), mac( a, b, c ) ) -#define msu_( a, b, c ) OP_COUNT_WRAPPER1_( MAC_( 1 ), msu( a, b, c ) ) /* Functions */ #define func_( name, x ) OP_COUNT_WRAPPER1_( FUNC_( x ), name ) -- GitLab From e0e8d0e0ace50426acd92dadadbe32612c34e034 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 14:34:19 +0200 Subject: [PATCH 11/77] replace mvr2r_Word16() and mvr2r_Word32() by MVR2R_WORD16() and MVR2R_WORD32() in order to be recognized as macros by the WMC tool --- lib_com/ivas_tools.c | 4 ++-- lib_com/prot_fx.h | 4 ++-- lib_dec/waveadjust_fec_dec_fx.c | 6 +++--- lib_enc/ext_sig_ana_fx.c | 2 +- lib_enc/ivas_front_vad.c | 4 ++-- lib_enc/speech_music_classif_fx.c | 6 +++--- lib_rend/ivas_crend.c | 4 ++-- lib_rend/ivas_reverb.c | 4 ++-- lib_rend/ivas_rotation.c | 6 +++--- lib_rend/lib_rend.c | 14 +++++++------- 10 files changed, 27 insertions(+), 27 deletions(-) diff --git a/lib_com/ivas_tools.c b/lib_com/ivas_tools.c index 0fd41f02f..82944e701 100644 --- a/lib_com/ivas_tools.c +++ b/lib_com/ivas_tools.c @@ -948,7 +948,7 @@ void v_mult_mat_fixed( pt_y++; } - mvr2r_Word32( tmp_y, y, Nc ); + MVR2R_WORD32( tmp_y, y, Nc ); } Word32 dot_product_cholesky_fx( const Word32 *x, /* i : vector x */ @@ -1050,7 +1050,7 @@ void v_mult_mat_fx( pt_y_fx++; } - mvr2r_Word32( tmp_y_fx, y_fx, Nc ); + MVR2R_WORD32( tmp_y_fx, y_fx, Nc ); return; } diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 2d5ce5faf..15bf4e36f 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -36,8 +36,8 @@ * Prototypes of RAM counting tool macros *----------------------------------------------------------------------------------*/ -#define mvr2r_Word32( x, y, n ) Copy32( x, y, n ) -#define mvr2r_Word16( x, y, n ) Copy( x, y, n ) +#define MVR2R_WORD32( x, y, n ) Copy32( x, y, n ) +#define MVR2R_WORD16( x, y, n ) Copy( x, y, n ) #include #include diff --git a/lib_dec/waveadjust_fec_dec_fx.c b/lib_dec/waveadjust_fec_dec_fx.c index 095a56bc9..083c7854c 100644 --- a/lib_dec/waveadjust_fec_dec_fx.c +++ b/lib_dec/waveadjust_fec_dec_fx.c @@ -920,7 +920,7 @@ void concealment_decode_fix( Word16 curr_mode, Word32 *invkoef, Word16 *invkoef_ IF( EQ_16( curr_mode, 1 ) ) { /* copy the data of the last frame */ - mvr2r_Word32( plcInfo->data_reci2_fx, invkoef, N ); + MVR2R_WORD32( plcInfo->data_reci2_fx, invkoef, N ); *invkoef_scale = plcInfo->data_reci2_scale; move16(); /* sign randomization */ @@ -1416,7 +1416,7 @@ static Word16 waveform_adj_fix( Word16 *overlapbuf, /* use last good signal for noise generation */ add_noise( sbuf, outx_new_n1, outdata2, tmp, nsapp_gain, nsapp_gain_n, 1 ); /* save current (noisy) output from IMDCT */ - mvr2r_Word16( outx_new, data_noise, tmp ); + MVR2R_WORD16( outx_new, data_noise, tmp ); /* overlapbuf can now be filled with sbuf, needed for subsequently lost frames */ Copy( pitch125_data, &overlapbuf[Framesize / 4], shr( imult1616( 3, Framesize ), 2 ) ); } @@ -1481,7 +1481,7 @@ void waveform_adj2_fix( Word16 *overlapbuf, /* save current (noisy) output from IMDCT */ IF( bfi ) { - mvr2r_Word16( outx_new, noise_ptr, size ); + MVR2R_WORD16( outx_new, noise_ptr, size ); } } test(); diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 3b0cdf6fa..dfc9bc981 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -612,7 +612,7 @@ void core_signal_analysis_high_bitrate_fx( } /* Copy memory */ - mvr2r_Word16( lsp_new, st->lspold_enc_fx, M ); + MVR2R_WORD16( lsp_new, st->lspold_enc_fx, M ); } } } diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c index 6182cd730..78e265baa 100644 --- a/lib_enc/ivas_front_vad.c +++ b/lib_enc/ivas_front_vad.c @@ -513,7 +513,7 @@ ivas_error front_vad_spar( floatToFixed_arr( st->mem_decim2, st->mem_decim2_fx, Q10, 3 ); // st->mem_wsp_fx = (Word16) floatToFixed( st->mem_wsp, Q_inp_12k8 ); - mvr2r_Word16( st->old_wsp_fx, old_wsp_fx, L_WSP_MEM ); + MVR2R_WORD16( st->old_wsp_fx, old_wsp_fx, L_WSP_MEM ); wsp = old_wsp + L_WSP_MEM; wsp_fx = old_wsp_fx + L_WSP_MEM; @@ -769,7 +769,7 @@ ivas_error front_vad_spar( #if 0 vad_param_updt( st, corr_shift, corr_shift, A, st->pitch[1], &hFrontVad, 1 ); #else - mvr2r_Word16( st->pitch, st->pitch, 3 ); + MVR2R_WORD16( st->pitch, st->pitch, 3 ); corr_shift_fx = (Word16) floatToFixed( corr_shift, Q15 ); hFrontVad->hVAD->running_avg_fx = (Word16) floatToFixed( hFrontVad->hVAD->running_avg, Q15 ); hFrontVad->hVAD->ra_deltasum_fx = (Word16) floatToFixed( hFrontVad->hVAD->ra_deltasum, Q15 ); diff --git a/lib_enc/speech_music_classif_fx.c b/lib_enc/speech_music_classif_fx.c index 5418a6714..677c94e04 100644 --- a/lib_enc/speech_music_classif_fx.c +++ b/lib_enc/speech_music_classif_fx.c @@ -1886,7 +1886,7 @@ Word16 ivas_smc_gmm_fx( temp32_log = L_add( BASOP_Util_Log2( ps_sta_fx ), L_shl( ps_sta_exp, Q25 ) ); temp32_log = Mpy_32_32( temp32_log, 1488522239 ); /*logf(x) = log2(x)*logf(2)*/ *pFV_fx++ = L_shr( temp32_log, Q5 ); // logf( ps_sta + 1e-5f ); - mvr2r_Word32( &PS_norm_fx[LOWEST_FBIN], hSpMusClas->past_PS_fx, HIGHEST_FBIN - LOWEST_FBIN ); + MVR2R_WORD32( &PS_norm_fx[LOWEST_FBIN], hSpMusClas->past_PS_fx, HIGHEST_FBIN - LOWEST_FBIN ); /* save ps_diff and ps_sta features for XTALK and UNCLR classifier */ IF( hStereoClassif != NULL ) @@ -1981,7 +1981,7 @@ Word16 ivas_smc_gmm_fx( } /* update */ - mvr2r_Word32( FV_fx, hSpMusClas->prev_FV_fx, N_SMC_FEATURES ); + MVR2R_WORD32( FV_fx, hSpMusClas->prev_FV_fx, N_SMC_FEATURES ); /*------------------------------------------------------------------* * Non-linear power transformation (boxcox) on certain features *------------------------------------------------------------------*/ @@ -2368,7 +2368,7 @@ Word16 ivas_smc_gmm_fx( *------------------------------------------------------------------*/ /* update buffer of past non-binary decisions */ - mvr2r_Word16( &hSpMusClas->past_dlp_fx[0], &hSpMusClas->past_dlp_fx[1], HANG_LEN - 2 ); + MVR2R_WORD16( &hSpMusClas->past_dlp_fx[0], &hSpMusClas->past_dlp_fx[1], HANG_LEN - 2 ); hSpMusClas->past_dlp_fx[0] = extract_l( L_shr( dlp_fx, 10 ) ); move16(); mvr2r( &hSpMusClas->past_dlp_mean_ST[0], &hSpMusClas->past_dlp_mean_ST[1], HANG_LEN - 2 ); diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index e9c76787d..37c588f71 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -3590,7 +3590,7 @@ ivas_error ivas_rend_crendProcess( /* move to output */ FOR( i = 0; i < nchan_out; i++ ) { - mvr2r_Word32( pcm_tmp_fx[i], output_fx[i], imult1616( num_subframes, subframe_len ) ); + MVR2R_WORD32( pcm_tmp_fx[i], output_fx[i], imult1616( num_subframes, subframe_len ) ); } pop_wmops(); @@ -3890,7 +3890,7 @@ ivas_error ivas_rend_crendProcessSubframe( /* move to output */ FOR( ch = 0; ch < nchan_out; ch++ ) { - mvr2r_Word32( pcm_tmp_fx[ch], output[ch], n_samples_to_render ); + MVR2R_WORD32( pcm_tmp_fx[ch], output[ch], n_samples_to_render ); } hTcBuffer->subframes_rendered = last_sf; diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 557105d43..4c3017f96 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -3563,8 +3563,8 @@ ivas_error ivas_reverb_process_fx( } ELSE { - mvr2r_Word32( tmp1_fx, &pcm_out_fx[0][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); - mvr2r_Word32( tmp2_fx, &pcm_out_fx[1][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); + MVR2R_WORD32( tmp1_fx, &pcm_out_fx[0][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); + MVR2R_WORD32( tmp2_fx, &pcm_out_fx[1][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); } return IVAS_ERR_OK; diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 3e9261af1..ed6c5333d 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -1025,7 +1025,7 @@ void rotateFrame_shd( /* move Rmat to Rmat_prev */ FOR( i = 0; i < 3; i++ ) { - mvr2r_Word32( + MVR2R_WORD32( hCombinedOrientationData->Rmat_fx[subframe_idx][i], hCombinedOrientationData->Rmat_prev_fx[i], 3 ); @@ -1323,7 +1323,7 @@ void rotateFrame_sd( /* move Rmat to Rmat_prev */ FOR( i = 0; i < 3; i++ ) { - mvr2r_Word32( + MVR2R_WORD32( hCombinedOrientationData->Rmat_fx[hCombinedOrientationData->subframe_idx][i], hCombinedOrientationData->Rmat_prev_fx[i], 3 ); @@ -1331,7 +1331,7 @@ void rotateFrame_sd( /* copy to output */ FOR( ch_out = 0; ch_out < nchan; ch_out++ ) { - mvr2r_Word32( &output_tmp_fx[ch_out][offset], &output[ch_out][offset], subframe_len ); + MVR2R_WORD32( &output_tmp_fx[ch_out][offset], &output[ch_out][offset], subframe_len ); } pop_wmops(); diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 3db18bcf1..de02cd323 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -7351,7 +7351,7 @@ ivas_error IVAS_REND_FeedInputAudio_fx( inputBase->inputBuffer.config = inputAudio.config; - mvr2r_Word32( inputAudio.data_fx, inputBase->inputBuffer.data_fx, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); + MVR2R_WORD32( inputAudio.data_fx, inputBase->inputBuffer.data_fx, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); inputBase->numNewSamplesPerChannel = inputAudio.config.numSamplesPerChannel; move32(); @@ -7427,7 +7427,7 @@ ivas_error IVAS_REND_FeedInputAudio( inputBase->inputBuffer.config = inputAudio.config; #ifdef IVAS_FLOAT_FIXED - mvr2r_Word32( inputAudio.data_fx, inputBase->inputBuffer.data_fx, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); + MVR2R_WORD32( inputAudio.data_fx, inputBase->inputBuffer.data_fx, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); #endif mvr2r( inputAudio.data, inputBase->inputBuffer.data, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); @@ -8870,7 +8870,7 @@ static ivas_error rotateFrameMc_fx( /* move gains to gains_prev */ FOR( i = 0; i < nchan; i++ ) { - mvr2r_Word32( gains[i], gains_prev[i], nchan ); + MVR2R_WORD32( gains[i], gains_prev[i], nchan ); } } @@ -10505,7 +10505,7 @@ static ivas_error renderLfeToBinaural_fx( v_multc_fixed( lfeInput, gain_fx, tmpLfeBuffer + num_cpy_smpl_prev_frame, num_cpy_smpl_cur_frame ); // Qinp-1 /* Save remaining LFE samples of current frame for next frame */ - mvr2r_Word32( lfeInput + num_cpy_smpl_cur_frame, mcInput->lfeDelayBuffer_fx, num_cpy_smpl_prev_frame ); + MVR2R_WORD32( lfeInput + num_cpy_smpl_cur_frame, mcInput->lfeDelayBuffer_fx, num_cpy_smpl_prev_frame ); r_shift = sub( sub( in_q, 1 ), out_q ); IF( r_shift != 0 ) @@ -11628,7 +11628,7 @@ static ivas_error renderSbaToBinaural( tmpRotBuffer.data_fx = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( Word32 ) ); /* copy input for in-place rotation */ - mvr2r_Word32( sbaInput->base.inputBuffer.data_fx, tmpRotBuffer.data_fx, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); + MVR2R_WORD32( sbaInput->base.inputBuffer.data_fx, tmpRotBuffer.data_fx, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); IF( NE_16( ( error = rotateFrameSba_fx( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, sbaInput->base.ctx.pCombinedOrientationData, sbaInput->rot_gains_prev_fx, tmpRotBuffer ) ), @@ -11798,7 +11798,7 @@ static ivas_error renderSbaToBinauralRoom( tmpRotBuffer.data_fx = malloc( imult1616( tmpRotBuffer.config.numSamplesPerChannel, tmpRotBuffer.config.numChannels ) * sizeof( Word32 ) ); /* copy input for in-place rotation */ - mvr2r_Word32( sbaInput->base.inputBuffer.data_fx, tmpRotBuffer.data_fx, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); + MVR2R_WORD32( sbaInput->base.inputBuffer.data_fx, tmpRotBuffer.data_fx, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); IF( NE_32( ( error = rotateFrameSba_fx( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, sbaInput->base.ctx.pCombinedOrientationData, @@ -12362,7 +12362,7 @@ static void renderMasaToMasa( test(); IF( EQ_16( masaInput->base.inputBuffer.config.numChannels, 1 ) && EQ_16( outAudio.config.numChannels, 2 ) ) { - mvr2r_Word32( tmpBuffer_fx[0], tmpBuffer_fx[1], masaInput->base.inputBuffer.config.numSamplesPerChannel ); + MVR2R_WORD32( tmpBuffer_fx[0], tmpBuffer_fx[1], masaInput->base.inputBuffer.config.numSamplesPerChannel ); } ELSE IF( EQ_16( masaInput->base.inputBuffer.config.numChannels, 2 ) && EQ_16( outAudio.config.numChannels, 1 ) ) { -- GitLab From 548b949b16661b6ea50e4e83a3d2dde7c4b3847d Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 14:41:53 +0200 Subject: [PATCH 12/77] rename H_fir[] to h_fir_fx[] as it is confused with h_fir[] aftyer being instrumented by the WMC tool --- lib_enc/pitch_ol_fx.c | 4 ++-- lib_enc/rom_enc.c | 2 +- lib_enc/rom_enc.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib_enc/pitch_ol_fx.c b/lib_enc/pitch_ol_fx.c index a43bdd82f..0a7d20c6a 100644 --- a/lib_enc/pitch_ol_fx.c +++ b/lib_enc/pitch_ol_fx.c @@ -2464,10 +2464,10 @@ static void LP_Decim2_Copy( move16(); FOR( i = 0; i < l; i += 2 ) { - L_tmp = L_mult( *p_x, H_fir[0] ); + L_tmp = L_mult( *p_x, h_fir_fx[0] ); FOR( k = 1; k < L_FIR_PO; k++ ) { - L_tmp = L_mac( L_tmp, p_x[k], H_fir[k] ); + L_tmp = L_mac( L_tmp, p_x[k], h_fir_fx[k] ); } p_x += 2; diff --git a/lib_enc/rom_enc.c b/lib_enc/rom_enc.c index 3b9302765..49ea00a49 100644 --- a/lib_enc/rom_enc.c +++ b/lib_enc/rom_enc.c @@ -231,7 +231,7 @@ const int16_t sublen1_12k8[7] = { 40, 40, 50, 50, 80, 80, 115 }; const int16_t sec_length_12k8[4] = { 7, 15, 30, 54 }; const int16_t sec_length1_12k8[4] = { 10, 19, 37, 38 }; const float h_fir[5] = {0.13f, 0.23f, 0.28f, 0.23f, 0.13f}; -const Word16 H_fir[] = { 4260, 7536, 9175, 7536, 4260 }; +const Word16 h_fir_fx[] = { 4260, 7536, 9175, 7536, 4260 }; const float W_HIST[DTX_HIST_SIZE] = { diff --git a/lib_enc/rom_enc.h b/lib_enc/rom_enc.h index 3542e43a6..3c2dbe11a 100644 --- a/lib_enc/rom_enc.h +++ b/lib_enc/rom_enc.h @@ -61,7 +61,7 @@ extern const int16_t bwd_start_bin[]; extern const int16_t bwd_end_bin[]; extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ -extern const Word16 H_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ +extern const Word16 h_fir_fx[]; /* 2nd order fir filter for wsp, decimation by 2 */ extern const float preemphCompensation[]; extern const Word16 preemphCompensation_fx[]; -- GitLab From 5523af572513bc854d3c7421a58f087d3dfc3877 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 14:44:42 +0200 Subject: [PATCH 13/77] avoid instrumenting pTransientDetector->CheckSubblocksForAttack_fx() by the WMC tool (same as in float codebase) --- lib_enc/transient_detection_fx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_enc/transient_detection_fx.c b/lib_enc/transient_detection_fx.c index c57facc67..182f2acc5 100644 --- a/lib_enc/transient_detection_fx.c +++ b/lib_enc/transient_detection_fx.c @@ -569,10 +569,12 @@ static void RunTransientDetector( TransientDetector *pTransientDetector ) assert( ( pTransientDetector->CheckSubblocksForAttack_fx != NULL ) ); +#define WMC_TOOL_SKIP pTransientDetector->CheckSubblocksForAttack_fx( pSubblockNrg, pAccSubblockNrg, NSUBBLOCKS + nDelay, nRelativeDelay, attackRatioThreshold, &pTransientDetector->bIsAttackPresent, &pTransientDetector->attackIndex ); +#undef WMC_TOOL_SKIP } static void UpdateDelayBuffer( Word16 const *input, Word16 nSamplesAvailable, DelayBuffer *pDelayBuffer ) -- GitLab From 967698303f3f7e28f0e02bba612ac427d4ea9fdf Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 15:18:27 +0200 Subject: [PATCH 14/77] include wmc_auto.h in stl.h --- lib_com/stl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/stl.h b/lib_com/stl.h index ad437e3b2..77e55b866 100644 --- a/lib_com/stl.h +++ b/lib_com/stl.h @@ -71,7 +71,7 @@ #include "typedef.h" #include "basop32.h" #include "count.h" -//#include "wmc_auto.h" +#include "wmc_auto.h" #include "move.h" #include "control.h" #include "oper_32b.h" -- GitLab From d4266524f06112c31118eb7034bf460e6145c4a9 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 15:19:34 +0200 Subject: [PATCH 15/77] avoid instrumenting of auxiliary float <-> fixed conversion functions --- lib_com/tools_fx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib_com/tools_fx.c b/lib_com/tools_fx.c index 919da71e3..bc78bfdb3 100644 --- a/lib_com/tools_fx.c +++ b/lib_com/tools_fx.c @@ -60,6 +60,8 @@ const Word16 b_hp400_fx[3] = { 3660, -7320, 3660 }; /* Q12 (/4) */ const Word16 a_hp400_fx[3] = { 16384, 29280, -14160 }; const Word16 a_hp400_ivas_fx[3] = { 4096, 7320, -3540 }; /*Q12*/ +#define WMC_TOOL_SKIP + // conversion functions: Word32 float_to_fix( float number, Word32 Q ) { @@ -238,6 +240,8 @@ void fix2f_16( Word16 *var_fix, float *var_flt, Word32 expo ) *var_flt = (float) ldexp( mf, expo ); } +#undef WMC_TOOL_SKIP + int16_t norm_ul( uint32_t UL_var1 ) { int16_t var_out; -- GitLab From 46ca697e8c8cca269a260d55fe91a56113e31673 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 16:41:41 +0200 Subject: [PATCH 16/77] avoid instrumenting the function param->GetNumberOfBits() similarly as in the float codebase --- lib_com/parameter_bitmaping.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_com/parameter_bitmaping.c b/lib_com/parameter_bitmaping.c index 2be70b058..aae7af5f0 100644 --- a/lib_com/parameter_bitmaping.c +++ b/lib_com/parameter_bitmaping.c @@ -326,7 +326,9 @@ void WriteToBitstream_fx( nBits = param->nBits; IF( param->nBits == 0 ) { +#define WMC_TOOL_SKIP nBits = param->GetNumberOfBits( **pStream, index ); +#undef WMC_TOOL_SKIP } test(); -- GitLab From 426763e1fea8028de7ae8eeda02e2a7aa3c9db58 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 16:48:55 +0200 Subject: [PATCH 17/77] duplicate definition of FAC --- lib_com/count.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index 593ae38c5..7635a791a 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -1052,9 +1052,6 @@ Word32 BASOP_get_wops( void ) return BASOP_pop_wmops(); } -#define FRAMES_PER_SECOND 50.0 -#define MILLION_CYCLES 1e6 -#define FAC ( FRAMES_PER_SECOND / MILLION_CYCLES ) #if WMOPS static Word32 prom_cnt = 0; -- GitLab From 99e84ae1c89152da808d40f49bad8d42919d317f Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 16:54:37 +0200 Subject: [PATCH 18/77] rename Tab_hup_s[], Tab_hup_l[] and Hamcos_Window[] to avoid confusion with similarly named float variants when instrumented with the WMC tool --- lib_com/rom_com.c | 6 +++--- lib_com/rom_com.h | 6 +++--- lib_dec/dec_post_fx.c | 4 ++-- lib_enc/analy_lp_fx.c | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c index 3bf612bca..8bc681806 100644 --- a/lib_com/rom_com.c +++ b/lib_com/rom_com.c @@ -41807,13 +41807,13 @@ const Word16 Gamma_29491_Tbl[] = { * NB post-filter tables *---------------------------------------------------------------------*/ -const Word16 Tab_hup_s[SIZ_TAB_HUP_S] = { +const Word16 tab_hup_s_fx[SIZ_TAB_HUP_S] = { -188, 2873, 31650, -1597, -484, 7041, 28469, -2147, -933, 12266, 23705, -1992, -1492, 18050, 18050, -1492, -1992, 23705, 12266, -933, -2147, 28469, 7041, -484, -1597, 31650, 2873, -188 }; -const Word16 Tab_hup_l[SIZ_TAB_HUP_L] = { +const Word16 tab_hup_l_fx[SIZ_TAB_HUP_L] = { -40, 72, -156, 315, -579, 1023, -1874, 4439, 31915, -3390, 1595, -887, 501, -266, 130, -59, -77, 147, -317, 631, -1150, 2030, -3773, 9639, @@ -42043,7 +42043,7 @@ const Word16 pwf78_fx[17] = { 25559, 19936, 15550, 12129, 9460, 7379, 5755, 4489 * lag window for windowing the autocorrelations in LP analysis * Used in lib_enc\analy_lp_fx.c *------------------------------------------------------------------------------*/ -const Word16 Hamcos_Window[L_LP_AMR_WB] = { +const Word16 hamcos_window_fx[L_LP_AMR_WB] = { 2621, 2622, 2626, 2632, 2640, 2650, 2662, 2677, 2694, 2714, 2735, 2759, 2785, 2814, 2844, 2877, 2912, 2949, 2989, 3031, 3075, 3121, 3169, 3220, diff --git a/lib_com/rom_com.h b/lib_com/rom_com.h index a4d78c03a..43384b6f0 100644 --- a/lib_com/rom_com.h +++ b/lib_com/rom_com.h @@ -2103,8 +2103,8 @@ extern const Word16 Gamma_29491_Tbl[]; * NB post-filter tables *---------------------------------------------------------------------*/ -extern const Word16 Tab_hup_s[]; -extern const Word16 Tab_hup_l[]; +extern const Word16 tab_hup_s_fx[]; +extern const Word16 tab_hup_l_fx[]; extern const Word16 mfreq_loc_Q2fx[]; extern const Word16 mfreq_loc_div_25[]; @@ -2160,7 +2160,7 @@ enum FUNC_GAIN_ENC FUNC_GAIN_ENC_GACELP_UV /* UV GACELP gain quantizer ((7=5-2bits/subfr) */ }; -extern const Word16 Hamcos_Window[]; +extern const Word16 hamcos_window_fx[]; extern const Word16 CNG_burst_att_fx[6][8]; extern const Word16 lpc_weights_fx[]; extern const Word16 SHBCB_SubGain5bit_12_fx[]; /* 5 bit Quantizer table for SHB gain shapes */ diff --git a/lib_dec/dec_post_fx.c b/lib_dec/dec_post_fx.c index a8580c8ce..7826cabc4 100644 --- a/lib_dec/dec_post_fx.c +++ b/lib_dec/dec_post_fx.c @@ -1070,7 +1070,7 @@ static void search_del_fx( move32(); ptr_L_den0 = L_den0; ptr_L_den1 = L_den1; - ptr_h = Tab_hup_s; + ptr_h = tab_hup_s_fx; temp = sub( lambda, LH_UP_S - 1 ); ptr_sig_past0 = ptr_sig_in - temp; @@ -1420,7 +1420,7 @@ static void compute_ltp_l_fx( temp = sub( phase, 1 ); temp = shl( temp, L2_LH2_L ); - ptr_h = Tab_hup_l + temp; /* Tab_hup_l + LH2_L * (phase-1) */ + ptr_h = tab_hup_l_fx + temp; /* tab_hup_l_fx + LH2_L * (phase-1) */ temp = sub( LH_UP_L, ltpdel ); ptr2 = s_in + temp; diff --git a/lib_enc/analy_lp_fx.c b/lib_enc/analy_lp_fx.c index b8582d271..314f7a9c2 100644 --- a/lib_enc/analy_lp_fx.c +++ b/lib_enc/analy_lp_fx.c @@ -145,7 +145,7 @@ void analy_lp_AMR_WB_fx( /* Initialization */ wind_length = L_LP_AMR_WB; move16(); - wind = Hamcos_Window; + wind = hamcos_window_fx; /* Autocorrelations */ autocorr_fx( speech - L_SUBFR, M, r_h, r_l, &Q_r[0], wind_length, wind, 0, 0 ); -- GitLab From eb61da9a7e5edb0de48a8d793f6621e9b4b6dc04 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 17:19:45 +0200 Subject: [PATCH 19/77] remove #include "tools_fx.c" preventing compilation --- lib_enc/init_enc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index bd39b693f..68d4b46b4 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -47,7 +47,6 @@ #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #endif -#include "tools_fx.c" #include "prot_fx_enc.h" /*-----------------------------------------------------------------------* -- GitLab From 0c867114bf69f8b5799ce4c51b2b411864dba8cc Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 22 Jul 2024 17:23:44 +0200 Subject: [PATCH 20/77] correction of warning about /* inside comment --- lib_debug/wmc_auto.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 587fe37f9..458b758d1 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -734,8 +734,8 @@ static int wmc_flag_ = 0; #define frexpf_ OP_COUNT_WRAPPER1_( MISC_( 2 ), frexpf ) /* the macros below are instrumented versions of user-defined macros that might be used in the source code -/* representing some well-known and recognized mathematical operations (that are not defined in math.h) */ -/* Note: the 'wmc_flag_=wmc_flag_' is used to avoid warning: left-hand operand of comma expression has no effect with gcc */ + representing some well-known and recognized mathematical operations (that are not defined in math.h) + Note: the 'wmc_flag_=wmc_flag_' is used to avoid warning: left-hand operand of comma expression has no effect with gcc */ #define min_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), min( ( a ), ( b ) ) ) #define max_( a, b ) OP_COUNT_WRAPPER1_( MISC_( 1 ), max( ( a ), ( b ) ) ) -- GitLab From cf8aeee8a322b71fd4cd55ec08b26bb02ea19e5f Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 10:24:39 +0200 Subject: [PATCH 21/77] do not include stl.h as it results in RPCDERR compiler error --- lib_com/options.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 34e869556..f535c854f 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -41,8 +41,6 @@ #include "debug.h" #endif -#include "stl.h" - /* clang-format off */ /* ################### Start compiler switches ######################## */ -- GitLab From 6d3d9f2384c28ec26fa12d7fff0f707a374de232 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 10:25:18 +0200 Subject: [PATCH 22/77] include typedef.h to resolve unknown Word16 type --- lib_dec/jbm_pcmdsp_window.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib_dec/jbm_pcmdsp_window.h b/lib_dec/jbm_pcmdsp_window.h index 1abf57f33..9a20fdab2 100644 --- a/lib_dec/jbm_pcmdsp_window.h +++ b/lib_dec/jbm_pcmdsp_window.h @@ -41,6 +41,7 @@ #include #include "options.h" +#include "typedef.h" /*! Generates a Hann window (cos-shaped) of length n. * Roughly: -- GitLab From 5f0e23f6a49db95dab429395642cbf4521c3f83c Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 10:39:46 +0200 Subject: [PATCH 23/77] remove warning about * in comment --- lib_debug/wmc_auto.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 458b758d1..c7034fca3 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -984,7 +984,7 @@ typedef struct ROM_Size_Lookup_Table * ROM_Size_Lookup_Table Const_Data_PROM_Table[] = * { * {"../lib_enc/rom_enc.c", 0, NULL}, - * {"../lib_com/*.c", 0, NULL}, + * {"../lib_com/[star].c", 0, NULL}, * {"", -1, NULL} * }; * #endif -- GitLab From 2472f1f8f25fcd7b7e19a0a65a28137679d50fb4 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 10:56:24 +0200 Subject: [PATCH 24/77] resolve warnings about const qualifiers --- lib_com/count.c | 12 +++++++----- lib_com/count.h | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index 7635a791a..73138b08f 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -299,7 +299,7 @@ static char *my_strdup( const char *s ) #endif /* ifdef WMOPS */ -int getCounterId( char *objectNameArg ) +int getCounterId( const char *objectNameArg ) { #if WMOPS if ( maxCounter >= MAXCOUNTERS - 1 ) @@ -427,11 +427,12 @@ Word32 TotalWeightedOperation() { #if WMOPS Word16 i; - Word32 tot, *ptr, *ptr2; + Word32 tot, *ptr; + const Word32 *ptr2; tot = 0; ptr = (Word32 *) &multiCounter[currCounter]; - ptr2 = (Word32 *) &op_weight; + ptr2 = (const Word32 *) &op_weight; for ( i = 0; i < (Word16) ( sizeof( multiCounter[currCounter] ) / sizeof( Word32 ) ); i++ ) { tot += ( ( *ptr++ ) * ( *ptr2++ ) ); @@ -637,7 +638,8 @@ void generic_WMOPS_output( Word16 dtx_mode, char *test_file_name ) #if WMOPS int saved_value; Word16 i; - Word32 tot, tot_wm, tot_wc, *ptr, *ptr2; + Word32 tot, tot_wm, tot_wc, *ptr; + const Word32 *ptr2; Word40 grand_total; FILE *WMOPS_file; @@ -746,7 +748,7 @@ void generic_WMOPS_output( Word16 dtx_mode, char *test_file_name ) tot = 0; ptr = (Word32 *) &multiCounter[0] + i; - ptr2 = (Word32 *) &op_weight + i; + ptr2 = (const Word32 *) &op_weight + i; for ( currCounter = 0; currCounter <= maxCounter; currCounter++ ) { tot += ( ( *ptr ) * ( *ptr2 ) ); diff --git a/lib_com/count.h b/lib_com/count.h index 1e5cd8408..5e04c4083 100644 --- a/lib_com/count.h +++ b/lib_com/count.h @@ -60,12 +60,12 @@ #ifndef _COUNT_H #define _COUNT_H "$Id$" -/*#define WMOPS 1*/ /* <<<- enable or disable WMOPS profiling features here */ +/* #define WMOPS 1*/ /* <<<- enable or disable WMOPS profiling features here */ #define MAXCOUNTERS ( 512 ) #define MAX_CALLERS_SAVED_FRAMES 5 /* # of Frame for which WMOPS Complexity Details will be saved, 0 = Disabled */ -int getCounterId( char *objectName ); +int getCounterId( const char *objectName ); /* * Create a counter group, the "objectname" will be used when printing * statistics for this counter group. -- GitLab From 67746a447648d63f68a85d436158e24722bb9034 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 12:56:03 +0200 Subject: [PATCH 25/77] cleanup --- lib_com/count.h | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/lib_com/count.h b/lib_com/count.h index 5e04c4083..26b6b577b 100644 --- a/lib_com/count.h +++ b/lib_com/count.h @@ -60,7 +60,9 @@ #ifndef _COUNT_H #define _COUNT_H "$Id$" -/* #define WMOPS 1*/ /* <<<- enable or disable WMOPS profiling features here */ +#include + +/* #define WMOPS 1 */ /* <<<- enable or disable WMOPS profiling features here */ #define MAXCOUNTERS ( 512 ) #define MAX_CALLERS_SAVED_FRAMES 5 /* # of Frame for which WMOPS Complexity Details will be saved, 0 = Disabled */ @@ -585,29 +587,11 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ); #define SUB_WMOPS_INIT( label ) BASOP_sub_start( label ) #define END_SUB_WMOPS BASOP_sub_end() - -#if !defined WMOPS_FL //&& defined WMOPS -#include -#define reset_wmops() BASOP_init -// extern int cntr_push_pop; -#define push_wmops( x ) \ - { \ - BASOP_push_wmops( x ); \ - } -#define pop_wmops() \ - { \ - BASOP_pop_wmops(); \ - } -#define update_wmops() \ - { \ - BASOP_frame_update(); \ - } -#define print_wmops() \ - { \ - WMOPS_output_all_std( 0 ); \ - } -#define update_mem() ; -#endif +#define reset_wmops() { BASOP_init } +#define push_wmops( x ) { BASOP_push_wmops( x ); } +#define pop_wmops() { BASOP_pop_wmops(); } +#define update_wmops() { BASOP_frame_update(); } +#define print_wmops() { WMOPS_output_all_std( 0 ); } #endif /* _COUNT_H */ -- GitLab From 57643faf3e0ad0aa085ca6ca4a6053cadfe958af Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 12:56:48 +0200 Subject: [PATCH 26/77] deactivate main wmops-related functions inside WMC tool --- lib_debug/wmc_auto.c | 32 +++++----- lib_debug/wmc_auto.h | 148 ++++++++++++++++++++++--------------------- 2 files changed, 91 insertions(+), 89 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index eafa02a2e..14f8a5f05 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -65,8 +65,8 @@ struct wmops_record #endif }; -double ops_cnt; -double prom_cnt; +double ops_cnt_wmc; +double prom_cnt_wmc; double inst_cnt[NUM_INST]; static struct wmops_record wmops[MAX_RECORDS]; @@ -83,6 +83,7 @@ static long fnum_cnt_wc; static int *heap_allocation_call_tree = NULL, heap_allocation_call_tree_size = 0, heap_allocation_call_tree_max_size = 0; +#if 0 /* -> declared in count.c instead */ void reset_wmops( void ) { @@ -126,10 +127,9 @@ void reset_wmops( void ) max_cnt = 0.0; min_cnt = DOUBLE_MAX; start_cnt = 0.0; - ops_cnt = 0.0; + ops_cnt_wmc = 0.0; } - void push_wmops( const char *label ) { int new_flag; @@ -169,7 +169,7 @@ void push_wmops( const char *label ) stack[sptr++] = current_record; /* accumulate op counts */ - wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; + wmops[current_record].current_selfcnt += ops_cnt_wmc - wmops[current_record].start_selfcnt; /* update call tree */ for ( j = 0; j < MAX_RECORDS; j++ ) @@ -188,8 +188,8 @@ void push_wmops( const char *label ) /* init current record */ current_record = i; - wmops[current_record].start_selfcnt = ops_cnt; - wmops[current_record].start_cnt = ops_cnt; + wmops[current_record].start_selfcnt = ops_cnt_wmc; + wmops[current_record].start_cnt = ops_cnt_wmc; wmops[current_record].call_number++; #ifdef WMOPS_WC_FRAME_ANALYSIS wmops[current_record].current_call_number++; @@ -210,14 +210,14 @@ void pop_wmops( void ) } /* update count of current record */ - wmops[current_record].current_selfcnt += ops_cnt - wmops[current_record].start_selfcnt; - wmops[current_record].current_cnt += ops_cnt - wmops[current_record].start_cnt; + wmops[current_record].current_selfcnt += ops_cnt_wmc - wmops[current_record].start_selfcnt; + wmops[current_record].current_cnt += ops_cnt_wmc - wmops[current_record].start_cnt; /* Get back previous context from stack */ if ( sptr > 0 ) { current_record = stack[--sptr]; - wmops[current_record].start_selfcnt = ops_cnt; + wmops[current_record].start_selfcnt = ops_cnt_wmc; } else { @@ -263,7 +263,7 @@ void update_wmops( void ) #endif #ifdef WMOPS_WC_FRAME_ANALYSIS - if ( ops_cnt - start_cnt > max_cnt ) + if ( ops_cnt_wmc - start_cnt > max_cnt ) { for ( i = 0; i < num_records; i++ ) { @@ -315,7 +315,7 @@ void update_wmops( void ) #endif } - current_cnt = ops_cnt - start_cnt; + current_cnt = ops_cnt_wmc - start_cnt; if ( current_cnt > max_cnt ) { max_cnt = current_cnt; @@ -338,7 +338,7 @@ void update_wmops( void ) inst_cnt[i] = 0.0; } - start_cnt = ops_cnt; + start_cnt = ops_cnt_wmc; /* increment frame counter */ update_cnt++; @@ -380,7 +380,7 @@ void print_wmops( void ) } fprintf( stdout, sfmts, "---------------", "------", "------", "------", "------" ); - fprintf( stdout, dfmts, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt / update_cnt ); + fprintf( stdout, dfmts, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt_wmc / update_cnt ); fprintf( stdout, "\n" ); #ifdef WMOPS_WC_FRAME_ANALYSIS @@ -499,7 +499,7 @@ void print_wmops( void ) return; } - +#endif /*-------------------------------------------------------------------* * Memory counting tool measuring RAM usage (stack and heap) @@ -1922,5 +1922,5 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) #ifndef WMOPS_FLT int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ -double ops_cnt; +double ops_cnt_wmc; #endif diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index c7034fca3..01a8b1c02 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -23,6 +23,8 @@ #include /* stdio is needed for fprintf() */ #endif +#include "options.h" + /* To Prevent "warning: '$' in identifier or number" message under GCC */ #ifdef __GNUC__ @@ -107,14 +109,14 @@ enum instructions #define ADD( x ) \ { \ { \ - ops_cnt += ( _ADD_C * ( x ) ); \ + ops_cnt_wmc += ( _ADD_C * ( x ) ); \ inst_cnt[_ADD] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _ADD_P * ( x ) ); \ + prom_cnt_wmc += ( _ADD_P * ( x ) ); \ } \ } \ } \ @@ -122,14 +124,14 @@ enum instructions #define ABS( x ) \ { \ { \ - ops_cnt += ( _ABS_C * ( x ) ); \ + ops_cnt_wmc += ( _ABS_C * ( x ) ); \ inst_cnt[_ABS] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _ABS_P * ( x ) ); \ + prom_cnt_wmc += ( _ABS_P * ( x ) ); \ } \ } \ } \ @@ -137,14 +139,14 @@ enum instructions #define MULT( x ) \ { \ { \ - ops_cnt += ( _MULT_C * ( x ) ); \ + ops_cnt_wmc += ( _MULT_C * ( x ) ); \ inst_cnt[_MULT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MULT_P * ( x ) ); \ + prom_cnt_wmc += ( _MULT_P * ( x ) ); \ } \ } \ } \ @@ -152,14 +154,14 @@ enum instructions #define MAC( x ) \ { \ { \ - ops_cnt += ( _MAC_C * ( x ) ); \ + ops_cnt_wmc += ( _MAC_C * ( x ) ); \ inst_cnt[_MAC] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MAC_P * ( x ) ); \ + prom_cnt_wmc += ( _MAC_P * ( x ) ); \ } \ } \ } \ @@ -167,14 +169,14 @@ enum instructions #define MOVE( x ) \ { \ { \ - ops_cnt += ( _MOVE_C * ( x ) ); \ + ops_cnt_wmc += ( _MOVE_C * ( x ) ); \ inst_cnt[_MOVE] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MOVE_P * ( x ) ); \ + prom_cnt_wmc += ( _MOVE_P * ( x ) ); \ } \ } \ } \ @@ -182,14 +184,14 @@ enum instructions #define STORE( x ) \ { \ { \ - ops_cnt += ( _STORE_C * ( x ) ); \ + ops_cnt_wmc += ( _STORE_C * ( x ) ); \ inst_cnt[_STORE] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _STORE_P * ( x ) ); \ + prom_cnt_wmc += ( _STORE_P * ( x ) ); \ } \ } \ } \ @@ -197,14 +199,14 @@ enum instructions #define LOGIC( x ) \ { \ { \ - ops_cnt += ( _LOGIC_C * ( x ) ); \ + ops_cnt_wmc += ( _LOGIC_C * ( x ) ); \ inst_cnt[_LOGIC] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _LOGIC_P * ( x ) ); \ + prom_cnt_wmc += ( _LOGIC_P * ( x ) ); \ } \ } \ } \ @@ -212,14 +214,14 @@ enum instructions #define SHIFT( x ) \ { \ { \ - ops_cnt += ( _SHIFT_C * ( x ) ); \ + ops_cnt_wmc += ( _SHIFT_C * ( x ) ); \ inst_cnt[_SHIFT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _SHIFT_P * ( x ) ); \ + prom_cnt_wmc += ( _SHIFT_P * ( x ) ); \ } \ } \ } \ @@ -227,14 +229,14 @@ enum instructions #define BRANCH( x ) \ { \ { \ - ops_cnt += ( _BRANCH_C * ( x ) ); \ + ops_cnt_wmc += ( _BRANCH_C * ( x ) ); \ inst_cnt[_BRANCH] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _BRANCH_P * ( x ) ); \ + prom_cnt_wmc += ( _BRANCH_P * ( x ) ); \ } \ } \ } \ @@ -242,14 +244,14 @@ enum instructions #define DIV( x ) \ { \ { \ - ops_cnt += ( _DIV_C * ( x ) ); \ + ops_cnt_wmc += ( _DIV_C * ( x ) ); \ inst_cnt[_DIV] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _DIV_P * ( x ) ); \ + prom_cnt_wmc += ( _DIV_P * ( x ) ); \ } \ } \ } \ @@ -257,14 +259,14 @@ enum instructions #define SQRT( x ) \ { \ { \ - ops_cnt += ( _SQRT_C * ( x ) ); \ + ops_cnt_wmc += ( _SQRT_C * ( x ) ); \ inst_cnt[_SQRT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _SQRT_P * ( x ) ); \ + prom_cnt_wmc += ( _SQRT_P * ( x ) ); \ } \ } \ } \ @@ -272,14 +274,14 @@ enum instructions #define TRANS( x ) \ { \ { \ - ops_cnt += ( _TRANS_C * ( x ) ); \ + ops_cnt_wmc += ( _TRANS_C * ( x ) ); \ inst_cnt[_TRANS] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _TRANS_P * ( x ) ); \ + prom_cnt_wmc += ( _TRANS_P * ( x ) ); \ } \ } \ } \ @@ -287,14 +289,14 @@ enum instructions #define LOOP( x ) \ { \ { \ - ops_cnt += ( _LOOP_C * ( x ) ); \ + ops_cnt_wmc += ( _LOOP_C * ( x ) ); \ inst_cnt[_LOOP] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _LOOP_P * ( x ) ); \ + prom_cnt_wmc += ( _LOOP_P * ( x ) ); \ } \ } \ } \ @@ -302,14 +304,14 @@ enum instructions #define INDIRECT( x ) \ { \ { \ - ops_cnt += ( _INDIRECT_C * ( x ) ); \ + ops_cnt_wmc += ( _INDIRECT_C * ( x ) ); \ inst_cnt[_INDIRECT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _INDIRECT_P * ( x ) ); \ + prom_cnt_wmc += ( _INDIRECT_P * ( x ) ); \ } \ } \ } \ @@ -317,14 +319,14 @@ enum instructions #define PTR_INIT( x ) \ { \ { \ - ops_cnt += ( _PTR_INIT_C * ( x ) ); \ + ops_cnt_wmc += ( _PTR_INIT_C * ( x ) ); \ inst_cnt[_PTR_INIT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _PTR_INIT_P * ( x ) ); \ + prom_cnt_wmc += ( _PTR_INIT_P * ( x ) ); \ } \ } \ } \ @@ -332,14 +334,14 @@ enum instructions #define TEST( x ) \ { \ { \ - ops_cnt += ( _TEST_C * ( x ) ); \ + ops_cnt_wmc += ( _TEST_C * ( x ) ); \ inst_cnt[_TEST] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _TEST_P * ( x ) ); \ + prom_cnt_wmc += ( _TEST_P * ( x ) ); \ } \ } \ } \ @@ -347,14 +349,14 @@ enum instructions #define POWER( x ) \ { \ { \ - ops_cnt += ( _POWER_C * ( x ) ); \ + ops_cnt_wmc += ( _POWER_C * ( x ) ); \ inst_cnt[_POWER] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _POWER_P * ( x ) ); \ + prom_cnt_wmc += ( _POWER_P * ( x ) ); \ } \ } \ } \ @@ -362,14 +364,14 @@ enum instructions #define LOG( x ) \ { \ { \ - ops_cnt += ( _LOG_C * ( x ) ); \ + ops_cnt_wmc += ( _LOG_C * ( x ) ); \ inst_cnt[_LOG] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _LOG_P * ( x ) ); \ + prom_cnt_wmc += ( _LOG_P * ( x ) ); \ } \ } \ } \ @@ -377,14 +379,14 @@ enum instructions #define MISC( x ) \ { \ { \ - ops_cnt += ( _MISC_C * ( x ) ); \ + ops_cnt_wmc += ( _MISC_C * ( x ) ); \ inst_cnt[_MISC] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MISC_P * ( x ) ); \ + prom_cnt_wmc += ( _MISC_P * ( x ) ); \ } \ } \ } \ @@ -393,7 +395,7 @@ enum instructions #define FUNC( x ) \ { \ { \ - ops_cnt += ( _FUNC_C + _MOVE_C * ( x ) ); \ + ops_cnt_wmc += ( _FUNC_C + _MOVE_C * ( x ) ); \ inst_cnt[_FUNC]++; \ inst_cnt[_MOVE] += ( x ); \ { \ @@ -401,7 +403,7 @@ enum instructions if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _FUNC_P + _MOVE_P * ( x ) ); \ + prom_cnt_wmc += ( _FUNC_P + _MOVE_P * ( x ) ); \ } \ } \ } \ @@ -410,14 +412,14 @@ enum instructions #define DADD( x ) \ { \ { \ - ops_cnt += ( 2 * _ADD_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _ADD_C * ( x ) ); \ inst_cnt[_ADD] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _ADD_P * ( x ) ); \ + prom_cnt_wmc += ( _ADD_P * ( x ) ); \ } \ } \ } \ @@ -425,14 +427,14 @@ enum instructions #define DMULT( x ) \ { \ { \ - ops_cnt += ( 2 * _MULT_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _MULT_C * ( x ) ); \ inst_cnt[_MULT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MULT_P * ( x ) ); \ + prom_cnt_wmc += ( _MULT_P * ( x ) ); \ } \ } \ } \ @@ -440,14 +442,14 @@ enum instructions #define DMAC( x ) \ { \ { \ - ops_cnt += ( 2 * _MAC_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _MAC_C * ( x ) ); \ inst_cnt[_MAC] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MAC_P * ( x ) ); \ + prom_cnt_wmc += ( _MAC_P * ( x ) ); \ } \ } \ } \ @@ -455,14 +457,14 @@ enum instructions #define DMOVE( x ) \ { \ { \ - ops_cnt += ( 2 * _MOVE_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _MOVE_C * ( x ) ); \ inst_cnt[_MOVE] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _MOVE_P * ( x ) ); \ + prom_cnt_wmc += ( _MOVE_P * ( x ) ); \ } \ } \ } \ @@ -470,14 +472,14 @@ enum instructions #define DSTORE( x ) \ { \ { \ - ops_cnt += ( 2 * _STORE_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _STORE_C * ( x ) ); \ inst_cnt[_STORE] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _STORE_P * ( x ) ); \ + prom_cnt_wmc += ( _STORE_P * ( x ) ); \ } \ } \ } \ @@ -485,14 +487,14 @@ enum instructions #define DLOGIC( x ) \ { \ { \ - ops_cnt += ( 2 * _LOGIC_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _LOGIC_C * ( x ) ); \ inst_cnt[_LOGIC] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _LOGIC_P * ( x ) ); \ + prom_cnt_wmc += ( _LOGIC_P * ( x ) ); \ } \ } \ } \ @@ -500,14 +502,14 @@ enum instructions #define DSHIFT( x ) \ { \ { \ - ops_cnt += ( 2 * _SHIFT_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _SHIFT_C * ( x ) ); \ inst_cnt[_SHIFT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _SHIFT_P * ( x ) ); \ + prom_cnt_wmc += ( _SHIFT_P * ( x ) ); \ } \ } \ } \ @@ -515,14 +517,14 @@ enum instructions #define DDIV( x ) \ { \ { \ - ops_cnt += ( 2 * _DIV_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _DIV_C * ( x ) ); \ inst_cnt[_DIV] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _DIV_P * ( x ) ); \ + prom_cnt_wmc += ( _DIV_P * ( x ) ); \ } \ } \ } \ @@ -530,14 +532,14 @@ enum instructions #define DSQRT( x ) \ { \ { \ - ops_cnt += ( 2 * _SQRT_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _SQRT_C * ( x ) ); \ inst_cnt[_SQRT] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _SQRT_P * ( x ) ); \ + prom_cnt_wmc += ( _SQRT_P * ( x ) ); \ } \ } \ } \ @@ -545,42 +547,42 @@ enum instructions #define DTRANS( x ) \ { \ { \ - ops_cnt += ( 2 * _TRANS_C * ( x ) ); \ + ops_cnt_wmc += ( 2 * _TRANS_C * ( x ) ); \ inst_cnt[_TRANS] += ( x ); \ { \ static int pcnt; \ if ( !pcnt ) \ { \ pcnt = 1; \ - prom_cnt += ( _TRANS_P * ( x ) ); \ + prom_cnt_wmc += ( _TRANS_P * ( x ) ); \ } \ } \ } \ } -extern double ops_cnt; -extern double prom_cnt; -extern double inst_cnt[NUM_INST]; -extern int ops_cnt_activ; - -void reset_wmops( void ); +#if 0 /* -> defined in count.h instead */ +void reset_wmops_wmc( void ); void push_wmops( const char *label ); void pop_wmops( void ); void update_wmops( void ); -void update_mem( void ); void print_wmops( void ); +#endif +extern double ops_cnt_wmc; +extern double prom_cnt_wmc; +extern double inst_cnt[NUM_INST]; +void update_mem( void ); -#else /* WMOPS_FL counting disabled */ +#else /* WMOPS_FLT counting disabled */ #if 0 /* -> defined in count.h instead */ #include #define reset_wmops() -extern int cntr_push_pop; #define push_wmops( x ) ( cntr_push_pop++ ) #define pop_wmops() ( cntr_push_pop-- ) #define update_wmops() ( assert( cntr_push_pop == 0 ) ) -#define update_mem() #define print_wmops() #endif +#define update_mem() +extern int cntr_push_pop; #define ADD( x ) #define ABS( x ) @@ -620,7 +622,7 @@ extern int cntr_push_pop; #ifndef mac #define mac( a, b, c ) ( ( a ) + ( b ) * ( c ) ) #endif -#ifndef mac +#ifndef msu #define msu( a, b, c ) ( ( a ) - ( b ) * ( c ) ) #endif @@ -639,8 +641,8 @@ extern int cntr_push_pop; #else -/* '*ops_cnt_ptr' is Used to Avoid: "warning: operation on 'ops_cnt' may be undefined" with Cygwin gcc Compiler */ -static double *ops_cnt_ptr = &ops_cnt; +/* '*ops_cnt_ptr' is Used to Avoid: "warning: operation on 'ops_cnt_wmc' may be undefined" with Cygwin gcc Compiler */ +static double *ops_cnt_ptr = &ops_cnt_wmc; #define OP_COUNT_( op, x ) ( *ops_cnt_ptr += ( op##_C * ( x ) ), inst_cnt[op] += ( x ) ) /******************************************************************/ -- GitLab From 9b97446aed12be44e6c9d53530dd8291af6eed54 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 13:18:33 +0200 Subject: [PATCH 27/77] corrections in main encoder/decoder functions --- apps/decoder.c | 61 +++++++++++++++++++++----------------------------- apps/encoder.c | 1 + 2 files changed, 27 insertions(+), 35 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index dc1cc25b3..5c5a7952a 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -45,6 +45,7 @@ #include "rotation_file_reader.h" #include "vector3_pair_file_reader.h" #include "wmc_auto.h" +#include "options.h" #include "stl.h" @@ -54,7 +55,7 @@ * Local constants *------------------------------------------------------------------------------------------*/ -#if !defined( DEBUGGING ) && !defined( WMOPS_FLT ) +#if !defined( DEBUGGING ) && !defined( WMOPS ) static #endif int32_t frame = 0; /* Counter of frames */ @@ -161,15 +162,13 @@ int main( IVAS_RENDER_FRAMESIZE asked_frame_size; int16_t run_unit_tests = 0; -#ifdef WMOPS_FLT +#ifdef WMOPS +#ifndef DONT_COUNT reset_wmops(); reset_mem( USE_BYTES ); #endif -#if ( WMOPS ) -#ifndef DONT_COUNT - BASOP_init -#endif #endif + /*------------------------------------------------------------------------------------------* * Parse command-line arguments *------------------------------------------------------------------------------------------*/ @@ -611,12 +610,8 @@ int main( mainFailed = false; /* This will stay set to true if cleanup is reached via a goto due to an error */ cleanup: -#ifndef DONT_COUNT - /* end of WMOPS counting */ - BASOP_end - BASOP_end_noprint -#endif - free( pcmBuf ); + + free( pcmBuf ); if ( arg.hrtfReaderEnabled ) { @@ -642,10 +637,11 @@ cleanup: fprintf( stderr, "\nError while closing file: %s\nContinuing...\n\n", arg.inputBitstreamFilename ); } -#ifdef WMOPS_FLT +#ifdef WMOPS print_wmops(); print_mem( NULL ); #endif + if ( !arg.quietModeEnabled ) { printf( "\n" ); @@ -1550,7 +1546,7 @@ static ivas_error decodeG192( delayNumSamples_orig[0] = -1; -#ifdef WMOPS_FLT +#ifdef WMOPS reset_stack(); reset_wmops(); #endif @@ -1806,28 +1802,21 @@ static ivas_error decodeG192( } } } + vec_pos_update = ( vec_pos_update + 1 ) % vec_pos_len; -#ifdef WMOPS_FLT - if ( vec_pos_update == 0 ) - { - update_wmops(); - update_mem(); -#ifdef MEM_COUNT_DETAILS - export_mem( "mem_analysis.csv" ); -#endif - } -#endif + #ifdef WMOPS #ifndef DONT_COUNT if ( vec_pos_update == 0 ) { - /* update WMPOS counting (end of frame) */ - BASOP_frame_update(); + update_wmops(); + update_mem(); } - #endif #endif + } + /*------------------------------------------------------------------------------------------* * Flush what is still left in the VoIP Buffers.... *------------------------------------------------------------------------------------------*/ @@ -1948,12 +1937,17 @@ static ivas_error decodeG192( } } } + #ifdef WMOPS #ifndef DONT_COUNT - /* update WMPOS counting (end of frame) */ - BASOP_frame_update(); + update_wmops(); + update_mem(); +#ifdef MEM_COUNT_DETAILS + export_mem( "mem_analysis.csv" ); +#endif #endif #endif + frame++; if ( !arg.quietModeEnabled ) { @@ -2211,7 +2205,7 @@ static ivas_error decodeVoIP( fprintf( stdout, "\n-- Start the decoder (quiet mode) --\n\n" ); } -#ifdef WMOPS_FLT +#ifdef WMOPS reset_stack(); reset_wmops(); #endif @@ -2493,15 +2487,12 @@ static ivas_error decodeVoIP( vec_pos_update = ( vec_pos_update + 1 ) % vec_pos_len; frame++; systemTime_ms += systemTimeInc_ms; + #ifdef WMOPS #ifndef DONT_COUNT - /* update WMPOS counting (end of frame) */ - BASOP_frame_update(); -#endif -#endif -#ifdef WMOPS_FLT update_mem(); update_wmops(); +#endif #endif } diff --git a/apps/encoder.c b/apps/encoder.c index 283f1626a..e7c5a20b7 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -39,6 +39,7 @@ #include "jbm_file_reader.h" #include "masa_file_reader.h" #include "wmc_auto.h" +#include "options.h" #include "stl.h" -- GitLab From 56bb0e5e0967d369254fa353a6a08abebb7c949d Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 13:19:10 +0200 Subject: [PATCH 28/77] inclusion of WMOPS_Destroy() in print_wmops() --- lib_com/count.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/count.h b/lib_com/count.h index 26b6b577b..ae58b2f9b 100644 --- a/lib_com/count.h +++ b/lib_com/count.h @@ -591,7 +591,7 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ); #define push_wmops( x ) { BASOP_push_wmops( x ); } #define pop_wmops() { BASOP_pop_wmops(); } #define update_wmops() { BASOP_frame_update(); } -#define print_wmops() { WMOPS_output_all_std( 0 ); } +#define print_wmops() { WMOPS_output_all_std( 0 ); WMOPS_destroy(); } #endif /* _COUNT_H */ -- GitLab From 3971b69f6987b69b3d5df8976fa5c6f965c5b562 Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 18:22:17 +0200 Subject: [PATCH 29/77] synchronization of wmc_auto.h and wmc_auto.c with the float codebase --- lib_debug/wmc_auto.c | 481 ++++++++++++++++++++++++++++++------------- lib_debug/wmc_auto.h | 88 ++++---- 2 files changed, 375 insertions(+), 194 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 14f8a5f05..4efb6b6a2 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -31,22 +31,26 @@ #define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ -#ifdef WMOPS_FLT +#ifdef WMOPS /*-------------------------------------------------------------------* * Complexity counting tool *--------------------------------------------------------------------*/ -#define MAX_RECORDS 1024 -#define MAX_CHAR 64 -#define MAX_STACK 64 -#define DOUBLE_MAX 0x80000000 +#define MAX_FUNCTION_NAME_LENGTH 200 /* Maximum length of the function name */ +#define MAX_PARAMS_LENGTH 200 /* Maximum length of the function parameter string */ +#define MAX_NUM_RECORDS 300 /* Initial maximum number of records -> might be increased during runtime, if needed */ +#define MAX_NUM_RECORDS_REALLOC_STEP 50 /* When re-allocating the list of records, increase the number of records by this number */ +#define MAX_CALL_TREE_DEPTH 100 /* maximum depth of the function call tree */ +#define DOUBLE_MAX 0x80000000 +#define FAC ( FRAMES_PER_SECOND / 1e6 ) -struct wmops_record +typedef struct { - char label[MAX_CHAR]; + char label[MAX_FUNCTION_NAME_LENGTH]; long call_number; long update_cnt; - int call_tree[MAX_RECORDS]; + int call_tree[MAX_CALL_TREE_DEPTH]; + long LastWOper; double start_selfcnt; double current_selfcnt; double max_selfcnt; @@ -63,16 +67,14 @@ struct wmops_record double wc_selfcnt; int32_t wc_call_number; #endif -}; +} wmops_record; double ops_cnt_wmc; double prom_cnt_wmc; double inst_cnt[NUM_INST]; -static struct wmops_record wmops[MAX_RECORDS]; -static int stack[MAX_STACK]; -static int sptr; -static int num_records; +static wmops_record* wmops = NULL; +static int num_wmops_records, max_num_wmops_records; static int current_record; static long update_cnt; static double start_cnt; @@ -80,21 +82,57 @@ static double max_cnt; static double min_cnt; static double inst_cnt_wc[NUM_INST]; static long fnum_cnt_wc; - +static int *wmops_caller_stack = NULL, wmops_caller_stack_index, max_wmops_caller_stack_index = 0; static int *heap_allocation_call_tree = NULL, heap_allocation_call_tree_size = 0, heap_allocation_call_tree_max_size = 0; -#if 0 /* -> declared in count.c instead */ -void reset_wmops( void ) +void reset_wmops_wmc( void ) { int i, j; + //unsigned int *ptr; + + num_wmops_records = 0; + max_num_wmops_records = MAX_NUM_RECORDS; + current_record = -1; + update_cnt = 0; + + max_cnt = 0.0; + min_cnt = DOUBLE_MAX; + start_cnt = 0.0; + ops_cnt_wmc = 0.0; + + /* allocate the list of wmops records */ + if ( wmops == NULL ) + { + wmops = (wmops_record *) malloc( max_num_wmops_records * sizeof( wmops_record ) ); + } + + if ( wmops == NULL ) + { + fprintf( stderr, "Error: Unable to Allocate List of WMOPS Records!" ); + exit( -1 ); + } - for ( i = 0; i < MAX_RECORDS; i++ ) + /* allocate the BASOP WMOPS counter */ + //if ( multiCounter == NULL ) + //{ + // multiCounter = (BASIC_OP *) malloc( max_num_wmops_records * sizeof( BASIC_OP ) ); + //} + + //if ( multiCounter == NULL ) + //{ + // fprintf( stderr, "Error: Unable to Allocate the BASOP WMOPS counter!" ); + // exit( -1 ); + //} + + /* initilize the list of WMOPS records */ + /* initilize the BASOP WMOPS counters */ + for ( i = 0; i < max_num_wmops_records; i++ ) { strcpy( &wmops[i].label[0], "\0" ); wmops[i].call_number = 0; wmops[i].update_cnt = 0; - for ( j = 0; j < MAX_RECORDS; j++ ) + for ( j = 0; j < MAX_CALL_TREE_DEPTH; j++ ) { wmops[i].call_tree[j] = -1; } @@ -112,95 +150,173 @@ void reset_wmops( void ) wmops[i].wc_cnt = 0.0; wmops[i].wc_selfcnt = 0.0; wmops[i].current_call_number = 0; + wmops[i].wc_call_number = -1; #endif + + /* clear all BASOP operation counters */ + //ptr = (unsigned int *) &multiCounter[i]; + //for ( j = 0; j < (int) ( sizeof( BASIC_OP ) / sizeof( unsigned int ) ); j++ ) + //{ + // *ptr++ = 0; + //} + wmops[i].LastWOper = 0; } - for ( i = 0; i < MAX_STACK; i++ ) + /* allocate the list of wmops callers to track the sequence of function calls */ + wmops_caller_stack_index = 0; + max_wmops_caller_stack_index = MAX_NUM_RECORDS; + if ( wmops_caller_stack == NULL ) { - stack[i] = -1; + wmops_caller_stack = malloc( max_wmops_caller_stack_index * sizeof( int ) ); } - sptr = 0; - num_records = 0; - current_record = -1; - update_cnt = 0; - max_cnt = 0.0; - min_cnt = DOUBLE_MAX; - start_cnt = 0.0; - ops_cnt_wmc = 0.0; + if ( wmops_caller_stack == NULL ) + { + fprintf( stderr, "Error: Unable to Allocate List of WMOPS Callers!" ); + exit( -1 ); + } + + for ( i = 0; i < max_wmops_caller_stack_index; i++ ) + { + wmops_caller_stack[i] = -1; + } + + /* initialize auxiliary BASOP WMOPS variables */ + //call_occurred = 1; + //funcId_where_last_call_to_else_occurred = INT_MAX; + + return; } -void push_wmops( const char *label ) +void push_wmops_wmc( const char *label ) { int new_flag; - int i, j; + int i, j, index_record; + //unsigned int *ptr; + va_list arg; + char func_name[MAX_FUNCTION_NAME_LENGTH] = ""; + + /* concatenate all function name labels into a single string */ + va_start( arg, label ); + while ( label ) + { + strcat( func_name, label ); + label = va_arg( arg, const char * ); + } + va_end( arg ); - /* Check if new function record label */ + /* Check, if this is a new function label */ new_flag = 1; - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { - if ( strcmp( wmops[i].label, label ) == 0 ) + if ( strcmp( wmops[i].label, func_name ) == 0 ) { new_flag = 0; break; } } + index_record = i; - /* Configure new record */ + /* Create a new record in the list */ if ( new_flag ) { - if ( num_records >= MAX_RECORDS ) + if ( num_wmops_records >= max_num_wmops_records ) { - fprintf( stdout, "push_wmops(): exceeded MAX_RECORDS count.\n\n" ); - exit( -1 ); + /* There is no room for a new WMOPS record -> reallocate the list */ + max_num_wmops_records += MAX_NUM_RECORDS_REALLOC_STEP; + wmops = realloc( wmops, max_num_wmops_records * sizeof( wmops_record ) ); + //multiCounter = realloc( multiCounter, max_num_wmops_records * sizeof( BASIC_OP ) ); + + /* initilize newly created WMOPS records */ + for ( i = num_wmops_records; i < max_num_wmops_records; i++ ) + { + strcpy( &wmops[i].label[0], "\0" ); + wmops[i].call_number = 0; + wmops[i].update_cnt = 0; + for ( j = 0; j < MAX_CALL_TREE_DEPTH; j++ ) + { + wmops[i].call_tree[j] = -1; + } + wmops[i].start_selfcnt = 0.0; + wmops[i].current_selfcnt = 0.0; + wmops[i].max_selfcnt = 0.0; + wmops[i].min_selfcnt = DOUBLE_MAX; + wmops[i].tot_selfcnt = 0.0; + wmops[i].start_cnt = 0.0; + wmops[i].current_cnt = 0.0; + wmops[i].max_cnt = 0.0; + wmops[i].min_cnt = DOUBLE_MAX; + wmops[i].tot_cnt = 0.0; +#ifdef WMOPS_WC_FRAME_ANALYSIS + wmops[i].wc_cnt = 0.0; + wmops[i].wc_selfcnt = 0.0; + wmops[i].current_call_number = 0; + wmops[i].wc_call_number = -1; +#endif + + /* initialize BASOP WMOPS counters */ + //ptr = (unsigned int *) &multiCounter[i]; + //for ( j = 0; j < (int) ( sizeof( BASIC_OP ) / sizeof( unsigned int ) ); j++ ) + //{ + // *ptr++ = 0; + //} + wmops[i].LastWOper = 0; + } } - strcpy( wmops[i].label, label ); - num_records++; + + strcpy( wmops[index_record].label, func_name ); + + num_wmops_records++; } - /* Push current context onto stack */ + /* Push the current context info to the new record */ if ( current_record >= 0 ) { - if ( sptr >= MAX_STACK ) + if ( wmops_caller_stack_index >= max_wmops_caller_stack_index ) { - fprintf( stdout, "\r push_wmops(): stack exceeded, try inreasing MAX_STACK\n" ); - exit( -1 ); + /* There is no room for a new record -> reallocate the list */ + max_wmops_caller_stack_index += MAX_NUM_RECORDS_REALLOC_STEP; + wmops_caller_stack = realloc( wmops_caller_stack, max_wmops_caller_stack_index * sizeof( int ) ); } - stack[sptr++] = current_record; + wmops_caller_stack[wmops_caller_stack_index++] = current_record; /* accumulate op counts */ wmops[current_record].current_selfcnt += ops_cnt_wmc - wmops[current_record].start_selfcnt; /* update call tree */ - for ( j = 0; j < MAX_RECORDS; j++ ) + for ( j = 0; j < MAX_CALL_TREE_DEPTH; j++ ) { - if ( wmops[i].call_tree[j] == current_record ) + if ( wmops[index_record].call_tree[j] == current_record ) { break; } - else if ( wmops[i].call_tree[j] == -1 ) + else if ( wmops[index_record].call_tree[j] == -1 ) { - wmops[i].call_tree[j] = current_record; + wmops[index_record].call_tree[j] = current_record; break; } } } - /* init current record */ - current_record = i; - wmops[current_record].start_selfcnt = ops_cnt_wmc; - wmops[current_record].start_cnt = ops_cnt_wmc; - wmops[current_record].call_number++; + /* update the current context info */ + current_record = index_record; + wmops[index_record].start_selfcnt = ops_cnt_wmc; + wmops[index_record].start_cnt = ops_cnt_wmc; + wmops[index_record].call_number++; #ifdef WMOPS_WC_FRAME_ANALYSIS - wmops[current_record].current_call_number++; + wmops[index_record].current_call_number++; #endif + /* set the ID of BASOP functions counters */ + //Set_BASOP_WMOPS_counter( index_record ); + return; } -void pop_wmops( void ) +void pop_wmops_wmc( void ) { + //long tot; /* Check for underflow */ if ( current_record < 0 ) @@ -209,15 +325,22 @@ void pop_wmops( void ) exit( -1 ); } + /* add the BASOP complexity to the counter */ + //tot = DeltaWeightedOperation(); + //ops_cnt_wmc += tot; + /* update count of current record */ wmops[current_record].current_selfcnt += ops_cnt_wmc - wmops[current_record].start_selfcnt; wmops[current_record].current_cnt += ops_cnt_wmc - wmops[current_record].start_cnt; /* Get back previous context from stack */ - if ( sptr > 0 ) + if ( wmops_caller_stack_index > 0 ) { - current_record = stack[--sptr]; + current_record = wmops_caller_stack[--wmops_caller_stack_index]; wmops[current_record].start_selfcnt = ops_cnt_wmc; + + /* set the ID of the previous BASOP counter */ + //Set_BASOP_WMOPS_counter( current_record ); } else { @@ -228,7 +351,7 @@ void pop_wmops( void ) } -void update_wmops( void ) +void update_wmops_wmc( void ) { int i; double current_cnt; @@ -238,9 +361,9 @@ void update_wmops( void ) float tmpF; #endif - if ( sptr != 0 ) + if ( wmops_caller_stack_index != 0 ) { - fprintf( stdout, "update_wmops(): Stack must be empty!\n" ); + fprintf( stdout, "update_wmops(): WMOPS caller stack corrupted - check that all push_wmops() are matched with pop_wmops()!\n" ); exit( -1 ); } @@ -263,9 +386,9 @@ void update_wmops( void ) #endif #ifdef WMOPS_WC_FRAME_ANALYSIS - if ( ops_cnt_wmc - start_cnt > max_cnt ) + if ( ops_cnt - start_cnt > max_cnt ) { - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { wmops[i].wc_cnt = wmops[i].current_cnt; wmops[i].wc_selfcnt = wmops[i].current_selfcnt; @@ -274,7 +397,7 @@ void update_wmops( void ) } #endif - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { wmops[i].tot_selfcnt += wmops[i].current_selfcnt; wmops[i].tot_cnt += wmops[i].current_cnt; @@ -301,6 +424,7 @@ void update_wmops( void ) wmops[i].max_cnt = wmops[i].current_cnt; } + if ( wmops[i].current_cnt < wmops[i].min_cnt ) { wmops[i].min_cnt = wmops[i].current_cnt; @@ -313,6 +437,10 @@ void update_wmops( void ) #ifdef WMOPS_WC_FRAME_ANALYSIS wmops[i].current_call_number = 0; #endif + + /* update the WC of all BASOP counters */ + //Set_BASOP_WMOPS_counter( i ); + //Reset_BASOP_WMOPS_counter(); } current_cnt = ops_cnt_wmc - start_cnt; @@ -346,31 +474,42 @@ void update_wmops( void ) return; } - -void print_wmops( void ) +void print_wmops_wmc( void ) { - int i; + int i, label_len, max_label_len; - char *sfmts = "%20s %8s %8s %7s %7s\n"; - char *dfmts = "%20s %8.2f %8.3f %7.3f %7.3f\n"; - char *sfmt = "%20s %8s %8s %7s %7s %7s %7s %7s\n"; - char *dfmt = "%20s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; + char *sfmts = "%*s %8s %8s %7s %7s\n"; + char *dfmts = "%*s %8.2f %8.3f %7.3f %7.3f\n"; + char *sfmt = "%*s %8s %8s %7s %7s %7s %7s %7s\n"; + char *dfmt = "%*s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; #ifdef WMOPS_WC_FRAME_ANALYSIS - int j, label_len, max_label_len; + int j; char *sfmtt = "%20s %4s %15s\n"; char *dfmtt = "%20s %4d "; #endif + /* calculate maximum label length for compact prinout */ + max_label_len = 0; + for ( i = 0; i < num_wmops_records; i++ ) + { + label_len = strlen( wmops[i].label ); + if ( label_len > max_label_len ) + { + max_label_len = label_len; + } + } + max_label_len += 4; + fprintf( stdout, "\n\n --- Complexity analysis [WMOPS] --- \n\n" ); - fprintf( stdout, "%54s %23s\n", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); - fprintf( stdout, sfmt, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); - fprintf( stdout, sfmt, "---------------", "------", "------", "------", "------", "------", "------", "------" ); + fprintf( stdout, "%*s %33s %23s\n", max_label_len, "", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); + fprintf( stdout, sfmt, max_label_len, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); + fprintf( stdout, sfmt, max_label_len, "---------------", "------", "------", "------", "------", "------", "------", "------" ); - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { - fprintf( stdout, dfmt, wmops[i].label, update_cnt == 0 ? 0 : (float) wmops[i].call_number / update_cnt, + fprintf( stdout, dfmt, max_label_len, wmops[i].label, update_cnt == 0 ? 0 : (float) wmops[i].call_number / update_cnt, wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, FAC * wmops[i].max_selfcnt, wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, @@ -379,54 +518,47 @@ void print_wmops( void ) wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); } - fprintf( stdout, sfmts, "---------------", "------", "------", "------", "------" ); - fprintf( stdout, dfmts, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt_wmc / update_cnt ); + fprintf( stdout, sfmts, max_label_len, "---------------", "------", "------", "------", "------" ); + fprintf( stdout, dfmts, max_label_len, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt_wmc / update_cnt ); fprintf( stdout, "\n" ); #ifdef WMOPS_WC_FRAME_ANALYSIS - /* calculate maximum label length for compact prinout */ - max_label_len = 0; - for ( i = 0; i < num_records; i++ ) - { - label_len = strlen( wmops[i].label ); - if ( label_len > max_label_len ) - { - max_label_len = label_len; - } - } - max_label_len += 4; - - fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n", fnum_cnt_wc ); + fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { - fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); + if ( wmops[i].wc_call_number > 0 ) + { + fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); + } } - fprintf( stdout, "\nCall Tree:\n\n" ); - fprintf( stdout, sfmtt, " function", "num", "called by: " ); + fprintf( stdout, "\nCall tree for the worst-case frame %ld:\n\n", fnum_cnt_wc ); + fprintf( stdout, sfmtt, " function", "num", "called by " ); fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); - for ( i = 0; i < num_records; i++ ) + for ( i = 0; i < num_wmops_records; i++ ) { - fprintf( stdout, dfmtt, wmops[i].label, i ); - for ( j = 0; wmops[i].call_tree[j] != -1; j++ ) + if ( wmops[i].wc_call_number > 0 ) { - if ( j != 0 ) + fprintf( stdout, dfmtt, wmops[i].label, i ); + for ( j = 0; wmops[i].call_tree[j] != -1 && j < MAX_CALL_TREE_DEPTH; j++ ) { - fprintf( stdout, ", " ); + if ( j != 0 ) + { + fprintf( stdout, ", " ); + } + fprintf( stdout, "%d", wmops[i].call_tree[j] ); } - fprintf( stdout, "%d", wmops[i].call_tree[j] ); + fprintf( stdout, "\n" ); } - fprintf( stdout, "\n" ); } - fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); fprintf( stdout, "\n\n" ); - fprintf( stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); /* added -- JPA */ + fprintf( stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); for ( i = 0; i < NUM_INST; i++ ) { switch ( (enum instructions) i ) @@ -497,9 +629,26 @@ void print_wmops( void ) } #endif + /* De-allocate the list of wmops record */ + if ( wmops != NULL ) + { + free( wmops ); + } + + /* De-allocate the list of wmops caller functions */ + if ( wmops_caller_stack != NULL ) + { + free( wmops_caller_stack ); + } + + /* De-allocate the BASOP WMOPS counter */ + //if ( multiCounter != NULL ) + //{ + // free( multiCounter ); + //} + return; } -#endif /*-------------------------------------------------------------------* * Memory counting tool measuring RAM usage (stack and heap) @@ -523,11 +672,6 @@ void print_wmops( void ) * #define WMC_TOOL_SKIP ... #undef WMC_TOOL_SKIP macro pair around the malloc(), calloc() and free(). *--------------------------------------------------------------------*/ -#define MAX_RECORDABLE_CALLS 100 -#define MAX_FUNCTION_NAME_LENGTH 35 /* Maximum length that the function string will be truncated to */ -#define MAX_PARAMS_LENGTH 50 /* Maximum length that the parameter string will be truncated to */ -#define MAX_NUM_RECORDS 300 /* Initial maximum number of memory records -> mightb be increased during runtime, if needed */ -#define MAX_NUM_RECORDS_REALLOC_STEP 50 /* When re-allocating the list of memory records, increase the number of records by this number */ /* This is the value (in bytes) towards which the block size is rounded. For example, a block of 123 bytes, when using a 32 bits system, will end up taking 124 bytes since the last unused byte cannot be used for another block. */ @@ -558,7 +702,14 @@ typedef struct int16_t *stack_ptr; } caller_info; -caller_info stack_callers[2][MAX_RECORDABLE_CALLS]; +static caller_info *stack_callers[2] = { NULL, NULL }; + +static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ +static int16_t *ptr_current_stack = 0; /* Pointer to the current stack pointer */ +static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ +static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ +static int current_calls = 0, max_num_calls = MAX_NUM_RECORDS; +static char location_max_stack[256] = "undefined"; typedef struct { @@ -579,18 +730,12 @@ typedef struct allocator_record *allocation_list = NULL; -static int16_t *ptr_base_stack = 0; /* Pointer to the bottom of stack (base pointer). Stack grows up. */ -static int16_t *ptr_current_stack = 0; /* Pointer to the current stack pointer */ -static int16_t *ptr_max_stack = 0; /* Pointer to the maximum stack pointer (the farest point from the bottom of stack) */ -static int32_t wc_stack_frame = 0; /* Frame corresponding to the worst-case stack usage */ -static int32_t wc_ram_size, wc_ram_frame; -static int32_t current_heap_size; -static int current_calls = 0; -static char location_max_stack[256] = "undefined"; static int Num_Records, Max_Num_Records; static size_t Stat_Cnt_Size = USE_BYTES; -static const char *Count_Unit[] = { "bytes", "words", "words" }; +static const char *Count_Unit[] = { "bytes", "words", "words", "words" }; +static int32_t wc_ram_size, wc_ram_frame; +static int32_t current_heap_size; static int *list_wc_intra_frame_heap, n_items_wc_intra_frame_heap, max_items_wc_intra_frame_heap, size_wc_intra_frame_heap, location_wc_intra_frame_heap; static int *list_current_inter_frame_heap, n_items_current_inter_frame_heap, max_items_current_inter_frame_heap, size_current_inter_frame_heap; static int *list_wc_inter_frame_heap, n_items_wc_inter_frame_heap, max_items_wc_inter_frame_heap, size_wc_inter_frame_heap, location_wc_inter_frame_heap; @@ -611,11 +756,28 @@ void reset_mem( Counting_Size cnt_size ) int16_t something; size_t tmp_size; + /* initialize list of stack records */ + if ( stack_callers[0] == NULL ) + { + stack_callers[0] = malloc( MAX_NUM_RECORDS * sizeof( caller_info ) ); + stack_callers[1] = malloc( MAX_NUM_RECORDS * sizeof( caller_info ) ); + } + + if ( stack_callers[0] == NULL || stack_callers[1] == NULL ) + { + fprintf( stderr, "Error: Unable to Allocate List of Stack Records!" ); + exit( -1 ); + } + + current_calls = 0; + max_num_calls = MAX_NUM_RECORDS; + /* initialize stack pointers */ ptr_base_stack = &something; ptr_max_stack = ptr_base_stack; ptr_current_stack = ptr_base_stack; + /* initialize the unit of memory block size */ Stat_Cnt_Size = cnt_size; /* Check, if sizeof(int32_t) is 4 bytes */ @@ -741,11 +903,12 @@ int push_stack( const char *filename, const char *fctname ) (void) *filename; /* to avoid compilation warning */ - /* Is there room to save the caller's information? */ - if ( current_calls >= MAX_RECORDABLE_CALLS ) - { /* No */ - fprintf( stderr, "No more room to store call stack info. Please increase MAX_RECORDABLE_CALLS" ); - exit( -1 ); + if ( current_calls >= max_num_calls ) + { + /* There is no room for a new record -> reallocate the list */ + max_num_calls += MAX_NUM_RECORDS_REALLOC_STEP; + stack_callers[0] = realloc( stack_callers[0], max_num_calls * sizeof( caller_info ) ); + stack_callers[1] = realloc( stack_callers[1], max_num_calls * sizeof( caller_info ) ); } /* Valid Function Name? */ @@ -762,7 +925,7 @@ int push_stack( const char *filename, const char *fctname ) /* Save the Stack Pointer */ stack_callers[0][current_calls].stack_ptr = ptr_current_stack; - /* Increase Stack Calling Tree Level */ + /* Increase the Number of Calls in the List */ current_calls++; /* Is this the First Time or the Worst Case? */ @@ -771,22 +934,24 @@ int push_stack( const char *filename, const char *fctname ) /* Save Info about it */ ptr_max_stack = ptr_current_stack; - wc_stack_frame = update_cnt; /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ + /* save the worst-case frame number */ + /* current frame number is stored in the variable update_cnt and updated in the function update_wmops() */ + wc_stack_frame = update_cnt; strncpy( location_max_stack, fctname, sizeof( location_max_stack ) - 1 ); location_max_stack[sizeof( location_max_stack ) - 1] = '\0'; /* Save Call Tree */ memmove( stack_callers[1], stack_callers[0], sizeof( caller_info ) * current_calls ); - /* Terminate the List (Unless Full) */ - if ( current_calls < MAX_RECORDABLE_CALLS ) + /* Terminate the List with 0 (for printing purposes) */ + if ( current_calls < max_num_calls ) { stack_callers[1][current_calls].function_name[0] = 0; } } /* Check, if This is the New Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); + current_stack_size = ( int32_t )( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); if ( current_stack_size < 0 ) { @@ -815,13 +980,13 @@ int pop_stack( const char *filename, const char *fctname ) (void) *filename; /* to avoid compilation warning */ - /* Decrease Stack Calling */ + /* Decrease the Number of Records */ current_calls--; /* Get Pointer to Caller Information */ caller_info_ptr = &stack_callers[0][current_calls]; - /* Check, if Names Match */ + /* Check, if the Function Names Match */ if ( strncmp( caller_info_ptr->function_name, fctname, MAX_FUNCTION_NAME_LENGTH ) != 0 ) { fprintf( stderr, "Invalid usage of pop_stack()" ); @@ -860,7 +1025,7 @@ static void print_stack_call_tree( void ) fprintf( stdout, "\nList of functions when maximum stack size is reached:\n\n" ); caller_info_ptr = &stack_callers[1][0]; - for ( call_level = 0; call_level < MAX_RECORDABLE_CALLS; call_level++ ) + for ( call_level = 0; call_level < max_num_calls; call_level++ ) { /* Done? */ if ( caller_info_ptr->function_name[0] == 0 ) @@ -979,7 +1144,7 @@ void *mem_alloc( #ifdef MEM_COUNT_DETAILS /* Export heap memory allocation record to the .csv file */ - fprintf( fid_csv_filename, "A,%d,%s,%d,%d\n", update_cnt, ptr_record->name, ptr_record->lineno, ptr_record->block_size ); + fprintf( fid_csv_filename, "A,%ld,%s,%d,%d\n", update_cnt, ptr_record->name, ptr_record->lineno, ptr_record->block_size ); #endif if ( ptr_record->frame_allocated != -1 ) @@ -994,7 +1159,7 @@ void *mem_alloc( current_heap_size += ptr_record->block_size; /* Check, if this is the new Worst-Case RAM (stack + heap) */ - current_stack_size = (int32_t) ( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); + current_stack_size = ( int32_t )( ( ( ptr_base_stack - ptr_current_stack ) * sizeof( int16_t ) ) ); if ( current_stack_size + current_heap_size > wc_ram_size ) { wc_ram_size = current_stack_size + current_heap_size; @@ -1059,7 +1224,7 @@ static void *mem_alloc_block( size_t size, const char *size_str ) /* Fill Memory Block with Magic Value or 0 */ fill_value = MAGIC_VALUE_USED; - if ( IS_CALLOC( size_str ) ) + if ( size_str[0] == 'c' ) { fill_value = 0x00000000; } @@ -1277,8 +1442,8 @@ allocator_record *get_mem_record( unsigned long *hash, const char *func_name, in /*-------------------------------------------------------------------* * mem_free() * - * This function de-allocatesd the memory block and frees the mphysical memory with free(). - * It also updates actual and average usage of the memory block. + * This function de-allocates memory blocks and frees physical memory with free(). + * It also updates the actual and average usage of memory blocks. * * Note: The record is not removed from the list and may be reused later on in mem_alloc()! *--------------------------------------------------------------------*/ @@ -1319,7 +1484,7 @@ void mem_free( const char *func_name, int func_lineno, void *ptr ) #ifdef MEM_COUNT_DETAILS /* Export heap memory de-allocation record to the .csv file */ - fprintf( fid_csv_filename, "D,%d,%s,%d,%d\n", update_cnt, ptr_record->name, ptr_record->lineno, ptr_record->block_size ); + fprintf( fid_csv_filename, "D,%ld,%s,%d,%d\n", update_cnt, ptr_record->name, ptr_record->lineno, ptr_record->block_size ); #endif /* De-Allocate Memory Block */ @@ -1579,7 +1744,7 @@ static void mem_count_summary( void ) allocator_record *ptr_record, *ptr; /* Prepare format string */ - sprintf( format_str, "%%-%ds %%5s %%6s %%-%ds %%20s %%6s ", MAX_FUNCTION_NAME_LENGTH, MAX_PARAMS_LENGTH ); + sprintf( format_str, "%%-%d.%ds %%5.5s %%6.6s %%-%d.%ds %%20.20s %%6.6s ", 50, 50, 50, 50 ); if ( n_items_wc_intra_frame_heap > 0 ) { @@ -1780,7 +1945,16 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) for ( i = 0; i < nElem; i++ ) { - fprintf( stdout, "Program ROM size (%s): %d instruction words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size ); + if ( Stat_Cnt_Size > 0 ) + { + /* words */ + fprintf( stdout, "Program ROM size (%s): %d words\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size ); + } + else + { + /* bytes (here, we assume that each instruction takes PROM_INST_SIZE bits of the PROM memory) */ + fprintf( stdout, "Program ROM size (%s): %d bytes\n", Const_Data_PROM_Table[i].file_spec, Const_Data_PROM_Table[i].PROM_size * ( PROM_INST_SIZE / 8 ) ); + } } for ( i = 0; i < nElem; i++ ) @@ -1871,9 +2045,15 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) if ( Stat_Cnt_Size > 0 ) { - fprintf( stdout, "\nNote: 1 word = %d bits\n", 8 << Stat_Cnt_Size ); - fprintf( stdout, "This is an optimistic estimate of memory consumption assuming that each variable type is stored with sizeof(type) bits\n" ); + /* words */ + fprintf( stdout, "\nNote: The Program ROM size is calculated under the assumption that 1 instruction word is stored with %d bits\n", 8 << Stat_Cnt_Size ); + } + else + { + /* bytes */ + fprintf( stdout, "\nNote: The Program ROM size is calculated under the assumption that 1 instruction word is stored with %d bits\n", PROM_INST_SIZE ); } + fprintf( stdout, "Note: The Data ROM size is calculated using the sizeof(type) built-in function\n" ); if ( n_items_wc_intra_frame_heap > 0 ) { @@ -1886,6 +2066,17 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) free( allocation_list ); } + /* De-allocate list of stack records */ + if ( stack_callers[0] != NULL ) + { + free( stack_callers[0] ); + } + + if ( stack_callers[1] != NULL ) + { + free( stack_callers[1] ); + } + /* De-allocate heap allocation call tree */ if ( heap_allocation_call_tree != NULL ) { @@ -1920,7 +2111,7 @@ void print_mem( ROM_Size_Lookup_Table Const_Data_PROM_Table[] ) #endif /* WMOPS */ -#ifndef WMOPS_FLT + +#ifndef WMOPS int cntr_push_pop = 0; /* global counter for checking balanced push_wmops()/pop_wmops() pairs when WMOPS is not activated */ -double ops_cnt_wmc; #endif diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 01a8b1c02..e5185128a 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -23,23 +23,15 @@ #include /* stdio is needed for fprintf() */ #endif -#include "options.h" - - /* To Prevent "warning: '$' in identifier or number" message under GCC */ #ifdef __GNUC__ #pragma GCC system_header #endif -/* Real-time relationships */ #define FRAMES_PER_SECOND 50.0 -#define MILLION_CYCLES 1e6 -#define WMOPS_BOOST_FAC ( 1.0f ) /* scaling factor for equalizing the difference between automatic and manual instrumentation */ -#define FAC ( FRAMES_PER_SECOND / MILLION_CYCLES * WMOPS_BOOST_FAC ) -#define NUM_INST 20 /* Total number of instruction types (in enum below) */ - +#define PROM_INST_SIZE 32 /* number of bits of each program instruction when stored in the PROM memory (applied only when the user selects reporting in bytes) */ -#ifdef WMOPS_FLT +#ifdef WMOPS enum instructions { _ADD, @@ -61,7 +53,8 @@ enum instructions _TEST, _POWER, _LOG, - _MISC + _MISC, + NUM_INST }; #define _ADD_C 1 @@ -560,29 +553,26 @@ enum instructions } \ } -#if 0 /* -> defined in count.h instead */ -void reset_wmops_wmc( void ); -void push_wmops( const char *label ); -void pop_wmops( void ); -void update_wmops( void ); -void print_wmops( void ); -#endif extern double ops_cnt_wmc; extern double prom_cnt_wmc; extern double inst_cnt[NUM_INST]; +extern int cntr_push_pop; + +void push_wmops_wmc( const char *label ); +void pop_wmops_wmc( void ); +void reset_wmops_wmc( void ); +void print_wmops_wmc( void ); +void update_wmops_wmc(); void update_mem( void ); -#else /* WMOPS_FLT counting disabled */ -#if 0 /* -> defined in count.h instead */ -#include -#define reset_wmops() -#define push_wmops( x ) ( cntr_push_pop++ ) -#define pop_wmops() ( cntr_push_pop-- ) -#define update_wmops() ( assert( cntr_push_pop == 0 ) ) -#define print_wmops() -#endif +#else + +#define push_wmops_wmc( x ) ( cntr_push_pop++ ) +#define pop_wmops_wmc() ( cntr_push_pop-- ) +#define reset_wmops_wmc() +#define print_wmops_wmc() +#define update_wmops_wmc() ( assert( cntr_push_pop == 0 ) ) #define update_mem() -extern int cntr_push_pop; #define ADD( x ) #define ABS( x ) @@ -626,7 +616,7 @@ extern int cntr_push_pop; #define msu( a, b, c ) ( ( a ) - ( b ) * ( c ) ) #endif -#ifndef WMOPS_FLT +#ifndef WMOPS /* DESACTIVATE the Counting Mechanism */ #define OP_COUNT_( op, n ) @@ -673,24 +663,24 @@ static int wmc_flag_ = 0; #endif /* Define all Macros without '{' & '}' (None of these should be called externally!) */ -#define ABS_( x ) OP_COUNT_( _ABS, ( x ) / WMOPS_BOOST_FAC ) -#define ADD_( x ) OP_COUNT_( _ADD, ( x ) / WMOPS_BOOST_FAC ) -#define MULT_( x ) OP_COUNT_( _MULT, ( x ) / WMOPS_BOOST_FAC ) -#define MAC_( x ) OP_COUNT_( _MAC, ( x ) / WMOPS_BOOST_FAC ) -#define MOVE_( x ) OP_COUNT_( _MOVE, ( x ) / WMOPS_BOOST_FAC ) -#define STORE_( x ) OP_COUNT_( _STORE, ( x ) / WMOPS_BOOST_FAC ) -#define LOGIC_( x ) OP_COUNT_( _LOGIC, ( x ) / WMOPS_BOOST_FAC ) -#define SHIFT_( x ) OP_COUNT_( _SHIFT, ( x ) / WMOPS_BOOST_FAC ) -#define BRANCH_( x ) OP_COUNT_( _BRANCH, ( x ) / WMOPS_BOOST_FAC ) -#define DIV_( x ) OP_COUNT_( _DIV, ( x ) / WMOPS_BOOST_FAC ) -#define SQRT_( x ) OP_COUNT_( _SQRT, ( x ) / WMOPS_BOOST_FAC ) -#define TRANS_( x ) OP_COUNT_( _TRANS, ( x ) / WMOPS_BOOST_FAC ) +#define ABS_( x ) OP_COUNT_( _ABS, ( x ) ) +#define ADD_( x ) OP_COUNT_( _ADD, ( x ) ) +#define MULT_( x ) OP_COUNT_( _MULT, ( x ) ) +#define MAC_( x ) OP_COUNT_( _MAC, ( x ) ) +#define MOVE_( x ) OP_COUNT_( _MOVE, ( x ) ) +#define STORE_( x ) OP_COUNT_( _STORE, ( x ) ) +#define LOGIC_( x ) OP_COUNT_( _LOGIC, ( x ) ) +#define SHIFT_( x ) OP_COUNT_( _SHIFT, ( x ) ) +#define BRANCH_( x ) OP_COUNT_( _BRANCH, ( x ) ) +#define DIV_( x ) OP_COUNT_( _DIV, ( x ) ) +#define SQRT_( x ) OP_COUNT_( _SQRT, ( x ) ) +#define TRANS_( x ) OP_COUNT_( _TRANS, ( x ) ) #define POWER_( x ) TRANS_( x ) #define LOG_( x ) TRANS_( x ) -#define LOOP_( x ) OP_COUNT_( _LOOP, ( x ) / WMOPS_BOOST_FAC ) -#define INDIRECT_( x ) OP_COUNT_( _INDIRECT, ( x ) / WMOPS_BOOST_FAC ) -#define PTR_INIT_( x ) OP_COUNT_( _PTR_INIT, ( x ) / WMOPS_BOOST_FAC ) -#define FUNC_( x ) ( OP_COUNT_( _MOVE, ( x ) / WMOPS_BOOST_FAC ), OP_COUNT_( _FUNC, 1 ) ) +#define LOOP_( x ) OP_COUNT_( _LOOP, ( x ) ) +#define INDIRECT_( x ) OP_COUNT_( _INDIRECT, ( x ) ) +#define PTR_INIT_( x ) OP_COUNT_( _PTR_INIT, ( x ) ) +#define FUNC_( x ) ( OP_COUNT_( _MOVE, ( x ) ), OP_COUNT_( _FUNC, 1 ) ) #define MISC_( x ) ABS_( x ) /* Math Operations */ @@ -814,7 +804,7 @@ static int wmc_flag_ = 0; switch #define cost_( n ) OP_COUNT_WRAPPER2_( wmc_flag_ ? ( ADD_( n ), BRANCH_( n ), wmc_flag_ = 0 ) : 0 ); -#ifdef WMOPS_FLT +#ifdef WMOPS #define ACC 2 #define MUL 1 @@ -1015,7 +1005,7 @@ typedef enum #endif -#ifdef WMOPS_FLT +#ifdef WMOPS void *mem_alloc( const char *func_name, int func_lineno, size_t size, char *alloc_str ); void mem_free( const char *func_name, int func_lineno, void *ptr ); @@ -1031,8 +1021,8 @@ int push_stack( const char *filename, const char *fctname ); int pop_stack( const char *filename, const char *fctname ); #ifdef WMOPS_DETAIL -#define STACK_DEPTH_FCT_CALL ( push_wmops( __FUNCTION__ ), push_stack( __FILE__, __FUNCTION__ ) ) /* add push_wmops() in all function calls */ -#define STACK_DEPTH_FCT_RETURN ( pop_wmops(), pop_stack( __FILE__, __FUNCTION__ ) ) /* add pop_wmops() in all function returns */ +#define STACK_DEPTH_FCT_CALL ( push_wmops_wmc( __FUNCTION__ ), push_stack( __FILE__, __FUNCTION__ ) ) /* add push_wmops() in all function calls */ +#define STACK_DEPTH_FCT_RETURN ( pop_wmops_wmc(), pop_stack( __FILE__, __FUNCTION__ ) ) /* add pop_wmops() in all function returns */ #else #define STACK_DEPTH_FCT_CALL push_stack( __FILE__, __FUNCTION__ ) #define STACK_DEPTH_FCT_RETURN pop_stack( __FILE__, __FUNCTION__ ) -- GitLab From 7e421efa84c15c77df797485dec46bddb1e7b0db Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 18:23:38 +0200 Subject: [PATCH 30/77] update of the WMC tool to version v1.51 fixing problems with memory instrumentation in the fixed pt. code --- scripts/tools/Linux/wmc_tool_v151 | Bin 359896 -> 359896 bytes scripts/tools/Win32/wmc_tool_v151.exe | Bin 262656 -> 262656 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/scripts/tools/Linux/wmc_tool_v151 b/scripts/tools/Linux/wmc_tool_v151 index a3e54d18baa8119388bef35dd3bf9c4f2fe80c9e..06e62073884001a5a463d98d2293112b6a72ff05 100644 GIT binary patch delta 63 zcmccdTlB_n(G4w3BBsv;gnZSc^JZQS$~O$~PMrGq#HHpLOzkt67`M-0V)`b)=+NFT U%+%g5%-r5D%(A^-nAI~20917tF8}}l delta 66 zcmccdTlB_n(G4w3BD%9pv#b8j{(d-Btn>ZHsS-b8e|R>}U}~Si#JGJ16Vo?=>F;@& YSlcHHGqq0^W^SJ>%(8v5Fso}805WbINdN!< diff --git a/scripts/tools/Win32/wmc_tool_v151.exe b/scripts/tools/Win32/wmc_tool_v151.exe index 77954f30562c90e610fc61934c9329cdf3a4f6af..f5340266cb9bd2b293791b138771c4ed32595def 100644 GIT binary patch delta 47 zcmZo@5ol-;nDB$yZ}I$%zomL6_xzV_HtKCR>Sb&<>Sfw))XU6d2a?=wewz8D836Bc B6R7|I delta 49 zcmZo@5ol-;nDB#nhts@`zomK@119(WmuWWYZ8z#=Y&Ys<+HTa#%wz|W-fn)H`J@>D D3my~- -- GitLab From 3622bfc507201310f398314d8ed4fc69a6816bbd Mon Sep 17 00:00:00 2001 From: malenov Date: Tue, 23 Jul 2024 18:26:25 +0200 Subject: [PATCH 31/77] fixes inside count.c --- lib_com/count.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index 73138b08f..2b52414a4 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -55,6 +55,34 @@ static double frameRate = FRAME_RATE; /* default value : 10 ms */ #endif /* ifdef WMOPS */ +#define MAX_RECORDS 1024 +#define MAX_STACK 64 +#define MAX_CHAR 64 + +struct wmops_record +{ + char label[MAX_CHAR]; + long call_number; + long update_cnt; + int call_tree[MAX_RECORDS]; + double start_selfcnt; + double current_selfcnt; + double max_selfcnt; + double min_selfcnt; + double tot_selfcnt; + double start_cnt; /* The following take into account the decendants */ + double current_cnt; + double max_cnt; + double min_cnt; + double tot_cnt; +}; + +static struct wmops_record wmops[MAX_RECORDS]; + +static int stack[MAX_STACK]; +static int sptr; + + #ifdef WMOPS /* Global counter variable for calculation of complexity weight */ /* Some enhancement written by Vail., GJR and M.Mul. during EVS time */ @@ -291,7 +319,7 @@ static char *my_strdup( const char *s ) /* allocate memory for copy of ID string (including string terminator) */ /* NOTE: the ID strings will never be deallocated because there is no way to "destroy" a counter that is not longer needed */ - if ( ( dup = (char *) malloc( strlen( s ) + 1 ) ) == NULL ) + if ( ( dup = (char *) malloc_( strlen( s ) + 1 ) ) == NULL ) return NULL; return strcpy( dup, s ); @@ -1069,7 +1097,7 @@ void WMOPS_destroy( void ) { if ( NULL != objectName[i] ) { - free( objectName[i] ); + free_( objectName[i] ); objectName[i] = NULL; } } @@ -1380,3 +1408,4 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ) } /* end of file */ #undef WMC_TOOL_SKIP +/*AddedByWMC_Tool*/ int PROM_Size_Func( count ) { return 131; } -- GitLab From 914d46154be845fe4cfffa6404ffa741f07545be Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 08:44:29 +0200 Subject: [PATCH 32/77] modifications to main functions --- apps/decoder.c | 7 +++++++ apps/encoder.c | 3 +++ apps/renderer.c | 3 +++ 3 files changed, 13 insertions(+) diff --git a/apps/decoder.c b/apps/decoder.c index 5c5a7952a..bf66907d5 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -165,6 +165,7 @@ int main( #ifdef WMOPS #ifndef DONT_COUNT reset_wmops(); + reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif #endif @@ -639,6 +640,7 @@ cleanup: #ifdef WMOPS print_wmops(); + print_wmops_wmc(); print_mem( NULL ); #endif @@ -1549,6 +1551,7 @@ static ivas_error decodeG192( #ifdef WMOPS reset_stack(); reset_wmops(); + reset_wmops_wmc(); #endif nSamplesAvailableNext = 0; @@ -1810,6 +1813,7 @@ static ivas_error decodeG192( if ( vec_pos_update == 0 ) { update_wmops(); + update_wmops_wmc(); update_mem(); } #endif @@ -1941,6 +1945,7 @@ static ivas_error decodeG192( #ifdef WMOPS #ifndef DONT_COUNT update_wmops(); + update_wmops_wmc(); update_mem(); #ifdef MEM_COUNT_DETAILS export_mem( "mem_analysis.csv" ); @@ -2208,6 +2213,7 @@ static ivas_error decodeVoIP( #ifdef WMOPS reset_stack(); reset_wmops(); + reset_wmops_wmc(); #endif /*------------------------------------------------------------------------------------------* @@ -2492,6 +2498,7 @@ static ivas_error decodeVoIP( #ifndef DONT_COUNT update_mem(); update_wmops(); + update_wmops_wmc(); #endif #endif } diff --git a/apps/encoder.c b/apps/encoder.c index e7c5a20b7..8c115ac20 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -171,6 +171,7 @@ int main( #ifdef WMOPS reset_wmops(); + reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif @@ -567,6 +568,7 @@ int main( #ifdef WMOPS reset_stack(); reset_wmops(); + reset_wmops_wmc(); #endif /*------------------------------------------------------------------------------------------* @@ -710,6 +712,7 @@ int main( #ifdef WMOPS update_mem(); update_wmops(); + update_wmops_wmc(); #endif } diff --git a/apps/renderer.c b/apps/renderer.c index fcc1a04b7..4fbeb4872 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -663,6 +663,7 @@ int main( #ifdef WMOPS reset_wmops(); + reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif @@ -1277,6 +1278,7 @@ int main( #ifdef WMOPS reset_stack(); reset_wmops(); + reset_wmops_wmc(); #endif if ( !args.quietModeEnabled ) @@ -1708,6 +1710,7 @@ int main( #ifdef WMOPS update_mem(); update_wmops(); + update_wmops_wmc(); #endif } -- GitLab From c8967fc9e09c70532b11fa17af75657f3cfb5c35 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 08:52:14 +0200 Subject: [PATCH 33/77] remove #define WMOPS from count.h -> the defintion from options.h is used instead --- lib_com/count.h | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_com/count.h b/lib_com/count.h index ae58b2f9b..4b5bf8e9b 100644 --- a/lib_com/count.h +++ b/lib_com/count.h @@ -62,7 +62,6 @@ #include -/* #define WMOPS 1 */ /* <<<- enable or disable WMOPS profiling features here */ #define MAXCOUNTERS ( 512 ) #define MAX_CALLERS_SAVED_FRAMES 5 /* # of Frame for which WMOPS Complexity Details will be saved, 0 = Disabled */ -- GitLab From c7579337f049e428a7be69efd4dc81af9e93e035 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 08:56:52 +0200 Subject: [PATCH 34/77] further harmonzation of WMOPS define, removal of DONT_COUNT and renaming of WMOPS_FLT --- apps/decoder.c | 8 ---- lib_com/basop32.c | 4 +- lib_com/basop_util.c | 8 ++-- lib_com/complex_basop.c | 82 ++++++++++++++++++++--------------------- lib_com/control.c | 36 +++++++++--------- lib_com/control.h | 2 +- lib_com/enh1632.c | 38 +++++++++---------- lib_com/enh1632.h | 22 +++++------ lib_com/enh32.c | 26 ++++++------- lib_com/enh64.c | 72 ++++++++++++++++++------------------ lib_com/enhUL32.c | 12 +++--- lib_com/fft_cldfb_fx.c | 10 ++--- lib_com/fft_evs.c | 20 +++++----- lib_com/move.h | 2 +- lib_com/options.h | 5 +-- 15 files changed, 169 insertions(+), 178 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index bf66907d5..11c6fe724 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -163,11 +163,9 @@ int main( int16_t run_unit_tests = 0; #ifdef WMOPS -#ifndef DONT_COUNT reset_wmops(); reset_wmops_wmc(); reset_mem( USE_BYTES ); -#endif #endif /*------------------------------------------------------------------------------------------* @@ -1809,14 +1807,12 @@ static ivas_error decodeG192( vec_pos_update = ( vec_pos_update + 1 ) % vec_pos_len; #ifdef WMOPS -#ifndef DONT_COUNT if ( vec_pos_update == 0 ) { update_wmops(); update_wmops_wmc(); update_mem(); } -#endif #endif } @@ -1943,14 +1939,12 @@ static ivas_error decodeG192( } #ifdef WMOPS -#ifndef DONT_COUNT update_wmops(); update_wmops_wmc(); update_mem(); #ifdef MEM_COUNT_DETAILS export_mem( "mem_analysis.csv" ); #endif -#endif #endif frame++; @@ -2495,11 +2489,9 @@ static ivas_error decodeVoIP( systemTime_ms += systemTimeInc_ms; #ifdef WMOPS -#ifndef DONT_COUNT update_mem(); update_wmops(); update_wmops_wmc(); -#endif #endif } diff --git a/lib_com/basop32.c b/lib_com/basop32.c index 20d309f11..2a813e15c 100644 --- a/lib_com/basop32.c +++ b/lib_com/basop32.c @@ -170,7 +170,7 @@ HISTORY: #pragma warning( disable : 4310 ) #endif -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif @@ -913,7 +913,7 @@ Word16 shr( Word16 var1, Word16 var2 ) var_out = shl( var1, var2 ); #endif /* BASOP_NOGLOB */ -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].shl--; #endif } diff --git a/lib_com/basop_util.c b/lib_com/basop_util.c index 4044484d3..4ca910211 100644 --- a/lib_com/basop_util.c +++ b/lib_com/basop_util.c @@ -2596,7 +2596,7 @@ cmplx CL_scale_t( cmplx x, Word16 y ) cmplx result; result.re = Mpy_32_16_1( x.re, y ); result.im = Mpy_32_16_1( x.im, y ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].CL_scale++; @@ -2609,11 +2609,11 @@ cmplx CL_dscale_t( cmplx x, Word16 y1, Word16 y2 ) cmplx result; result.re = Mpy_32_16_1( x.re, y1 ); result.im = Mpy_32_16_1( x.im, y2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].CL_dscale++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -2622,7 +2622,7 @@ cmplx CL_mult_32x16( cmplx input, cmplx_s coeff ) cmplx result; result.re = L_sub( Mpy_32_16_1( input.re, coeff.re ), Mpy_32_16_1( input.im, coeff.im ) ); result.im = L_add( Mpy_32_16_1( input.re, coeff.im ), Mpy_32_16_1( input.im, coeff.re ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_multr_32x16++; multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].Mpy_32_16_1--; diff --git a/lib_com/complex_basop.c b/lib_com/complex_basop.c index b9a20ddaf..ffe56d475 100644 --- a/lib_com/complex_basop.c +++ b/lib_com/complex_basop.c @@ -17,7 +17,7 @@ #include "stl.h" -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; @@ -35,7 +35,7 @@ cmplx CL_shr( cmplx inp, Word16 shift_val ) cmplx out; out.re = L_shr( inp.re, shift_val ); out.im = L_shr( inp.im, shift_val ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_shr++; multiCounter[currCounter].L_shr--; multiCounter[currCounter].L_shr--; @@ -48,7 +48,7 @@ cmplx CL_shl( cmplx inp, Word16 shift_val ) cmplx out; out.re = L_shl( inp.re, shift_val ); out.im = L_shl( inp.im, shift_val ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_shl++; multiCounter[currCounter].L_shl--; multiCounter[currCounter].L_shl--; @@ -61,7 +61,7 @@ cmplx CL_add( cmplx inp1, cmplx inp2 ) cmplx out; out.re = L_add( inp1.re, inp2.re ); out.im = L_add( inp1.im, inp2.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_add++; multiCounter[currCounter].L_add--; multiCounter[currCounter].L_add--; @@ -74,7 +74,7 @@ cmplx CL_sub( cmplx inp1, cmplx inp2 ) cmplx out; out.re = L_sub( inp1.re, inp2.re ); out.im = L_sub( inp1.im, inp2.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_sub++; multiCounter[currCounter].L_sub--; multiCounter[currCounter].L_sub--; @@ -87,11 +87,11 @@ cmplx CL_scale( cmplx x, Word16 y ) cmplx result; result.re = Mpy_32_16_r( x.re, y ); result.im = Mpy_32_16_r( x.im, y ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].CL_scale++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -100,11 +100,11 @@ cmplx CL_dscale( cmplx x, Word16 y1, Word16 y2 ) cmplx result; result.re = Mpy_32_16_r( x.re, y1 ); result.im = Mpy_32_16_r( x.im, y2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].CL_dscale++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -113,7 +113,7 @@ cmplx CL_msu_j( cmplx x, cmplx y ) cmplx result; result.re = L_add( x.re, y.im ); result.im = L_sub( x.im, y.re ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_msu_j++; multiCounter[currCounter].L_add--; multiCounter[currCounter].L_sub--; @@ -126,7 +126,7 @@ cmplx CL_mac_j( cmplx x, cmplx y ) cmplx result; result.re = L_sub( x.re, y.im ); result.im = L_add( x.im, y.re ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_mac_j++; multiCounter[currCounter].L_add--; multiCounter[currCounter].L_sub--; @@ -136,7 +136,7 @@ cmplx CL_mac_j( cmplx x, cmplx y ) cmplx CL_move( cmplx x ) { -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move++; #endif return x; @@ -144,7 +144,7 @@ cmplx CL_move( cmplx x ) Word32 CL_Extract_real( cmplx x ) { -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_Extract_real++; #endif return x.re; @@ -152,7 +152,7 @@ Word32 CL_Extract_real( cmplx x ) Word32 CL_Extract_imag( cmplx x ) { -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_Extract_imag++; #endif return x.im; @@ -163,7 +163,7 @@ cmplx CL_form( Word32 re, Word32 im ) cmplx result; result.re = re; result.im = im; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_form++; #endif return result; @@ -174,7 +174,7 @@ cmplx CL_multr_32x16( cmplx input, cmplx_s coeff ) cmplx result; result.re = W_round48_L( W_sub_nosat( W_mult_32_16( input.re, coeff.re ), W_mult_32_16( input.im, coeff.im ) ) ); result.im = W_round48_L( W_add_nosat( W_mult_32_16( input.re, coeff.im ), W_mult_32_16( input.im, coeff.re ) ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_multr_32x16++; multiCounter[currCounter].W_mult_32_16--; multiCounter[currCounter].W_mult_32_16--; @@ -193,7 +193,7 @@ cmplx CL_negate( cmplx x ) cmplx result; result.re = L_negate( x.re ); result.im = L_negate( x.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_negate++; multiCounter[currCounter].L_negate--; multiCounter[currCounter].L_negate--; @@ -206,7 +206,7 @@ cmplx CL_conjugate( cmplx x ) cmplx result; result.re = x.re; result.im = L_negate( x.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_conjugate++; multiCounter[currCounter].L_negate--; #endif @@ -220,7 +220,7 @@ cmplx CL_mul_j( cmplx input ) temp = CL_negate( input ); result.re = temp.im; result.im = input.re; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_mul_j++; multiCounter[currCounter].CL_negate--; #endif @@ -232,7 +232,7 @@ cmplx CL_swap_real_imag( cmplx input ) cmplx result; result.re = input.im; result.im = input.re; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_swap_real_imag++; #endif return result; @@ -244,7 +244,7 @@ cmplx_s C_add( cmplx_s inp1, cmplx_s inp2 ) out.re = add( inp1.re, inp2.re ); out.im = add( inp1.im, inp2.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_add++; multiCounter[currCounter].add--; multiCounter[currCounter].add--; @@ -258,7 +258,7 @@ cmplx_s C_sub( cmplx_s inp1, cmplx_s inp2 ) out.re = sub( inp1.re, inp2.re ); out.im = sub( inp1.im, inp2.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_sub++; multiCounter[currCounter].sub--; multiCounter[currCounter].sub--; @@ -274,7 +274,7 @@ cmplx_s C_mul_j( cmplx_s input ) result.re = temp; result.im = input.re; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_mul_j++; multiCounter[currCounter].negate--; #endif @@ -287,7 +287,7 @@ cmplx_s C_multr( cmplx_s x, cmplx_s c ) result.re = round_fx( W_sat_l( W_sub_nosat( W_mult_16_16( x.re, c.re ), W_mult_16_16( x.im, c.im ) ) ) ); result.im = round_fx( W_sat_l( W_add_nosat( W_mult_16_16( x.im, c.re ), W_mult_16_16( x.re, c.im ) ) ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_multr++; multiCounter[currCounter].W_mult_16_16--; multiCounter[currCounter].W_mult_16_16--; @@ -308,7 +308,7 @@ cmplx_s C_form( Word16 re, Word16 im ) cmplx_s result; result.re = re; result.im = im; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_form++; #endif return result; @@ -319,11 +319,11 @@ cmplx C_scale( cmplx_s x, Word16 y ) cmplx result; result.re = L_mult( x.re, y ); result.im = L_mult( x.im, y ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_mult--; multiCounter[currCounter].L_mult--; multiCounter[currCounter].C_scale++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -333,7 +333,7 @@ cmplx_s CL_round32_16( cmplx x ) result.re = round_fx( x.re ); result.im = round_fx( x.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_round32_16++; multiCounter[currCounter].round--; multiCounter[currCounter].round--; @@ -346,11 +346,11 @@ cmplx CL_scale_32( cmplx x, Word32 y ) cmplx result; result.re = Mpy_32_32_r( x.re, y ); result.im = Mpy_32_32_r( x.im, y ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].CL_scale_32++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -359,11 +359,11 @@ cmplx CL_dscale_32( cmplx x, Word32 y1, Word32 y2 ) cmplx result; result.re = Mpy_32_32_r( x.re, y1 ); result.im = Mpy_32_32_r( x.im, y2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].CL_dscale_32++; -#endif /* #if (WMOPS) */ +#endif /* #ifdef WMOPS */ return ( result ); } @@ -373,7 +373,7 @@ cmplx CL_multr_32x32( cmplx x, cmplx y ) result.re = W_round64_L( W_sub( W_mult_32_32( x.re, y.re ), W_mult_32_32( x.im, y.im ) ) ); result.im = W_round64_L( W_add( W_mult_32_32( x.im, y.re ), W_mult_32_32( x.re, y.im ) ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_multr_32x32++; multiCounter[currCounter].W_mult_32_32--; multiCounter[currCounter].W_mult_32_32--; @@ -393,7 +393,7 @@ cmplx_s C_mac_r( cmplx x, cmplx_s y, Word16 c ) cmplx temp = CL_add( x, C_scale( y, c ) ); result = CL_round32_16( temp ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_mac_r++; multiCounter[currCounter].CL_add--; multiCounter[currCounter].C_scale--; @@ -408,7 +408,7 @@ cmplx_s C_msu_r( cmplx x, cmplx_s y, Word16 c ) cmplx temp = CL_sub( x, C_scale( y, c ) ); result = CL_round32_16( temp ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_msu_r++; multiCounter[currCounter].CL_sub--; multiCounter[currCounter].C_scale--; @@ -419,7 +419,7 @@ cmplx_s C_msu_r( cmplx x, cmplx_s y, Word16 c ) Word16 C_Extract_real( cmplx_s x ) { -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_Extract_real++; #endif return x.re; @@ -427,7 +427,7 @@ Word16 C_Extract_real( cmplx_s x ) Word16 C_Extract_imag( cmplx_s x ) { -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_Extract_imag++; #endif return x.im; @@ -438,7 +438,7 @@ cmplx_s C_negate( cmplx_s x ) cmplx_s result; result.re = negate( x.re ); result.im = negate( x.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_negate++; multiCounter[currCounter].negate--; multiCounter[currCounter].negate--; @@ -451,7 +451,7 @@ cmplx_s C_conjugate( cmplx_s x ) cmplx_s result; result.re = x.re; result.im = negate( x.im ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_conjugate++; multiCounter[currCounter].negate--; #endif @@ -463,7 +463,7 @@ cmplx_s C_shr( cmplx_s inp, Word16 shift_val ) cmplx_s out; out.re = shr( inp.re, shift_val ); out.im = shr( inp.im, shift_val ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_shr++; multiCounter[currCounter].shr--; multiCounter[currCounter].shr--; @@ -476,7 +476,7 @@ cmplx_s C_shl( cmplx_s inp, Word16 shift_val ) cmplx_s out; out.re = shl( inp.re, shift_val ); out.im = shl( inp.im, shift_val ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].C_shl++; multiCounter[currCounter].shl--; multiCounter[currCounter].shl--; diff --git a/lib_com/control.c b/lib_com/control.c index 94f3d5aeb..20865de23 100644 --- a/lib_com/control.c +++ b/lib_com/control.c @@ -36,7 +36,7 @@ Flag LT_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LT_16++; #endif return F_ret; @@ -50,7 +50,7 @@ Flag GT_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GT_16++; #endif return F_ret; @@ -64,7 +64,7 @@ Flag LE_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LE_16++; #endif return F_ret; @@ -78,7 +78,7 @@ Flag GE_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GE_16++; #endif return F_ret; @@ -92,7 +92,7 @@ Flag EQ_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].EQ_16++; #endif return F_ret; @@ -106,7 +106,7 @@ Flag NE_16( Word16 var1, Word16 var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].NE_16++; #endif return F_ret; @@ -120,7 +120,7 @@ Flag LT_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LT_32++; #endif return F_ret; @@ -134,7 +134,7 @@ Flag GT_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GT_32++; #endif return F_ret; @@ -148,7 +148,7 @@ Flag LE_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LE_32++; #endif return F_ret; @@ -162,7 +162,7 @@ Flag GE_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GE_32++; #endif return F_ret; @@ -176,7 +176,7 @@ Flag EQ_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].EQ_32++; #endif return F_ret; @@ -190,7 +190,7 @@ Flag NE_32( Word32 L_var1, Word32 L_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].NE_32++; #endif return F_ret; @@ -204,7 +204,7 @@ Flag LT_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LT_64++; #endif return F_ret; @@ -218,7 +218,7 @@ Flag GT_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GT_64++; #endif return F_ret; @@ -232,7 +232,7 @@ Flag LE_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].LE_64++; #endif return F_ret; @@ -245,7 +245,7 @@ Flag GE_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].GE_64++; #endif return F_ret; @@ -259,7 +259,7 @@ Flag EQ_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].EQ_64++; #endif return F_ret; @@ -272,7 +272,7 @@ Flag NE_64( Word64 L64_var1, Word64 L64_var2 ) { F_ret = 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].NE_64++; #endif return F_ret; diff --git a/lib_com/control.h b/lib_com/control.h index d6a9610ac..ad1e5ae69 100644 --- a/lib_com/control.h +++ b/lib_com/control.h @@ -41,7 +41,7 @@ * Constants and Globals * *****************************************************************************/ -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; diff --git a/lib_com/enh1632.c b/lib_com/enh1632.c index 520459c21..1e6c41a0e 100644 --- a/lib_com/enh1632.c +++ b/lib_com/enh1632.c @@ -58,7 +58,7 @@ #define WMC_TOOL_SKIP -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /* ifdef WMOPS */ @@ -119,7 +119,7 @@ Word16 lshl( Word16 var1, Word16 var2 ) var2 = -var2; var_out = lshr( var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].lshr--; #endif /* ifdef WMOPS */ } @@ -138,7 +138,7 @@ Word16 lshl( Word16 var1, Word16 var2 ) var_out = var1 << var2; } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].lshl++; #endif /* ifdef WMOPS */ @@ -186,7 +186,7 @@ Word16 lshr( Word16 var1, Word16 var2 ) var2 = -var2; var_out = lshl( var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].lshl--; #endif /* ifdef WMOPS */ } @@ -207,7 +207,7 @@ Word16 lshr( Word16 var1, Word16 var2 ) var_out = var_out >> ( var2 - 1 ); } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].lshr++; #endif /* ifdef WMOPS */ @@ -256,7 +256,7 @@ Word32 L_lshl( Word32 L_var1, Word16 var2 ) var2 = -var2; L_var_out = L_lshr( L_var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_lshr--; #endif /* ifdef WMOPS */ } @@ -275,7 +275,7 @@ Word32 L_lshl( Word32 L_var1, Word16 var2 ) L_var_out = L_var1 << var2; } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_lshl++; #endif /* ifdef WMOPS */ @@ -324,7 +324,7 @@ Word32 L_lshr( Word32 L_var1, Word16 var2 ) var2 = -var2; L_var_out = L_lshl( L_var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_lshl--; #endif /* ifdef WMOPS */ } @@ -345,7 +345,7 @@ Word32 L_lshr( Word32 L_var1, Word16 var2 ) L_var_out = L_var_out >> ( var2 - 1 ); } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_lshr++; #endif /* ifdef WMOPS */ @@ -397,7 +397,7 @@ Word16 shl_r( Word16 var1, Word16 var2 ) #else var_out = shl( var1, var2 ); #endif -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].shl--; #endif /* ifdef WMOPS */ } @@ -409,12 +409,12 @@ Word16 shl_r( Word16 var1, Word16 var2 ) #else var_out = shr_r( var1, var2 ); #endif -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].shr_r--; #endif /* ifdef WMOPS */ } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].shl_r++; #endif /* ifdef WMOPS */ @@ -463,7 +463,7 @@ Word32 L_shl_r( Word32 L_var1, Word16 var2 ) { var_out = L_shl( L_var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_shl--; #endif /* ifdef WMOPS */ } @@ -472,12 +472,12 @@ Word32 L_shl_r( Word32 L_var1, Word16 var2 ) var2 = -var2; var_out = L_shr_r( L_var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_shr_r--; #endif /* ifdef WMOPS */ } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_shl_r++; #endif /* ifdef WMOPS */ @@ -522,7 +522,7 @@ Word16 rotr( Word16 var1, Word16 var2, Word16 *var3 ) *var3 = s_and( var1, 0x1 ); var_out = s_or( lshr( var1, 1 ), lshl( var2, 15 ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_and--; multiCounter[currCounter].lshl--; multiCounter[currCounter].lshr--; @@ -572,7 +572,7 @@ Word16 rotl( Word16 var1, Word16 var2, Word16 *var3 ) var_out = s_or( lshl( var1, 1 ), s_and( var2, 0x1 ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].lshr--; multiCounter[currCounter].s_and--; multiCounter[currCounter].lshl--; @@ -622,7 +622,7 @@ Word32 L_rotr( Word32 L_var1, Word16 var2, Word16 *var3 ) L_var_out = L_or( L_lshr( L_var1, 1 ), L_lshl( L_deposit_l( var2 ), 31 ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].extract_l--; multiCounter[currCounter].s_and--; multiCounter[currCounter].L_deposit_l--; @@ -674,7 +674,7 @@ Word32 L_rotl( Word32 L_var1, Word16 var2, Word16 *var3 ) L_var_out = L_or( L_lshl( L_var1, 1 ), L_deposit_l( s_and( var2, 0x1 ) ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_lshr--; multiCounter[currCounter].extract_l--; multiCounter[currCounter].s_and--; diff --git a/lib_com/enh1632.h b/lib_com/enh1632.h index 2ef87cd64..1477c6c80 100644 --- a/lib_com/enh1632.h +++ b/lib_com/enh1632.h @@ -36,7 +36,7 @@ #include "stl.h" -#if ( WMOPS ) +#ifdef WMOPS #include "count.h" extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; @@ -109,7 +109,7 @@ static __inline Word16 s_max( Word16 var1, Word16 var2 ) else var_out = var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_max++; #endif /* ifdef WMOPS */ @@ -154,7 +154,7 @@ static __inline Word16 s_min( Word16 var1, Word16 var2 ) else var_out = var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_min++; #endif /* ifdef WMOPS */ @@ -199,7 +199,7 @@ static __inline Word32 L_max( Word32 L_var1, Word32 L_var2 ) else L_var_out = L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_max++; #endif /* ifdef WMOPS */ @@ -244,7 +244,7 @@ static __inline Word32 L_min( Word32 L_var1, Word32 L_var2 ) else L_var_out = L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_min++; #endif /* ifdef WMOPS */ @@ -287,7 +287,7 @@ static __inline Word16 s_and( Word16 var1, Word16 var2 ) var_out = var1 & var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_and++; #endif /* ifdef WMOPS */ @@ -330,7 +330,7 @@ static __inline Word32 L_and( Word32 L_var1, Word32 L_var2 ) L_var_out = L_var1 & L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_and++; #endif /* ifdef WMOPS */ @@ -373,7 +373,7 @@ static __inline Word16 s_or( Word16 var1, Word16 var2 ) var_out = var1 | var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_or++; #endif /* ifdef WMOPS */ @@ -417,7 +417,7 @@ static __inline Word32 L_or( Word32 L_var1, Word32 L_var2 ) L_var_out = L_var1 | L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_or++; #endif /* ifdef WMOPS */ @@ -460,7 +460,7 @@ static __inline Word16 s_xor( Word16 var1, Word16 var2 ) var_out = var1 ^ var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].s_xor++; #endif /* ifdef WMOPS */ @@ -503,7 +503,7 @@ static __inline Word32 L_xor( Word32 L_var1, Word32 L_var2 ) L_var_out = L_var1 ^ L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].L_xor++; #endif /* ifdef WMOPS */ diff --git a/lib_com/enh32.c b/lib_com/enh32.c index 563b7f4a7..d2466ce64 100644 --- a/lib_com/enh32.c +++ b/lib_com/enh32.c @@ -25,7 +25,7 @@ #define WMC_TOOL_SKIP -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /* if WMOPS */ @@ -53,7 +53,7 @@ extern int currCounter; Word32 Mpy_32_16_1( Word32 L_var1, Word16 var2 ) { Word32 L_var_out = W_sat_m( W_mult_32_16( L_var1, var2 ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_1++; multiCounter[currCounter].W_mult_32_16--; multiCounter[currCounter].W_sat_m--; @@ -64,7 +64,7 @@ Word32 Mpy_32_16_1( Word32 L_var1, Word16 var2 ) Word32 Mpy_32_16_r( Word32 L_var1, Word16 var2 ) { Word32 L_var_out = W_round48_L( W_mult_32_16( L_var1, var2 ) ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_r++; multiCounter[currCounter].W_mult_32_16--; multiCounter[currCounter].W_round48_L--; @@ -87,7 +87,7 @@ Word32 Mpy_32_32( Word32 L_var1, Word32 L_var2 ) L64_var1 = W_shl( L64_var1, 1 ); #endif /* BASOP_NOGLOB */ L_var_out = W_extract_h( L64_var1 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32++; multiCounter[currCounter].W_shl--; multiCounter[currCounter].W_extract_h--; @@ -103,7 +103,7 @@ Word32 Mpy_32_32_r( Word32 L_var1, Word32 L_var2 ) L64_var1 = ( (Word64) L_var1 * L_var2 ); L64_var1 = W_shr( L64_var1, 15 ); L_var_out = W_round48_L( L64_var1 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_r++; multiCounter[currCounter].W_shr--; multiCounter[currCounter].W_round48_L--; @@ -125,7 +125,7 @@ Word32 Madd_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 ) L_var_out = L_add( L_var3, L_var_out ); #endif /* BASOP_NOGLOB */ -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].L_add--; multiCounter[currCounter].Madd_32_16++; @@ -140,7 +140,7 @@ Word32 Madd_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 ) L_var_out = Mpy_32_16_r( L_var1, var2 ); L_var_out = L_add( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].L_add--; multiCounter[currCounter].Madd_32_16_r++; @@ -162,7 +162,7 @@ Word32 Msub_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 ) L_var_out = L_sub( L_var3, L_var_out ); #endif -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_1--; multiCounter[currCounter].L_sub--; multiCounter[currCounter].Msub_32_16++; @@ -177,7 +177,7 @@ Word32 Msub_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 ) L_var_out = Mpy_32_16_r( L_var1, var2 ); L_var_out = L_sub( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_r--; multiCounter[currCounter].L_sub--; multiCounter[currCounter].Msub_32_16_r++; @@ -192,7 +192,7 @@ Word32 Madd_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 ) L_var_out = Mpy_32_32( L_var1, L_var2 ); L_var_out = L_add( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32--; multiCounter[currCounter].L_add--; multiCounter[currCounter].Madd_32_32++; @@ -207,7 +207,7 @@ Word32 Madd_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 ) L_var_out = Mpy_32_32_r( L_var1, L_var2 ); L_var_out = L_add( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].L_add--; multiCounter[currCounter].Madd_32_32_r++; @@ -222,7 +222,7 @@ Word32 Msub_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 ) L_var_out = Mpy_32_32( L_var1, L_var2 ); L_var_out = L_sub( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32--; multiCounter[currCounter].L_sub--; multiCounter[currCounter].Msub_32_32++; @@ -237,7 +237,7 @@ Word32 Msub_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 ) L_var_out = Mpy_32_32_r( L_var1, L_var2 ); L_var_out = L_sub( L_var3, L_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_r--; multiCounter[currCounter].L_sub--; multiCounter[currCounter].Msub_32_32_r++; diff --git a/lib_com/enh64.c b/lib_com/enh64.c index e70b8c9f0..2457d6c48 100644 --- a/lib_com/enh64.c +++ b/lib_com/enh64.c @@ -20,7 +20,7 @@ #define WMC_TOOL_SKIP -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /* if WMOPS */ @@ -83,7 +83,7 @@ Word64 W_add_nosat( Word64 L64_var1, Word64 L64_var2 ) L64_var_out = L64_var1 + L64_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_add_nosat++; #endif @@ -126,7 +126,7 @@ Word64 W_sub_nosat( Word64 L64_var1, Word64 L64_var2 ) L64_var_out = L64_var1 - L64_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_sub_nosat++; #endif @@ -214,7 +214,7 @@ Word64 W_shl( Word64 L64_var1, Word16 var2 ) L64_var_out = L64_var1; } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shl++; #endif @@ -273,7 +273,7 @@ Word64 W_shr( Word64 L64_var1, Word16 var2 ) var2 = -var2; L64_var_out = W_shl( L64_var1, var2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shl--; #endif /* if WMOPS */ } @@ -282,7 +282,7 @@ Word64 W_shr( Word64 L64_var1, Word16 var2 ) L64_var_out = L64_var1 >> var2; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shr++; #endif /* if WMOPS */ @@ -338,7 +338,7 @@ Word64 W_shl_nosat( Word64 L64_var1, Word16 var2 ) { L64_var_out = L64_var1 << var2; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shl_nosat++; #endif @@ -396,7 +396,7 @@ Word64 W_shr_nosat( Word64 L64_var1, Word16 var2 ) L64_var_out = L64_var1 >> var2; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shr_nosat++; #endif /* if WMOPS */ @@ -444,7 +444,7 @@ Word64 W_mac_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 ) { Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1; L64_var_out += L64_var1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mac_32_16++; #endif /* if WMOPS */ return L64_var_out; @@ -491,7 +491,7 @@ Word64 W_msu_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 ) { Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1; L64_var_out = L64_var1 - L64_var_out; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_msu_32_16++; #endif /* if WMOPS */ return L64_var_out; @@ -532,7 +532,7 @@ Word64 W_msu_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 ) Word64 W_mult_32_16( Word32 L_var1, Word16 var2 ) { Word64 L64_var_out = ( (Word64) L_var1 * var2 ) << 1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult_32_16++; #endif /* if WMOPS */ return L64_var_out; @@ -572,7 +572,7 @@ Word64 W_mult_32_16( Word32 L_var1, Word16 var2 ) Word64 W_mult0_16_16( Word16 var1, Word16 var2 ) { Word64 L64_var_out = (Word64) var1 * var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult0_16_16++; #endif /* if WMOPS */ return L64_var_out; @@ -617,7 +617,7 @@ Word64 W_mac0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 ) { Word64 L64_var_out = (Word64) var2 * var3; L64_var_out += L64_var1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mac0_16_16++; #endif /* if WMOPS */ return L64_var_out; @@ -663,7 +663,7 @@ Word64 W_msu0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 ) { Word64 L64_var_out = (Word64) var2 * var3; L64_var_out = L64_var1 - L64_var_out; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_msu0_16_16++; #endif /* if WMOPS */ return L64_var_out; @@ -714,7 +714,7 @@ Word32 W_sat_l( Word64 L64_var ) L_var_out = (Word32) L64_var; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_sat_l++; #endif /* if WMOPS */ @@ -757,7 +757,7 @@ Word32 W_sat_m( Word64 L64_var ) L64_var = L64_var >> 16; L_var_out = W_sat_l( L64_var ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_sat_l--; multiCounter[currCounter].W_sat_m++; #endif /* if WMOPS */ @@ -799,7 +799,7 @@ Word64 W_deposit32_l( Word32 L_var1 ) L64_var_out = (Word64) L_var1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_deposit32_l++; #endif @@ -840,7 +840,7 @@ Word64 W_deposit32_h( Word32 L_var1 ) L64_var_out = (Word64) L_var1 << 32; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_deposit32_h++; #endif @@ -881,7 +881,7 @@ Word32 W_extract_l( Word64 L64_var1 ) L_var_out = (Word32) L64_var1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_extract_l++; #endif /* if WMOPS */ @@ -922,7 +922,7 @@ Word32 W_extract_h( Word64 L64_var1 ) L_var_out = (Word32) ( L64_var1 >> 32 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_extract_h++; #endif /* if WMOPS */ @@ -964,7 +964,7 @@ Word32 W_extract_h( Word64 L64_var1 ) Word64 W_mult_16_16( Word16 var1, Word16 var2 ) { Word64 L64_var_out = ( (Word64) var1 * var2 ) << 1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult_16_16++; #endif /* if WMOPS */ return L64_var_out; @@ -1010,7 +1010,7 @@ Word64 W_mac_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ) Word64 L64_var_out = ( (Word64) var1 * var2 ) << 1; L64_acc = L64_acc + L64_var_out; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mac_16_16++; #endif /* if WMOPS */ return L64_acc; @@ -1057,7 +1057,7 @@ Word64 W_msu_16_16( Word64 L64_var1, Word16 var2, Word16 var3 ) { Word64 L64_var_out = ( (Word64) var2 * var3 ) << 1; L64_var_out = L64_var1 - L64_var_out; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_msu_16_16++; #endif /* if WMOPS */ return L64_var_out; @@ -1104,7 +1104,7 @@ Word32 W_shl_sat_l( Word64 L64_var, Word16 n ) d_var_64 = W_shl( L64_var, n ); L_result = W_sat_l( d_var_64 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_shl_sat_l++; multiCounter[currCounter].W_shl--; multiCounter[currCounter].W_sat_l--; @@ -1171,7 +1171,7 @@ Word32 W_round48_L( Word64 L64_var1 ) } } L_result = W_extract_h( L64_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_round48_L++; multiCounter[currCounter].W_extract_h--; multiCounter[currCounter].W_shl--; @@ -1246,7 +1246,7 @@ Word16 W_round32_s( Word64 L64_var1 ) } L_var = W_extract_h( L64_var_out ); var_out = extract_h( L_var ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_round32_s++; multiCounter[currCounter].W_extract_h--; multiCounter[currCounter].extract_h--; @@ -1316,7 +1316,7 @@ Word16 W_norm( Word64 L64_var1 ) } } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_norm++; #endif /* if WMOPS */ return ( var_out ); @@ -1377,7 +1377,7 @@ Word64 W_add( Word64 L64_var1, Word64 L64_var2 ) } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_add++; #endif return L64_var_out; @@ -1444,7 +1444,7 @@ Word64 W_sub( Word64 L64_var1, Word64 L64_var2 ) } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_add++; #endif return L64_var_out; @@ -1507,7 +1507,7 @@ Word64 W_neg( Word64 L64_var1 ) L64_var_out = -L64_var1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_neg++; #endif @@ -1578,7 +1578,7 @@ Word64 W_abs( Word64 L64_var1 ) } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_abs++; #endif @@ -1646,7 +1646,7 @@ Word64 W_mult_32_32( Word32 L_var1, Word32 L_var2 ) L64_var_out = ( (Word64) L_var1 * L_var2 ) << 1; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult_32_32++; #endif /* if WMOPS */ return L64_var_out; @@ -1697,7 +1697,7 @@ Word64 W_mult0_32_32( Word32 L_var1, Word32 L_var2 ) L64_var_out = (Word64) L_var1 * L_var2; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult0_32_32++; #endif /* if WMOPS */ return L64_var_out; @@ -1749,7 +1749,7 @@ UWord64 W_lshl( UWord64 L64_var1, Word16 var2 ) { L64_var_out = L64_var1 << var2; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_lshl++; #endif @@ -1801,7 +1801,7 @@ UWord64 W_lshr( UWord64 L64_var1, Word16 var2 ) { L64_var_out = L64_var1 >> var2; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_lshr++; #endif @@ -1846,7 +1846,7 @@ Word32 W_round64_L( Word64 L64_var1 ) L64_var_out = W_add( L64_var1, L64_tmp ); L_result = W_extract_h( L64_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_round64_L++; multiCounter[currCounter].W_extract_h--; multiCounter[currCounter].W_add--; diff --git a/lib_com/enhUL32.c b/lib_com/enhUL32.c index 81a966159..647f0d5cb 100644 --- a/lib_com/enhUL32.c +++ b/lib_com/enhUL32.c @@ -29,7 +29,7 @@ #define WMC_TOOL_SKIP -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /* if WMOPS */ @@ -64,7 +64,7 @@ UWord32 UL_deposit_l( UWord16 uvar ) { UWord32 UL_result; UL_result = (UWord32) uvar; /* no sign extension*/ -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].UL_deposit_l++; #endif return ( UL_result ); @@ -115,7 +115,7 @@ Word16 norm_ul_float (UWord32 UL_var1) { } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].norm_ul_float++; #endif @@ -249,7 +249,7 @@ void Mpy_32_16_uu( UWord32 UL_var1, UWord16 uvar2, UWord32 *UL_varout_h, UWord16 *varout_l = (UWord16) UL64_var1; *UL_varout_h = (UWord32) ( UL64_var1 >> 16 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_16_uu++; #endif /* if WMOPS */ @@ -299,7 +299,7 @@ void Mpy_32_32_uu( UWord32 UL_var1, UWord32 UL_var2, UWord32 *UL_varout_h, UWord *UL_varout_h = (UWord32) ( UL64_var1 >> 32 ); *UL_varout_l = (UWord32) ( UL64_var1 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].Mpy_32_32_uu++; #endif /* if WMOPS */ @@ -352,7 +352,7 @@ UWord32 UL_Mpy_32_32( UWord32 UL_var1, UWord32 UL_var2 ) UL_varout_l = UL_varout_l & MASK32; #undef MASK32 -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].UL_Mpy_32_32++; #endif /* if WMOPS */ diff --git a/lib_com/fft_cldfb_fx.c b/lib_com/fft_cldfb_fx.c index d60a285f5..dcc86b94f 100644 --- a/lib_com/fft_cldfb_fx.c +++ b/lib_com/fft_cldfb_fx.c @@ -186,7 +186,7 @@ static void fft8_with_cmplx_data( cmplx *inp ) inp[1] = CL_add( s5, s6 ); inp[5] = CL_sub( s5, s6 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 8; #endif } @@ -244,7 +244,7 @@ static void fft5_with_cmplx_data( cmplx *inp ) inp[2] = CL_mac_j( y3, y4 ); inp[3] = CL_msu_j( y3, y4 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 5; #endif } @@ -351,7 +351,7 @@ static void fft10_with_cmplx_data( cmplx *inp_data ) inp_data[3] = CL_sub( y[8], y[9] ); } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 10; #endif } @@ -598,7 +598,7 @@ static void fft20_with_cmplx_data( cmplx *inp_data ) inp_data[11] = CL_mac_j( t1, t3 ); } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 20; #endif } @@ -1037,7 +1037,7 @@ static void fft30_with_cmplx_data( cmplx *inp ) l += 1; h += 1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 30; #endif } diff --git a/lib_com/fft_evs.c b/lib_com/fft_evs.c index 56b735804..0a59cbb64 100644 --- a/lib_com/fft_evs.c +++ b/lib_com/fft_evs.c @@ -181,7 +181,7 @@ static void fft5_with_cmplx_data( cmplx *inp ) inp[2] = CL_mac_j( y3, y4 ); inp[3] = CL_msu_j( y3, y4 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 5; #endif } @@ -261,7 +261,7 @@ static void fft8_with_cmplx_data( cmplx *inp ) inp[1] = CL_add( s5, s6 ); inp[5] = CL_sub( s5, s6 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 8; #endif } @@ -370,7 +370,7 @@ static void fft10_with_cmplx_data( cmplx *inp_data ) inp_data[3] = CL_sub( y[8], y[9] ); } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 10; #endif } @@ -521,7 +521,7 @@ static void fft15_with_cmplx_data( cmplx *inp_data ) inp_data[4] = CL_mac_j( c_y1, c_y2 ); inp_data[14] = CL_msu_j( c_y1, c_y2 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 15; #endif } @@ -755,7 +755,7 @@ void fft16_with_cmplx_data( cmplx *input, Word16 bScale ) input[11] = CL_sub( t0, t4 ); input[15] = CL_mac_j( t2, t7 ); } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 16; #endif } @@ -1003,7 +1003,7 @@ static void fft20_with_cmplx_data( cmplx *inp_data ) inp_data[11] = CL_mac_j( t1, t3 ); } } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 20; #endif } @@ -1443,7 +1443,7 @@ static void fft30_with_cmplx_data( cmplx *inp ) l += 1; h += 1; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 30; #endif } @@ -1816,7 +1816,7 @@ static void fft32_with_cmplx_data( cmplx *inp ) inp[23] = CL_sub( t[0], t[2] ); inp[31] = CL_add( t[1], t[3] ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 32; #endif } @@ -1861,7 +1861,7 @@ static void fftN2( FOR( j = 0; j < dim1; j++ ) { x_cmplx[i * dim1 + j] = pComplexBuf[i + j * dim2]; -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move++; #endif } @@ -2142,7 +2142,7 @@ static void fftN2( } BREAK; } -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += len; #endif } diff --git a/lib_com/move.h b/lib_com/move.h index 2afeb1ccb..a6f5b353e 100644 --- a/lib_com/move.h +++ b/lib_com/move.h @@ -39,7 +39,7 @@ #include "stl.h" /* BASOP -> FLC brigde: data move counting */ -#if ( WMOPS ) +#ifdef WMOPS extern BASIC_OP multiCounter[MAXCOUNTERS]; extern int currCounter; #endif /* ifdef WMOPS */ diff --git a/lib_com/options.h b/lib_com/options.h index f535c854f..f847adb1d 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -54,10 +54,9 @@ #pragma warning(disable:4310) /* cast truncates constant value this affects mainly constants tables*/ #endif -/*#define WMOPS 1 --> activation or deactivation in count.h*/ /* Activate FIXED-POINT complexity counters */ -/*#define DONT_COUNT */ /* To prevent the complexity counting */ +/*#define WMOPS */ /* Activate complexity and memory counters */ -#ifdef WMOPS_FLT +#ifdef WMOPS /*#define WMOPS_PER_FRAME*/ /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */ /*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ /*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed complexity analysis for the worst-case frame */ -- GitLab From bc34dd482ef3f2224c18e402e7189b996a044000 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 08:57:04 +0200 Subject: [PATCH 35/77] leftover --- lib_enc/subband_fft_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/subband_fft_fx.c b/lib_enc/subband_fft_fx.c index e5ffd49a6..83a1b41dd 100644 --- a/lib_enc/subband_fft_fx.c +++ b/lib_enc/subband_fft_fx.c @@ -125,7 +125,7 @@ static void passf4_1_16( ch[i + 4] = C_multr( c2, wa1[i] ); ch[i + 8] = C_multr( c3, wa2[i] ); ch[i + 12] = C_multr( c4, wa3[i] ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 4; #endif } @@ -157,7 +157,7 @@ static void passf4_2_16( ch[k + 8] = C_sub( t2, t3 ); ch[k + 4] = C_add( t1, t4 ); ch[k + 12] = C_sub( t1, t4 ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].CL_move += 4; #endif } -- GitLab From 31e216062238f0c2e13e8493706def56f6e48f7d Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:06:54 +0200 Subject: [PATCH 36/77] add count.h to .vcxproj file --- Workspace_msvc/lib_com.vcxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj index 28dae4b83..0c08cb082 100644 --- a/Workspace_msvc/lib_com.vcxproj +++ b/Workspace_msvc/lib_com.vcxproj @@ -388,6 +388,7 @@ + -- GitLab From bfd80ab387aa06a63f4692048d5b40216ec2e29f Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:11:35 +0200 Subject: [PATCH 37/77] leftover from previous commit --- Workspace_msvc/lib_com.vcxproj.filters | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Workspace_msvc/lib_com.vcxproj.filters b/Workspace_msvc/lib_com.vcxproj.filters index 46d83453a..045a57287 100644 --- a/Workspace_msvc/lib_com.vcxproj.filters +++ b/Workspace_msvc/lib_com.vcxproj.filters @@ -597,6 +597,9 @@ common_h + + common_h + -- GitLab From 91e66c2bd5f5166e5b8040d00127f5c945928690 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:11:50 +0200 Subject: [PATCH 38/77] simplification in count.c --- lib_com/count.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index 2b52414a4..2e2a29a36 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -53,7 +53,6 @@ #ifdef WMOPS static double frameRate = FRAME_RATE; /* default value : 10 ms */ -#endif /* ifdef WMOPS */ #define MAX_RECORDS 1024 #define MAX_STACK 64 @@ -82,17 +81,13 @@ static struct wmops_record wmops[MAX_RECORDS]; static int stack[MAX_STACK]; static int sptr; - -#ifdef WMOPS /* Global counter variable for calculation of complexity weight */ /* Some enhancement written by Vail., GJR and M.Mul. during EVS time */ BASIC_OP multiCounter[MAXCOUNTERS]; BASIC_OP glob_multiCounter; int currCounter = 0; /* Zero equals global counter */ -#endif /* ifdef WMOPS */ -#ifdef WMOPS void setFrameRate( int samplingFreq, int frameLength ) { if ( frameLength > 0 ) @@ -102,9 +97,7 @@ void setFrameRate( int samplingFreq, int frameLength ) return; } -#endif /* ifdef WMOPS */ -#ifdef WMOPS /* * Below list is used for displaying the code profiling information in * the file which name is defined by CODE_PROFILE_FILENAME. @@ -172,10 +165,8 @@ char *BasicOperationList[] = { #endif /* #ifdef CONTROL_CODE_OPS */ }; -#endif /* ifdef WMOPS */ -#ifdef WMOPS const BASIC_OP op_weight = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -- GitLab From aadf6a99485d1789a547b6ae25a7eeb24278bf06 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:39:29 +0200 Subject: [PATCH 39/77] include enhUL32.h in .vcxproj and fix #ifdef WMOPS --- Workspace_msvc/lib_com.vcxproj | 1 + Workspace_msvc/lib_com.vcxproj.filters | 3 +++ lib_com/enhUL32.c | 4 ++-- lib_com/enhUL32.h | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj index 0c08cb082..9119a2c38 100644 --- a/Workspace_msvc/lib_com.vcxproj +++ b/Workspace_msvc/lib_com.vcxproj @@ -391,6 +391,7 @@ + diff --git a/Workspace_msvc/lib_com.vcxproj.filters b/Workspace_msvc/lib_com.vcxproj.filters index 045a57287..c8ed6bc10 100644 --- a/Workspace_msvc/lib_com.vcxproj.filters +++ b/Workspace_msvc/lib_com.vcxproj.filters @@ -600,6 +600,9 @@ common_h + + common_h + diff --git a/lib_com/enhUL32.c b/lib_com/enhUL32.c index 647f0d5cb..ff1c68425 100644 --- a/lib_com/enhUL32.c +++ b/lib_com/enhUL32.c @@ -157,7 +157,7 @@ UWord32 UL_addNs( UWord32 UL_var1, UWord32 UL_var2, UWord16 *wrap ) *wrap = 0; } -#if WMOPS +#ifdef WMOPS multiCounter[currCounter].UL_addNs++; #endif @@ -197,7 +197,7 @@ UWord32 UL_subNs( UWord32 UL_var1, UWord32 UL_var2, UWord16 *sgn ) *sgn = 1; /* "negative", wrapped output */ } -#if WMOPS +#ifdef WMOPS multiCounter[currCounter].UL_subNs++; #endif return UL_var3; diff --git a/lib_com/enhUL32.h b/lib_com/enhUL32.h index 240dead79..39a79d700 100644 --- a/lib_com/enhUL32.h +++ b/lib_com/enhUL32.h @@ -24,7 +24,7 @@ #define UWord64 unsigned long long /* for local use inside UL_Mpy_32_* */ #endif -#if ( WMOPS ) +#ifdef WMOPS #include "count.h" extern BASIC_OP multiCounter[MAXCOUNTERS]; /* existing signed counters are reused for unsigedn operators */ extern int currCounter; -- GitLab From 8f24108a7392baa69a39ef7070fa9ee4693db24d Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:40:11 +0200 Subject: [PATCH 40/77] fix incorrect usage of va_start inside push_wmops_wmc() --- lib_debug/wmc_auto.c | 3 ++- lib_debug/wmc_auto.h | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index 4efb6b6a2..d8be360a8 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #ifndef _MSC_VER @@ -188,7 +189,7 @@ void reset_wmops_wmc( void ) return; } -void push_wmops_wmc( const char *label ) +void push_wmops_fct( const char *label, ... ) { int new_flag; int i, j, index_record; diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index e5185128a..3d6d93328 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -558,11 +558,12 @@ extern double prom_cnt_wmc; extern double inst_cnt[NUM_INST]; extern int cntr_push_pop; -void push_wmops_wmc( const char *label ); +#define push_wmops_wmc( ... ) push_wmops_fct( __VA_ARGS__, NULL ) +void push_wmops_fct( const char *label, ... ); void pop_wmops_wmc( void ); void reset_wmops_wmc( void ); void print_wmops_wmc( void ); -void update_wmops_wmc(); +void update_wmops_wmc( void ); void update_mem( void ); #else -- GitLab From 7b84b1dd324695b55a110dbf184af67186054c3a Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:40:46 +0200 Subject: [PATCH 41/77] cleanup --- lib_com/count.c | 95 +++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 50 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index 2e2a29a36..c4e66489d 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -58,28 +58,29 @@ static double frameRate = FRAME_RATE; /* default value : 10 ms */ #define MAX_STACK 64 #define MAX_CHAR 64 -struct wmops_record -{ - char label[MAX_CHAR]; - long call_number; - long update_cnt; - int call_tree[MAX_RECORDS]; - double start_selfcnt; - double current_selfcnt; - double max_selfcnt; - double min_selfcnt; - double tot_selfcnt; - double start_cnt; /* The following take into account the decendants */ - double current_cnt; - double max_cnt; - double min_cnt; - double tot_cnt; -}; - -static struct wmops_record wmops[MAX_RECORDS]; +//struct wmops_record +//{ +// char label[MAX_CHAR]; +// long call_number; +// long update_cnt; +// int call_tree[MAX_RECORDS]; +// double start_selfcnt; +// double current_selfcnt; +// double max_selfcnt; +// double min_selfcnt; +// double tot_selfcnt; +// double start_cnt; /* The following take into account the decendants */ +// double current_cnt; +// double max_cnt; +// double min_cnt; +// double tot_cnt; +//}; +// +//static struct wmops_record wmops[MAX_RECORDS]; static int stack[MAX_STACK]; static int sptr; +static int sum_stack[MAX_STACK]; /* Global counter variable for calculation of complexity weight */ /* Some enhancement written by Vail., GJR and M.Mul. during EVS time */ @@ -320,7 +321,7 @@ static char *my_strdup( const char *s ) int getCounterId( const char *objectNameArg ) { -#if WMOPS +#ifdef WMOPS if ( maxCounter >= MAXCOUNTERS - 1 ) return 0; objectName[++maxCounter] = my_strdup( objectNameArg ); @@ -334,7 +335,7 @@ int getCounterId( const char *objectNameArg ) } -#if WMOPS +#ifdef WMOPS int readCounterId() { return currCounter; @@ -351,7 +352,7 @@ char *readCounterIdName() void setCounter( int counterId ) { -#if WMOPS +#ifdef WMOPS if ( ( counterId > maxCounter ) || ( counterId < 0 ) ) { currCounter = 0; @@ -367,7 +368,7 @@ void setCounter( int counterId ) void incrementNbTimeObjectIsCalled( int counterId ) { -#if WMOPS +#ifdef WMOPS if ( ( counterId > maxCounter ) || ( counterId < 0 ) ) { nbTimeObjectIsCalled[0]++; @@ -380,7 +381,7 @@ void incrementNbTimeObjectIsCalled( int counterId ) } -#if WMOPS +#ifdef WMOPS static Word32 WMOPS_frameStat( void ) { /* calculate the WMOPS seen so far and update the global @@ -432,7 +433,7 @@ static void WMOPS_clearMultiCounter( void ) void ClearNbTimeObjectsAreCalled() { -#if WMOPS +#ifdef WMOPS Word16 i; for ( i = 0; i < (Word16) ( sizeof( multiCounter[currCounter] ) / sizeof( Word32 ) ); i++ ) @@ -444,7 +445,7 @@ void ClearNbTimeObjectsAreCalled() Word32 TotalWeightedOperation() { -#if WMOPS +#ifdef WMOPS Word16 i; Word32 tot, *ptr; const Word32 *ptr2; @@ -467,7 +468,7 @@ Word32 TotalWeightedOperation() Word32 DeltaWeightedOperation() { -#if WMOPS +#ifdef WMOPS Word32 NewWOper, delta; NewWOper = TotalWeightedOperation(); @@ -484,7 +485,7 @@ Word32 DeltaWeightedOperation() void Init_WMOPS_counter( void ) { -#if WMOPS +#ifdef WMOPS Word16 i; /* reset function weight operation counter variable */ @@ -529,7 +530,7 @@ void Init_WMOPS_counter( void ) Word32 Reset_WMOPS_counter( void ) { -#if WMOPS +#ifdef WMOPS Word32 tot = WMOPS_frameStat(); /* increase the frame counter --> a frame is counted WHEN IT BEGINS */ @@ -557,7 +558,7 @@ Word32 Reset_WMOPS_counter( void ) Word32 fwc( void ) { /* function worst case */ -#if WMOPS +#ifdef WMOPS Word32 tot; tot = DeltaWeightedOperation(); @@ -583,7 +584,7 @@ Word32 fwc( void ) void WMOPS_output( Word16 dtx_mode ) { -#if WMOPS +#ifdef WMOPS Word16 i; Word32 tot, tot_wm, tot_wc; @@ -618,7 +619,7 @@ void WMOPS_output( Word16 dtx_mode ) void WMOPS_output_avg( Word16 dtx_mode, Word32 *tot_wm, Word32 *num_frames ) { -#if WMOPS +#ifdef WMOPS Word16 i; Word32 tot, tot_wc; @@ -654,7 +655,7 @@ void WMOPS_output_avg( Word16 dtx_mode, Word32 *tot_wm, Word32 *num_frames ) void generic_WMOPS_output( Word16 dtx_mode, char *test_file_name ) { -#if WMOPS +#ifdef WMOPS int saved_value; Word16 i; Word32 tot, tot_wm, tot_wc, *ptr; @@ -800,17 +801,12 @@ void generic_WMOPS_output( Word16 dtx_mode, char *test_file_name ) } /* FROM_EVS_DEV */ -#define MAX_STACK 64 -#if WMOPS -static int stack[MAX_STACK]; -static int sptr; -static int sum_stack[MAX_STACK]; -#endif + /* jdr 20120117: add FLC similar functions */ void BASOP_frame_update( void ) { -#if WMOPS +#ifdef WMOPS int i, current; #if MAX_CALLERS_SAVED_FRAMES int k; @@ -930,7 +926,7 @@ void BASOP_frame_update( void ) void printStack( char *text, char *Id ) { -#if WMOPS +#ifdef WMOPS int i; if ( !Id ) return; @@ -950,7 +946,7 @@ void printStack( char *text, char *Id ) void BASOP_push_wmops( const char *label ) { -#if WMOPS +#ifdef WMOPS int new_flag, prev_counter; int i, j; @@ -1027,7 +1023,7 @@ void BASOP_push_wmops( const char *label ) Word32 BASOP_pop_wmops( void ) { -#if WMOPS +#ifdef WMOPS Word32 ops_cnt; #ifdef DEBUG_COUNTER @@ -1074,13 +1070,13 @@ Word32 BASOP_get_wops( void ) } -#if WMOPS +#ifdef WMOPS static Word32 prom_cnt = 0; #endif void WMOPS_destroy( void ) { -#if WMOPS +#ifdef WMOPS int i; /* release the memory allocated for the objectName array */ @@ -1102,7 +1098,7 @@ void WMOPS_destroy( void ) void WMOPS_output_all( Word16 dtx_mode ) { -#if WMOPS +#ifdef WMOPS float ops_cnt = 0.0f; int i; @@ -1256,7 +1252,7 @@ void WMOPS_output_all( Word16 dtx_mode ) } void WMOPS_output_all_std( Word16 dtx_mode ) { -#if WMOPS +#ifdef WMOPS float ops_cnt = 0.0f; int i; @@ -1358,7 +1354,7 @@ void WMOPS_output_all_std( Word16 dtx_mode ) void Reset_all_WMOPS_counter( void ) { -#if WMOPS +#ifdef WMOPS int i; int currCounterSave; @@ -1379,7 +1375,7 @@ void Reset_all_WMOPS_counter( void ) /* Returns the total min/max/avg WMOPS values like printed in BASOP_end(). */ void BASOP_get_total_wmops( double *min, double *max, double *avg ) { -#if WMOPS +#ifdef WMOPS if ( min != NULL ) *min = frameRate * glob_bc[0]; if ( max != NULL ) @@ -1399,4 +1395,3 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ) } /* end of file */ #undef WMC_TOOL_SKIP -/*AddedByWMC_Tool*/ int PROM_Size_Func( count ) { return 131; } -- GitLab From 7383fe131e71ad5302b505fdbd5dbfcb5ad01ca7 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:41:05 +0200 Subject: [PATCH 42/77] fix warning about dangling else statement --- lib_dec/lib_dec_fx.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index d258c26d8..171543a45 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -1444,9 +1444,11 @@ static ivas_error IVAS_DEC_Setup( { // fixedToFloat_arrL( st_ivas->hParamMC->h_output_synthesis_params.proto_matrix_fx, st_ivas->hParamMC->h_output_synthesis_params.proto_matrix, 26, st_ivas->hParamMC->h_output_synthesis_params.proto_matrix_len ); IF( st_ivas->hParamMC->diff_proto_info ) - FOR( i = 0; i < st_ivas->hParamMC->diff_proto_info->num_protos_diff; i++ ) { - fixedToFloat_arrL( st_ivas->hParamMC->diff_proto_info->proto_fac_fx[i], st_ivas->hParamMC->diff_proto_info->proto_fac[i], 26, st_ivas->hParamMC->diff_proto_info->num_source_chan_diff[i] ); + FOR( i = 0; i < st_ivas->hParamMC->diff_proto_info->num_protos_diff; i++ ) + { + fixedToFloat_arrL( st_ivas->hParamMC->diff_proto_info->proto_fac_fx[i], st_ivas->hParamMC->diff_proto_info->proto_fac[i], 26, st_ivas->hParamMC->diff_proto_info->num_source_chan_diff[i] ); + } } } } -- GitLab From 0e9368015f0a9a2924cc378905e200b2eb6537c0 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 09:41:28 +0200 Subject: [PATCH 43/77] cleanup --- lib_com/options.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index f847adb1d..40262091b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -36,26 +36,23 @@ #ifndef OPTIONS_H #define OPTIONS_H -//#define DEBUGGING /*allows message printed out during run time */ -#ifdef DEBUGGING -#include "debug.h" -#endif /* clang-format off */ - /* ################### Start compiler switches ######################## */ - -#define SUPPORT_JBM_TRACEFILE /* support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ -/* #################### End compiler switches ######################### */ +/* ################### Start DEBUGGING switches ######################## */ -/* ################### Start compiler switches ######################## */ -/* */ #ifdef _MSC_VER #pragma warning(disable:4310) /* cast truncates constant value this affects mainly constants tables*/ #endif -/*#define WMOPS */ /* Activate complexity and memory counters */ +/*#define DEBUGGING*/ /* Allows debugging message to be printed out during runtime */ +#ifdef DEBUGGING +#include "debug.h" +#endif + +#define SUPPORT_JBM_TRACEFILE /* Support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ +/*#define WMOPS*/ /* Activate complexity and memory counters */ #ifdef WMOPS /*#define WMOPS_PER_FRAME*/ /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */ /*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ -- GitLab From 82e5097617914a0ce62a681d925a5b9f50db1264 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:19:27 +0200 Subject: [PATCH 44/77] attempt to fix unbalanced parentheses due to #ifdef IVAS_CODE in stereo CNA --- lib_dec/acelp_core_dec_fx.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib_dec/acelp_core_dec_fx.c b/lib_dec/acelp_core_dec_fx.c index 7fb5ff3bc..32ef2fb87 100644 --- a/lib_dec/acelp_core_dec_fx.c +++ b/lib_dec/acelp_core_dec_fx.c @@ -1533,8 +1533,10 @@ ivas_error acelp_core_dec_fx( } } } +#endif } +#ifdef IVAS_CODE if ( !st->cna_dirac_flag ) { if ( st->flag_cna == 0 && st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && !( st->last_coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->Last_GSC_noisy_speech_flag ) ) ) || st->last_core == AMR_WB_CORE ) ) @@ -1568,8 +1570,9 @@ ivas_error acelp_core_dec_fx( move16(); } } - } +#endif +#ifndef IVAS_CODE IF( st_fx->flag_cna == 0 && EQ_16( st_fx->L_frame, L_FRAME16k ) && st_fx->last_flag_cna == 1 && ( ( st_fx->last_core == ACELP_CORE && st_fx->last_coder_type != AUDIO ) || st_fx->last_core == AMR_WB_CORE ) ) { FOR( i = 0; i < st_fx->L_frame / 2; i++ ) @@ -1586,6 +1589,7 @@ ivas_error acelp_core_dec_fx( } #endif } + /*----------------------------------------------------------------* * Resample to the output sampling rate (8/16/32/48 kHz) * Bass post-filter -- GitLab From 27a2f94fdc3c50a73d07068bf5805eabf3213f27 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:24:19 +0200 Subject: [PATCH 45/77] fix ELSE if statement --- lib_dec/acelp_core_dec_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/acelp_core_dec_fx.c b/lib_dec/acelp_core_dec_fx.c index 32ef2fb87..33d44acb0 100644 --- a/lib_dec/acelp_core_dec_fx.c +++ b/lib_dec/acelp_core_dec_fx.c @@ -1670,7 +1670,7 @@ ivas_error acelp_core_dec_fx( /* set NB mask for upsampling */ st_fx->cldfbSyn->bandsToZero = sub( st_fx->cldfbSyn->no_channels, 10 ); } - ELSE if ( NE_16( st_fx->cldfbSyn->bandsToZero, sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ) ) ) + ELSE IF ( NE_16( st_fx->cldfbSyn->bandsToZero, sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ) ) ) { /* in case of BW switching, re-init to default */ st_fx->cldfbSyn->bandsToZero = sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ); -- GitLab From 7bf24e069733c1fe4eabec2153e0279205d47b6a Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:51:09 +0200 Subject: [PATCH 46/77] move #include "wmc_auto.h" outside of inactive segment as WMC tool needs it --- lib_dec/ivas_lfe_dec.c | 5 +++-- lib_dec/lib_dec.c | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_lfe_dec.c b/lib_dec/ivas_lfe_dec.c index a6368a727..df9bf4748 100644 --- a/lib_dec/ivas_lfe_dec.c +++ b/lib_dec/ivas_lfe_dec.c @@ -31,13 +31,14 @@ *******************************************************************************************************/ #include +#include #include "options.h" +#include "wmc_auto.h" + #ifndef IVAS_FLOAT_FIXED #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#include "math.h" -#include "wmc_auto.h" /*------------------------------------------------------------------------------------------* diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 44e0c0770..51b5af294 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -30,7 +30,11 @@ *******************************************************************************************************/ +#include +#include +#include #include "lib_dec.h" +#include "wmc_auto.h" #ifndef IVAS_FLOAT_FIXED #include "ivas_cnst.h" #include "ivas_prot.h" @@ -40,10 +44,6 @@ #include "jbm_jb4sb.h" #include "jbm_pcmdsp_apa.h" #include "jbm_pcmdsp_fifo.h" -#include -#include -#include -#include "wmc_auto.h" /*---------------------------------------------------------------------* * Local structs -- GitLab From 403dc3e46c2f79e0b03021542b47f915475279cb Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:53:15 +0200 Subject: [PATCH 47/77] rename H_low[] to h_low_fx[] as WMC tool capitalizes the array names for Const Data calculation --- lib_dec/FEC_adapt_codebook_fx.c | 4 ++-- lib_dec/rom_dec.c | 2 +- lib_dec/rom_dec.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib_dec/FEC_adapt_codebook_fx.c b/lib_dec/FEC_adapt_codebook_fx.c index 71717bd41..d6aec8840 100644 --- a/lib_dec/FEC_adapt_codebook_fx.c +++ b/lib_dec/FEC_adapt_codebook_fx.c @@ -118,7 +118,7 @@ Word16 FEC_SinOnset_fx( exp2 = add( sub( exp2, 15 ), Q_exc ); /* from Q15 to Q_exc */ /* Find if rescaling needed */ - tmp = extract_h( L_mult( H_low[2], gain ) ); + tmp = extract_h( L_mult( h_low_fx[2], gain ) ); exp_gain = norm_s( tmp ); tmp = sub( exp_gain, exp2 ); /* difference */ @@ -131,7 +131,7 @@ Word16 FEC_SinOnset_fx( /* Generate the scaled pulse */ FOR( i = 0; i < MODE1_L_FIR_FER; i++ ) { - L_tmp = L_mult( gain, H_low[i] ); /* Q_exc*Q15 -> Q_exc */ + L_tmp = L_mult( gain, h_low_fx[i] ); /* Q_exc*Q15 -> Q_exc */ H_low_s[i] = round_fx( L_shl( L_tmp, exp2 ) ); move16(); } diff --git a/lib_dec/rom_dec.c b/lib_dec/rom_dec.c index 062f4df35..8a2169f80 100644 --- a/lib_dec/rom_dec.c +++ b/lib_dec/rom_dec.c @@ -47,7 +47,7 @@ *----------------------------------------------------------------------------------*/ const float h_low[5] = { -0.0125f, 0.1090f, 0.7813f, 0.1090f, -0.0125f }; -const Word16 H_low[5] = +const Word16 h_low_fx[5] = { -410, 3572, 25602, 3572, -410 }; diff --git a/lib_dec/rom_dec.h b/lib_dec/rom_dec.h index 6402bb6d3..dca09eedf 100644 --- a/lib_dec/rom_dec.h +++ b/lib_dec/rom_dec.h @@ -42,7 +42,7 @@ #include "cnst.h" extern const float h_low[]; /* LP filter for filtering periodic part of excitation in artificial onset construction after FEC */ -extern const Word16 H_low[5]; +extern const Word16 h_low_fx[5]; extern const Word16 inv_sqi[15]; extern const Word16 sqi[15]; extern const int16_t mult_avq_tab[]; -- GitLab From c772451c9fa576a4b67616745f9852ec7d024c1c Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:54:35 +0200 Subject: [PATCH 48/77] move #include "wmc_auto.h" outside of inactive segment as WMC tool needs it --- lib_dec/ivas_agc_dec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_agc_dec.c b/lib_dec/ivas_agc_dec.c index 83a214763..6296e6c12 100644 --- a/lib_dec/ivas_agc_dec.c +++ b/lib_dec/ivas_agc_dec.c @@ -31,13 +31,13 @@ *******************************************************************************************************/ #include +#include +#include #include "options.h" +#include "wmc_auto.h" #ifndef IVAS_FLOAT_FIXED #include "prot.h" #include "ivas_prot.h" -#include -#include -#include "wmc_auto.h" /*-----------------------------------------------------------------------------------------* -- GitLab From ff1758b19fb51bf41bb738b175413e733505be44 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 10:55:42 +0200 Subject: [PATCH 49/77] =?UTF-8?q?fix=20warning:=20suggest=20explicit=20bra?= =?UTF-8?q?ces=20to=20avoid=20ambiguous=20=E2=80=98else=E2=80=99=20[-Wdang?= =?UTF-8?q?ling-else]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib_com/log2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib_com/log2.c b/lib_com/log2.c index 4e70862d1..c878734d5 100644 --- a/lib_com/log2.c +++ b/lib_com/log2.c @@ -79,7 +79,10 @@ Word32 log10_fx( Word32 Linput ) Word32 L_tmp; if ( Linput <= 0 ) + { return ( LW_MIN ); + } + n1 = norm_l( Linput ); Ltemp1 = (Word32) L_shl( Linput, n1 ); -- GitLab From ade1b1f7dbc353769381b3cc551d5c13d2a63d98 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 11:01:39 +0200 Subject: [PATCH 50/77] change if to IF in log2() --- lib_com/log2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/log2.c b/lib_com/log2.c index c878734d5..db7c382a1 100644 --- a/lib_com/log2.c +++ b/lib_com/log2.c @@ -78,7 +78,7 @@ Word32 log10_fx( Word32 Linput ) Word32 Ltemp1, Ltemp2; Word32 L_tmp; - if ( Linput <= 0 ) + IF ( Linput <= 0 ) { return ( LW_MIN ); } -- GitLab From 5322325c8db59f10262e053daef75f20e6976d6e Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 12:29:33 +0200 Subject: [PATCH 51/77] small cleanup --- apps/decoder.c | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/decoder.c b/apps/decoder.c index 11c6fe724..f51543202 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -638,7 +638,6 @@ cleanup: #ifdef WMOPS print_wmops(); - print_wmops_wmc(); print_mem( NULL ); #endif -- GitLab From 76ffe247be0087e8f6ec4a430ad52f0ca5536f92 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 12:56:33 +0200 Subject: [PATCH 52/77] cleanup --- lib_com/count.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib_com/count.c b/lib_com/count.c index c4e66489d..bc5f66ced 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -1070,10 +1070,6 @@ Word32 BASOP_get_wops( void ) } -#ifdef WMOPS -static Word32 prom_cnt = 0; -#endif - void WMOPS_destroy( void ) { #ifdef WMOPS @@ -1107,7 +1103,6 @@ void WMOPS_output_all( Word16 dtx_mode ) char *sfmt = "%-40s %8s %8s %7s %7s %7s %7s %7s\n"; char *dfmt = "%-40s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; - fprintf( stderr, "\nProgram Memory Analysis: %12.0f words\n", (float) prom_cnt ); /*fprintf (stderr, "\nInstruction Type Analysis (for worst case frame):\n\n");*/ fprintf( stderr, "\nInstruction Type Analysis (for worst case frame number %ld):\n\n", (long int) nbframe[0] ); /* added -- JPA */ for ( i = 0; i < (int) ( sizeof( BasicOperationList ) / sizeof( char * ) ); i++ ) @@ -1261,7 +1256,6 @@ void WMOPS_output_all_std( Word16 dtx_mode ) char *sfmt = "%-40s %8s %8s %7s %7s %7s %7s %7s\n"; char *dfmt = "%-40s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; - fprintf( stdout, "\nProgram Memory Analysis: %12.0f words\n", (float) prom_cnt ); /*fprintf (stdout, "\nInstruction Type Analysis (for worst case frame):\n\n");*/ fprintf( stdout, "\nInstruction Type Analysis (for worst case frame number %ld):\n\n", (long int) nbframe[0] ); /* added -- JPA */ if ( nbframe[0] > 0 ) -- GitLab From 9935e7f328f02c03e37319a079df75a7b73d19b8 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 24 Jul 2024 13:25:53 +0200 Subject: [PATCH 53/77] merge high-level wrapper functions into _wmc variants and rename the extension --- apps/decoder.c | 6 - apps/encoder.c | 3 - apps/renderer.c | 3 - lib_com/count.h | 6 - lib_debug/wmc_auto.c | 357 ++++++++++++++++++++++--------------------- lib_debug/wmc_auto.h | 24 +-- 6 files changed, 198 insertions(+), 201 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index f51543202..196a7cdca 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -164,7 +164,6 @@ int main( #ifdef WMOPS reset_wmops(); - reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif @@ -1548,7 +1547,6 @@ static ivas_error decodeG192( #ifdef WMOPS reset_stack(); reset_wmops(); - reset_wmops_wmc(); #endif nSamplesAvailableNext = 0; @@ -1809,7 +1807,6 @@ static ivas_error decodeG192( if ( vec_pos_update == 0 ) { update_wmops(); - update_wmops_wmc(); update_mem(); } #endif @@ -1939,7 +1936,6 @@ static ivas_error decodeG192( #ifdef WMOPS update_wmops(); - update_wmops_wmc(); update_mem(); #ifdef MEM_COUNT_DETAILS export_mem( "mem_analysis.csv" ); @@ -2206,7 +2202,6 @@ static ivas_error decodeVoIP( #ifdef WMOPS reset_stack(); reset_wmops(); - reset_wmops_wmc(); #endif /*------------------------------------------------------------------------------------------* @@ -2490,7 +2485,6 @@ static ivas_error decodeVoIP( #ifdef WMOPS update_mem(); update_wmops(); - update_wmops_wmc(); #endif } diff --git a/apps/encoder.c b/apps/encoder.c index 8c115ac20..e7c5a20b7 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -171,7 +171,6 @@ int main( #ifdef WMOPS reset_wmops(); - reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif @@ -568,7 +567,6 @@ int main( #ifdef WMOPS reset_stack(); reset_wmops(); - reset_wmops_wmc(); #endif /*------------------------------------------------------------------------------------------* @@ -712,7 +710,6 @@ int main( #ifdef WMOPS update_mem(); update_wmops(); - update_wmops_wmc(); #endif } diff --git a/apps/renderer.c b/apps/renderer.c index 4fbeb4872..fcc1a04b7 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -663,7 +663,6 @@ int main( #ifdef WMOPS reset_wmops(); - reset_wmops_wmc(); reset_mem( USE_BYTES ); #endif @@ -1278,7 +1277,6 @@ int main( #ifdef WMOPS reset_stack(); reset_wmops(); - reset_wmops_wmc(); #endif if ( !args.quietModeEnabled ) @@ -1710,7 +1708,6 @@ int main( #ifdef WMOPS update_mem(); update_wmops(); - update_wmops_wmc(); #endif } diff --git a/lib_com/count.h b/lib_com/count.h index 4b5bf8e9b..10e96e44f 100644 --- a/lib_com/count.h +++ b/lib_com/count.h @@ -586,12 +586,6 @@ void BASOP_get_total_wmops( double *min, double *max, double *avg ); #define SUB_WMOPS_INIT( label ) BASOP_sub_start( label ) #define END_SUB_WMOPS BASOP_sub_end() -#define reset_wmops() { BASOP_init } -#define push_wmops( x ) { BASOP_push_wmops( x ); } -#define pop_wmops() { BASOP_pop_wmops(); } -#define update_wmops() { BASOP_frame_update(); } -#define print_wmops() { WMOPS_output_all_std( 0 ); WMOPS_destroy(); } - #endif /* _COUNT_H */ diff --git a/lib_debug/wmc_auto.c b/lib_debug/wmc_auto.c index d8be360a8..e37fecf2e 100644 --- a/lib_debug/wmc_auto.c +++ b/lib_debug/wmc_auto.c @@ -29,6 +29,9 @@ #include "options.h" #include "wmc_auto.h" +#include "typedef.h" +#include "count.h" + #define WMC_TOOL_SKIP /* Skip the instrumentation of this file, if invoked by accident */ @@ -87,7 +90,7 @@ static int *wmops_caller_stack = NULL, wmops_caller_stack_index, max_wmops_calle static int *heap_allocation_call_tree = NULL, heap_allocation_call_tree_size = 0, heap_allocation_call_tree_max_size = 0; -void reset_wmops_wmc( void ) +void reset_wmops( void ) { int i, j; //unsigned int *ptr; @@ -126,6 +129,8 @@ void reset_wmops_wmc( void ) // exit( -1 ); //} + BASOP_init + /* initilize the list of WMOPS records */ /* initilize the BASOP WMOPS counters */ for ( i = 0; i < max_num_wmops_records; i++ ) @@ -311,11 +316,13 @@ void push_wmops_fct( const char *label, ... ) /* set the ID of BASOP functions counters */ //Set_BASOP_WMOPS_counter( index_record ); + BASOP_push_wmops( func_name ); + return; } -void pop_wmops_wmc( void ) +void pop_wmops( void ) { //long tot; @@ -348,11 +355,13 @@ void pop_wmops_wmc( void ) current_record = -1; } + BASOP_pop_wmops(); + return; } -void update_wmops_wmc( void ) +void update_wmops( void ) { int i; double current_cnt; @@ -472,181 +481,187 @@ void update_wmops_wmc( void ) /* increment frame counter */ update_cnt++; + BASOP_frame_update(); + return; } -void print_wmops_wmc( void ) +void print_wmops( void ) { - int i, label_len, max_label_len; - - char *sfmts = "%*s %8s %8s %7s %7s\n"; - char *dfmts = "%*s %8.2f %8.3f %7.3f %7.3f\n"; - char *sfmt = "%*s %8s %8s %7s %7s %7s %7s %7s\n"; - char *dfmt = "%*s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; - -#ifdef WMOPS_WC_FRAME_ANALYSIS - int j; - char *sfmtt = "%20s %4s %15s\n"; - char *dfmtt = "%20s %4d "; -#endif - - /* calculate maximum label length for compact prinout */ - max_label_len = 0; - for ( i = 0; i < num_wmops_records; i++ ) - { - label_len = strlen( wmops[i].label ); - if ( label_len > max_label_len ) - { - max_label_len = label_len; - } - } - max_label_len += 4; + //int i, label_len, max_label_len; - fprintf( stdout, "\n\n --- Complexity analysis [WMOPS] --- \n\n" ); - - fprintf( stdout, "%*s %33s %23s\n", max_label_len, "", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); - fprintf( stdout, sfmt, max_label_len, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); - fprintf( stdout, sfmt, max_label_len, "---------------", "------", "------", "------", "------", "------", "------", "------" ); - - for ( i = 0; i < num_wmops_records; i++ ) - { - fprintf( stdout, dfmt, max_label_len, wmops[i].label, update_cnt == 0 ? 0 : (float) wmops[i].call_number / update_cnt, - wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, - FAC * wmops[i].max_selfcnt, - wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, - wmops[i].min_cnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_cnt, - FAC * wmops[i].max_cnt, - wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); - } + //char *sfmts = "%*s %8s %8s %7s %7s\n"; + //char *dfmts = "%*s %8.2f %8.3f %7.3f %7.3f\n"; + //char *sfmt = "%*s %8s %8s %7s %7s %7s %7s %7s\n"; + //char *dfmt = "%*s %8.2f %8.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n"; - fprintf( stdout, sfmts, max_label_len, "---------------", "------", "------", "------", "------" ); - fprintf( stdout, dfmts, max_label_len, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt_wmc / update_cnt ); - fprintf( stdout, "\n" ); - -#ifdef WMOPS_WC_FRAME_ANALYSIS - fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); - fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); - fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); - - for ( i = 0; i < num_wmops_records; i++ ) - { - if ( wmops[i].wc_call_number > 0 ) - { - fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); - } - } - - fprintf( stdout, "\nCall tree for the worst-case frame %ld:\n\n", fnum_cnt_wc ); - fprintf( stdout, sfmtt, " function", "num", "called by " ); - fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); - - for ( i = 0; i < num_wmops_records; i++ ) - { - if ( wmops[i].wc_call_number > 0 ) - { - fprintf( stdout, dfmtt, wmops[i].label, i ); - for ( j = 0; wmops[i].call_tree[j] != -1 && j < MAX_CALL_TREE_DEPTH; j++ ) - { - if ( j != 0 ) - { - fprintf( stdout, ", " ); - } - fprintf( stdout, "%d", wmops[i].call_tree[j] ); - } - fprintf( stdout, "\n" ); - } - } - - fprintf( stdout, "\n\n" ); - - fprintf( stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); - for ( i = 0; i < NUM_INST; i++ ) - { - switch ( (enum instructions) i ) - { - case _ADD: - fprintf( stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i] ); - break; - case _ABS: - fprintf( stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MULT: - fprintf( stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MAC: - fprintf( stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MOVE: - fprintf( stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i] ); - break; - case _STORE: - fprintf( stdout, "\tStores: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOGIC: - fprintf( stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i] ); - break; - case _SHIFT: - fprintf( stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i] ); - break; - case _BRANCH: - fprintf( stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i] ); - break; - case _DIV: - fprintf( stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i] ); - break; - case _SQRT: - fprintf( stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i] ); - break; - case _TRANS: - fprintf( stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i] ); - break; - case _FUNC: - fprintf( stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOOP: - fprintf( stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i] ); - break; - case _INDIRECT: - fprintf( stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i] ); - break; - case _PTR_INIT: - fprintf( stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i] ); - break; - case _TEST: - fprintf( stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i] ); - break; - case _POWER: - fprintf( stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i] ); - break; - case _LOG: - fprintf( stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i] ); - break; - case _MISC: - fprintf( stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i] ); - break; - default: - fprintf( stdout, "\tERROR: Invalid instruction type: %d\n\n", i ); - } - } -#endif - - /* De-allocate the list of wmops record */ - if ( wmops != NULL ) - { - free( wmops ); - } - - /* De-allocate the list of wmops caller functions */ - if ( wmops_caller_stack != NULL ) - { - free( wmops_caller_stack ); - } + WMOPS_output_all_std( 0 ); + WMOPS_destroy(); + return; - /* De-allocate the BASOP WMOPS counter */ - //if ( multiCounter != NULL ) - //{ - // free( multiCounter ); - //} +//#ifdef WMOPS_WC_FRAME_ANALYSIS +// int j; +// char *sfmtt = "%20s %4s %15s\n"; +// char *dfmtt = "%20s %4d "; +//#endif + +// /* calculate maximum label length for compact prinout */ +// max_label_len = 0; +// for ( i = 0; i < num_wmops_records; i++ ) +// { +// label_len = strlen( wmops[i].label ); +// if ( label_len > max_label_len ) +// { +// max_label_len = label_len; +// } +// } +// max_label_len += 4; +// +// fprintf( stdout, "\n\n --- Complexity analysis [WMOPS] --- \n\n" ); +// +// fprintf( stdout, "%*s %33s %23s\n", max_label_len, "", "|------ SELF ------|", "|--- CUMULATIVE ---|" ); +// fprintf( stdout, sfmt, max_label_len, " routine", " calls", " min ", " max ", " avg ", " min ", " max ", " avg " ); +// fprintf( stdout, sfmt, max_label_len, "---------------", "------", "------", "------", "------", "------", "------", "------" ); +// +// for ( i = 0; i < num_wmops_records; i++ ) +// { +// fprintf( stdout, dfmt, max_label_len, wmops[i].label, update_cnt == 0 ? 0 : (float) wmops[i].call_number / update_cnt, +// wmops[i].min_selfcnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_selfcnt, +// FAC * wmops[i].max_selfcnt, +// wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_selfcnt / wmops[i].update_cnt, +// wmops[i].min_cnt == DOUBLE_MAX ? 0 : FAC * wmops[i].min_cnt, +// FAC * wmops[i].max_cnt, +// wmops[i].update_cnt == 0 ? 0 : FAC * wmops[i].tot_cnt / wmops[i].update_cnt ); +// } +// +// fprintf( stdout, sfmts, max_label_len, "---------------", "------", "------", "------", "------" ); +// fprintf( stdout, dfmts, max_label_len, "total", (float) update_cnt, update_cnt == 0 ? 0 : FAC * min_cnt, FAC * max_cnt, update_cnt == 0 ? 0 : FAC * ops_cnt_wmc / update_cnt ); +// fprintf( stdout, "\n" ); +// +//#ifdef WMOPS_WC_FRAME_ANALYSIS +// fprintf( stdout, "\nComplexity analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); +// fprintf( stdout, "%*s %8s %10s %12s\n", max_label_len, " routine", " calls", " SELF", " CUMULATIVE" ); +// fprintf( stdout, "%*s %8s %10s %10s\n", max_label_len, "---------------", "------", "------", "----------" ); +// +// for ( i = 0; i < num_wmops_records; i++ ) +// { +// if ( wmops[i].wc_call_number > 0 ) +// { +// fprintf( stdout, "%*s %8d %10.3f %12.3f\n", max_label_len, wmops[i].label, wmops[i].wc_call_number, FAC * wmops[i].wc_selfcnt, FAC * wmops[i].wc_cnt ); +// } +// } +// +// fprintf( stdout, "\nCall tree for the worst-case frame %ld:\n\n", fnum_cnt_wc ); +// fprintf( stdout, sfmtt, " function", "num", "called by " ); +// fprintf( stdout, sfmtt, "---------------", "---", "--------------" ); +// +// for ( i = 0; i < num_wmops_records; i++ ) +// { +// if ( wmops[i].wc_call_number > 0 ) +// { +// fprintf( stdout, dfmtt, wmops[i].label, i ); +// for ( j = 0; wmops[i].call_tree[j] != -1 && j < MAX_CALL_TREE_DEPTH; j++ ) +// { +// if ( j != 0 ) +// { +// fprintf( stdout, ", " ); +// } +// fprintf( stdout, "%d", wmops[i].call_tree[j] ); +// } +// fprintf( stdout, "\n" ); +// } +// } +// +// fprintf( stdout, "\n\n" ); +// +// fprintf( stdout, "\nInstruction type analysis for the worst-case frame %ld:\n\n", fnum_cnt_wc ); +// for ( i = 0; i < NUM_INST; i++ ) +// { +// switch ( (enum instructions) i ) +// { +// case _ADD: +// fprintf( stdout, "\tAdds: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _ABS: +// fprintf( stdout, "\tAbsolutes: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _MULT: +// fprintf( stdout, "\tMultiplies: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _MAC: +// fprintf( stdout, "\tMACs: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _MOVE: +// fprintf( stdout, "\tMoves: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _STORE: +// fprintf( stdout, "\tStores: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _LOGIC: +// fprintf( stdout, "\tLogicals: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _SHIFT: +// fprintf( stdout, "\tShifts: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _BRANCH: +// fprintf( stdout, "\tBranches: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _DIV: +// fprintf( stdout, "\tDivisions: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _SQRT: +// fprintf( stdout, "\tSquare Root: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _TRANS: +// fprintf( stdout, "\tTrans: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _FUNC: +// fprintf( stdout, "\tFunc Call: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _LOOP: +// fprintf( stdout, "\tLoop Init: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _INDIRECT: +// fprintf( stdout, "\tIndirect Addr: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _PTR_INIT: +// fprintf( stdout, "\tPointer Init: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _TEST: +// fprintf( stdout, "\tExtra condit.: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _POWER: +// fprintf( stdout, "\tExponential: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _LOG: +// fprintf( stdout, "\tLogarithm: %12.1f\n", inst_cnt_wc[i] ); +// break; +// case _MISC: +// fprintf( stdout, "\tAll other op.: %12.1f\n", inst_cnt_wc[i] ); +// break; +// default: +// fprintf( stdout, "\tERROR: Invalid instruction type: %d\n\n", i ); +// } +// } +//#endif +// +// /* De-allocate the list of wmops record */ +// if ( wmops != NULL ) +// { +// free( wmops ); +// } +// +// /* De-allocate the list of wmops caller functions */ +// if ( wmops_caller_stack != NULL ) +// { +// free( wmops_caller_stack ); +// } +// +// /* De-allocate the BASOP WMOPS counter */ +// //if ( multiCounter != NULL ) +// //{ +// // free( multiCounter ); +// //} return; } diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 3d6d93328..2850fca0b 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -558,21 +558,21 @@ extern double prom_cnt_wmc; extern double inst_cnt[NUM_INST]; extern int cntr_push_pop; -#define push_wmops_wmc( ... ) push_wmops_fct( __VA_ARGS__, NULL ) +#define push_wmops( ... ) push_wmops_fct( __VA_ARGS__, NULL ) void push_wmops_fct( const char *label, ... ); -void pop_wmops_wmc( void ); -void reset_wmops_wmc( void ); -void print_wmops_wmc( void ); -void update_wmops_wmc( void ); +void pop_wmops( void ); +void reset_wmops( void ); +void print_wmops( void ); +void update_wmops( void ); void update_mem( void ); #else -#define push_wmops_wmc( x ) ( cntr_push_pop++ ) -#define pop_wmops_wmc() ( cntr_push_pop-- ) -#define reset_wmops_wmc() -#define print_wmops_wmc() -#define update_wmops_wmc() ( assert( cntr_push_pop == 0 ) ) +#define push_wmops( x ) ( cntr_push_pop++ ) +#define pop_wmops() ( cntr_push_pop-- ) +#define reset_wmops() +#define print_wmops() +#define update_wmops() ( assert( cntr_push_pop == 0 ) ) #define update_mem() #define ADD( x ) @@ -1022,8 +1022,8 @@ int push_stack( const char *filename, const char *fctname ); int pop_stack( const char *filename, const char *fctname ); #ifdef WMOPS_DETAIL -#define STACK_DEPTH_FCT_CALL ( push_wmops_wmc( __FUNCTION__ ), push_stack( __FILE__, __FUNCTION__ ) ) /* add push_wmops() in all function calls */ -#define STACK_DEPTH_FCT_RETURN ( pop_wmops_wmc(), pop_stack( __FILE__, __FUNCTION__ ) ) /* add pop_wmops() in all function returns */ +#define STACK_DEPTH_FCT_CALL ( push_wmops( __FUNCTION__ ), push_stack( __FILE__, __FUNCTION__ ) ) /* add push_wmops() in all function calls */ +#define STACK_DEPTH_FCT_RETURN ( pop_wmops(), pop_stack( __FILE__, __FUNCTION__ ) ) /* add pop_wmops() in all function returns */ #else #define STACK_DEPTH_FCT_CALL push_stack( __FILE__, __FUNCTION__ ) #define STACK_DEPTH_FCT_RETURN pop_stack( __FILE__, __FUNCTION__ ) -- GitLab From 16174b42ebde078b7d3d1e1bda267956f26d470f Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 29 Jul 2024 12:43:00 +0200 Subject: [PATCH 54/77] include options.h to prevent warnings --- lib_debug/wmc_auto.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index 2850fca0b..a07f7e37f 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -23,6 +23,8 @@ #include /* stdio is needed for fprintf() */ #endif +#include "options.h" + /* To Prevent "warning: '$' in identifier or number" message under GCC */ #ifdef __GNUC__ #pragma GCC system_header -- GitLab From 7edc959aaf08bc0cbb5418784a4265dff63e4bdf Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 29 Jul 2024 12:44:09 +0200 Subject: [PATCH 55/77] update to WMC tool v1.6 --- scripts/tools/Linux/wmc_tool_v151 | Bin 359896 -> 0 bytes scripts/tools/Win32/wmc_tool_v151.exe | Bin 262656 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 scripts/tools/Linux/wmc_tool_v151 delete mode 100644 scripts/tools/Win32/wmc_tool_v151.exe diff --git a/scripts/tools/Linux/wmc_tool_v151 b/scripts/tools/Linux/wmc_tool_v151 deleted file mode 100644 index 06e62073884001a5a463d98d2293112b6a72ff05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359896 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 diff --git a/scripts/tools/Win32/wmc_tool_v151.exe b/scripts/tools/Win32/wmc_tool_v151.exe deleted file mode 100644 index f5340266cb9bd2b293791b138771c4ed32595def..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262656 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 vSW~d3Vok#uhP51P1=dQe1 Date: Mon, 29 Jul 2024 13:11:54 +0200 Subject: [PATCH 56/77] fix unknown cntr_push_pop --- lib_debug/wmc_auto.h | 2 +- lib_rend/ivas_rotation.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib_debug/wmc_auto.h b/lib_debug/wmc_auto.h index a07f7e37f..5f5d6d975 100644 --- a/lib_debug/wmc_auto.h +++ b/lib_debug/wmc_auto.h @@ -558,7 +558,6 @@ enum instructions extern double ops_cnt_wmc; extern double prom_cnt_wmc; extern double inst_cnt[NUM_INST]; -extern int cntr_push_pop; #define push_wmops( ... ) push_wmops_fct( __VA_ARGS__, NULL ) void push_wmops_fct( const char *label, ... ); @@ -570,6 +569,7 @@ void update_mem( void ); #else +extern int cntr_push_pop; #define push_wmops( x ) ( cntr_push_pop++ ) #define pop_wmops() ( cntr_push_pop-- ) #define reset_wmops() diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index ed6c5333d..b929ee30f 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -30,10 +30,10 @@ *******************************************************************************************************/ -#include "basop_util.h" -#include "ivas_cnst.h" #include #include +#include "basop_util.h" +#include "ivas_cnst.h" #include "options.h" #include #include "cnst.h" @@ -1161,14 +1161,17 @@ void rotateFrame_sd( Word16 azimuth, elevation; Word32 azimuth_fx, elevation_fx; Word32 tmp = Q31_BY_SUB_FRAME_240; // Q31 - move32(); Word32 out_temp; Word32 tmp_gains_fx[MAX_CICP_CHANNELS - 1]; Word32 gains_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; Word32 gains_prev_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; Word32 output_tmp_fx[MAX_CICP_CHANNELS][L_FRAME48k]; Word32 cross_fade_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + push_wmops( "rotateFrame_sd" ); + + move32(); + nchan = add( hTransSetup.nchan_out_woLFE, hTransSetup.num_lfe ); index_lfe = hTransSetup.index_lfe[0]; move16(); -- GitLab From 717f413a0e21e5b92f28ac0249fe411e451e8fbd Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 29 Jul 2024 13:12:58 +0200 Subject: [PATCH 57/77] replace mvr2r_Word16() with MVR2R_WORD16() --- lib_enc/ext_sig_ana_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index e8db91a74..15fe1cf79 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -611,7 +611,7 @@ void core_signal_analysis_high_bitrate_fx( } /* Copy memory */ - mvr2r_Word16( lsp_new, st->lspold_enc_fx, M ); + MVR2R_WORD16( lsp_new, st->lspold_enc_fx, M ); } } } -- GitLab From af3c186af12cbce4b3bd4e2fa44fba5d2538ffc1 Mon Sep 17 00:00:00 2001 From: malenov Date: Mon, 29 Jul 2024 13:14:45 +0200 Subject: [PATCH 58/77] replace #if (WMOPS) with #ifdef WMOPS --- lib_com/enh64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/enh64.c b/lib_com/enh64.c index d78324b5b..28a0898f4 100644 --- a/lib_com/enh64.c +++ b/lib_com/enh64.c @@ -1104,7 +1104,7 @@ Word64 W_mac_32_32( Word64 L64_var1, Word32 L_var2, Word32 L_var3 ) Word64 L64_var_out = W_mult_32_32( L_var2, L_var3 ); L64_var_out = W_add( L64_var1, L64_var_out ); -#if ( WMOPS ) +#ifdef WMOPS multiCounter[currCounter].W_mult_32_32--; /* multiCounter[currCounter].W_add--; */ #endif -- GitLab From fe3afbad8c3edcc62236cf879cbe2c09d6286755 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 29 Jul 2024 16:22:25 +0200 Subject: [PATCH 59/77] update of WMC tool binaries to v1.6 --- scripts/tools/Linux/wmc_tool | Bin 0 -> 363992 bytes scripts/tools/Win32/wmc_tool.exe | Bin 0 -> 264192 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 scripts/tools/Linux/wmc_tool create mode 100644 scripts/tools/Win32/wmc_tool.exe diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool new file mode 100644 index 0000000000000000000000000000000000000000..71329d879c3b6de3006abe68be1fac2b65f52956 GIT binary patch literal 363992 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 literal 0 HcmV?d00001 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe new file mode 100644 index 0000000000000000000000000000000000000000..3fbba2497511c079830d11d45ad9704425701809 GIT binary patch literal 264192 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 Date: Mon, 29 Jul 2024 16:26:37 +0200 Subject: [PATCH 60/77] change permissions --- scripts/tools/Linux/wmc_tool | Bin scripts/tools/Win32/wmc_tool.exe | Bin 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/tools/Linux/wmc_tool mode change 100644 => 100755 scripts/tools/Win32/wmc_tool.exe diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool old mode 100644 new mode 100755 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe old mode 100644 new mode 100755 -- GitLab From edef7c639bff4b470d6a38652f9902fd5d77e9e8 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Wed, 31 Jul 2024 09:16:53 +0200 Subject: [PATCH 61/77] remove WMC tool binaries from this MR --- scripts/tools/Linux/wmc_tool | Bin 363992 -> 0 bytes scripts/tools/Win32/wmc_tool.exe | Bin 264192 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 scripts/tools/Linux/wmc_tool delete mode 100755 scripts/tools/Win32/wmc_tool.exe diff --git a/scripts/tools/Linux/wmc_tool b/scripts/tools/Linux/wmc_tool deleted file mode 100755 index 71329d879c3b6de3006abe68be1fac2b65f52956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363992 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 diff --git a/scripts/tools/Win32/wmc_tool.exe b/scripts/tools/Win32/wmc_tool.exe deleted file mode 100755 index 3fbba2497511c079830d11d45ad9704425701809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264192 zcmeZ`n!v!!z`(%5z`*eTKLf)K1_*F~P^1JvLws4+R+`;H`Rxu&fEIw=79IiiLeRH^HU6{*lx^xCu+;nLY_dhUy zJ{O1%%1q7xnGLm$A;6V^A*GFt;r-MlX)v)53`z{#OnkBopBNb!YDM7zDsf z2SyMDVly!?uz}bN2$~^)1rm4+3=GT+35_sKP`wP8e7FeMBpC)41{RP71}qE@K(qo2 z!xApA6ohbKVVJ_e!0_P}GlL971chvP!_1%ovgI{1g9S)GOjdx2ApsPzFg_ZsSCU#$ z!oa}5^a1Kmkl#Ux07;z!14DvdQA%P-A_D`@ACNjG28Mr(3=E*KK~m?yz~G<-uM|YqA|2D=Bro(5zz@sxpMIkgS+%d#4)G^F4 z+@tZ003!o~M>p#!CKd({<0BrOEh-F*3=A%vJ}L&j$v=F$UwL%@^y%KBQUF#L$>DgM z4U`a#zjZTqzi2&B=it;(tX*Z*GI+Tg$_3(gHQK?-Y_SRUS556CWaST zEQ}1jZcZ;RGB7ZB_nPSQZ?kjgs8O*v#>U{$S)$_M)0v~<;Msll1tT9LL-!33>o^}H zgG=`Tm+sRZy`rmFnHWH32fR4I%*b%uMMVLWU46UH`t-V}1ngpCVqoy-<$c4(#PH%j zGb6(UhYq_PAi>wk9?AM1-SHegy)3z)81P{}>Ur=1vq$%3kM46X4!&VzXs#DvDBIzoWrFvUBDyxtVgeir$@IxNcTnGP7T-23Jy@vId(b-ICk?nc6#vq zXE#3J(cJ@%9S`F(F9aVkGI(^)QON+sOXCqxG&;sR#yQ41#>B_PLgU*ZI1Cci9?fq8 zJi1w*FhFD3Ma9A=SHHpYB)t#2G-Tz?s9lmuHesugMAH1Fo%?>a;zZ-)Z<- z>y>c+Kj3J6sOH0KNsr^l{{R2~pI^QK{|DyB%F*0;BdvsQFxO5f^c+4>V=F!X3;L+{O;nS&e;y*LU zzunA^oo)&{z`@Y#$Kj!U%%l6ShxJjZa+Mk&-rv8fARGdBZCL?cOT~ej>lZg zI2b&%-}AS6{Qv*orQ1hE0TcqQQvd(|2SrqkiibxxBp`gcYg8OOx_wkEK=Bs&fRVwY z`A7gHs^X##cV7dgH;oqw9N@I<(aW30!o;u(RHnU{!^p_61H^j0*7(5d-Dg1gm&2no zM@0aXm?gqJn%^jRcK`J3{s79SH(#t_U;t%1MW1A0kc9!B2OqKeFb8uuc4~Qc7IAoX zRtb1^dP)3e_UMjLG4SZlQL*soE>UstXg;D4fA|b`^OHY%cK?8w?*lPk1!O++cT6j) zI6OOx@LK^chhT(5ut)P72aj%6?|;mY;>ShBpxaTvqx+^cBY*2WPy~18s6_Ox0F?+J zKPPx})~IB3|2_De)g$@*f6+yMKC^vqj|sSmfu6N=}dm z&UfEkRT-HWz{Qb|ioy$v{|pSE!bf43GbnfU@-Am&VtCO6YR!QKx_cmI z8J~Ia_b$k+IVwLuW;Y%ISqh3(RQE`Lf>8m$XNVtDcV9|OYr{)vG&(LBQkxX{ass zAX|3*f!R_z%ftF^i7Ed!W*d!CdB>d~V;y&ZUDbWvqxe$`4R>wCFwtN}u3d3CoZkojxiYVW2$Hyc1O5GM6a(^s?#+GBNC8>KAZZ{0)FyD{WMDA< z-+kP-+nvL)Tihf0gvY^$te(s#tPi1@&j{)Y@wZL`1zz((h5rYv4;8)gNRH$1=oL-> z4=UZ`1U!1Z|G#KrWn=(VGOdd^KsK`V2B>@V^705UF}z^^!@#gZoq>Vjwyvzi2uR<6DSe%uq*&4wgQ17 zA&=H?CA?tI9&)t4P;}=tN9!g2elJ!AhVD>??}r!;@N@9DoM&KQ=spZGN$)!&sP_Rf zqY!LHA;Juhha9aBfXz6--}#k=fuX@p!K3?LDIdgskN<}otQAUrIPTy86%oCnpZP!y ztJD8QPyGNl*b+RN4|6nFE0pqr;}@YG)R6b+6}=2oKMSJXps^I31YCO489kGa7~clP zDX_^%MFYS434c=`CC#L85q7DVk|L5c#eSq96*FT zr^U#?&~k~tBNc1{6MxGWu#f!yd-RGP1Z4_P`wf)&BVD`MU0V-S*!Xt)b97(!>^@oI z_MMU8AU_8v(>sF0&{3d>*8`Luz)|qDtZj(tQ||z&*N8xwf7x(dCzC_zuecEGYH}g6whpf56rH zV9^7Y?!&JIU0V-STDgD%;3R*`G*CoyeLu*c;J{EK`0bzqNV5~zkxl|dd>+k*6rh@K zzRm@CE5o<@n2+``PwQ_!{O*T+TMzKJ{AFTb*z_NiT>>64GQ51p#K6G6>yb!t(ggl( ze*b$N8Eq8Hxjgvy9q{B|e6WbM;b(m*tH=LyuOB+{Z{x!%&FuOA7^Xc_LH5*x?0NB! zk>O<<6C^Hq_;>x1>I`LgS<1w~@cj^|W6R%?$;7~bZbAv~Ca~^R4;eveoqyLOF8*dq za0?q8jn{rNGQ9Z72&#ub#W;V9G!rPBJAz7c{ti%=wv#pK8#6=qb;oXYP}cYCKGAxh zLFyL z|5UHzd>hHK_YE&q8h%=X%{b`6zxY_uU5{STb=;s#cK(Ije+F=w(h>|Zs@Ivxr~819 z_HhsEAK-BrAAa`(zO4sJxIm$D{>2nfL$TK%l|I0^Zf7G>-fLnXM723!%vk` zPLEDE0iW&@ub=pI9|A|Sul7M7>r+UP?b&_u#d1*NvD=U1#j7|5hVC29KR8M_yHD`% zdMVcFr@+7KHLvmiPPzX_U+(_#|9|7}Weg1rrMe#7ejGmC$31!-89l5|cyzjPIPy85$V=AMKQT+4kfAe~)fA0axR1uHDDLMHxuFp8#CF#yv)c#^13F z4GjFP`Jlwv?I+;bef`Cp1W=O&(%S;}?f#!{u&?KD^=4#XaP4My?7jvnR6V;-x`N6b zQ$_}cZbtrH4>*biRxp7Iu1avhRVh#;21#(B3hpk{D<8f?;^RLkStTFx=oNkTosj`j z;`(rKc>F*4;_qKj-FpC3is$l!+8f~XUg6ovn*E8H!Lj=qIN$qocy^y`Jy7D6HsL$8 zT=%gAmFqs%j^M`JK?QKGfAm_T^-_fjv{?5873-dmVm~#W_qHLc0i;on&Z1`1Q@`QhzJCjHAaV8ty5*8b-QXY@) z^Dk^bDZaOY(Wm>kkM>~?>-)a^?#JMH{Pc?rcNiHQyYE3m1_p=5Qw$6Y2O2#=Be)Kog3Sk*U$TRgcb|B19@OCdf55@QqEw21 zJFCDCMuxObX8vug96uNtI-HrB-8h(Db2@ZbXuAn?x`Dbmoplz++d$1dRt5%!7yM5_ zkqzz_#i&GpdaVi`;Pxa&|G`Iv19=ds`Hh0{e?+^{rTe)@Z=r%q_y6wquEuYX%L`Cg zc8kHAe+R8!6$^oiBL&u(9V7umPLHExM~H(%>X z{!VL9>#)}Y)Y6{~8i?_MNS8h|{ts$M7Z@LK?5wqLJl+cP8mN1VJUG(&wqmwV@>kD; z&scq!KY|*-8Lr)Ip51jEp51W*j^7S6m1H@7JHS|C;Mje%^-_uEcThbJZkE7Pw4g`p z{}LW>vIaFG@4jYfJy2=l`27I5!PYu~6_j)jgNygyzWnY-!8LOgD+2?hgxhwDk>UT* zm#_c*|L@4Z>wyS=vnVqIgX0cSP;TfI&Hf82?9abA4eDNi@|FWDsJSm{{S6{+`~gyw zDuY6#QXHJ8dqrixF*3Z6fJl`-ea+U%>-?UX!K1f=(Q$_`$l&ht9=)Rb|1dKA7rpro z)ZpW9J9aC1{1@E_QP(m9q#sfpZTrf|@FMXSHW$nWNx4C! zATBug4&(ySrmrA}pLkLA9->WyAC#X_Tpth88wHVv=xqh-MRh$R*!9v-S9$;c|Nk|! zPxo{FZO;E~c==mEQEtP<-%7&UWV_*EHkVgYuLN0|S4H4HE+ch$8{wfLkNIqSroy zUHrlcl;*%~fs%BPr$Lp3+Z#|Nakg8`r`wGK(cNccU;x!kq;~gnKwiE56BZDqGeJFl z-cmu3Crd%&*-Wo_JpLbk&2Gb0$_(}`b`S2k#>n9KoekU(ZHZ!JU_dlLCwM?I7$e9k zQ0LkM>?8gbJy26s-hly>U-&yfGfJJj8LvUUyV}hL@g2^VFQ{z?E~XGI-}?;UmM^5a z2dcx++q(Ne>9qT@=Uzlx7nHGZws%2hoGp6j(JOihJW_xDh0zxV2FJai&Ynl>fl>*N zUQy5x9;i-~_yW#v{4M;Th8S`y7+y?%{rCSrq?qi#%E<8Y**{22!2zTJ)+s}@1uuVO zWO#AuD=cF8Td)25{~t6+km1Z+P_j{(rFp6yDvS zHe5*tIA?fuvg*79kAop)3}0}0{G9>TFRlQ$+$zBBC-`8PM(asX`w2Q2Rs(8{gZn3e z9~c>41i?a><4Pifd)D}A^m5v`soMWGcvr`{~4UnN@qd)>3*Pox+f?JvV!dI290f={sJ1o zIpEPNy74t=l=C!b1li!lk(ZD$SA$)Spz!SFtp*v$_lkjG2T0)M1&}E7U7ubDMsT-j zzKtY*TR9^G1GN7q;;{pkb3FJLpWttb1`T-d?|LWb0h&?*B?ZUsYd+nlL7ivy7ytiv z|7bnH-&zSWwpWztJ)}&_1Ep!?U@Co%C78ZL+q@p&Hm?V$&5JUYf!yc?jb#XU{6FCV zX+6z+$H?%417b_*EYD6B70*t2P(250?|Sr#o&?oR-KSq%d=AeVY2ak!(aHMs8G16J zU^q45EhEE=Y`86@vl^=Z$CS!qt4JEG8TeZh{{R2)*%`~wef+hHNB7wm2A@C`HGR@#hm913_HLANJHu3P{&~z2~Ds=)UD*?Zn~H{nMkH z(}mv`#1!&O{@~Mn?7!%pC!lJ+)Yk(vB!0}JoBO}$L5Pr5w>yWmGe@oH4$vqys99|Q z8iut1HKpSZ*NH+0w!yPVB`Q$iZg(DSXC8FL;E;k4jv!|_bc2VOeY$@(zhGVY_y7O@ zB`Q9>tP>azquNVeFfzQD{|sqV+cEwyq=x|-xb*4eEec~`@JJ4{aNGe}AK}sM=>YOJ zc$gbJ!maUN)c*-1gJ*ZWfJd(=%WF`4p8qe({RG4SO&9UEya82moiQo_paJp-(AcM}A#t&+*f?AoN5eOTF5?&k563%}IR@9erJ8WeHbqcM| zm*4jR4aObzu)gQZ?|uZSqj&rqBZG(aeFy$+M_s$WxbVAtC==$FXYlxcy21K?Df2OA z1rO`{YNeayr9JBoSdUX+8(>lM`jO-O>KrHmiL{nhIJ zA5#4(fX2uTpwnG3DgmC!;T%4_tOuSkGI%nF3wZYWTR83nb!=W-eF)N#qoM(t76Z=+ zCbS+X<#s&Y4yyIpLE+SV#KAEhJhK3qp8Nss>rJ-e^NL#FiuXc%fEB>N!EkHNzqZ5;>GLwE@UnmYIC z{t22xG5`<#yz}WzRPgA|6!3r#d3x-I)l=Z~?a?c03GPLleewM?C`G*h$IcQ^dl8iW z9lJ$TJiA>~I2^mrwO%SI{?5Q4AOLPnXMjUI1F5}G9Qyh}>&XiLPTqYFKrK}f6d%|W30oq^#nKX~#Di+)3}er@>VTMlUQ?W{+yFR1G_3DiUmM!2yx5!5(reaqhx z2kt5Rg2qj!K4oNhvEwzU00y^zG99~FR9X*!`UYBHH?hFnbi%RwTI+!lkMHox6yDK? z^zjc_Untgk{QzkI$*UXD0MY?jsgSd0zJF0fEpkye&D7F zf6Gi3P#Y0ExA5W#Bf|@BxEUom{PGM4_g3A<7KR@98f;+qVsEh3fb5$83KlS6_d+grCKnb4-|izG-Pb(3{RLjQsWLE3aO{u+jU#e9 z?&n}&V0!rrRH${Idr{>H8gB&+wSJUr{^?L^xEb+lSgM3 zhexNEfKO);*aDaC*N)$gZ{}}_12=<2FFj;rc##TDsi3l`BnO%$d^%av?_kRkpcW{! zhmWO9(FK<&hzWg^G9?XU*Uy(A4}t6|ozhUtV9nop1r)!H|CvBx+zJ|)ffhmLAmyh( z%3BYV6!1gJM;?{dlNElQyr*t6Gq`qx$`>CMP>;s3`x>}Y^BrEmID$(|l$pn3t=IQa zN*EUoq}KZJ2aF6aq9FE_PHnKLEwu&39q9d%;fOsb!GJE zbQFL^<7;M6oOai!7$7PDq)Orc(U+eUnK8m~& zt$jCSX$NQtnrC;kg=crRgJ*ZKhiCU=c%vD*9u3q!MQcC6>Mu|m+oPM+=@z{H0`+r! zx<7)JA$W9q3b-1-ML5=T4{XxTqgONw)LL{u3aYOl2~in5T;c+%?AaZ=uYwjafF~&4 zGcbUrWCb7tK=2Y?05UuRnw)s}@-%3P(7ntcJsHM*(P3t5eTGS@mClyyO~>7aq}doMMa7#LbFRcLs? zhHgqg^XcFj-Y<6<8D5A#0p&PwxU_=C!@-l#$TP7=&}L#mqhTK1=fLx?p!t}W;Q1KH z{Oc=~hF_5R*Fzrsiw}e6U;99|Y~iYG{`iPdnc>P4RDZyr;$J_ff za2Aae0IdiDg|zjBqDLr`NT3x#uqjCmkS*SDTS{l~?-Tau<>dtlFF6F6z{qv6&@RdF z>^}d3=_aJ~eZ>l@U-&(G-5DWOj6cV5Mn(n&2anE54oH^Gl<@36@A#kn#km_0J=rDzF)%oQvpP7NXG%E!XGdfgP%3zN=?_?Y$4pRaW7WJ4@;YkDmV>5jPzmI|4jAhT4u;4@$PZ-mEVt{{8>I^<>3rczQ)y zTQwWhKq)y0Plc^bAm!iqTX(R4YOgv0&pn`OmqFt{Gun7XCb)-p{)OUoP<%tmgC~gg ztGHwLSEYTjiBOy0lb=q2b`DLJgh4Oiu@2he%Z$WvhKV`Z#Byc|Lgz%cYgp? zX~m$Shh%n8sDkDzL91MjgN#Y==#1d-=&TU%>C6B{z{@qDAP0|d?YfE?+yS8W!C`qH z&}cN)@izU|lNE^eFG_}Pdd$f1!uA^6kFAQ}_V0iGmTAnO!Cg?X6Ap4Z6n?M^w9E`s01+8yx_^G#BfPo>wgWu(sPxp8JefA0q=p^JxW-|HofHX!sRTD)#NLI)5u@Q$q7;roEv36CkOh%?B>naF#1H z{4ywEYkvH``81=0)hAF7kbm1Le%})w|Bv%;`}lfZ!!OrTuWyH$_*+5cmIwbncSeu@ z$D2tFtlS?*R>K+gR4UeYq3V0X*FB%dJ$d z`GG$k&frTO0uJMg#8W&k-k!Q=n&msP?|RMt?XXg*tYd?nL8fbXkltM>Qj=EUCEPC@YniJHM zc+1}r#0jdqz)LwneJ@Z;z^A)JK)|EhM}Wig|GBgYpryOLqI}mF8D1>B2P&&T?dph(6)wF1N`+_8C+MI<{+P{ojP6XYIHdw{=X1E^B!KKCN`BB&`19*Qpmtq@IS^XL@~xC&X7;?aHD zgV~MaI0I;E(xbD2!=p1oz^5}o;y>GqBX>cDfhrrs?Bj{^_&kTTyhmMZj8fj8y28lt zA{K5<=}eDa(Q{Wo_2c;$$8LaZ2YaP86tr$s%(457N4FbC>!lK;{x{r8*wO`Pe!Bab z1JwWC4jwlVy?F~_Xd%c@P-Qot6;z+_W6#8#4L?=*TWdgCyU%;>K@28A_IvPe3uN^8 zf3VjH)HwUp0BM|oCJV0=J@M!j{d$>^;YG(Cu@y*}f^f>q! zv|O860I^)V17w*r#4^yFBH27OVj)U}lVN1F} z(|j*%Y@p*fDWE2q^)deDXi!i>^P7OuJt_8rJyxoH!+*;)@&_;#|cIg8;le^ACm z4Cj#QyH%G!?E$!DrBfTMHTYW}Gcz!}bYf;;X!xnc-+C21!UA3)Uky^u2UlKF2p!*q zx{rtI?&AVkIQJGTFiNN54t>zf2`E{$fU;V{PYwQ78StnM@`8GB=QF#q|SrndjQ zE-*5@xC<&1z)KQJr+V=3<8JtATQ1_U3)~VHV9@a3Uwn$c=`sT-xkdB0rh(=>k;XnD zQ{yi4D5T2=8wos(_;>F`Nw=o`TkI@bVZw6pB&5 zp;Q5&Iiwd+aBE6udRqVEZ`J(y|G!W7G0?Us0}s$fld~_>CWCg$lp2F(lV+WQS80nu zE>7n2=yv1a7jRKg0QEQd1$u5*=uo zrX(AjzWh2_-<$w>><%NIP}3EfNspMgQz+VJqTR_mn-HTXDy4`_4?G~odn z!vUqQX1GC`#eZQ!L`?s^~H%hpy@PXuYz4$1X-62GCwg1`kjl%)a4geTfyg?{x+;DpCR(1A>m9 z!`mPth!GJ`hEY5I|NraE){_;Vb~7+=Fo3sxUjr33Yx_V2PYI~sDi7+L$sU75O{tA% zGCQm{)+ylu?uiwE8_$ma*Dg~bZkG-t?`~N>^u=(^0`HA38({b27T94)< z2JivpxMRh7&8p-hJ+@b>7soq_pV&Kua2fX~lr*jQ>&$Z)TMn;APP$L3qzZ(BOYme^N z4*c7WJ2d=PDygInh~_6QO~p2U*SdI5m4#$q4hwit!J{k z0yH)?It@HJGdMs!Y*1Io@xQx*N3Uq?NszD3{}-JD8utV@82DQ+fR;Lgy1OKS8% zy96@ndEEL}(T)9}Nzc}A{2id(3?9kHJbFc6g63}yK45Kq>(%YUVBo{=^7BP5IHEy` zwxog|GQS4upoDa?W*-2pJag<8LpVMRvYr4>+4b7kv-`lykpJL;XLXNcY`w&!ql^qM zzJj9&WN&G2>o@++tDps_|M@%5f+tOmgO+tTfR=T5fR=RxK$msI#UF0{U-7^r8MN|X z@)=ML_zoH~IQWd!llj97#gpI`1%Jz8&_vB!{yqs%!PD&rTAuXw2qQ!DTSl;-E8%wY zx5R>@8S3SV{peoiZ?XCJ|NnPTp$}ez0S|6SNP{;pzmx>I{Um>fAb2AcHZSKNVPts0 z1h=-d_vO>S|3RMM1AF51i!@LxrTa9fU})I{F2+QKL9G`*ka+8X5~lx0J-gjNTWG;E zOrWj#-9GFFFV>v_Wf@Q~^0!R-`~N>^zZ%pttM_4gCjT!%&-j350Z#IFxPTmpHU1VI zW@LC_3b(kl_oW0#ZLetQY0!GQ1#HgBh-azvcNK`1ux&;0A9?|61bD?l50pgsJcW}!znEB9WsYA+Go?lb=H*_kci()}K^yW7CGvseP0{So7T zy`mqFfL6(!dBMH{lwu*xj+>w<1W0~k2W?2&zy#V~_ntN{Zw-|uxM{7;~R&{Vw6V!9bm`g?P;CmI9|eb(EZBX=cQZ3|UxzoB!F?oU=m?Jh zc#RsDhqZ?Qf72~c84n7uL*S`gaE0FoGIg6^uM=p1O28Ae3KP6X)suhmfg-_%U!aYt zuM8S~aq_n(gS7WnGJ5WZ4Zp$Tmwy{*eiX7_4b+5vk2C~#9lTy&3*6i|{i5jzXqo`D zAOO^ot^^w?+6!(coqmye1QJiJiJ&2i?(;8P_JA4#-~}>kK|;ywpyu$w2dto}Fi>N_ z_`gSIg~V|N4$%6h&Ik_B^d&z+Qw2nmZ}%BcJHn^?7)akP4gm%RkU5}}2#zywfJR_D zGdO%Y3j{!hfsFXG3vMrHv*Ak{Xn8Oll*eI*G?aiQzR!8|`hi9kgh2UAdnr6^w`%_V z|NkXu=`3jC{XMci#Eyd4{frDR8jiv;C4XznU(g)D`4>LB;r4F@H^1Sn+T)=891f6{ zZ34`_FTwf$5`Tv#xbTJUIfZO)^yn4+why!)2W$<|Nl)I zptiPD8>lhx;DFgAD3&1&FGtWS4rsf#yGI4q-`qJ96jt!1&!FErGva;_4MfCL- z@^H75PJhkp*?j=CezpL#8Lc8_>lg<+VaXvlG~5w%K8J-zccg$%Z=r(m zTd)ti|AN~q9=)QSTbLO@5xIO3q(7bR2%i1$?&Mv*otdHgs%tl!Z#QDo0|g@r@>`f0 zUN}IkDV+)GASZyUY+LX+9B5V%)OjudNr3y(2_SBUXZJaf2&gap|3%GNNQaFd(gEl$ zQOWQCb)Bz+YW?mQl>%@Z@FbX5qmlqxr>4Z;(#F8RU}MAI3f?u;>kVo;*n^U`-63$X zQIZ1jvPUQHmTj0`Ci^gk+j~Ln>w{oBO6N3K*p)hf1};`?hxnn?%QKk`RJ?eCXKgqb z7&t)L6Eth%0iK>`dkJb^ff{oO9{&%&3;^X(&{0yLMACf3!Z9vBHu|O2j{pBb12V{h zpq?kB#SLn2LylqsjlU^`!sp|9*QgkP+WU=fE`W;CZq}@=&mS zL;^gtFM_If3-Edv#ts%Pk6us4mII}qj1Rz3wEe=wC6I5yPCb1?9?zT*Vt zVvxlyDgnkP(>i@r6hMP+3Xt(5SN?5`zP+A|j^7U4FX2sd0Ub97mVPb9zfG{^QVGAu z|AQR@9{&%3xuqXnIv70uA8>6sPp z|2sQqsNO{-z!P@-8)SaZ^ZzlY1{(v0(r=#KMFQYuxv#lFJI5^`=>hCOkK@Ndbpyy@ z4K)^^ov!tarC-768Ipdx&%NlJ3#xS>T?J5gA3C4m*e#-Be9{xNZXC4W473sxG9?Wf za>d%+0j=o))$A)loqt}JO^{|gV(oeBCGZFrbd(xyL>9PD3+^$2i#U+?5G$P=peq9e zP`7mzY4C63v4+$+cvm;Xd-RqwdN6-}$ph(o&cWIj2vG@m(KrVl4z2(H{r}%xqoU%` zD{Hcek)hi~MZt@g>E!ukLZ!YXS4g4*jLoGadMK!m9Tz>Aw&V39FoiQpZKH#QvNj``T zU9;=m$+~$1mI#5*iTGH8=KOuEk+%_`&58JR=P(F({y*yp*#@wADtU9aPHwQW=5KifZV#M#@$Lku<^|Q3 zy`V}CG<%WV59-a$Q32J0klBl32hZ+m8KO7B5)@y6AI1j!> z!v}okmydM;>RKk`J+*$_B@7&%z2JWE%}tC9FaGR+*;6{Bp+=sQ0n$qL=oQ_y36e;? zz%6=kK;?qQSHSyQygOOFu(<^(qk$$LNeL=1kaO?)n&X??C(mVXL9NeucK`L@cl`+((ToJGcD~Ku8VD*(x?NN(JbHOc*Dx}4$8hi*e9ij(awBMY zBO`YVhk)?`&^)t%C8*YRIq2DahWW;eS8M+N?{ra7fourg@aO-3P|@w#3tQ^zqr%ZC z=>uBQ-|2|5`^2-ij1jcy%)=M7_PpW;sKa{Z#ca57p1tMZ?HI9OBUw}+En^oIj^hlV z<;FhX1x*D49>*Qv8(Ll({Qz}$eN=ROx)>6}gcsRs7#QF)vkBmdS&wz_iP^Pl7#Lpe`ThU@ zi)6S#ns9^okquH>11jA?dq4LpLMM75#s#he+8(AX9X~rksCqaVyAcpnbg4;il9gn=)ZF$VFD5a{)6!siOP* zes(4Xh8Hv78sp#^U0@o01ztp~W?*myZ{Beg00&4rsDxRxnt|cv#$TXVJpbbA90rD$ zi++JlaXSCPV=E|ef*isJH}A_DB=4}VW?*Rj=F!WVw;5FU@|JIAWZ2IP3M77y69_L} zSj))p!Wv|a*DvVsBDjB#b$>?l8v_sUT(a)TrOXVVZL-}z9lPIvk9$7%V(UtflOU}( z&|D6D{K>J~UBR*Yif6aK2Iy21(7_eZ;|qDfhqJMP4reRkhwQ%qt*(Fh5Hvb|iN6C> z;dP3(tN=|ppK2~-Dx#?U}*ILP^Kpcyw8{%y>j z-Dg}ZSOu3dGn8<8{6FYs!J=9E-J_SK)2Ej=dlTpYCYwgjUXjMm8kL0B|E01>?f>qo zHy*t~Z#@2=gh-aWbTz#yEA?aB_J3KL%3& zIv3OuEdcccVPjK>Med&6S6|ewfQMV_MNn(+D5y7@0h(GU08K4apiFrlcC@-sD(=+n z!^zWnvV;$0iH}M`^8=>tpRbvlA27BaC=qC|vn}Q3-}RmyWWUG%V~ziX7!(*v`CK|u zR1{o#{Xe_}O+PgL=VDM`;BQ?E3bbC)yfu)zU%DjAvD;sv^<;%_Col7IPy}3Y z?RHo2?e^F31fTQ;p7aL|v+|H}<^bawMurztAU2gwYp~EP<@D$+V0^jp@BjbDTvQYo z9d|M_D1cAAP4EC6*LeQLH_!_28kL0Z7p-skTS4ot!84Nkm;e6{I)a?P^%!Vg26|^i0|Nleg++BKI89jT$6+mM%r6Qns0M%%Aml2*q)In0n!4R`Fx=ZcaaHLBVwBLIKzLirUI0y(wBQc<9x9oCnT-- z|NrGb*f>9AbOEy77t4H}fk$tpf=Bl&k6y3;uH8R9dPP^SVr1~`{$Tv=#Yu2e5R?~7 zGADpeO04keWVKn!%+P%fw84e-iLEh?OyNZ$FMFQNS(i!~w zn41sWX#Nq(-wr;`tyi>Z;{X31Gx)c)Fn!2pVCe2?dXmq;;K6+A|3jB1kG8t9^miX4%*0vvLFpSHC`?RPWGjOkP+7v1q=+`A6|ks z`hiZ@1D)S~;ze*a1A~Y4;gS;2%F!anZZVf$4@Ul7ujE0aeF{FHq15v)_ALP|MSmUK zE#7?&al)_*$bSl`6LiRd4B9ZL-~rhL?$j;9*!T*RzDjtTU$K{PH2-2OVRr4b1Ca)z%YbUXkQ`%Da_{2t9O75<;FK2-E> z2WV)a6Evtb1Ja^7&E1_2>n`~vU41%UI*K}YM8MGrk%FO}qj4(5ccBGrM8 zU9frZFFso&$G^=>7&2l38YMqggfdF*>(T2a^3n=2NUb?I1KJN0Qy=EyR!wdd(pi&>yqu_6G z1MS$6X8=$4hIO*?EC6*Ypzeh^RS9LX9qvkq10iJnWp${ET&QU?%-_Z;{C0`Yk#f*=DvXF&GFDoCYYxNeyQ}F42>Cwx| zyOxom`zuI5!=?MFM=vW6D0DhqR1Bc`$Fn8${i?i2MriNPD=*$8o_(ykP9&N){_;=@Wg^xvI;stbYmyXBSpr&0KDCt9%A$T(10H-jQMsLtLoi2^upc6V> zJi4O;UQPq0TEqrezit-+4(Q3FpBFJQybwdUywwZTb?D7tgq;NG`x>;KYBgwOnEG6Z z$3gRC9=*P=JbFd9fV5v<0rPlCF~q|a!JVw0b3sYiwHw*9CBb+-2tPIoJI{47(_hRd3<_ z6VQH!YW~(p@KhpZ$eD0LL(UyMh6fHg8&E=74L6}A4}6{pIPknXSy#=%3_MEQdkz%W zws6}@r-I_zn!go%6Ak26h}9q^Qg9_D;PEn;d!(rB9y^d_YnQ`PImA7@r2?SSB0)!D zmhyQtA7*;ZZNpW{4&r-s-|+19Re14g7N`vg8n!1xXv z8D0ps!1AXxIDZ~~{Rr%UOt=GFVGigO^_d5%WgoD5bf5NQcGWlzTIK8l+XDxgO?6dx zv2Pj3yWnaBx}V6g+ZWW4^zP){HG`R<`z)yBM`Uf}_{LhZK=U^Iyg>nv|L4J*u6spy z&1GbG;S0C0bZUdW27jy0PjL4Rw7LW-XP(AsZ|MDTLu_y7Mr{~z&e{=>}Q)ARlRe^9Rl zdiPOmIcPvC26O=zj$=YL#TuV{5jOMx|JSEB)f%6CA)U;?@Ou9yP2-a<1VGF!h`tDj zIf{|B%h7KApT0 z(?CNV*Wislig$R_Phw_xv7rHM4f1*n(9E6VPS9XCsBeV69>W8%9)tPCo7J!(j&9IU z4d|FPkJkSsQK0T1Xe~xbfJb)-XdMO@qD_Ci2(&4))ESiDL5uQdOoNzF>g@qp4*}W5 z$^>2y0o%n|An~8=nR1wITF7aRRjbNc`PpzbcJFmy=- z_&z6v=1KtukM5f#f*#$T9REe-Co?h}cLwzUKo?&rfEVtABJa$ZGZ6I+w!f!?CRn;} zI_?6^ZSF&W{E9)dU>}kVr0OW(GCHPu!pEvyjJ4h#?^ANL>lC8 zSbN0d|Dg^J@M;6DmXoDOs||KE*!E9hW?(3d1Y6ZI1!|Q~FRuh>3Kn#`9KSpc+k8|k zh*;0y(JLwoZta|Yp*j~_J(h479{?>Djy~+sD{2Uy@jm^66Dr5O19agbT>8{PP{aB3 zi&t|XTEWuL@bl;uJv|MQiccd;Gr@I-%!cS*1D6I}=mVFYIvJw77g-viTMg>$Jh(LI zMnJgkW~j73TpDyV5?ne1Ds2FlZeU<=flEh1r3K;A3ZRoqnvW=egJl;~`qON%zjuN< z^ScBX7zFrTPjw%Jm;y~a@bu%+eaoZ!ASm8FdPV0>2YLO(3&qJ`14`1mxglrFT1)~p zh+VpweY(9lkOnfL6GbF%;4+!c$nawKB(N>eGiI$z)Ea))mdHa!7-0>|%b?9&LZJNn z|G>*A$o+6&??T2?!0YK?_c21Q>9d^(T`c6H;=#X96TFVc!L|Emhl`4fEBL}bkM57X zuAl+8@)VC=QPDcsV4F-cc(9G989La;znwK_8t5JX7ZnHoZLCSt7#TWTRGePBb+blH zV`Km=JmTNR8VC_~d9B~g>WL6`f(c9b^s-t`Lu`>?oyy4Yf?+ZPgM(F$3g`^BB@-DK zKxOTJk6zss6B!tGgN~Ktclq7=-zWLI2fxP)k6zXt6PUs0v{`ueikNlQs2G5zA{<;g zYg9CRyU%)bpLOX>QBio&84aoQYu!(_zv5A4f1Ju1^U?vqX zGBe`U!ouK;`L+m6b3*@V8ok&g@?Z3Lfx$6I%EEg!_dvJKYKt!`K22C z+vGc9R1`YcL5%|g(6FrrXbcxT`ga|4w%LWA|Nkd+$b+iZ0MHCf1ZV~ZG@9jrxTMab zo6*CXsYtY(x7$&{+DV~?yPnzjz~LRBe!M=m!ZvoJHSy=w=U87O}8X9VR zGXY%Vu?F=*vwACNjk`;Si%MWe2xtuSC1{0U0_55^))FP3URM1Th!AL=$jI=bt{)l# zFJ}lbFhGvS1>Gy~!nBKl0n~+P6k=d->~swP-Ez862qKm%#K7R&o2uZ`nWBQ+oAIfpc6r1U6hwDAi3Kv{M%|&0$upGm8b;NbAm^}UV*w* z-B*lHzVJH*%KSG#<8=|Bc?CYu@EoYfi16q>{h9?7A|Ab>H)b$0yvQtr`u;*mH7Lr! z@dX;e0$tR4lE1|Vyki4$`wnI~AO!L=q#WRHR%B*icnvy?kiSC=bZ!E4NEuWf2zXcq zfM-+#1o)dCffg`;2jD=%%6C0lFO^Dr_WD}*^s<(M*VA8qVGG*ca)7^860~qX*)^c` z0Dm7hNL%*>pI+YlrT_ms?f|VO@a*=D_%FJ@i;=~{F$V*SFA-}k6X_Y22v4(p5jzNdV99V9%PUow{71Gjfyd*S5?0yPVH!y!~4 zgz|<^t`N!|LRms6V+f@Sq13xTGa|f-AWHj$W4D_?r;Cb*M`wtNgHI=@O9Z-P*`wRF z12p3RT2i6l+I`limo;n&Bf~BYP&oGb2E4e@1v(ePM&!^PkFk&S`j#lfkd@~{9_9`?EhcywO_ZOVPo4k{4&TT}Qz z=7Nq?E$CqL=qzpU=yp+w042r>SQ&Z%s%2|CsA!Y}6^-EQ7B%@87(APgNjUyL;$oc~ zz~3|J-~a!Rqz+oboB&!lp8-kqt}Xvd1wiEwqavjIdCSYd;0Qh-`s|CdvJ9XmNCc>? zy2{JI06Owo5|k@NKsx-L5VG5OK}QWiM{{@%c=WO!>;m;AO-{HP|3};(30er`2`b7w zlaGUnB@gC9uGT;Jo3%iv;(+!x@`6e+#!^jCDdzb9`0IzDVO&K}i42>eN7P*}>;L@! z4>~fn<2C5ex#athsf1e|-QF6IgN;mk85v%j00lJoZt9X;$8PZXpT3>Er`l1^|1`b? zn!fb;4nO`Ae!n4n)b&EKF8KIQb$D@70$O_q+sSgGhmqk$G~BY%$@@XIjtBofHqe=A zpkuH-K+B037&QJfd+;wl$lnZJnb~~~X+49-|AYM77)f?t~q)~Ci@yMXFRWE@qO9fARfbQ24@ce%Qyz!z}lnZ3l z+$k`tN~d~sI~zc+*b?>tooKe9g^>Zg>Z!vBTs3+dfKJ1<{>a~=1m;JBHW*Hac8f0e zgWKIDQjE4KZOjag{Ojvj92xh5mhC$JKmPIyC`NllbD^r2B2>FURVyH=J_b?k4pm)_ zP;G%l^$dt=MW|{|gz9gt5SQp6nVkhu%?(v8jZnP>s@eicHE2JRN3ZD91)$c_=@)PN zAimW8&pHXDy4%gbk+BuzNk-dNkO2SsIuj)Af5B^kMb|;KuY+orWV9`YsJ25=d;y}k z6{@%qs#uEA)(WDyjsr>cB8cjEsOn&ZY7?kx9wgNz5Y?to)v5^9pIRVcB!Hya4WgPK zs``5`#Me@cwnw0DWC zpp%UE@%i++27niwiGjuf4O7&|2Fsk zHoPTYZMaH4f|lv>mI&BzmGJoVvbs%YWO#Y&3#ev1|KcDh&GjPHe-}WNS+B3fi{}mC zC6?e?C!QU>66~x|sep70j>9x;gKFrI165Qy>tg+?SR2uHhL7p; zgSv%WAT$0Sv_1tnF1-OXr2YS}Z+D%5=l}Dc_yt(S=Q1*U;umxc=w=m}%gE5_8o|Gv zm2WPn_wO15nhvQi1E}Ut@Mu0@0jm8optV1^#Q+|=*jA4S zFg-TV?j=Y5ZRViy7RO`kpo_~CL30V+r(Yb-2JKsdOu;T?U|^U4YN~p6`>1e$o2exg z-GcnP9*Gx=G(U=M_!WyXyUGh{qy9hOXnn9a@b&f90~Ow#tgQ{8N(dCh;7aJAG3Z!z zf6#O^=*DgzEQdoDqh1<-RtZ%$Gcvr8LpZWE=KufyjveNpi#m8byMK80MlikvuV(#^&&|3AWAOm)EL5hwn z@cbLNed5*0t5uJ!eS&{4Ua>m3eS+;`WNna5eh`~VXTqc16%y};(0CX7c8CddE`%d^ znTw-9kuYe-0@5f&G5hN)pzDyiJgwb0_**A}2F)Oocc(y67Yix{Ay-+!&Rd7AcaN$A zg*_;#fIEN(z)1yZ?ih1^sTkB=LB8A_v2wwqS2PM_-`j4`SQKbN3l#SM`CGWb9VR~x zkN*daZ#(jDvj=4Yr1ljwKgDk#vf4S&mO21tJeJz%Op^YID{4kZFB96-HP z`1&8@FbREq6Et$;=hDeqQi~F62aUm#6anBI0Ur8+cemj^?Gwd@ukW`apCgR2qvI2( zcgc-#YHK7oOW1>Y>pY;Ls$MU~m*DkIpevI>OAnyQtnn3e>DGV5l$vT2=)Mh5DuCw= zSp4j&!5=^HvW^E<%wfb2V(lzw|3f2a{ts>yD1Pqqw}AE>cy|By*afN!K{G6#-QPX` zpLgU39mWef0131T>QK>3(6L8PKzDa@HvHt`Z{-Jhq5J%cx9y<%@&oi1K4Xv-r)nU% zCl1my=I^)#8gJlzU5yeECn3#yW$5l*0r0w5E)Q!*0sbb?_#C)w11}M}3rg{Vpu_ul zK*Pe-ARBuN{&@D*|8KD8EoF0Tu;(ga_U!%-x$UCh7#jn)Zw9KCpanB%gUxl&COhy! z;*wS1z8R=y0F($ORlUsznO&LB`Sh|r=?A67>!9x6%Sur9uQcXacLRFQ`Ag6xJ7Dvn7WT4UnFiOtvJzGql&XSGW%~)fT=?{hk5m5te=Q8INsc#w z_DX}U4FdNlyL&-HTc9!8*l3V3b3muAgUr#wUGxWkai&8NfLb)_!sAX7cRz z;_!qtV?3A-x_19`wLZb$%)-h5x?d4=g)=z8IsQNHYW?H&GndZV2ymD0F$<`QKJR(( zA*&DbNyl!>&e{O}UC-tCoA$CWFf{&mP+(vvvGeS9fg&7I zxq%WuG1u!`t(W*a%Rybr-bxOS&e|Iu-R8dCg#zDP1336w_JPylHCN-4uEq!Wx3TFY z+DMkMI5r;sSyMh6_f z9bqita%_I`4`ft_e9Hm;mNlTn*nLm?o@1{&W2b9`NAd*^@NFQW8Xmn~93Gv%H$1w7 z1U&wq^6hn1@aX1z@wpnbmCUo(H^8IU^#rI{qTtef-UT$Od+mi;DJTi^w}K8f?e;zK z;+Ye;TL~JRf}~i_?rSd?%Rzfr9)R+N6f>x4>(d>2!KYWYvxXA8Iap+Z@6^V1~`5@ z&cffK0Mgg%3%zE`r;T3K`f)HDrL(|(r0-6jVyO$BBe=;$h3riDRGyVZ>1 z)9VP+E>wVh$^$bEd?Zz`s3KG&=uSCMR#W`XT7}Rw8={E=rU|sz&!boL4|u`jxfed5 zlk!>*l*s*O^+ae&gJ@EKYI+@mlx1Ln3c5!bYRGq}lO4NzL0xl?UQyKw=xD9$g%Y0s ztoKTp8M<8rbY64)XWa#1yD*<{>;xGq9q{D1J} z{a^q8J9Z!OXg-pGD21bAk!LVKgV8AWk@l`p0goFrzA*r;^y+4vR05m7Pyn6r)BVGx z(?uo5r~4OZn6m(MEncT@1L(4u&Jq<1&<61Y(6Ji^#+Mv-fOZ3U^!5sXHc2gyXJlyo zU&?NL;AJmpEm?1{f=6d)hfi;|h4IN3s+&QlggoFEU}f%MWZ>6yoxm@^%K>KkF7WAf zo#4@Z0W@N`_9^J%AyAgr;$&a|*=EuDpT94e4Z_Ko;Mn~QEDCmmWA{DB=6VHCKNWO( zbN9cr380%zJbFVXcxYb)m*@Q3kk3;9bznhbQoWvx4VDb0-}$$*-fstWuNZy1-6hav zeY;sKj4y$!BgB3v{%tG*9V~(#y+NQ88a{aRiUxwxZ?Er!7ayuX1Eh6K%pZJuTS0;1 z(JSf#lWeYJU})G25@jd>A82O)8VI+51)qy8q~q1;qGIuy6|`H=;{Rcf=HncW*6|9E z_3E7^DiO^!Dh7=Feb%75r<>oScPePzxrg>exckuk3s&ITea@q|7p(O70nl=LkN*c6 zY#13zzqcN!i}vYl1xZ2H+e6O%*D8^RtUU*>G?y&n>2eyK;fiO0vu_D-$iEHY5KpK>+;BN07i>7_A_>9{aRjS{IwTt6kfogv zhwuyVt^zZC7l1nc>pCGF{|()&t2;ps+`+${6{I$;({&I3Hr6?vj0_#F`%v6E7u=IM z^I}#ljzBw@Pkf+F1*?U+bv-NS-lcz*F)9Z9ee=M_6_ltz&x7#o2Awc023iyjiptm` zw5ViYKp3TQNT&!zU4ETFM`|@0kzk$xt?*I)r z`A&Fowh+xd<)8|@`^<|HP%i*^FbS5lW`pe@&OP~HwNUqTvVfCTa|a|wyIDIsKrshO zS|Bm>r1cK8q_O+Vi`UgSqDu&DIB^bnmWvcHpmVD{AbA+t%<@r*0JZ)Le7o5_dPRSN z)^UR(YeNA8!^?vV3=I6Ops^j_ZqUe&G%V;Q6`%#34b;V!xLlk7b_H=RHUX=J2Av;x zI>1H6!lN6!phUr?+eak=;@ZP7*D@6_FuWFX={^S$e+?6Vl@B?kvjS9pCVnh|U|cy=uVG~d(dqmtp-d|U%`*iL~*a)?TdhxIA`o)w@w z#6jCF`88Pgv_qnkUxW7`nCZKKUxW1+nCZHKUxW8FnCW|fe>>|1aMj^@fqxt8@pe!K zy#&jkuq6*=O^gh?L5GlbU-szbolwZg@S;1Pf#IbuG*#ZK#E}?Sb3hSHT+rUk2C0Px z?Pt)ba{{cYtq^Z?vud}(QYA>N!*vO$w)F(<=so+w9(>IosJ7h$>a!%fsKj`5|7bl> zrv+X)0V>b^x>>$KRSUvZgO0ZI{C~{H`g;v%2M=^ydcq6;JhUYA^B-vY^O+alDscEy z7VLK7{P{5p$)DU1f7Z6a{Mp3Od`KUw~D#8KUnKzW}df zGq~{eUBJH`ES}csx&kSXq~Ll%V<({Xr=WGG-Jsc4KYZ2_f8M;9!yW2-4;e{`V zci5x57u2=`b>QcCLptyspvGV05l|Zt(R7T3oDZka5uzf1dEG@axq%kT$`$J5Ix~J5Ip^GJWgGeAxPTu@GoPyn&%q3p_G(-1>LX zJMbCl(5;XGplRt0(8@r#Qx3QOuejrp{M`e5_Uh+uJ^o!!<@lS*m_Yr+Fb>d(LWe=a zS!#^nQ2+)|m)!@n^nuOCIzXUE#J3f6QWbdZgZ1g6yD$HN);^u&?*MH?Zu|>6!-BsR zbgP4B_hIOEJcklNBm)FN27t#E{vQMx0J&gg0=Psx?9zSMv-=dJWe7dYND%3q3bgip z(Vf?zyUIF)VVX~Sc3*NeJ^*QNLFX7?=k3Br|AaxqcYL7mf~@)|y7rnAbemu&4qu4Bv4jC1A44QH64if;i>wJ1yWosB2z%Kic26x$kzyJR?@`3KD z0AGf%jpN_JZwKp3A{+lMW@un2m2m8KwQytvJMlj&PX;r?|Kl$cL3;jzjuR`D0&Tnb z&-y)`nSuELOx^L9_J9BXcldTRp+xXM>-}`laHp#RLKd{h;0$O@7e_Gig0N=L0M|$3 z|DXktoi&hS;Nat1BB0!HBNNm*(Yet59kjw7RH`D@J9zYp@>YYg!p$s(0(8W$bHRN##`a{HS>WTj~Gh_YYqn43>s+W2d}5Xq91kY z1#K=Pt%{N1#o|D?8=?0#-!2LD=&c4FJZHgPVhy^^^kq79vw@XoGRi3>oD2pBAlv#Y z1VH6S1^B*L(8+z@!0XoU8~+D!UjF<4-}ry)H~!W%b_Ry-`#!zA)2cvAMRey^F)|?5 zm4U+tvR=eTg#)_q&4c-%qxB8`<^|A#L4g4}%X#?q^VZw^9UY)_pZwbcbi^_9&u(-6 zUC-qBn?R$^9^LNHZo3}wgMdbi3=F+(`~Tnnzw*!j|Nr@0L6?0t{&NN$RRBI!$+P=x z<3AS$1qM%k*OMOI;Q}uF+n5}C9YBY|g7)toFA{ZZ_@Pq5@6mnGvEhe74VPoX56gNM zk6uU6IYO|3r*4K9pOXLo?>^Dlq5@hJ0;^|SwqXIg%3Ur8$g=e>!OZR`5?i>{Z$Ny(tI@hS20Nowm`j)?M8falw_Zk)O zMKR4sEj+sKdNv<>08US>|4VgUdi@!FdRcQpV?dyT4$i(PL$`4usQT=_+grix*?dd` z;znQ4T4wMSGw$fhi$KcZU2n$*8#ad0Z_GbDt;-bnTi$|_WUuHd@D$Fu7gmL!DJ#&d zQ%OGjJSg8zR;y%`2@B}V5$G&1=mtS}-2sWvgO1iG!0VBaXUI@yjw~`58D5+&fLT{M z8MI!vwv_4rai4D1=yFB|n_3@!S60t*SSby@|L5$Bj6}5XpUlj_(0rW9qu1|0|29Tf z<4ZQYC9XDHC616J37OAx?7jqASsDdu3ozi^CJx@5d&jZ+(re4sOBK3~po0_6dG3YH z22J1xou~|+2lC`!e6)zY;a7dB+yCPp{|~-?0=2=wv72EfgMtG?iRcQ25$!xpYI)Nkt%}U;(X~0J-}>i8iFZ zMx50SG8OGys$w?K^lBy3|Kr^);FM^6oZshoCxq?UU8dmJ{mY~KE_kZqFMrR3zyJSt zBPChm|2rJ!fMR0`IB9A(fu?}852}K0|EgvGf1>%spZ^D#Pe4<7=Pr=6XZJndZZXiB zgg($20~0)Yqcwc2g-Z%ty1gHO!aK!9`=o2@$vPF^dvlvL7V3tj1 zWO&g7x2|-G2k7kC;~v((J^0;@dRYJ9Z;$&AYO$;Vrv>m3bc~7zXxauegc$)^#vb6& zD|$7Jk>Q0)E@ISN8+3yPq;NWD0a;M`v=~(HUVrg679}!DWk7AO8K9$0dMg+`t^e~k z%?6!9)B~<0z~x|bjfw+9i8T1i(ePMChHgj&@|wRJqUiO#?t|cqEl~!MV_|!|K;y?8 zpt2ouNNzZ2|AS}u3yE$kp$ zUd6#|0qx=8>UF$sW5eGLKJS=+@nQbvvkah?DL<%sZ}@3d>gEDEhvp=I3+VW7X#FT! zEYkeYrQxSbDY6rwcV-@NwLVyM<0a^bWN-sq3bgs5y5Xm0sd4u?SJ2fi9RI=B2rw|P zf>r>)i(vs!>-|4yseIAHmrp<^2%LOv3$y(S__zuO$QmQ@V!>|*nNTz%TYmfHvVWj; ztOxiz=7OqC$VrY>Nud3ops0sT)kD@(fWz6hla(hH6wb)!1qFcXH&9T^^MI_vZ2zGh z)QQ&q;{w??HwzTlpf+mhR1e5O(PAl#3@=18Ad~EA-TaWfT0Jq$4Bgk@@eE$&;0e0l z1HOFL5w?T`F|}Is@U?2|r3!4zQ#K?sGQ3!y4z>jp&m0XudHGwWfqDQxx%gXpA(89? zs)9l15?urpefc2!KnWCF+c<&kb3!axIRrbN<@ReX(2^A&kRI!9!S9E_m5123LkggI z8@M}VK$BDA;DrFk9IZbVUG->v>%s4O*Q5LJYvI;!l{`p%W{>{|K)qT6&^{Ck&}fPS zsDB%O7<}G%D0s(f;~VfCcsHv+G;{{WMI|HEqnkxF0@P9g-SzSlw5Hsno3}5OnZYCZ z)-KQG=iDIr~9`{M~;et z=fUT!j{77*hELAT9qf!xd0eb%*`-?jUoBmb@s?4Y9oE&iWyv1BX(#fn7h zfzprQ^TxUz1$=rPMLJznY#h74BCnU}X7KHGc)|T)1!L)FP@~nOo5Q2m;RR@p>kDXq zScH%EK_vD3+ZdfXSQw!PTz_=zKH2yXG>B0u?AY7*<^O$9|FDc5?C#g<$6Qnl7+X)4 z$bn9vj_~+@GHrs3MJ8Bt={NrEte11ab2kp(jxm+6g0Hc0>1GFCZy(PAni;47t=Km1 z=HlP=P_$UA;phKSK@ZC)a5{(rw+3#5ym?3gv}o->(e>9Hpfjd|_(6y7@ppLfGcY*z zHh%hl|G#hd)8-$H{Ozm3U3h=czOFxUj0`XOLFo~Ei3I$7S#bXI>tyYT1l2ZI;TZs2 z&_V9kgErT&v>%G_-LKaLvQZXpW9d||U$277HCNEacs@o32IzbvINid{M>>QDG~ZZs z=OyU;O3>Po+n^>lBp2&|O!rR#B_MEtodVr&?b6K-TDoKlDz3p7uOBQSySP3P%gFHJ zbu!G3(#2pOoCO)}2|i4y#24JZRbT++J9s%N1R4rKst@kGR%<<3p#-fDoVs~95GjYJ z@h9l)E&f)}-BA3yo^kOvpFl*KJIDdIQb7&?9U27MpAU<#JK@xhuUj#ooqur4K=H-z z3fgz=&H=7948ZXPUXCjZIys30CFoo>P)vgdu|Ol{7LMJ=T)Pi? zbf0x>d;rQsj*TaT7!(*ByD#wX`os<{@Bg2$6f6<&Xg&za%by&(kGw49VPNQX6!7Q` zgk|S$CXe1ANEZHro`pd>w4wZM54oMS;571o|} zu}DPZSLG~te&ufk&E9~HTg~|Y|G#gyJBMTUMc;0J0q~J*-RD8~Mku^E7Y1IcWCH5$ z?&W4+aQJpifWPG^csVjS8e1~Fip>&J@cKw_Jc2jP!3{@W9|<4F zV*ssN-t~-=zxg?MG63wIWl@X_FDxNel;ncOYryrXUnj3kDAoOA39{@=5~NB6`Ny&Q zs!w+~^kB0ROK|!D4~2ls6S$WoK=q(7xE=)cqKfW-cCmFIeJu`J6(tMKZKqtjkAf39 zXfGK!Xhe%8n;-Et{Ne)@!EmF*Kt>6IjDn7GUVeF#5p*~C0sao~fz!#Lt5GIILe4G$ zA3OF!3gTkWX*4bj46yK#388xUNJcU;yjYV64x|1$hdT z<)De`&P!HC1_n@h`xo3w@lmk=)wl30%LUG|2SD|2+62e{=PX?rN`yR`k4m_OQ6yHy&y(2=v;H_ zQ$<(#cRl0aZ#n^;cEWY`OKgV9ote=3>>~4TTm+O@a>obf6E6Z(1yAv{4Jmo z0@~VM5y8mtVtEX_3QGr9U|yZ9(t)TM0Nmj41l6a|@(y0LK&nz`d8gib33T)uc*B=h zH~eBFN02oRaBE6ug2!DzgO=zwS@D8yvf^lX1-i+qT-S34>^wzi`vH7^)&G;2_s3rV z--mrOoRQ(h4e)^hpiV_e2FyD?0U+<3Mee}(K;s+gAFTZs=y|8`v&1-{!Bz;ervPqG z=?sUKZNCir?F=&}F4AhRy` zgOUxnd6x-xuXiWw6F-o9kHXujka`lj3Yy2m626`tQcFV5Xw_;xP@(2A1GGUC)E^f> z94`3;)Jsf-avpepOE+eDE8vYN zZ^4(dcZaA1bo;2-FmrWsxwbq(EpAVAa)Ao-?sG3Bd>9zO@c^ngz^Na3JPLg7o^Jx^ zd`TZzWS2mSP0vo&C*B}Wqa-NMkRbF(8LSBkdZrn?j1lnof7%1G$K_c(Xul8K8c?yx zY@=B!4^CC^)PIw|H5J_G{R?X4I=mLLu`c2B?S}GLK)!Nptb4GGp@G4-`ze1bXjgz| zFZi6y)&NF^7c0U*w?n(AIQVow0JSwr!D%e8lT{qkGa<0t;bWP=QO@RLogh#o4jGuT zK2`Jx)Jt~o?7s5y#SieEs;balm0x!X=pG9n70@Om0g$D}VW7eeWMAn7urAQ@8;6%0 zet<@%-tu=W`0@Wg|E_1;{7q_qKvy0dg%%DBFJ5;104-BJ3ffa%0lHQW)Kvj3R>%M? zNZ{56-w+HM3W3c2$Hzt=_UPrk?90sXB1?mjq1pDhFEhh`{#M2JplZ4YQr|LmvNpPd zHs`bQ#W6B?bh0+PGcz1#&2?u6Ep%r%&YJGd%)rl}z|hUu$(j#Q`63pqvJk8?+MOA+ z>XG3%Yp6Rj0}oVXEJWoYh{|}dN>7kVMh1rCtj_Mt47^a4-Vl{@AS!*qD$PME89*ux z-I*Cc?YeG9j!sq!h|*GsQY&|62A57^lLQ}+m>ZZ|~T6NtKtV0EY6m>EQ2 z>MlXlO^2wv0#SDmtZug(GlLjdolGa|A&9zSh`J*XbsNFzR=Y7Xh{M!vf~fO{sM`Wj zw-Bsuwi`18Xv($Q(WR4h5kzJ_M7at?`CPENZZ~EIPOy0bovf1}3fLhErhpaHxiN#T zUS~MYTH(gbzy?-o)5%&7QThP1`K6P!5v(-ZjTv-&9>a0gR5xY@c9_x}h|--9rFjtE zdI%3>rbjR9QV6dJY>W-u7&A9!2G9}rKApPuU@2QSW(Lq;hEJ!i8(6@_jhR6aWD#R0 zs}ICv@P3?5RzI-3g&Q-20XX>?xiK>+K~-8oRGLF<1=)9;Rm}~S_!Zok8C0PvH6SVl zAu6@NW{SX7^0_fHs6kbVK~%nu0;d%Tuu3Ml%0I5m49ZZIED)7PAu8FxDnGcwY=7m- z%%B2R>Cwyk(36>=ll8SLC}lo{DtW=7!pQJa{Wa`*3-EbEkf{jJ^a;_5+V@)-A5kvDMZCmq4ZeP0#`k1>*xAy}bvR7#NH%fffyFIPPG$0NNA$ z-_`i-i@OG(_D8XRPj9gTXrjiz)%b}A{AN~5w+%F(^#i~AVRLF7ZNL}%Q+lPSxr0X+i z5TpCVCw@T&{_U)9BSAfBM-KjNtWP2t89E%fe3G*{e3-KZKurP-MEeDFf!IIK|7UG@ zOTO4}m3)9lh>MEDi~23#=x9B_-v@eBH1=ybi&06J@|*ORgIn@?{m$oZhPc98K$ z&~IuF`F2Pq%GX&vO5PTq7!jI_?*0y@|Z)?)7AV zV`O-75Y!g}rKJeah(&jdih@V?36JK(7B9?wK}F{UpI+Akpi{OvHo=qKC-5N`Q$a;3 zG?l#gM^nk2=0nOLLcAoh5x~MSvFdy)2`~fO^`I|q1dbPda%T;}}A9(bF z4fSNc0yP3Yo`5|53_9CXV+ZKC_B5x?7S{dXOFAF;^s;^hExPRn9gXkO>+$f#HaobB z9e)4+4~lB=IOSE4cPux;C6#~w{|{Pq=+S-MrdOtF<>tKwOfNTr&N|)?S|0Ax%W513y2t3cM=x)tGwA*+ zM+SzMQ{dM+K~JMQbH)L6>7ju~H|s?^Xcgz8qT$i~$)j@)cxKPl=&d7YD=Gsbulw|} zuF?MgA5^n=K*wbG+xkIE*qrXzSeNs8@b5d|2|9SFsfv+-q2X67f9p)pa?=AI-9JIc zdvv&{sPONT>~#j8TN&>$!;ybm3q#5^&>0{-4I$SU7(AIz{C~*5opq-(C=0l#DDZD% zUGEG&vQi0jWaUz4aM=kGo(Bp;PDmebX4oc3g2TBUScSMAD zvc9kdWj~j0HqaVU&{SaZZ`2?_Ty-MTge7GB=4QP4G->M3#O2L=oxON}& z=)U$MVKu131gg7wFed;m1t zZQ#@EqoM(t3bz1_&?)fNF0HV9Wrvb`g7Zp8vt&ei91Iqaovm6*1Ug#p6)LQr-w1=`rMFZUO1)oF+TFwqy_0#+oRCp$z z1*J+)W?v1^X`&zGbU7Is7)q*}U+|ac+k#G6Hxe6mHl z0gu%Nv{=+dC1Dp6xb?#O$Cr`eg})60!w!(Z>xeYh)+coVj{N)Yc=U>1_XTM^40h#< zQ`R8Yg)u_L@j>ncB^r+xn=C-9%RwWNAu0ylUJA@ypb-oU{`IFBx&E_CSTQraX6iod z(+y28-H8s5)}bZEJ=W`mRIoT zcH{u9QcJ$%+x-!|Z@&A3M|TaAfk&_CW;;-``}_-McTkXkGiydSGvxFfcS}eC1wHT> z+=+qd+y)0d$ez*}9-Vv*menOZo2os!&%ZF#VPJSI ziFWew3+d(m|9f__!4HiE&7XAFsDPKVIK~}D_!qo13{?MsyA*e9L6zW-7dc?-Km)9x z<#-MZ;GrttPSzX?(Crb(!~2N!Nq7cxp<{2*`vg$V6Unk=WO(rx)UN=qhXS34&kZ^K zQ@~@_|NsBNr^tKoFFpi5U7f#m4LD(mdfS4+|MUxINOP$~7><&;UL#H&nJ6S8uA+d?P^o@ep ztg->E|AO07I>W>I9DmCZ(26KaE&kROpb`Nb6@egyPh3FB3pDo6-%b^(R~=QtO_i2<_vf|fCHNJet`}i?iEc0+4#j7n6K(o^iQ%D3* zDLehN0<=uFeJPS)L~%nWIr ztXm<}dI+@=LM?_+b0O4p2sIHxbwj9DQ_#w=lODaSH6WJuLFCQ<(D0E6gKXvk2UB;A zN`AvOD{m`N1e+j1p|F&Z;))z_zyN`XppnQBK=qQ=) zACCMke?37veNH?6zv9siNk`8?NvtzRCBP$j4Yxdw0eGA$f zwF2InhooQVRbd{DZ$MMY9^I_}jhGocjE{J9wy0cSU|`_i_sOIC=LOb&|`hQUd zBT(UZ!lPFd)UJ3@Xbc{I>*cL*WMpvZbz*rjpND|~s`iQ@Ol_ARBf|? zyBDVRjXhNDYi_uk72s;;fz(bk0>zhUkufNoO^xM1yP7;&zm+(2-$#t^K)w6a0MrUT z=g})V*$?b-#~sQH3=A)PL1y$uGkSJ!xo08D#Ng5Tt@I33&qk1*Ufx@}%nT6Kp#Dv- zXb{M5QINiFSv_OW?$p~Qw(#*8sNPbL-tN;Ly`st}_T4oEZPcx2^z5GVuK;Y{ZMc1o z(BaNr(f^>v*d{}0u&uO!2E_v|cus0qQRv`gujp-%-DZXipergt`a$u^;84Qn z(ajCj9|_ifSi-~l9$bGbT>oK^{%;0Qx7*r5-L8Ugdn8=#c97ar25?{5Lu7nL_tm&XuNU!J(kOFRmf(D2Jk6zJZAeoQ)aF3u*Hs@MWJq1Jd22paKO{KHwU^UjP~yX?&Bw4$3#I zzjUF6U~2#ysCU2Zrz8Ki51{k)&AM-aM)4gyk^>cddU+#%gSL->27x@fJvIJ|O6oB( z7@q{4%ndqItkXv&!PV%JOGk)`iL23VmyQ?}Q&;2vF5Ryko6kBpwETDBcXOrGg)09Jtf=R2X=7(#a4`Ds*v;2{5On-rt!+1GS73V$=%DwO5M~AjTP6kp2LARI zCI$xnmUt!xhUOm{{4LC2hBbf73PuJ7TSm~fnHJE(6k7%cMurj@ThOc%f9pFI28M1Q z(B8J=prh%{UfTWt|KIW3Q6~OYPVfbd$6c&{6-!L`evrY1g`rdgw80H@-)b?dV>jRH zm*ATYJd!^^_E&>WvGF$nMWP?ai(OWriC)m+1^$+~pq65=f=9Qr2KYEe@cz>SybL8g zK9&XG>Er@|BG@+RQ^oN8r+qri46xwrhMeRW3TY33_D?Z!;Lwk{|I`n(-T~Bc?DYe6 z(bpL>GQ5yQI1apm#G|`R0D2OO2l$}95|s#0DopdAAqy}U`@j0`X4>N7A*cv%QKdgR+tM*h~d ztPBkML0hFgdQBC*L3QueFlb?ptJ29`FB0#<8QKo8Yu!d@|HQ0U-p7BA=EDybwGV)h#&YNM)HA- zys5{)@Ny#y1B2tYqYC`3uUHru_JeavuPI30rMLXqOGah}23^pEbxD2m3r5K1nC2I3 z{4K9ROQL=-^0z`xIotJ=i@#|Fcsk|Giv}}D_?~&;hU_LyBsbaWfa(+0GH=kmPy2XO zKtneQuz&{L_Uh5gn+S5G3CNK=AV>0p?QntGAp^JLkr|S|kLrR7M@Ssr)CSuT1lqwi z3lwbJ{7tMNPcm?TBuqWM85tb+fvTC8QcMgCwo4fp82Q`V!5K@Bk%2*XA}C+BfO4Ad z?*H)&C27qs_)6kzJsBDp_*+{+XSDL~ddkb+v;n;I@XU)2Q<%T~klkd6upnI7-dU>Ng85v$|(_vtE2^vfT1s@N86X@o`{S2V(B)z6iUZCLPWnf@<3ED3J zQo+IBv;@55>CB576IfU{A-hBs$t9Lxmq5}bCnR06fh=_dSt`lIz@W>*!r;K)vJjNi zUfA%r%m78o0clXF2s*9Cmh*u=Lx~5--+XY}u7KOR&>X!Tw1xzl3r=f-{0*_~Iq003 zUfvHN+b(M}FuVk9;BfqQl!L$Z2_pl;en=3Q&Tt1c0?PmRcK-ocveFplrF>*df{-jp zLs;Sn+97=IMTs^j9%@u98fsL`82DQpK^Jauzkg{7O+K9bO`s))ps0@8588?B(Hok;ULbVHY*r-P@ z?-I~Vlsd>RhYmYX1^53Ts3r$j&_19eOj>8?;i&S{VC*Z)QLs4y~kFyC-(d0XlYns02dW+-t24O;a&f_6=VmJl2OFCoxv_*q|~ z;n6D^2GRXrbSFfsN3Wgh%&>9Yp?i1jCDd^4$(7<+yD(HT*_a55c zOV{-JG5!~QtPE;@fI5efAo&oGe6Q$EP^RlX{a;iD;u1u7I9M3-xBdr@Cqn|pqZ<-r zKHZQ20*%yyde5MEUd93*sRczCbdg!~;TMYk85quh;uCze6KG>AXrF6piV7y;T27yudxa*P9yBSar|ZT(hp$2a+(N3ZA#4MqmgW<6i# zAK+sQ{~vsz3+gz5$1_V%_jl?jgT}JD*+K5{>;|nSg^r)X*ONwq_qj!a+h?Fv64njh?!~b-TDujo{uQ(~8tFcgDs|BK zC)~!;sh-{L0?_+N@?BfrmRNxXwPTb))3e}1WXnK_C7B<5SMR}xtRBq%9LE_o7#JEn zIwLteIvoW(jyryHk2Sbs%`o_n#5 zhmpbY|FM^kz_-AI`Zq}Xr9p!r3Xn+v@JV%*3ZQ91$L??Z+g^eDzo5IpK|?fNJfM&S z1w4Pta?qHMJZOmk14FmCWA{1G^3m2yC1s%X!VI8l8R!1p;MS8B{++yhil9}k=a7fj z5$$j2{3h15t*G-+DCuLHDI>#+#oTab!p?u;Z?OT*y+O7SK2-(n#{xC_S`UrsZJgfjYC5OKiw6D(tJzZKOrAwdALW%$E$Cx4WmEiTvwIGuPbYYnlv7T83>;aUR zN19{68s~WCRK!5mtOP|TxD0}jf3cBs0=+R3y&{b+D zD|ui3{rCUBjRJp*DQLR8*PHR>pFjV>_X~qZ58xLPcGswQKuSrp;p{UGp^hPr;U0}| z!0U>-S+B^#E8h*E_Tx^_(m6&K{%yZ}x*wLv?}e_e_-n+-(0$dTmzPJ0k>Lfq0t3TK z5kc6Ed*BXVav%q2<-`wg<-13P1C*w_D+N55uls<`jsfjTGky!2O$Mz;N;~fUkAW-g zI1?{}OJ}BnhxM-#MM(VsIj4R_T`6b7&j$WhagcHUk9%1EDt!uSgYiZ}uJYw?Ed|}U z)_vv$cNk1087$(WA^@tlVe5}PdPQ47RbTgs7wR0Kya!pj<^t-yfX2@pyIoWiS`YAd zfEtFKtfI1@^n28?J48jnx7$TU15`I$Dp7)N=n(L*tOPHhs}$gG0xektRaE~$6W8~^ z^U0tQdj4&o8F6<;#NqlCpvdYz|6+m$D7}FOpu;r54M>k(Q5ywNC-}5SZ;uLSIrR%4 zIR=KkOrT@hdRxFE;7~uN3_3z41~j7CEyuv{vVtFM(q2uFh$Yn}P$MuSQ{$8H}L(4Fc2oxE+*py;^j3W_A(ZXZx|fEP5nLgRx6 zX@M8Yt_qdbOBD+6NnE7GUESAT$U`hDoet_u8-Uk6g2rh)y4gG-%d9;AA8@nKVJQ9X z(d(k(;J6b!Y~Bf49n=dtCa~8<#ljQR7zOE9c;RITNr0sppfwQ|pv&7_z|C#Yl{Hpi zg)hWpplVz^lU-Dx7uvh1XdDNfJ<0*QM&740L&EXDi;BX_XP~OK8G68jSE4K)D2*`0#(n4a!qzUc4!Vn9SdL2PzU34HG#97V%L5 zop;b9%FOU$DKk9xw1Cbb1m8y!qM`ska=}MM1GKLabk^W^Mpz>SzC?x}UeY{z2|9TN zRAj9MUBtnfBms(}v&cmjXm_Uyq&x+kR|mQ($iou8eg?8y`k?ixqDSCD3$$PoRHJ@W z1{W&bH(qR4ft4e3rJ>~rw0K%8$-uA|G{WlB%ezyAnE|v622xIW^ztrH1f5SH$-waP z0vBlSX2k;NZW!ciK|Oj!8$_5HUd&{Ihehjma7h9QsM9)(3@>UBk}YiD1Pm+B!QMm; zuhR?+3QINVaMnn*?{D+(b+mirGT{)bP z6!^*oCKAQTz_5uCR84OC0uyuNWMDA91QHAS1QRm?>x@wm@POYoYy966v=$J&#sgG+ z!soj@dPOTigAU!NUp!|3&9Q-&1n{?jc4C9u-{AP@J`TF#3Y>gFLo=}G@Uip+k8yhn z6d@;HP$v%*9iT$DlXbBuGeh@zura=n3Kx`m3&PXz(xBldCx1KWJX+7*NamN~ z;O14uN@!g8b^9;~c>X`>+3N`!IIq-XWO(uFKd5U4_IxV`I4)v94GqwFT%{7AXgdAk z_eAZC45YgvNvcN-?KN8$#Dm$VdZ0e+K1o$ zIDdQ5zyJS1XN{eFQS+aH;bk(YA~?X`F&|tA#DenTX|QETp{M{}KL_rwP!x`g_`~ro z=sbzuNT!$XL2f#UD;#~r85v$I`iBU|2jFaf=7ok4EM?AMgQV$e7BG=Es7MOv@M3Ty zqXaBc0}6f6s+eBUhYFzZKmWr0A1FIQmR87sL*Ipg!4=e)aOpnm+Z_UGJ)8n9cxZV9 z?jV9%x}c(ifd#x85x!H`3=|j8RSXYaZUe1p|L@rw$>?K!+NJwAsO!q#&I*r=_kS4} zUVi%v+QoN(zXP;z!?XKP_v!Bp49pB*bK&Q(#6Z$7=q}-hpd(qT`L}sN)2{_a`c>oK z=EaLY*f)cQ&w8u)UjBdt`)X+N1>Hm~0A4-e1xmh$iVgTJ82IBYsFo8N#@Hj<2Bje6X&}moTlVCt* z;)<>awCE~FM3)IhbSYtrE|mMS%RG9$_+H9FN}Bc9qe@&3bgTPsxX)Yp{)4uHf=*}c z6+I=&$l%HBqayI)g*3QFTw(=oKY$y{l^US_xJR$(5>ZBm7snwAN*}!z_k@LZjNprx z?u?)vLWTmMjf$e5#6a2R#EVy;X^PeZCEC#P9AX~m2=4zLy`pEtK;}V|lsC}$bB#P!0u}SotWd% zEBa9s6ac4R`~-ETS`U;cfhs5YGeh@jrBCAmwZy=*|RisVWEF&jBe5Hh`4;`~gpf zEnmSI5L{kj&3~XQMm=rhrDy zbKWw5E_wrvwm8N+#-Q9S1ez29jdx;Gyf+0wq8(0vbLLmxMJp|MJ6| zn+h)k_&~zY^=pbCr}gr>2rx3d2G)F8Z?{SIY$N5 z!SU!^1GX15QUIEiG5+S!xd(jarbl8zV+mThzg|KS&*eV|Tbh_c70Ie{k#cBT8ohKEjXOIt7jDfLf=Zvk*F2S-C;S zK!ObM?RM9IoVud~ZJP>sSVn+rx(EUOCQwZRNr2X;itc%UPR{{N=0J--BOykH7lvZs zVw=CE2JAeL4p5KXUjdXIK;86C-f3K*Qy*Qs-4%Sh{WUzhL4zIqEk2;LxIyz0JfLij z*ue?9!vU1HAiLV`zElAf7$+;5;0YXM{5g#u6ihr^ph6EkPTmS?e>v^|r|sSr6;LGoUz(FO)EIvM zvo8F8zZ|u1cs9Rd^Jsp{)_S{srf2eT(9$6V(9Dkq|Mn>^AS=^aFY)(*c2>D`$EYZ{ zcFqSKj_cZbyEMhM`_Ai()=L$tNJBmx&>C?YCvBa`8{$KHvb zq0>dCz{C08@HQ);rctHoKf`^~sqXc%~)C@VG%(43-sMJ0CI>m7} zXz`BmTbIrl6$KFC;Mlny6b&y$Kn+e`Deyh1gC4+&# z71WM|nFzK797>?+BycEkfI^80#gJ^6As378ysQIVl5weGlSlF;kN<~2tC~HTFLg6{ zbbAR{I)VM|W#9oniW}121)mEAnpp|4yMFHq^5Repz?bq!hAOPClrQvG*mA^+CG}dnY%$48&nPazq1tb~Os6<$wD2?b{ z30lGI6hDY}a&+hO7&w~$GUT}Y8U~p`%uV5(Q z^6d66_%9m50@`K?QWT>S;Mkd8Vf@y!v%G*`z(pm(Bl(19w|jvH^GSX|mJ^Qu-80fA z@NaWx^!R_=hPOo2hO6|W4Q~mr4Hti_@8AFb`9b6F2zl^z<{s8HDjNJvYJWkqj-Y*t z-7e6bBrcsPGCAEbDk}dEd;UMr8Ka^C^05IZD>Q8fO@dtYZ9PyY?a_S}G(ecqY{66# z^ZyX&)}rPEJf7AkYTkAqeF<861{$T+0GA*>aKl07zTN`5WT;04)P;L-l^4`aJ>b#H zdz+JyVV4tVoL!Kefnf)T^%As64ph?g@;JD3hxFt)b{}%oK0Nb#jf#UyuM?=0sBrg8 zZU^NH7yj)%;Bo|-9v%N5c5HkME^N3Q|DSejKK%zI)P2G;`EZ(xB~-2JDaYm)jNKP2 zFSux5g61&CZvTv4=l?F9Au1|9$)Fk84z2(H|9khcr1spj8+IkY$n*m1aI|# z8e^WF)dC*9kqW+@#S+HfCU}51N-%ps7BqM;pK!GPP%P06x#gYp+aZ=xJ8%_!%+dNo z(F@}PAm@Nu$RKC`05#K*T4W9&XLZj};Q%$=8jpZ{5qG%tTg6GAwW^Diz*J3=z)6yc(2KXU84iOz@t~R1{A3L0-#h58ZkkfzYE&y13Lej z3AC@NTiB=DnFG@7fvz`TU;yu)^8p_<4!$f1zJ3+FKH_ABI<)=a*Bt^HMmyyRId7W_ zWaC_Zn2n`V9UH8w`CCDoC(-uIfzH!^k`JC~z6zSF=>?AuyhsG~!oZ_zCGZ`7sf?gy z5iZ?S+LDyU#>nvECm#a?Xe&VLfzlZ+-OR?9e7e0kpa<-_fC9P!e7>#+czp=`Rs@gc z1JI*1?!1<3y;LFPll%!3X}-)K9UJXHhnWJW(FB{9|KWdD0S0D< z!~a?T{$~PFpCFVlM34hQ?S%-wgHZ25RN92u!i)@4gc%tMg&7$tgc%vKgc%v?g&7&z zgc%t?4qGS;s^vHsnV4BvSXeliSy@?G+1NN>03^u50^?z$*+D*m;Fr-{C`;-+{;U4{ zha~cn@f8y9%o&ef)}Q~F7~s?Bpi5oBb*+R?r;mz4a2RM)n1M(4FOOdEZCp2BoC0-J zjZcDFdI~!34Hn@=+S7tIIT!|!nzw2>a- z5l}0I1Kkpj#y19_GOU}m^e+=^Cl+Y;IA{~^4p&tJ;|ePU22fJe0MFrp?!x^6s$v(t z01XF%W=Q{^fV7VqK$pn$Ixv=g1D#>wz`(zaN4SGW0DOJy$XI6g+x)PcSeu>;kPCd2tWy${z5}c2LEz?=HAv0688SOIZB}jwl20 z)*4VSM*J5|1rJxA_%HegJbG8760j50Ed4L)1D3e)VhgATfte~)|1dB>RVsm1p7<}i z6J!J|r8oqG7uI#(1ltBP|HOaM$-m(`Uw}09@_zi!!~ot}c)Ntz1GMI^0-@w6ND1gP zk|PSy9{*Lte!~(uR{w$G4>W(@&ARnBBL2W4H$8TQs~Q+*VvoN^&q$0vpWYr74<-gk zbU@<=5*;r%~Fw#&!o1Z%hmf(0Bu9F6jPE z4p7=g+D~ra*?rTax9GnoXyfL`7m|Pe{|EK6G<>?xgAQ4Q!*+re z_O>42_x#|Ie9Wb{FY*8X|7lL0JO-ftLf;++@OB$E&+cnBN+tX)2TJn!w>dF-{6A!) zRQj>OilHRlqx%rFJ;=Y!gVE#vfrg(-C2TDxOFz7J_GmuD?_qtR*sA-4YxhO%Q;yar zUHJVjdUT)gO+MtQed4&|Up+lN2Dp9!PFO5eF^gC;rZEcpdk!(|v5 z9Qg&?Kr?OKtdSsIXB%kNn14H~zYOSTg3h*$ps~GetWF@wjyCX|LU)Xc18B9S2dJqG zT5W0I7zZl=9fHFgL5(9&UE$HqI`t=7`nctI43q>!e@HVj_;!EzFDm^L6jh)eMoFSi z_W{s252(ks3p|ttT1D|+^aE(rt@S_&s6Py9dxAt?R6YUe1FhC6^#H{RND!>)zvuyo z`qIlD-RJ&`t^)D8_o#qO^#mQV_aPHVdybBpzyX~2CeU4{^7CfKl8u; z|Jz~v;lS&U=G#b?34><|^~*v1vQtH@9{-QOehluc^u{yVD3pjn!{0`;gqwexGiXn{ zjY8>1u!|&qFfeG}2NlrCw>`Vh`E(!tFWU2ifx+n*i!sB?fdBBr*ud$tL`4C#9?Joo zy;xm-zylN##J@axMORCKhHfr?2ZabIBum*mdfooN&H#l==Ny#;PzHj9r@?>G1t5j+ z@VpKxBMn|?f*Y5hfuGVqkiK3Y6$5B^7C_WP!!ruRgDivrwV^?VgO&n=U1NOa#q1j( zS8M?Xw@2dVOpSR9Wr#5?kDb71uRf1u?+35$(h=?%~B1K=bK%IF-RI$NRpmrM5{k6uwP zNzjPc%@>z`{Qr-cKyLW-di-zw@5AqT!ehtkRS@9W>-pc~`$PV1%pMnCc`#q@U;<6I z{Xe|}v{DFEXEwiJEag7NqyrgT`+tgm8+Qj6M2%yv zdl2kCaCrrGB>y%hNIRhAKuL)QXut$KMeosl-GaSTlwY2~MxjIqn*KcgAF^O7dAH(z zsVx6CF38*=DD@sILYauN_vjT}1fJ+S{a^I#R|e2>caL7tewffFh!Foa=9UAc)3BW* z09uy>I>G>cz603h5CZD{9MJh4B`Ojgoi!@Z^}8^yylgqZ-vT<$%Mp_j-}a;XvPbvF7aQ(@JzXM)6u+QpHHQw1?#nMGL1atcf^z}*)DSEQ%A@%WXp@EO zF9wGHqW+&D1`0M<@Rss4R4{UZjPu}k0kwHG!1){GevkhrU5!CG-z;r{4Q~m*4Hu}4 zcKq-0|D+9X=|`}V?u!r}PlFX#DLYu`|4Bzsc~N=>*^40ikGZH=#CZHa*%6{*dCWz{ z3VHt9qxm2csL-{}&AdOO(E9ux9Y+{#+vK@&B-IuiJmn zipt(l#{Z)KK7tC~(p{hw$^=Uf-PqDF$Za4DZ*Tq=efbfbF_2Sd^AQE??JHP*ha8j< z<_Ipl8mt&Rx?lNpKjd$j0BU7`#``>aMODEqg0ufc13rTM=*!^QeaEN!#edNbF#iYG z%QYXtUKT_3ZyHz>&A+Y)|MEfnyBD<0-`uaD0_fY{WdwKz;3>3*o7?gG4rF7#P z2XKdob>DlaXIsDrf%$ZQGX4fi6WuyA?wdV)@``~+%TfI48X^25QR5PY&_ z>9=my4$#7=UeQhoMutvC{%x!^5}=bhS-@KUi!!|jWfyP*PtLcS&8L?)LV}T@H$cUs zmsd=Jk>SO{kN^Mox~sen^X&E$@aaAeT3#N&$iT1*G#cQU9LE7}Sp5ctpY>r-Qw1bh zA`3B#M}m=IpDJj8t(W(OI3q*%wHJXO!9y+oMJwJhFhClLppG6W6px*U%!Puy@7Z0f z;MrXbI?Dt3d?rXBfmY8$wy*WBQBmmq|9{7WVg`m6YUde1=jHNiZc({V4DuFh%{yoa zwjL+~H;9`-)oQ1YiiSroD?6y7=?q-~>iimb^zv$h1B&&4I3ok7KNbKIx8T?K=+Vo% z11eSk5_2%V?a|A+6D;IA0VLw#(aU>Mnvubym-Q1^IP?HWIKrcsH3?*Br;ADg=zKpY zJHw-w72MwGbWy4B=w;mpYWsA$HhA>1DuWK=>U8b!=w+P&Vb1XAWqk-?F7W7OeFR}{ z@aScI4`J@`=w~lW#t69qto?*M=z@zg!#gwm(?4>{NT~c+5lk+c=WO!g)k*N zdRZ?)mY3h(aU-g!UGjW9-Y27JUT-kcy#*y@aPO>@aPQX@aXi_@aPOR@aXjQ z@aPN;@aPN$1=nJ*uBo6y$~-z-!6V4MtnAIxUe*N=9%xkBqnC9Nga@9$?qyv9 z;ekh}ds&x3c%Xr2k6zXl5FTjBq(?97DhLlW#_Z9{x(31nPnP$xu7mJEBf=iNtQ#Oa z@Mw20>m~>fw6M^lmvsw-2O3QQ#V>>h9&m<*Q!99QxtH}6L=JoyTQBPw2u}i(|9e?M z>t#GTTS1*|k6zXb5IN8>fS~w-@W5FIt`C%PJbGELLF7Q=EgrqB4em-QBecLSpD379wa0f^Vx`T|7tn(~8ID)zEIfXH=#dVHO&AHZ_9+7P)r zV7aX`AaXyz}&;(we<2Hl<0U#y4tluHL2ndf+4pe-$f;+6etlSVDXjH(XmsJ$P zD}bn!hwv&OJWU9%0m3te@FqZbXCb^55Z-qPZv%v92@2iL)&~%tFvt&`tsI~gkG-t6 z5S{{rmk!}+FoO=uSPEJg>e0DX03_GBR{|_J*8s%pWi3?%MdMTp5U;Z}0z~zi-T-Ou zWt|9?>vaGLcD91P7C_`afaO?uKpJ{kL3^rvI+s>JLauQ%U(;4z$|IGxOId=s_P61?XFDodWd33gFKzPp}3B>@y6M#gc1%zh> z;WFfn{|9v`J4}e`Z z6?F5KM`!O1P(XIBeE_DGz5r8uBf$E$W`GRq+*$#q_BMb8=gt6AQx|}#UeMtoKAo)_ zz)GfqMjSkPS*L+*?>zw)Y&`%{*=x(F3JxC7e34J*)&~%|7hpM4Rft?1=;-;*wHF|A z44_pgy{0E2a!p{lr8gjQ9AG)yw-C8!YM|t{_X9-Ef)x~vvVx#X1A1AR`r{mz|R1we*%wkCk(cq2iE^|D?9De2rR0g~$#Wl;y2GFJi2<23{GrfPtB ztSi90UIP%Xv$X<5^|D?D8{OIf;jwCf%YqFMUOpuHFF<&j5V;!=UNnUF0mAEr@P0se z`yo6HHc$(W6_l<$I$J#;yvGnZ@JR^0tfHD=`ywE6?wTOSw>p4K>742Trg{TFzU|zb z0j9PVfCaa9fT_I`z=CsUfT^jVQ*?Yfdsl#YtvkR;wFx8p>qIy|xK)jLx;c-E{QUKxEKzJ1p zULJ(k0O2iw@H!y8OAy`!2#*D{X{56iw4mRkm(>iyTL6*Efbdp8c(Wk94G`WL2yX|3 zw+-A1Y&`(seSpZFfbb51+qA70AiOsa-VF%vA4KH?2u}la2tsG;3kWX@+~#fl0O3u6 z@P0sekoIsZ=x#}mUe*^7IS$ZyTD`17;FfNy0EEW_F;fDX2H@Ic3Ifcgj!l^GB@XgjL_!h^P# zDj+;RNJeOY@ERbz4hYW(V&()057K^Voxu)DQfn80sii9*atdHS^eS+G7Ok~{4)OBn z<>dwm_Oj||gOdK<10a>1tvf*adUdCRjP7L(0LyJX0g<}^mQ&pgk^2IoI=4Q6$Qf{e zN)%gp@QFaIH$X;r?tKA~vjEGPIz!|@{STkcxgQ{M4j?D>nm&ifJpkJ`^#?@G11x9D z4L)6ol?8N~PiHS^HIzqZYXI0xS$&9HhBU|ztpXqoovjgIIniK<9B6fwN9R-th+G0# zj<*~lw*ee~y&4d?46q#QZHU|zh};5*Tmgvc75xv91I?BAbgsPtac2csj#n9c*cIy> zupgFkfCM{R8$eVqt2-pZJ0QGD2yX&}w;IBm0pZOB2W#sJ2+tpME=gzW0SK=V!aD)s zeFlYDXX_6L&lZxMBsf9Qzjp)3E1g?+faE&2UI0^jZ-52oJ^)iwUx2CJ4`8a5ffJN8 zrgDI(UI7r*%Q_L{+s@t&5U;aU0YvrkUIF!5ds(;Yfr5Om21u~8)dFN~udM^9_U&c8 z36|Sx0FiS5%bBJ?}9nC%k@qG33j%g08zcHDPY0Y3lQEk2=4}jcLKtD z0O9=t2W#sK2u}x`S6V+ncySQk4+sxhE-`@4ckE?l0tZj40EA}(;b}m4X%LZEKzK7CJP!zO6~xQ{2=5O>E&{^SgJk;z2rmJ`%Yg8p;ZgwMZFvOB;jI-A z-ZY4r4G`W92(JUelL8%O+Sxh*!i$0MWTQ5L(IS}3r2yY#P_W;8C0O7rW@Qgrby>_;KfbeV} zDdY!)ckCh9w+x_lRlTeM5S1Jdo)zdYs?Jsc2rmV~lYsEzASx9gyd4lZ4G8ZMgl7QZ z@d$#`paq0y2H`nCcnJ`m2ZYxJ;RQf=TOhm$2=5+*mjK~$Kypq7ga_J#;L+Jy0O7?z zGc+hb90O8Gn_~-|OH;oS* zx(vMF{C5DtchD3h=gcl3pML>A%5MBa=w-Lh2fbfhV&MkoO_Cg}O0>XO_ z;Wa>bo)DEC5S}rl@R$JMwL+qQ286dA!dn30f!5M{bhfU5@T4J8yaB@Vh46Mjc=8Z4 z4?uVuA#x`myvGpU1qe?R62&(lJZQK)fbbqdvhNEBPZ;8A2GAnRUe>=58#o}md`N+0 z0pZPrgl+_cCk@e;0O9#Ucoh)dc1VTUzz3?9w*CNF)VUS3TgszzuLM|dt^$~vssW~Y z4Zu{Z14w)4R1YxK8vqvEn*pY_7Jvn}c7Ui})~R3{_D%rtI$Jk@s9x3|kaTtd!utjB z<_!o>2jajF5S|#co`&!|AUqAwde>goO%PK&AUqR@z5obsA86B4XKMt6_X5I8fbg6k zDl;HF6;OMrv$X)iO9P#j)!7O@My8i_0)*E9k=q5~bwGGeAiN0>9v?3_Bg}yCI3Q*& zfbfzaaw{Ob9tdv(gtraC+X3M{fbb4Lc$XmIastA81M%$z2u}_Y#Wx^4XgU7?!gGSy z{sO|=0#W$^!g~hc{ebW!AQ=dBrUqzS7{cQK?HTQ5t%2|aKr5j;=gt7f?bHQes&@sL zYTW^fmCmULz*O%Eu;AVYU~20Nu;5k(kVTz)IY6tMJLd|3si_iRs#gI_wHknxOtk=0 zy$&F%mvtX_=xS>K$Ss|%5+FzPnjQoNc`s{{0H`EtodJHy)%LxMa4!V84(4nTOx5Z(z0uN1<&0O9pRcn=`F zg%I8g2yZup_W{B?3*r5M@a{u+41!?Ce}wQjAUtMBGL?YvWFb5a2u~ftGl1|cAv_BR zFB-ygfbeP|JP!zOJ%kqk;q8R*A|SlO5MBm^cNW4cfbgzEcoh)dLkO<{!g~$jbwGGu zA-o9?9_TD`pU$-jAm4Uw%>Yw-3qUc}Iky5#O>F>Ey&Yg`=>)KnsSChV?+UQs)(v2) zbq9pH0igs0L1k8}0)$Ec+1J@R14Q+TUic3V&zVNxgu)>NZlf#!sq7UMF#`|&O@+uM zK;%|{^|8)?IDP|!w+O=90pYEI@D4zD+aSCX5Z(a@?*fE(3c|Yq;a!379zb~aAiNh4 z-U|rt1BCYp!utW?{ekcpKo0C>WrMUX1Ry*C2u}jSlY;ORAUqWaPXodOpVQyjY5?I` zK;$eSJSPax0mAcv@H`;AFbFRI!b^bgA|Sjh2(JRd%YpD3AiO>ZuLHtc0O8Gm@D4$E z3n08F5Z($1?;nJ>0m4%N9U0!)dH}+6g78j2crFm$1qd$;!utT>9RTyDW(a|kMgfGH z0HJn3s2gBv>H{#<`U0e{v-Jmv>gClm1t*P7CXi$!3{Ex-AgY%&79`i%Dgoimhwv02 zyoV5;285>!N?@I>1`u8S^cxxfN2@u|K2yX_2_YlHc0O37`@K!*0tQKI~H$Zsm5FY3t1CL%-PYCY- zL@pb`I|1R9LU=DAyyFnw2MF&Yg!co&lePrgzyR8C+RN$+;c-BC`4FA}gf|nylYsCJ zLwE`h-dhMy1Hu!x0-I?7;W!rKAiO@QzYKzN5Byb}=K7YOeH zgr^3&tg5s1280&@;XQ!xx*)t45Z)dL?*oMQ4#N8Z;Yon59P4al5Cs>%P7odkgjWLL z2|#$uAUp{O?*@dY0O4`jgTqV%!n1+!3?RHb2+sn-TL9rXKzNrRJP!zu#Q|(e0EA}- z;YC1r84z9qga^70&!e+71HwB4kt=}k{y}&Z5T1b}*vtk9FA2iyfbgb3coQJJV-Vg9 z2=9j@xJ2myg;Hnh0*Iip6WFj75MC&Rw*kUyhwyelcpD+S0}$S02=4@hCknbRq_gz` zgy#<7J%I35LU=DAJZ{j%A)T!sAiP=#j{&sxzL)hpgvSBlDY}APCII0TLwFJp-cblo z0m2h^1FO`4@G>Dh0|;+5gl7Tay@l``AUu6{us#n6uMolufbcd$co7iZR|qcw!ZY^( z>&t-fDj~cA2yZupR{`Puh4306JbO>Dz77a)B7`>q!g~zi&4BPsL067+wl0A1+9A9Z z5Z+A)Zv%v-7AUsDOu*wS%-f9T%0fe^|!h0bGE_7~)f~g-6 z>IOvc14QLzu*#_d;^1oO2Uw67bl-|cFY9%PoCQRV0YvqR-U3~~)606=2b}mMK!TmE z93ZNf^&VJ5s{(}g1H#jQ@P0vf1`wVI=(d>7Ru2eI4Z;h6@G2m@1PHGR!png0mOyv~ z5FYr>naDG8-(Wp;cI`wP-~lkN z_X31^0ihTm8Z;nO0E9|_n7PLv9Q_p_UT13ti0ZWs2VFGZ%eny~w*n;C*;)XidU+Q^ zc7OysTN^-T_Of0N1ha~L-b{Q1G`f}5}ZsYfc44dL*#aV z_3br)$jt!D@g9cA-2ux@b%4k%0L$qfhsb>Z%k_Fd*+Y0gAiP2dj{#(DFKab~#{uC@h42I*yyXy{ z1cY}H!qb58m_cFI*=hmd)k1g?5Z-hMF9E_^2;pTwc&{P61_Vpy@Ejn#JP6MN!n*IZ}p z0Gqj11421~s9xS}CqdbMY6isi3Blk*)B)mkwg!Ne*ggi|WzX6JmfQOPA{POodQG>3 zE=KQVh3MNVAOkY2H36)T^*3l)bT3q2uLMM{0IZL-AL7jl2yZ5Y*8t&dhVUjpczYqd z84%ui2yX#|_YlHc0pWdy@HRkrvLWEoW(S1V4&i~WlJV$eT?yfxfXJPO@Gd}jcOkqR z5FR_o@13pSbLx6oBO$yG5V>p!?+1jJ3*j+IK#nyUjX3=LwGA7yjlov1BlnT zRYL}pzUDrn5fCZ?LN!3B86bVVtnuNXgwnbL#OrK50it?E)=Lm4J%I53KzJ`8Jhce0S3W>^0T3R8 zEZCwZ2#*88TLR$;KzPR>JP8Qz1%#&n;R!{8&9s22rmZ0 z+X3N~L3jrsyaovG1cX-w;a!06S|Gd^5FT3$*!B+)o&?>{b7}yDR{^0WfT^W7z*O%82n9N^-J^3V2gsDpRs|5%%i9Ptx|j76 z*k!#QAi>U74G`7K`V}nLY5?J}gH(35IzV`t5MBU;w-~~UfbiBrcm)vNeh9At!n+9J zbwGHZA-o+Bo@*>PKn_57?GWAt2=63>cLT!HjsvTF0O6%Vcpo6VehBXegm)6cm;s!ZU~PG$6d25S{^qmz@As=>Xxah44Heyyp;J0))qy2v(T^;aNj? z4G>-|gx3M#)kAm_AiS9n-V6wDHJI0%0QLi~?i+AfzCa!v;h=-{eLAOR$bopR6%c9y znChJYp%#Gjb@r}+@HRlG6A?6*LnjYw*y4=vL=A!I$IAwcv%qM2?(zQ!utT>9fR;V z6u?pS0m2i2@T8K!!72gaxj=Xd5MCaHrvc&3fbc9Jyi*XK1BCYn!t;Re^pe4520(ZT z5MBg?HwnVafbfn$cm)vNHwdo+!qZ3ro6-Q`ML~ES5MB?2Hv_`k2jMM%@IF9zD*s1G3f zI$I?mh6$&G9jF1}*+O^*5MDZjX93~Ogzy|7yu%Ql2ZZ+)!i#|L1Uc|&+JAiP=#Zvlk29>QAz;XQ=#c0hQ-SzuER zKzObY-U$e=9KyQ*;jM)5Za{dqA-oq59&a|-ln)S|J%slI!YhRE7(l1Q_p&aA@Him6 zs}P<9gvXu(Hbnu#vxM+8AiQh{&j7-k3*k9Hc;_KJ4+xJj7i>xZgl7!lML>9|5MBa= zHyy$&fbb4NcojT1BBWDp&mde0ft1xM9vSw zy8+=-h zgtrO8Yk=^cKzI`%Jh5W1DKj8E4+w7ogjWUOt$^^>KzJJI)2+s<_ zy8z*(KzKKl!Kvp2Bx(GBP#O@y2nf{yp+NU@d-RH`l!DCceE~5=uLPWk9)NhAtsg*C zFRvy@NiQqNKA+BB1{H7(`vWXzJGTtnRks7%K2-xE$DsmRJuLeZA_vmv(K*!uA}0Wr z6J-S-E5w=x(dPk?lK@e@tc_s7Rs{%eGK6OU;&rwNryLv)0U%R4r)GetUeU>*IYcgTn3QJ z&Z!&_N&`Y!fDG%L>Hy~TdVqPo31D7p28h?o>Ibr@msNciC{1kbfXEeqs9x4b5dT#` zcz+jDtf%PI&mth03ogr^MQ-GJ~?A-o3=-f{@<1%$T|!utW? zJ%;ck)WFqsFT^4R2=6&W&H%zIgvePyc)uZX4iKI!D1COedO&#Q5MBd>=Lz90fbhB@ zybTcEQ3&q>h}YTr0z~z)9smn&4FK~@f9(MKT|pg`Q(Gs1T-~{M1(=$;0YV)Bg>L8E z6A<172=xI%F{pv`P2~U?*4Zln=JjfTsn!Uv;MN2Pl>w&q7J#X#6%eWeta9!I2yX_2 zS^=SUfaRth0P}iJfT^uFz=FLGAiNJ?Uh5ACk3k*em8~3LYOes8nkoUIG{F9wYXIR{ zfT&*9Yv4eh>H*?)wmN{QUe4;l{<5S}eK=vosXynG0+0K!`d;Z;C*k0HDU z2v4>Wl$}~TAUy9|Aa}MdfbbF_ayuZrYzXfHgx3n;J%I4$LwGMByp0gv2MF&qg!co& z6RiT<$DsjEb;lty^#TyyN{E~UgqI9DVy&}P0m9o0ku!ksd?z3K2M~IRcAi2)g6(FjY zl|cyX_#F`5FR+HG86b~!PMrXvdPRA`q1(Fw%;OaY`+e&H5U+FV4G5(H)^5rT*4}ym z#Os_o1Dpz`t^iZLC%`Iu8NhN|Ei^zWxzz*A+nWI9&20elrY->UrfvZ7dRdQe1%*Vf zfF_7)JpmESf>?9|!dn7X()s|xtAohBfbbSTcpo6VDu~J-5Z)Sy90SPcURG#$azJn0pYEI$OS-n?;yMc2=Bobu>UGR zyw27J5Y@}te;q710m8cq(J%wTD~8A|0P#9oH-M;K)>{xIJ0QFOh>`;k9$yXEM<*aW z6Nuae2=5nU&E5kDj|HOg1%&4YaoGn5j{_pd0J<2mmsJZQ#{uEVK;#4Wbe ztL(J^nbO%C0it?&wINg31|TJ!trl9KG|_tj6gi!}8K7&bJ6j7tDm(XffO&IQfT^iB zz*O%Kuw1VKSYN9K*p$5vAgY%&SetFQBnZm@j;YSfOws)9U!Wg^(Z{U z4nTP75V;c&o+pHN0m8csQTYPI>umi1qIy}Iu7b5QfUf=QW%Yn);DGSbAaVjAUT3QU zi0Wnag(%U0@SGt^3_!fjRtFH(%gO}tN&tkH1JMux;rT%vkpSUkK;#M_JR^u)1%wAW zRNteswE@Cg22t4o;c-AzE&%a5TUUUnUe?tRB?ln9qhQ|N4Pc(_>?>ezJ^)=p-#Iq{ z-VCr{?*uTfbq1KXcL#(z z0T!Hl0m8ch;`Pc#ZUosr^#e$-m-R7t9p~N`AYNxH2k0)*UeRlyoYTu14{`Mmh@1de zjx`A^*s1~HLBquY!h?p31B7<~qA~%(^ScbPwzUDmI|7mGfbgb4X=c@IFC!2@u{N z2(LgFR8CA~&;e0%CBRg#0+^a>0CII_uLqdd8UUu|MnI?x2vq=~D!?lDPJmDwAk+o0 z+|mbNYVHdNB>}R%bE*f}+PMJ`Dg#1QfaH2vH(dw2r31w4Y;6Ehy}Sn@31yiLs0luI z1xT>7bpl9VuV`c=xbM_e1D1OMk(&XcdTp0NE-VF$kwH_?@0K&6}@P0seo)8{~9=L6j4dDqu zc%=}Y1cX-);VD3P3n4rW2yZonX8_^th43sOyz>yA1BCYw!t;ReK0|l`5FTp-*qsp& zo;ie<0pU49cm)uiH-uLK;nhNT9T47h2yX&}w-Cac0pV?i@D@OLMBW#ds$C|_4Rt_gLD4_kX$co z8)(~TFYEONaMG}V$h`n-;Pq+&C!5a@eFq?NAHe!}*+6Hy^|F44$i0Bb{eb8*Y6a{2 z4KXtTBF6xtdPSEtf#v>#^-T=`33j$}=z}_ws+%D8F*kzU(gBeZ08zcHe4u37*(w3y zX+U@i5S|l+rvc$Df$$6x<0@OYZR3G4!d7YE_}fbb4LcoLvH=6hL% zK;hEaY5?J-KzI?L``kO{ZU6;cXX^&3yo-T0elPr3_$|y&Pa_t^mlC&RzvD zuT=v~^;&?bxegFH4=}Ga0L1HM^=Sb|M*)b}*;)aT>y=#&+C$vSngEvT&49=?fT&*H zV$eF=Ue*$@Tr%@b*G@KOns85FUde zxFq@r;c-BC+-=~96M*n^Av_5P&mF?kfbbF_JOc=CHH7B?;r#_2B-YvL0paa`cL#{- zWz_{A-7)t9h}YSA07Uh&o`4v30>X=eIPeC9$I}50)(;S#9Yl`92pj<(5IF$|uL{Cb zfbgb3coq=eJ_yeN!qYGXn;8M&9fHVJKzI{C2jz9PHb8jiAaWfL-VF$E0ffiY2{vT~ zgl7Zc9f0uCAiN6@UIm1A1HyX*IzYFx^#z2Nvm6{9A0Rxaz8?@?2Sgu(G1#}CKu521 zwsJstEf6^Y2yYvNrvTw`bb(yf`v4qfyt`Dv(a2x~suAXDfT&*Cugk#JYCtroLo~bq zY3S^g04eF5YXEXY=T;98)oaQE-YqaU03w$Gp$b59ol_@(s9w>P;8RcL&H%~v%KipN zYVQuP9B(OPjx0k z%lZQB&8a^?a=oIjz`R}$uy)>RkY$dRfcCZrOSQ#OrL`0HS(%wLsg?dRad&23fTAhbf3^-2s*}y$2R-y#V5M zw%!0yy{wsFQ(7NDc=>0*8eTwnxe&Pz5Z-)<_8$;lB1Db>WJ51&F@(nf;i-a-*y?N* zfbbyhY?XlU4nn$68W5g0#7qMSZ!5$U3kdH%gy#U^{ex`>z1PTMCh@fbh;kcnuIKzR8O-T?@& z5yHCw;dw*Md;#HIT>!S>1BAC9qVflX_YuNlFb9`C(i6e9b3k~u$HDppAiREvDH0H# zB1EMIgy#(5SwMKX5S|BwHyy$YfbdR2co7iZV$gxNovj%V-dWIX1D&k}5S~2PzO50U zIO<$l0it?UcY*f_Z|wj%zO#1%i0bA23(kLAcYt}O`yruQVGfGvr7J*!oxLZ()Ycmy zQ#z+U0Q2@LK$IAO?Cb1x0Q06MfOx&EnP7KLy#V5MwoU+1y{uEff~_+kyt?_|;8_6S zZGgzFfbcFscsn3GkxAfSJptjlLG;~#@H`-L400lwk zR1c6~=hO-i)ho(94-~1r8!SNimNymBzUHt52ao#{P&;I912`I&c7V0_ZUFOI4?w6F zU}`D@$gs{{4Uj3Ftrid}11vbT0nD2^0m7RBruMD?Q&SIs<$51LcrU=br3@h3JEsbO zsa6RP)yw)C;&%-Qj~DEtRtE@A9m0!%@Ejq$3<$3o!kYl$$<76b?g9v}9U`{^!efNU zZGiB)A#yt)yrmG{0SNE<9Iz=TAiSTDgWWDbc)uaM8xY=Fh{^{bUT5nI5Y@|C05R+X zgl7kd@E;If2}F*;3LF7>5bYcgUIRo<0K!`Y;YmPvXCOQU2#;+lIB94=cp4B>3?Mus zh@1n2X9D4QKzM!-UI2tQ;SkuH5fI*^*!PfT90P#9o7l5ckbgr%Q^|H zq4flWcLBn?0O4JO@NPhO9@D^~`vAf_1>wDb@O-9&ZgqH>31weRbAiM|&Z{94h$_faNVK$i80O1uucpVU) z$Q-cT4hSy~(nLK0;r*Bij_C^!-Ykg98xYo!fCHGvI{|zoTdxO5UuSOynA%$aqIzv*z(<<&P5|?G)gXS5 zumMH*)D>Ve=l%dwOA|nbb8b&k({p0O3_bco!hNsSw@`2=6|G_X5KE3E_Q!@SNv^&1A3z2SF@^#{uCjhwvmI zyn_&)0))rC0Ibgd!c&FtEFipm2+sq;>xA$EAiT>EUIK*o7Q)Mb@XQy2&8&d%0wKHx z2yZroHvz)i3gOML1tpZZ6`*MBoZA8NQRmbdU~2CIuwd^7Ftzpsgn9s>en2Pzu=ceY z5Xu2UML?(m2-N|xZ|*`+(pb9y#OrKb0g~(Gl>jwgds$aP0>TS`@NPhOSrFa>2yY97_W{B?2jTsI@FW(4P2sQuN0kwTCjjBqKzIre-ZThL z1HyX%;aNaM2Vc+4010-sMu4bZ+shllSa9-3DyP(j}sDf6Ck{72yX#|_ZPxj0paB@2S>mT2#;|En0EleTMXfy zfbd*bg5@qic-tYo2N0g;DzMxO2=6w8_W{DIT@9A|0pYEO@Hia6QEa#dEGGcrO@{C^ zAUxK!U^xQ_FCW6Qfbbe2JO>C*8nm6Lv(*E_n+uT(fbh;kco`6$;5x9G1rS~`gx3J! zv91TpbwGIS5Z(j`?Lfif;fVl&J?myw27QAh}-AZ=gkfy{yJyxvduwzr@OVHW(b>8H!t;ahRzP?YAiNC_p3qjXJ3)8Kc=WQWKzIir za&-{i2?(zP!n*|F&piQ( zqt2-}z|`Cy5Q@VQoKPIV)YJ$twY30D?QH;4b1y)s2M~$@WM*fp1c>To-3hTs0mAd% z4t9hFgm)Lhvw-m4LwF7lp5qR%N)HI{FoYKX;r)g1G9WzmonVy}5S}H3Hvz({hVWKE zc&!i~=-P0PUe@Ih-T{c*K?v^xgvY!KY~~FJ&lSS^0O7Smcnr?qfV>FdDL{CSAv_HT z?=OUB0pU&G4K_0Y!aE4zWk7hBA-oC*?=OVc0O5)60qg64@HF>;qsqVu94iqZCv{Fu z08zc7th+&Stpy;tUe@zq+j|?pa=a7!z#2M0a-CCWfT&(kn;jqxb2or^oxKmh)LhVA zpFX{^C(=N2y#mglHZ*S(*s#_aAYSLx1z?qHPe7<2U}`Q0$bp@`5)jG&tg_buOtpG| z1*Zmpson?(RRES-I{{41T>uj7Wewa9DlU3AfOws)D?n5)?-@{l^s=^ssLtL4Ai>Vo z9U!Wg^#)k5^#X(^1lHbq1Hzlr3o@+r0fff~3CJH1-iv);ISvitrg77LJycmdE8X&xL5V;Nr z??w;Uof9CuM-aIg5Z)IEZvliSw-0Q?3JA{u!rKAiErRe4KzMKVg3UYu;k|>%U4Za7 z_Jd8i0pTe@cn=^vABbCCKzL>lxepLt0GQYN0vx)$N)VMlAaW)9L1}6232;oW{Q#nR zb+3aXu2%r0q_bB8LV19wUf#)EU`H^xf)g!+3y4~q0FvwM&45rFAQXoyIR1hlwnu}drEkMRK51`P;L8NxGw@KU?MDlH&9bBLS+gy#w2c|dr@ z5MBU;Hy6T7fbjl9co`60CB*gu2+#W<*!BttFBQUTfbi-eybcKOW*68k6Ck|F5V-{q z-cbl|1%!7W!rKAiErjSh0O2to0^4^2!s~?``FH`s6Nkv%fba|DCV*UguT`uoBbHV8LDu5U;b>0Yvrk#zA&r zCxCdJdtX2_Sb%xG86c{cwYn3OvZi)`c%7{UAgY)393&tsAUvK;V7D|tcwP{fO@Q!@ zKvd3v@bn;ZJ0QFOu#;L3KzOGhDjz_2Csu>ad;#GdgUEe=@D#wlZRKzW2YDZO`C+R7 zgqH)6Gl1}pL3jZW-UkRT0m3sn436*&2rmV~D}eBhL3kAqp288Z$_Wsj6@)hf!t;Uf z7C?A$5Z($1ZvljN0>Zll;a!06Opb!hyaD0$9R=n7-UV*pnxx?%h}XIT%ws(S_WRTg zV84s@fDh%}dIHQdz1I#3rQRQ49&ZC1NZ(WmcaSNfT9EA;FCaFAfbH9Q0i?2X>J2cp zl>wx(vsVG6q;snVgt7n&wmLv~9$>0B0xUSS0nFRl0p`u!0H&tyfCwIdP!GUV>j#ir zudFS|fxWD95Zix1WDi;Uz$LUm?5<2v7ewSYHK%=Lz98KzOquya^EARS0he zgcr^U*0%t{`v{R+0pS^+0Lz_#@SZ|=4A#wo_-fgfcTLnO-bZ&KkPz4aG15EAR0HS(rZ=L`rn;jrt=hg!t zs@L?&aggBL8z5e1?+XubA;91XPFWTw!Ezj6p6n~I<9j8**7CZ5t!+&J^H`a{>tD8B z0GqN`0HmRFt^$~vssU2c+3NtNrbd9N)(jBUE4mD1N-wKE*rL`IAi>Vo0+7C5)>kdy zkN};B1iDuUB3A*TdRfnb8 z5MC5Sr2>SP0^w;uc<-9QelURWDj;$e5Z){Z&jG?Kf!OW=;mw1{1weQL5ZfalyridK zGZP>@8;HIP2oI{S0K&Tg-jC2)0pTS<+|mHyO@W+CJORRc1{o$?0O8$$$gP0zpzhoN z;XPOiN?ENZKylmI`T#`rvgU(Nhv@A9E8+dw1a{yK5U+FU43Lt}Rt_+)cLs>+WlaP7 zulE9o*V%diMD?;ZLe6_S0pT@+m9*Y~@FF4A%L52+Iz;XRgtrjF`vKvdhVVGN!4W5V z8XTz-5S~4RrvTwGGJ@qaAiQjdoB@Pa3gKBmc>1hhl@1V|B*cFa5MDDxWdejZ7sAVc z@Sa0>1rQ$N8L%l85Z>iRa40oEc%l%w4hYX4!kYl$ZG@~+m;vE=L*y1fcvB&AJ0QIO z5V->oULs`U!wCp48DifB2(R`m*ey38ymkoh0fe^@(mZ$p;b}wkeE{(~TN!-7!RiJ! zx|abg*ed{{dU-!W+F%?ICB|SSQ(u5%Mf56Yq^+|z0Hm_BcLj**<+V5iDwmf2@CKDq zs!5QQY62kbol`wPN;-QtfaE%tN`M4=S?4!^5?}8M5U;aU!3U&|x2pjhkQyMtURD{f zwXFsa-Z@BsSU`9xkR>Y)5Z)z-oCk#G0ttcu2(Jvni-7Q6K+f4qfbgUs_GLhLb08`U zAiQM|UIm1=1Hx;7@D4$E9T46X2yX&}R|PJ2TW3Ic9OuB1vjD;qg79`gcsdZ?2?);) z!n*+7s0it?YmqNU<0K#Lx01l8H5S}H3cLKr-hVU*xc)1YX4G6Ct!g~PW zt%UGiKzOGiybloGTL|w5gvWjnY#)Ok*nx%+9tVUM4dF>Zc%=}Y0)*EO;aNa=0bQgAUypmV3i9XyhsRd1%y`& z;cbBMdLg_W5MDcETJ;2kw-O?E0m6F?;oX4nVy}X2_yFP6LwF4S;CSBvipI{~0}x68 zq@=S~!w)QH0HHj<)Yb?v)tUiOQUK=lRzRo&U~1_DFxC44Ol|!Erdm1tL5aOr07Uh& zE(F`YHv+`#Y*hd`qF1%%26(hr^cpC!Pc4AR8Gz+PBW{D`48d}1CqU#Zz;e1@u7l-# z!E$>m0zekEdVu9@KimS#Rf6SuB_R4bKvb`-3dGE%5IGHyU}x(B5Y@~2;2Jov4nTND zAR9VcPe6DnAa{1Q{($hFL3j)xYkOG@Zi4j*KzLmoV4ehocL&1LfbjGnDh(jKCy)gm z77(5hM9u-i>w)k*AiQmmV`Bp#ycH0+1PHGWQVM54cvm2D1rXjp2(JUea{z@)XX^q8 zF9^ch5CD#F2av})w+4Vhuybnyn3|gb7VND6^LiV=)Ychbs&xfKZUdOty8}#Zy#S`x z-T+feA3&760P}i3KqwA~eF_jN0!-~~08>*ZfLzwOcLtc(y8^`PWj%Ehlr(w|fOws) zJ3w;1vQt5~#P_n^gUH>0$ejRDy{3wgC|0@!(zo>mNU*c@0$87EF38iptZpExv-bx? z?g5DE75xbk>}5>?>+59*1ScsD5Y@}e3Nf<|EH_sJB-q(15D2O;SsNj8U0}Ih2Z)>m zSdLc~B6klgH#Y$y=K-R6Sv5g&ovjfNUiB)leFYF+C`7IT!pn#78X&w%2yX&}=M2#| z1HwC70XAg;gjWwyxdOu53E^#k@J>T`J0Lt)$Puq6AiVDoxeE}U;T>>-z5(GyLwFA$ zytxqG3kYvNg!ci$y9wd_fbf1pcnm?{GFkO5*h~%xFa0hks^)fp!%Q|3V!HrDE_o#= zeQx~#ilff03LwKery78%UJHp(10fbi@fJPinMK{+_E z3?Muwh@1t4XYvg!=Kus0__cmT~%0N-vYY+^|PP|3SLA+KEFpqW37qERDAbp)%9Y7j7rv`wj z-UJBM0ihN^s2dRK2bkK+0Wzg?ssdPhuLhXc8vx-&K&T9`VCw`Bub1`BJy25Y-2vit zw$1=iy`uGy(&h(PuJr*(u(Ndqi0b9_26Y&FSwl)e?(E$F66|a}05Y>z^gcumq|c+X zmmvhCr1bbFCk0*Iv~7yh};YaZzhDd z0K!`g;jMu1mO^+NAiVVu-T?^jBZPMW!qa{Tw*3Z#mkZ`i{Q&ZN=hPoyLD2@VU@Jo? z$Pc|7Ai>UF4G85B0!npLJ-}3N0YtC@LhXQ1C&1L!2Vfu0pZm_cpD(R2@u{62yYRD#}EcC8P-5}3J{*r zRIr&E5Z(reoB@RQ3BvP$@P5n!s|{jrqh~5s6%Ff;gAgY)5Lm}AA1c(MLu$fZ@KpHydW`LA*Zan~^dQI8>gJN^; z39wx21rXKCx)WTKO#J{>BFYWc-unZ@>+BT(nc3Ov0HHEKR4=ar#7PZdU?<&zY*Huy z%dw__-LiKA$mq`28(>rRz5r8OIY1gZr%HgSUJHq z-O{=M!s7%R-MRw8bB4%mfbc>gyay0oJcP#(4vwlq2u}dQ+YI4JKzK(XJOc<%A97Zw z1B5rT0356y5T5c=P*k-BKzOwfxdI5!9U@l&;YC7t4G>;1L}dqrR|}Dw0O2i%@D@OL zKOwvo5T5rluzfoqyi^G90EG8HAMCOl5MCuj?g50?4B@?i@TNj|A0WKr`QYfk01E3~ z*_{wm7$U%iae$~^)*7&esXM>{DeCqPB-eWa%;WW$1lE27q`h1TwE#J=b7};bw>1O8n*rvv zZUFQ4o&fWt51B5pXqLLvJ>=lg{VA~ZSJSPZG1H#LJ@GKy_br7Bdg!cl%3xM#XUV=@D zfbc}XyWUzeAUrpSTmgjF0pV3Zc&{dd(o$;!g!cv_Hvz(9dj&Rg281U8;Vl61I(sWX z(b2iL0pz33sVl(L-Wy=Stq;J|-WOoOsXxHHxg3$87~3iUruIreC<6%P0ihBgR0qh0 zUe*gQK}lop4iK-ibp?p(WxWk?;06fK6*6aY0KyB0EUrEQ;T1yUZa{dOA-o?D9xHef zq?I8G90AKAW*R_vKOsB^2rnAqX%7g`_a`{8A|SkUh+G4NceD>I*8$-rL*ynvczYqd z6%bzc6tKz-5Z*zE+ztruF@$#j!sC4nj(`&oUOa^N0K&To;k|(HenWU4AUxSOV0}Lz zJbws}BO2`6LkBZo_X8+AJEw9) zf#PEZQpprdlUy8pqav$X*%$I1%!(cT0Qud_7( ztc2Ag3mh(-Z@~ICK;$AoRIlitci<+fC|Is_2S~89H3LNT@*2Dc%UOcu_A11HBeeo7 zXPW|%s|CxoYCz;V!1jqwfXGb*%k9m8$V~vt>CS=3Z3Vk?>kN=#ovjPNa;g##w@AJP zxpV0Wh};UWoT&;#F83`c-nU+W$Q=O7$$o&yt$Yg#x~(@LaxcJgye<&?M8Orx)CUkb zi5O5R%<2J=%LGxKy&oWQ9$-1!o)2KZuLaBP{Q;2+0C}aC^+yIcBqAWZTVN%v2@swQ zNMC1b0fZ+8I)A>ibpnJp0m9n>;Uz&-9)R%vd;ocRE(6H+&Z!(=YOMg6>NNl<>D+1o z=CwLNcoksY-UcvlY6qC=odKryE&$6-T>+-nZU76mo&Zt3yw)Jc_p%-V+unNvB-q({ z0YvqR#(x5PdIq>;?^TEed-Dfaj(0Ld?#&laATKq5$T7r%0#Y>`q@kD9V>8GPTOA;B z9AG(9Yfy~!vYvSb(l<8)A}0WrlTC-nDSQO!Yh3}6lK{)HCWBVB^s?H3<@O51f!(43 zQqpT04sv`i>yFnT!L1KK4(x0V0L$5CL*!II+B^5YfXFp~%@l2i$nEe0**EnAM6LrY zXPXT&td~_L9puiX79hhqTPJ|1Ue@OyL8-2F1BB-YQrX$M1H#h=g-d7a0SGS^!aD)s zormx)KzIk!K+bJ_0O19H2AlZ;!dnXAeSq-9A(saIfbd>|LaDQr0UQKVJwSq;y%8W+ zcWzApQ*#Tz)Y=L#)jI=BEnNVnT5o`j0)& zJwQ~iE;rcKTMIxMdRcwJ?%Z1e;&rwLfR)JJ_yjIrZhi&_YXd|s0z~!NUI87K*vtAA zEVniTB-q)S0HS(LB|x3mURKR7AboQufCM{RSAfklb$J3dGxiH8l(x=*$ZY`2u}XXc zC)0^weQOs$1j}vR0TS$Ny#dz8I|U+V z`xRv0-V+eH2Oz4K_X9-k;a9LbUw{NVTN&cP4)g)JrL&a-!s~AUw`wu&Yl%c-()$wqJno7DCn?-hlAbA#x8OJWB}g1B9myX%qc` z@U|v_&16Uf2M<)A0fYzD=K$dqgH7350M=)^7IeE!XKMsRPPrQtacf_I!mM-Z2N2aO z`U|Y2R{*Smm&X7c?*<8Al^zhP0wmYDwE@DL0HS(zpMh6>Y~=tOZ7KqBU;>EOxt9T? zq;swUnA(~Erdm6|rc7M`=B?cT=Jg%`^R~VKQ>_AE?OP=vlmeKVs*wnGiv^h1>j9>= z27stu*0tb}-`WAJ{x^WMc5>Wp#vv;0cgmXKMq9>Sc`q3${*x@X8>(84%tB2yX?1$MhE*;X5Ea83^wH zgjWaQU4ZZyK-x0~3QsXX^n7ZwiEW0>V26 z;ax}q#aQnRkjFarJ^)j_FF+B{x%3B^n#uvv(79Crta7OanA++UK&TsFYU=~AlHM0!-rf&js`m$&+R6aRo4umz9)ldXR3I7D z9N~qQSsGwDRxPj}wkCjhovj=os+V^w6F6y@f#s$afCM{RCBWKsXF`&V69W?is9_C} zQvl1UUWLfzf%WxvK;#U-a<(5Ka$R7#sS_Y_7GOD3UWk35@bu|yT>z1D08zcBju5$9 zVEcMkfCM{RJwQ~iZ7f9Y8xzPay*ogHovkOpX39>4$gN@q%UyuTy#ULJ#xjHbXU77H z+o=yAavUk(;MoZh>}B2L3d%CAA0ToDDd2p>3u)U}KzQZ-;8H38!n0%r8P=Kr;Vr%c zmdk+fd?9iL5MDZ%*ZTuxbT98oaEoOs16WSRt=DuoxKiVYN`jA z>WzR<4PdIZ14Q-mYJi;E%PRN!4a5co2rms{rUr!P04{J_4IsQr z5S11X-VumO2M8|>a)qo1gm(he=Id+?fbdR1`c4rLUJS&{1PE^*#LNr`?*>G!0K$6& z;Z;C*e;~XD2u}}ELU%xT3m|e6AiOAueKR0D8%Ps;0fgrUI$yD~bp?bc05RnNgf|H^ z$EI}S43YDI@HA_|5gq{H-G|6U zKzN)Qpmg1u0O9>+1LeQH3TdFSz_t_;AO#RPb#{<_y$@1BrRiD@uoB%>;6-Um1;9Mj z4dBIry%Jz2@#g&nl_7gIKysa14M0?{>B@T`?Rz~yN;vza?%MIYZ+ExpYnVr23 zAi2)15n$fd1PE0Cp*p~FQzw9_tt-HSy&E9B6JXxf3t(RB3ozCD0V4PVOig6~TeO!0 z6iS_21;Er^39#T?1u$=`2AH?j0K&6?P#Ivsr4=Avuc#r|)muBjJl4zLnBF=A#OrLG z0HS(L{Xhq;^|F2k%T0X&66|bU05YZ5vSb*M3%34%@H`;XjvOHEy{uf|MARw);nhHR3J{(g2PlEH20(ZT5MBa=_XxtP zfbh0(f>kbn@V-HKD+HP%3XsmJH^5XYLk1}EwQ7K=UIUO}oxKiV-c%1T)tUhooLT_p^)`U1y&Yg`>jbde z))`>l-VI>h)E!`I>j{Y94KTI!0YvZxn70=)ur!qc?4+#{AgY(u3hd6Q1|VK%s|Sec z<^2lsW-seGh+G3mu(LHF6O^Y}e}XQZ>1BNck=p=~D*#cwqO73eu$NVg2UH03egFw} zwswH^@hXBQNP1blz;b&vAaWBxR4;2P4>%wfKzQX4-VO-wBxJGW0SIp~MD7BFcNW5X z0O3uC+zS2z!b{`@n<)VqofPH+^DH2|vyd_}0K#*J$R$8{KOwvZ2+x`ytZxB?R|?_n zfbjYuybBQCNeJ%-h}YR`0dhp=RtJ#ZJNHI_sjUeR!3;2OZv})m1HxMY;hg~UrrrQk zdw+nbUIwt4Q#ruYR)H)~>e;IRrnYK81P#Evy$)ci7d#}}xitdJ+nWKVwiZBCR)BeX zJHS-$1TfV)11#6O0!(e)02bVP08I6s08?upfT`XWASJ!5zrmrj^#_R8+4=!Q^|G=- zf`B0#oF4=rJPrtN6@;e&;cbEN3?RHP0dOEYKzKVKyaWhON)Rkp0pYnocnuI<9E3Lk z!mEJrRzP^OAiNC_-WCY&0EBlA!n*_?y&hn}sR3YWYXn$uZw8p^Er1AifO&gofT`XE5WyW_-rf^ns`mm!@Bx^&_XC*f z{Q(gafH*<{O!aDj9N4+l0nFPQ0H%5)Ac7fS-rfo@)!P6OoB-zST>z$fSAYb2MfZq+ zN`}@AU>@r{aJXze0OEDF?f_A}yn>?OzQrmbkjlLmK!TmECqPs$>t3*iR)$<~MtAYNzd3J}%H$^jAF0O1Kicsn3G6A14Cgl7lgy@2pMAUqDp z#BC6SrvTx_KzJGuUK)gF0pXp11c3vD7X^_Efbd$t@v!y=Byt{rLbr483ovi)2Qbz9 z1441+g3{nx1u)gC0iiNLF6*3H0ihZoR0l+E0fct|O!c0C2wnj5rrv;1A0X5Zh#UjR zNu9j{U}~xaWMbL?LV17%TO&YJFK?PHc%Ft7IogyMi`mjJKV*sB4idJVwTTn8}K>j9>gMu4f_ z3kkms%bEvv^zfbR8(8V0P zYB)dzlZ%Rj1$2t@c4i5zo;Z=?|kh%QryWBlF#(SF{(Dgt||ACjWT>J_^3|KuH3B_$7~C(aEAr44?U&T0HnNcuz)l1C$0PYf!yexG1q=-OB??e29{*1^RDwz{ zPsY-3{M%WbBN!OcIvHQPHSFP?2U6+L+XH5lnt1fKf*b;lI}hy(@bu!*%fjVh%gV^W zz~9Wn$iQ$6bUo7llMR;oB~P%~;?Z5BqF{WFNKXphG{vBG*CZ%KSfWeA}b5Mn%D+`9D*w$;*3x{{P>t%mC^-fW73=%iEvL!0=jl zw+2LT18DtQFE5iY6GQjq7v8S_|AX>L?|~u)1`p#iFHV8(qwJld@}L-GZ?u7Dcd>(K zceRHjzee!~&+f;L@s4qhv5qmZhhON+F)*A#1rDKMjv;Qv z>7t_G(dnXM;L+)$qH&CY;TR)>WAh)zT05U!*2UoQGSMYqig#@a1H+35*Z==_GBGeP z{1?3o3Zd>39=)Q;84L_B{G9*)-yy`n!0_@Q3#hp=N96(7vOOv*z!q&$S-{A^;A;HM zwe?9!qGR{H37*|N_dR+=Z8Jcoy?10_XgyG(0u|H&3*LeV@_YP0>}h?c=A1`&h>F5% zb)Q~V(DE>1_sCO zbDdnC-T(Q+zkTKxWbo*gZ?M+oZ+*(lz~J%!aD%mODYM7_!ydh&TR`3Q?$iH8!@*AA zZ&?CT(kluYVDJEm+e5{BAmZRb36QutR6HLd4jOj>tLKM`heO1{;~XIM-yJ~y=5GmL z0+qI+DKLBQL&Ys1;^4sxkox0LaS4bx+&$}|;tUY+DKK-UL&d?7(JKmfPd!xp1Spbv zMN44n)1l&^Nb~3w1&@S*?DdC=gF?}x7vWBGsCX|Z-SvusN7X>;<-y`5l^(sKpurVz z7;rHp5{%;Kexx3q+!=w2)hw&xH|HuA|ve+>&@aup0?8q zii1b5k4nLRQP5F_tq1s9IhYt2c7P5eOKWveapQ0K0S;!6B@hciM~FHxP}$Onq*mr{%j49$E3FNMIg!%HqOt?-fwY?eO<$OFhh zAn(8ctFKYbgD8Z!4s0)?{3jtiBD_$;19S=}C_DlfLE+KBzyJ*o2axkXL58jVgoVc& zP@3uvQ8Do7B^(~Fg`4>pU-Nl%yQo+k2hDXcH1n~5;=TDehpY7${vQ56pjy>MMZu-h z!1w^a2Bbvr=!O(f9^H@v%cmPsPlhfx)Bk2&kxaj0Y9Zaj}QN3Gu(^ zO&bOV$DN?q^8q^%TpXr=N+WwaXkvUl6{>bE=&a1{6A*>HqIDouk|0$|pd_2~A6~Gw zU^CP|nStTOD_f|cFKrRZLs89511UTRQV2FzA&c2&>64Y{2slcrl8^Y?h`KEhhL=G{{Qc4{KTXC zx<~gpm(Jy&PwqFmVEQ=J`UFGqkX`m`-Bhk zu@^cJg{8M!Z}azUVPIh37hrenWr^n(@E2gd!7u2dqR<)7!7u2eVqh6BQETDRecq)r zUE;+R&;S3sKOi|d7<4W$IO&}XV_DwP@`rz$(|?cur#$|j>|nIvELAwhsIY?>{&AP+aiudd5+#(mfs2%>XCG7lls$ z|NC?w@aPqt4w?+_^-&3U;R_0;a0Q5h0H^=|!3hAIMwvioVuKX93F z|Nk3mR00@ErNL_di{1nsw%&cgqn9^53Dk-yv|wO>O6>znf%KYy+^28#|G)78k8ViH z@#%&n8&E61093|okOY@8pnT~V=NJ3=A*sSpEOs>!$3{9i!sl(R@T9?y&JCQ0vtKlu>(~nEs0j zS%9)>iL_5QvqvxQn*;`i{b~#h4BgjXEU^0j|7AZY!GfB@Tow!roz5Js2TCO%N*nzc z81}0}l$Kik|NlDOqxJMMcG<`G^N7ybpUq-01M)c+kK9oh~W`-7i4Z7Nor# zqmtm+9p~WDS)yVA3Qz;jCPQbOh%)*oTKS-{^$NE2i^AS*Ypfg8B z1DwyG`N_xnpGWtxUG)qM44(XM$3dk)_m3Cf6d4#iS`YYizwqIAd5^08ok#aO-|jQu zo|7lP+gs1>^B&!QJ+=S)bRYjOnghBg!umLWYcnX`tlyO?d-Qs9cy?d;FZvR6*GThW zjn)GdnI7H7j?M2FOISUu-<90;>Hh0!{kC**LoGvnDW~WEX{SLr?qiXu=_gM=Zdh{^Ejp2jhRyPoQgmlKDM4SDm3!r~8r*h&-4E9xrj^-^Sq7!NTs_>j3S~_JGxU{67hnN9k{0 z2A#{)I|ZyDt&`E?|EUQLp!=PBgBVM{xf&nfmuGP1-^Rn_)WO39Ht=NWdr%Wk!J`*q z>VMG?(4AP_FFcxm{4eG3=sx_i0^CvCqq2dCfx*@IKmRr#6(9a>E-JnaKlMtbTMqEI z=rA%cSe-28w>ntL?P5`*;>X`23HH%Bet8CPdy*d-n4e(wK;wpAp25YUhLO>u7Zg1W zdsyNbLBk31aAp5bx>!_#qXImh@Yx+ap5W2j0`{WE{}U5jEGi({zk%9NKE{_ok%=_E z;>f>^N1%g806ZRWvh;&T>+Mp$UT=>7qOS}Y7+gB-UW;_IfjT0HMD!3G1fU@T{uXeJ z-s_^`1C7@S9{&%zSlDoYhGq`_7hMKYn#||X$#NQ0W%zg`vw3uj97eLAe;e5O9ZX;c z94LMNpA8b?-Dm%czSjqpi~Oz2|AAVeXa9?y1Ko|-4GC-yP&Ly7NhHQ+UMv;{R|cR| z6T z;|xGKtg}YNqWhOeH#bO%?Z4I<%YP! zFtb54$TS7yF^L0f|Nq|s+Ft#lQHX)TL;Hb8H|u>vXdY-)2m%d6JaXyH{BL~Qqqi4y z9EtIz&KQ*t#~q*+^a}x5P#4%mC7~lm#RoJfVd2y3qvGPx3qGx&GqwXHW&n!&2#?-Y zkoL~l1t2jE&)yIf4p1i{pfh&IK2S>pB&^`reYP|9LTBuY&e9*pT~u5^eWK17m4FwU z-u?gY0;;)6_?v$Sy70UFcI-a>vWpuuZm~xNvuv5-Fcv)@h*q zxV@s&!4z);BNM|5ZhoxN)GOb|VuaLNB5$z34HmVc!xAdR{pxn5B|(1MBX6As^w3xK+}qI#@M3@;`c{{PRv z>p5q!97rWINF}JJ0uFeOUQsWQnq0&G{~Pv#f}NoRtn3cxs!*^pkf2AeXf#Nf8`Pcq zAhI64q9#5J3@`KzK|x-k5@Gzmvqr^XH>jW98KdIS{oSM2{lBaASN`5q@X$!D0jz)O znf%SO+vf{MgCzrhiy1QmLt~AK!xvCbxh0E*fdSD!1=R{SKp9(<5p@4+_i2w#_Wz<^ zbwMLxr#(8|IsS`+t{gT#>Cx#f@L%)}SVG*R(_P}Yy8@_o0b2ta-vt$3i2Uo*&F^vi zFern0c3<@9KJD@Upksp#CqwDC){`X~uKe2=9UFcqfrg9@ff&7x|M^`Hf(A>$Lj~-| zSOgh-y7?V9=x>Vg>^}Lz#u}9M`8|3=8UBm9>q5!{TabUYyRxP6?|Q(`-@FD?ZFckT z(q~{`c)=Zg&ok)^8w8e4dZ|Pl9wLc?gGadwDgi0UV@s-9ef3&H)O@V=T-Jun>Z|2Qz#?<5l3;tkj0Y z=3MYFhXZJs!7p=|3L|{+g$i%3xa9CU64XiT(3CFH*-59m^G zZ~@lj!NBmMR`>t^)^GfMi&z*KKJyEhT7nkO_NIbcz!9K`as-tX*R{dpa4MkwG7}Sn zNB4;rF1r8!yLOkTNVs&r@2u_UtXvI!!t&oP9K#FQji%sH0aV>DfC~|8FWcK*dqr)#q<`as@I@InhcuIf*b46E7R~_R9G8SGr8Qg z@aPrIhZIgCVg%$&Y;|@?E1R9qBEnn_F@gf+iwhQJl-)@v0iL};%qM{k9RfA>Kpj^G29);RV>?jBWdzMSK~$wpK*;-b zvoIT9LZ1&wbL7u+QIP;um<4J4dFP>e`J+!dc3sc5eKz|iTU;=|uE4HSLfjV%D!{BmYfi9z$3Y1VJVxBx3yP~3D?ft059<1DVqjnZr{e#| zeY$;AGCZ0Ob2wW6H?LG$@Vq?|<85yGz z;n{pd16&A$CM7y!R3acb*TecAe=j#9q^L0d|FRgAt53eLfh0rF;20=h`y`jBg!s08 ztE=?rjkVyHXYlCu{sC?8{R9m?!CQZ?!8~scsN@|r28QNp2?odRKXsa(-CtnkAE;;U z(apmKRkl@)f#LsgkLF_>*3}XB|Dp>(Ml~PS@N9m^SlZWI+ra=DPzAMnN`ySR zeH%QQ4?g%WTBQbRkEeEc^!iSCVLJKWe~(_@6)$uki~}!}A&eU@q$dCS500q2pt+k~ zf5!i!>FS_T9@GzO{m01g;)cfm|1Xb$f}%#n1>Azs{>(4nqmtm!+Y375%BB0b$3PeEP;moCxH z3=A*AG{9vLv_%SS*Sd73f?KNvE}f|>9D74l^j$hrcf2qGHH&-af}2aN2TE8xdLtOY zrRYR8PzeMY6s`Zu2rfkbt3w9T3!o;xcn8Uupri>(fi9h;9~{0NS12_F^)cY8W|%=e zSRxBH*aGg@bxsTnFIKAm|Nrv#-~ay)zGnjGKZl0rj1K(UuD|f-fNJD#-Tn9fe;11s z6`xX3u$mXervD(#W&YOrfB*kCz625OnFbf`0BPwy=FuB!0Fg7;2$#$Gi{=v-SnHd= zHQ?|6|1X38|Nn1%@b zoH^qV3>rT0=)P%u^1rCMGDz*||DtNjprIfEF!#hRP8J4m4<_2qyQ10_l;qYjF zW3f{lJY;-B2~>fXu!G0y&uV(~@~+cjVt8>9RDpMc=1V(Sr)q=Na)H>*2RJ-BSye&& zZq_;w)yeu^6IA)Rs5p3ZvVPWLVmQuvQj>`RWbJX*!`B;YItY@LD9iV|~kL&{s z9=*IrK{}7KFoI@P5#rsvOI1LNU3^#+V1kSu-Mk$zL62VEHNP1dUi=3o-sU3~htHhx zXnvys9sz&B1}fK@k7yh|(+TmW2GpA$6~W%*01XCrp8)&wm?jg$i$aiwZWk2|k51OL zS`dF~ctHGV3*vXPP6JV$tn8W~zrEFf`R%y|%x@o|ESPgaetW6G!~mYa=@en~=;i(O zi;>}lFT}+fhr#_v(9n;ANB7PDqP?Jju$qKJRLL;J;`tNWAqxiIGQh zii!mTD1AkMCV~TeK&7USih)n}agbmFcnTZT$d6G`_%Esl($*aVD!7k0#DhAnp!pAv z<~I=AUMl! z2iY8>VgTv%#~w+keqckO(N@!Skd? zFRu$&ahf~>LpSRIMNs16HPm5Z=oU=|NgU{8U9HH((8-+Y(aoY7!2q660}Y>cvs~zA zouJ6X;M~c=_+L~GVzff^%M1nv24wS}XoDQXCeOgoY|T(A*v$R^waLyDkWZQz7#Lo^ zYPSAg@*Zw_H}4y5CI-hHETDAOEpnopRY#GD!LgG?z@wLUCMYvEA5j1m6Kg>$FhF_A zqnmXjNWAqxiI7JxZz_lls+j+)R)G@{Z#38esi0}XZeBlxv^U5EMES&;tj)v#8s0om zBJ0w9(4$vW3#7J}R~SS=ZB+*u*~=>cHc|^>~`SrO%7oBe#3|PqDS%xALWal$%nnVMFc>#eYXdPN4GP_Hy1``{t|BfZ7z(=%@02K zFrV--KIPecGWz9D22h&lKH||C!Qs)FA>h$jAmPzjq2LG}dh+a!wD9Qu`0ONpRQ_jzB?Q0z62?z1l* za6!`}Xt>z|G(PJ98lmz4jYv774oRIkb0!Vm|Mh5oBjD31qT;`4PUS3c>e38t;!0^HiqS25G zRC<>Nf%z{g*+IM#9*#eHc%i&Lvy$|3wRI_l$KunXM+yDVcxcVx z(JNX3O7XqCfpQECFQPa>PAuWt@gFoneiM{mdqqL(qC9$eB|r*{IT;v^vnpyZfmT8= zyykG&#t62n>-38SObiS!lELkU8y?LT3?*`)p6MsB!%Bo)jSo2X1~3_)^yp^(FSqG2UmOe!FZP4hLw5goaT`oayg17NYO@{p=)T;|@#4d) z|NpyhywGI<`Mf05q2*gC>x=Ci3=GDXHZs02V`5fA0O4>NpL}tY1ys;> z9fqVPxLFOhGt@v1zge2z{FAXf>&0I-aFlAa-Yx}A#x;Qq-U@bYDX94E0`ZrE`6YTr z2VNVe@#nL)er9CwXg=}(Gk-m6pc=Shi&6tE+^lB>(H@3v0FhZQL zlND6{yD@?isYml037_tRJA9)U7}6|RLplEaFRk!M=I!7Bbv#5}K@{_;MoZ8=N2T#Q zxS2r893@Iae6$boZ+8^&=na(cV7|b=-I2|sm#4v}m*w`sH z-A)|L2Ysv$6mfVoAJTYz-}n+}77H9s%~dK4wICMP2FBNHMh9LqfrDM*Fr<9wy7}Tc zD=3|`9w^~%xn0Wc(JmUL%ESQi2SiPSt-mT014Gx%5|)-rr93afm>C$lPQUPHW?+DM z7#`*x&9+*qObq`$x^I@Uzer(YV0g{%(S6yYmsdoUiQ$DWC|_S{J>bFba@nK%5X2Tp z+wsM2(3-;UH>3}Izw!SBD3>2T)2zx1vKib~;|K*UJaqW||G!7$n**St;3l+LIZGTI ztt{QA&uZ=jEg^Vu1k|R#G?EaHoiIoEQT` z^AASw>;h;2$HAl5^#lKu!yvW?$kMH1AfNfDIQ$pgBnAqHQl6IEr5wE;%rEwVn!4R{ zR4#x#-*^NRX0eCQyaa{NnKNgM4;%)!r$B~qfDCCpP-3+cl1e#B4Lp)PY&@7xK+~ln zB3+6#?*t7H@s;s5?*z498A@0-FhWz62B;s<%L`tm@?TX-44nQ!Wi+@A>d`If(fza0 zI=MLaL8(l0wFFD4Sa+~OZ_|TcInSDZFqMfm{$g;L$ymY*Dv;pqzZZR=k@-#ukM4Mm z7ab7x3juItaR^lZcgCnFgnD$p0Tmw}-K=lKnHW5F8!fu8I}-x&oQZ*d%7Mcky{wvG^}Vc;U>XtLy|TwarB|=*fzON#uZ29inL$l-w*R6Ipp*)l zaI?N&^b#D{pqv;F$!Czb>Xn@h(K`iAFAE;M0-(BB0%U-I@d4wL{EJ+=54sxPcIiIt z*!Ur@BsIse@uPccUa3p>rS1=)K7li%EB6WhMUIW1GV@YBJ6Tj*xleV*sIYYZ1a%!d zLsWQ513a2}&Bd4){;Phl|IcrGfQ^x%M8h_LjftT|(Y63YNwIGD`R9N04~23SkDZJR zAjrVr!N2%mv4~4I>mLOs2FKp3qXu$o zCyRmI1Dcb^(lP<30-}PLkxY+n4KO<=2fPx421<<+?1<*P{1*OAQhfBk|S;It` z7@ALT9A|YEWnuv3&Q4ZmQ6>h*Z-*61ESgU!9B0)LWnutTDV?lZqD%}s7#Nr@xG3Ln zvA$6%0X9kHfz5+b-ez8IQ6>h5PFY4#&}cx6iUw%OPl*a>DS-gE4+=^*EFiZ{J#hHH z>LDQphX1NZz$BY6hVQc(FnIz@DuKxmFsTM6HNd16n7jhEYa5uH02YCmZvtkUfk_Kt zP%Z+slVKRqUjF|8CWcHS$*XFKAnW$%?Xm#1{FVs(1219p=h-vz4QqqoZe z#5WQ6_aAPSM>nHK_r-3G7ohRK2~f=rp&s3@Jh~Z;Pc~YxGB6zApK`GKVC>;D45MHK zhd=`hXiR~Dp$AIOgVJ|EZGHv@hGS5A1C*WyrJJC10hEq`(mqhy1WKzxX(=ep1f_3r zLF_#QrB^}eIZ(O*O6Nf72qul>P>_2NtzftPuGCD7^>j&tp(p z2`c^!%KreRe?e&$s5~E(mVnYQ^DjWv!T7J(AodwSX)7oVlmCLoSAg=*LFpS%+KK~W zjs%ns)2{**hx6GX>R|j0Q2rt)eGE!ZgVK+n^cyJs4N8|lX%Q%W1xiOj?JI-Qlc4kh zD9r>__Xz6FASmAgO2gb00hLdJ(q2&gJD}>apyDM^x&}(mfYJ+~^a?0_02&X=p!5_d zy#Xq}14_f}zXg?l0;S(U={~5s7AXA-D$WAs^FirDP}&7b`$1`#`C4fFFTWT;+Xfh5 zw8DP~-vNz=>A&#>A`j!kXaT7B2`DY{0lPYwdSYnR02%gih+TXp}_&vSpbP=z{D9C82T7MD|10-*)cE_K*d37q8J)L%hEvg zBtr#~xHki64LC>z149FnxDP`ET%rd_JQhj)6sY(dC=CloShy{Lim!pv5L*}+wm|uN zp!5+aeE~|t)WK*_IG|&Y983%}0fUZ_ESTbrhWQb5xBp6?7R?ixr#`^YZdb6x=fNQWSg> zOOi7(^U@Up5{pvvN-|Q5Gm90}Rg=}h1~4$-RPR)jn4Fzj0#~aF(WX$ISghb$QIMKk zk_sBlXYkA`NiE7t%u#R!Ia(nzPr? z=BDOB+=iwMWS?hVSz=CRih_4)WqE#43dp%dsl~;a`FYj~&Kar6*$T=ab5x5#HbVo; zF()TKIk6;FLA6*Rsj?)sSRpOH2oz|=(7*z`&rcqz?`= zP`dDUQwT~;OwLG6QSiyn&juxTQ0%$prGS`$rTHbP3L2`(njj6JFbC19#R|TqIVG6| zIjIUhnR%%S&LD$95vY(@l&S#AK*6O21^GqLbgl)l4wSxJk?ix#E6z+wRZvn*R!vp{ zC+yU`5|H_z+!ybfmzkMrKKBaY15os)BPyBB%7#I?hiWSmeM4Cbln3AUfpD5aB1jHIq$wnVWI;rlLLx{WL_nBEU;!hrK^Y*EGQdV}Or$BK6@i=#CesvhGxHR36Dt&aGxHRDLA0lzg0Eu)$lnUVg+&U%fk6tzg{7dB z6bz*TLmh)$6+rnyAviNVPa)XT-A^IDD8Do>MFEM7PlNE%6pB+z;z9O+>BI_9FB@DZ zWagEmDWnw?foX-b{DRaxg*0$FQ%EZ>$}C9*IW;jwK_RiYIJKxmA+;j2L;V1SA%hfU<|WYOy+&v}bPxDYsOM6+-ihVL3s;zaX_Ju_V6;oH9VAy>otE2`F*v zSZi8=QVFP%}b6iE=epZiARxk zbP85ba0+ttbM{aGCDRavkRV6DV1)qxaMvIOAAffR1s{L^00jlNP(Nn{g%H=^5CsKC z7Z(NJP@fP5Uq@#J1z-O#SB2mZ{~%Y8T6a%pg~$QF1F)c5=#=}gF#{epnQQL3T}rLg9>J4Xd?^KTme`5pj=Rr zk*bgiXO+gvfeq+EY&%mGzZBT;a zgn@wp?0S%51_p-m+~jyrEvW}uK*7Mk5bo<7AL8%t6CdUp6zu8m2UUg;5BBy9U|?X- z*K$lrNlkI81Z&98&w*A@XyL&S5ajO*4jHIHNb+E*ki;Z#+ZLuQ9#n&t7R1BE6?CjM zG@*?cPP#+`!@%Vy1_l)cP`WNIiH8IwI06PHcY&=26NxD)3dN;K3W-U@@x=a^s5?QZmcpL5;Mc-1r=Y-2AdsLo+aC zY^30mpPrd)Xa=E;jTAysi%S%W<3VkNVsI@E@>B)L8<}|uJ|+fW888iM!er!tEi8u6 zCI<1v86f9^J9FRkDK+)?H z4`zd@BCv%JzKH=yqDY}Q9@O0{j?V`%D?mLwuz(Lpz$YFgP?TSiqfnGz0*V(f+b15v z1Nk$x1Z*Z!e3=-)V=o6;&e%x76_V6U4B|bI*ggtA@o*Wi4p>?%PAn-cN-Rk=F@Q9@ zObiq}(-c76H3cV7A6_9C-0N3x%P&$02Mq*(dJ3SXdnzb6av-T9M7& zwOGL~F*j8q8PXXC^w`xj6hMaLmzF3v<>V)W#urqJL9PFsR8TJ$)+qtLoZR1_o^g1_oUQ2GE_B3@!`|3|gSN2IL-a`-g#{hJgWekqbi| z0|SGN4FiLn9RmYsKZq{_0|RIuldc^D=n5#%#X1bGsSFH$sSFH0B@7HcsSFJ6B@7Ji zsSFI(8Vn59AWIn-7!IgI#^;Ve={wMIq7zVld^`g~e7ph!tc-gA6@LPyl{6U`lr*bB z=Tb1JXh2$CiAlu_pneA^D0A~u7;+PnL40V793;xXkPB(SGl2RFppF8lhXCq|fExJ) z`Q;3rd7#E~yboyT#hQVEAvm?9v>-kxH9a#w57ft3EmnZlb4c-LP@!sIRG|)P7=uO$ zK1ItrWz;T(GrvPdefVzPoV;Q)76Z1+Fb1)K#Z(?#$KFHie z1;6|}-QeuZf`Zf(1&D)S?S}mP9H?~+p?R5kDbT(sNX#X*7?JKk?#j$d&M8fSk1Hu5 z8X}-0N*F*x4w-o+puquV zYKpZ&E!Y^W{)9A3AwiF35CeL6!2%eId!QpNAm@NueCRq=i#0%vHfa9Eq8~i8fJGb> zOdvx`@=FqP;=wI=TLl9hh2knu27`DDo4-K%usB3RwOB_%t+-0lS^>#KZCi+WIP8Zc zB_s_ntFfpDhcp&(kbA1ZNnS@mHAM$oHzZ!QSfLg?u!luIG%JCE0$12t;|d34doeXb z?F0oS7JJd%4Qj$8=>X}%n!d4i4M4SEaS5d31x{<=4nuUT0;uu<)ft%m6R7=4Itsdm zItmcmvH25RmSZ(CB`;0=RSr^#vFpU26sgP{$c$V{l*)Mi(0-4(eosXizsBL_4~; zFo3$)AhxfgGXtoT4Pt})*`Ss8{_dX6pn3?@)dsDs@eBh=Gr+prU=9NV1FY8#;)D9# zAR2_hwG4DX0MuOojS7LpAsHebOLBqa47bd@#GK43a6JJUF$eX5LHf896rh0s_It5H zP%5ZJoT89YS_JA)yQCIp=9Ltc!kal(5S?5K3Qmr}{sHi5f@07JdI@~c6%k*lDIhIe z3JTx?O~EHKsVK3ik_3IhmBl5gxkPH!OwkWc{Y_f0Ixz~(wEwt>|{=QEHkfVU)}w%||)8qG#Cl}kY(C^b1h zJukB=HAMk5exeXkS&&)`3Uhe;CKu%wE0h+erYMx;Beh7Z6u7|tfy{^LgQml*K)EJQ z6C$1i>I^03DC9#23yVRrP>+Mc0W_Wuib`~O6$S>dxrv~8mXeIrB2*JJl=2ITbRWPFo50Tl$xHIrvPeE!5Z$VDGI@<>7cZ2r2s2FzymR$ksHtm4b*iI|9~3* z`DwTfC+{_2HwL$R&n*RVd!CXL%oJ>$V5?nPQ$%7-; zGcU6w6O@y|-UH8?p{EM47S&>f;L?KBqO_dS{L*63&@C)ygQY?36cl+4O?4Cns>P7R z+JY7;l9 zsmYmXnW-rX;gD%(uoT!mdU|@ksl~;K>8T1KMWuP5xziNT0I6yU14B^>14D3#kCB0q zF@vF=8CX4x2={eXC;?4xmZ=si=qjidb8&@&OtDe`bwI!}(fI|SWKkTekd~Q~nwOZH zY6xc;Dd_3xae+EXDWGYHN`=ItbZ{M0Y{do2(hA^NFx}$R0#M>hO;O0nEG_{}+QN(~ z22C)hfD7yVqRiA{NN|E=6><}cvvm|w_0she^z?Hwlj2kJlJygdiV`ce^pX{FE8|l# zi}XQ5O(0rJFBxKCUVcfcl|p73*oj~>V6!R3@X!P4&nyN_$du-$rhwu-1+r{_i_0J4 zSE%cCGZdnAbu&_P3SzAkz(d~(AP&SP-7=75S!z*IesL;X9=af)SOGM|k`FF5GxO5& zi*g}(FBcL?#ZV)PK}Hm3XBOxt=N9Bt=w`xe5U}!CD+Q3G0yLpymQ*UBseqc32{H#{ zk8XZmPGzi>0*HdT7)^%)NEy^QP~9mY-6^0J0<1udwNe1{p)CfmaZts%;E)9+1CXww zd;~w%N&z$)2=1>Gmt-avDcyqG;6R3$r=S4pgQr>{OfAj; z6$J(PpaywKzCxmcUNTq`q_-q76SUky0Wv87?aFFsf?HFdL<%ueHwomlynNlH#N_N! zP~7F^D?r$ww3lC$nGR}3flY8W|3d9_sC^4w%yP+|lPD}iNWtrU{; z3o60612Rtl_8KU&fVs(_syPvqjf-><2@aOPE1~X7Qz!#3u87vvO)E;wO)b_fNG;MW zPEF3wOMys%Vm`G5?9aSX(6~Lw;SjY71*t^}P_-J+gsWg`pl6`T#l_&8Sqv_b9bx%U zkqcb+>1Hr6KvFUTLm2}D12ox!F3|%Q1>o3*#Xe|$05mU>pUV)EkqQnbaLA|@E2LH= zr>3TW+B~VC8Q08Q(9!|WL{EO2f@%tQkpy_`tQcx9Oh2gSoRXgk8mHANNhMI$_=fLdnYfN?I$EXhoUuj8>&2+ae{41rQt zGPq*WF9lD_fg>j#RH}kXdjt{gKD=1!*;OhKAv(->xu#2JkgHuzp!L>SAkO8hf zC^a!fAq|x2p_-uT!RDwIt3uZ4go7LpSri482Z^MD9IpgYq{P6Wmjqsp#ZaEaz@VyC z%wVOUYG_cb-~?Lh1F};`)lAPYO;r`NhNB=S6}sw!fk8(>)x1~%)WZcYo&hBdkaCc? z8E8pT38)fLEoM+q-~b&TfSAuq2K6;zt4+XKz=VR9f`+rE0;p~TXY8WP^o$aPu>8#A zRL6ACDwLvvd`PoNPr)%KMdBv$pdeGLNjzSSAC4h?I9EcP+ zAwt{$2?+?PparVni&E1->y7diAeMo8I-urr3fSoi?s|rnh6p8P8K5cG zUpzs4V#fzXFXiz;4R+E>S39imTo=z++ z$;dAPm1ae#epb-Jns~td>6Fw|P;;XsUm+v03{-rkq$(ulRVski;-wa+=7CmJ<>!Ig zC7_%FvZlB+vm`MoGY3@h=cg&4cn4yyf)=>d3o@plw5TAz7_?TZ2y9(OYEBAhcE2D$ zuQ(I5FbyWN2JVf42OZ))5aQ55WDN04h~UXe>rU6XFWUU@^!9ND5PineXog z7DO>OGaq4WWi&qsuii^PmG4UCxi7BbD zFmDur~e!(H}!JbjBAbDdW5DAI|h_^t=F$q+t<)zvp|}Jzj05UQg7OH+WQE++-29?S1&zdlf*er)2;BSyD+VbkEe5xka=@v+C>6Ad z5Hu#1nFm>03XN(|FoD*Sq@<=n#<)N}0I!XNw4lK*DCXs2s0O7`1qFq8M;8}pu?rrT zh<9`fM&W}75TODfzsCDIIzzb-^`JpTr~p_VJh%uE0P}r7gN#Ug@VXu(K4fqcEC5#T z;u!|!K*w$3L4%!80kAxHX%R#K%m)p2Lbwq3fCfR4`LMxEs2C`K!1`c=n&{%7K~|_3 zL>*`m6GQ;a_wjd!@F3$b@t^@wr~pXbFVq*DL_pzQYYie9;OPt$*743DRSF7*Na+t0 z=2*o+VGor+QSa;M3>8K-2NV}j2^96i#Rxru!uwA3M^rQ?0y%|FtDJ4 zf`Xw1#Lu8`hUFV@96}Ws8eowJ$0h(yF+9Z6tK#J(hyVu zO8hvwxWotGNH5sL!RZAefnp9Qy+DLf{R2)f5D66Zkn{qU07Vy4IJ$c}LtKQa9yEb~ zMI4%5Kn9_N7bv}e1Qire!yS~@A;zGJL(&IW2Z}l1bO9EoAYDN8qxc7&E&@>90Z$hJ zsNo1s7g)>zFMx!22*ur?^Z-$gYCbp}KqQde^vAILQDAWt%A4}wBLa$X6N>p-#)j7?u=nu3OcB1jAFIKifm7`I~62XYD6 zHd_Tltd3MrP{66LC_fhzu8shoCn z3MM&UfXo76v~=neOnN$X3ML_)g6st00<`#W3dW2NSa}O7&PnnhsM3YDn}|tkAosvA zC}NQGgTzTP1B-r;8K~h5@)4eZMzbHJA5kuV^b!bgEc%J|0}l6t+(1k@0nUI}><8&5 zro6zXpC~`zaX-ingvt+m_Jj4Krdv>CU?yA~{wFG*<8VJwdO;4vqMvBJX!_y#&(WEr z><2OihSAbJxWTTa05J}^Rs%U3rUyhLrFTbX0?8eu9v!2VFOZfWlEonV;QsRubA`AF z-4rZ*kVY)=i{?-NFjunkw||%`0S{xbALdeYe}f!?QPDy5!~73!=8_QrAUlc5lOTm~ zj0ixO5NT#$>Ia#F8vbA(5sUzkJ{U%%H?Ur!A^@frL=*1^?CuAdK~(vQR6v3BAY-D+ zS3LTO^8;@8gWN)}e8powSU+m{3XTk11uRHCGA6E^!|s0K^nz@|)K9!#RQ<602OfSP zGyj211Yy+l4>pm^^bgica{33k0ff=YAFyG#;t%G3@GuKi{SP*gO#g%RQp^8f!wC5w zGCV+f0D!`qxI7C|3CHjR3=<*I3=I7sb5PSC#7Bf80HhCw5#=vLFEJ4S(+i?W@B>!& zgUleV{6!RCAU(*Kxbhdbej@#V)BPZ~5H5dl+Yi={TK+;J14jY|sYk{{mV;Q`Po!Ru zbr||d(2JrUR{pqnhLM!{K!(6DYPtsv=#e_kLGPpJNBAG4 zmniR}=!dxj&Ho_7aCsj--vk@RCN&H|b`n`8gOnmLw1k2QkZcB;evmn+;Sci>{x|^X zgJDGY!}Jo41DIYAO_Cq5xF2K&k@YKN5EnXr2hs<_MAol3^%Ly}9PS6XgNXVSr~P34 zsP!u>GO(s$ka}cHbUlZ~{Y2{pS%{{eB)v%bVdW2Ox`>?o2Qm(XQPV%nL~_zUOfPBa zALIrQMk{|{hGC6AnEyf3Vx;;VR0V?UgJD$vgG|KlcXa)T{14Jg*zf52VeUZlKgckw zeh2A?`5!#}M@9g^>;%!M{s)^#FaSXMU>M35?253>kfOF$h14G*I0D1*hVp_Nmh#1kI? zPly;r7S8ksGK<7^4qpF~XcowNoaT{X7K(YWddP)@1vDVXfDD0Ql>Ba_poMEq3rHW_ zKG5tau>~VYBQ$nkc7kY3dqIX`sT+{=BkU)B;u54CWFHJ;u@~#yB}gB_J`yGpK^lqk zFK7x6vqVMG54RsYTS9t(!~6`QG5rlT6mNjT?FWzcQ`>&9p~Tq_9&M+#{a{0hv!8^4 zL{RjB!W)J$!yPoFhdtWi;SC!7BHgF1+320v>%L-2pH^gJ?|q!G_{> zKxzeOhm8XCh+e1(&^5-OEQKl$t052yQ03t*1=y11SeQ!irf8%?-!v4!BAO`jh+`Ht zK${wiOThc)6tr@{2Q7ouf^`+Z&R|40g@FMqUkcs=204upO$oAmZfY)?EL1;uM=MtC zkTViN>xID^EEJMqCu^i+7K8SorJ%19M)opj4+k{7Kzlfo^Gb^1!Co%NFMx#uEIoq7 z!6!~a(u9TrigImj1(0coaalx=K$di(sn^v-Q;!lvnhFXUpk2SIMI~tZ6l`r33=}k> znnC+cp!*)6`awYmb_m?v;Bze@4hKoV#9`GXY$Y~a9J<~PT^v+1fqf2@fT{O|Rzpx> zc>V#kOtGm4m$*n0Fmu2qAr^6P357)*GI@iLfSCg;rqJC3%J~S@hkR;*dPkJIB0MICI-saaP^>N=13ASaacba-Cv+i9FlUlJK^mi zs0NrhE@%;n5J!zjggC6;hZqDGM~g_fI9f!)#nB=XE{+yqaB;KVPK|yL!G1N?$JK^Sq2RQ}=xCR+Q4K7Q}QP5P-0BxQI zTY*cxQM?A|oa-X6B5dx2nrjR-H?^XmNI?^<1sqXm?gpPTnV6%XrVs);cE6|+ej+o} z;V^f=wqn8gVAG&y(L&jv^s29=psoe2p5hBiioj<6m0o< z3hGd8>I%7um7oL3L7O~5C#|I@K~7b0u1qh_%u`5DP6qF)&CE$Hf`%>w1GHZWtsjwH zpkS+@1~nO0c!L}Y#W4TC;{_7WXe;hD6i`eAFL2K>KivSl{Z}0lRqCKUq7Y+}a}tZemr8&R zqf~&LIgy*6Qks)mte}9+Jn(i_*ePA$O{I{%fZ#p6dIUlNi+>5|z%Px(JkYjhq_6?+ zR7DO?(3V{Fa!{fKZ<0jz0apKlPH<2tC`twIu>@@hOiY2Cw*uO8n5dxctPb`$C`3WB z0Y&*)smUeKfPlD9UkhnVG-RKxJ0v#UauU-KfeeWp@V*Fm0#LA3Fo0zpeJyAS0m`&E z$~sWYW8^DnxrAQcfeKY{*#|8{aOp#odyusppf~}K{eTKM9dO$RB!rAX-3@rVAJ5Pl zTpj3GZKyNg^(DMqfVv;8Tm|a|`4?m{*gYT*fm&i90Zfdd9wd#&T_9-`^&t0w1o2=L z^&oYi;DPxGI!NK>b2?$8h)TNUBO$nQ;SnU z*M^klq=3p~(1F{jDWGGQLG?vWPNgF9?o&kj$Qw*!6*>aOnd#udwR_OX1Q7X-C5~BD)hJg{BeaPEZdXM|gsE_u>ps zP_qth8)|w1Nuk+>NN3Ohk~a8(MB%MGxr z^ACWCgA+WmJ3w6nbZ5ZJ7g+xQsux)wObSIW%w4el0~UQSDHMI6ybr=K{h)pfR4>TE z8Ynpwl(^x#bx@>0`g9Zw;ayFbd7%CVl6mm#4+%}s*(IR6qcRYc2U`0QbiO;tA@Bfz zmbak#0%Dk9Lb z=?zt%p#hR};o+T=pKfS?BfX*Phu92>Fqr+x`NcT>3oCTNJ_a3}4)!sIew_YB*N@Hq z;><1m%j>Z1s%sk@k2Ps4fK$!na5{a}QbYMId`%4muv>&7pi~XRxt3UyOtz1P3 zKafHk`auCelzyZLfcYPEVHR=rqecL-e&Xy$jR3fQXao>;KWYRZ>nF~B)CfSpPXNuK~(sI6e6sL=YNneQT_)jL>K_Gzc@3GIQu~g z5!&JQgM^8)AFL2z0L=c9L?Z16DMV<8+Yb^Z%6_mygaI)7K{vkP3V%pj8C?2-lz}xP z>%(O)nm$CNBehS!7t7&DchGi%5vV~0RtL5jwcG`Z<4AWH`jK3quLT}k%}oTK^_-NN zlV1)#%nLN*1UbDsHASH;wFq=zEqGi6bheQ$WU?X!bfFIDh-mQmPA=%AI#8Drd|-5D z9@t!@!{ijeO-p?(#PMUGGm(n(b5j+{Q*&~3v-9%H^S~ocMTmo`a}!H4Qb9+Vf{rGH zk3JSFXn?H*op%R1It}I=@SPqd8G0FrKCZr&f*<&VR?t8TVob*tK3D=C@B}*R!(YKiEajH^apHp9{B#zL?^Z&!NCpz(FGloWgQ5^E5!SN1#a80P8}UErP^7h=iM;SV5xsi4~-n z@9XJDn)$w-ek7Ui7(t@>ju9l8Pipx4k{15Hq=vsQY2ja7ScKGF!_k2PjhrBL2teTj z8W=}TII#2*OsaXog++MH3k)L7eZhf2_{@Xco{3~6*8CFc1Dfao=NE_u3?mW#1>MF; zf_ad8J8_!_zR!~s^S~N#ng_ZV6v;H~9bHgAA0EG%>EHqaErQ|x%}fUsI3QV2H=VF~ zpi4u1=Ir4 z-EV{zG++ym!pA5cVgY1f1R3VXW3d2cKICRxXxM{NFgEkymAHZ}_<(HCyjQ#q^j2ML zp@Rq?@bzy<#$z3zz+paEFLvYM?NG29~i=5Lbfak=%XD^l;n3JcKgH@<%Js zLIChm1(-dK&Zy_R`iA;|&+pXNQUI@B0F4>IFAmZu&d3MNbA!eJl2XB!OXHgBhOUz+ z%g;7MDN^aL|H^%wota z86rc2)I#lo7?Te%22}o|>V@b5sRuhsLqRJoxkNz|i@QLr8_?ntP(T%zKniA%K5#x( zfUI>=P_$K0k1&aw8|FAc7*-NW`Hb2=7ZSaH5#Bp zO4UH~T!^#@l0(O!a!DaGF9qEkh`Y71x*HtLMj#!aP{4E-*#4Y+1vLdwN(3hnutIdZ zv4tZ{4YX&VYp4KTYK>JtNG)V-1F|Yi_kh%a%TK72L40HkI&%|b0kRl~odZgTpv+}s zqk!aHEb$wP5l)csbHNY?nG0F}fp9ZO3>hQ472RDBbG5LViwJj+qj85j$S#N*P=Xi5 zUm!JL|AV3skN-jHpm7EF5J(J$A@0@3a4$q$6+;}P4?gybCB7i~)G+ix#A|Sf$KepK z!w?7A4_<5nX_SLq01|^?h&?tK`XJ(V7~&v(;CKNot^^f0pj@tN7z-u{ zgUmzt+tyY=y#%A21*w5yuzx{UXyNmZx+{h~5c~Zw#6jjF><1O}saWj?SqTaYPymDU zz%ayIMXcsRhn$TRphXi*4~T~7^Tnm!Z@dIx)dyQ7 zgQOMYP0Vzn9*vaAL8?6T>`+J$e}8AhTeL zg9y9d7OQ@6{O9Dtvl_@ubd2m5WI2etVhq3rgF_9oUIE<;0=m2=7~G=DQ!i2Q0Ii45 zL##A~Xhb#_#0KjFEja|u#o$~wt`52gOI-od*GW-GDlGwB!UnoEhnThEAe%vUA!Fp0 zB%BS8MNI#J+E2-OC7>nl3bqPJJg6RIvq9{%Lx6H%P4z_sPTdJ|Q+KfNqtH$y3q+Ib1;()DnU^8^v89 zcYyDbQ9#s%ATba|Zx`g`D%jb9&M1dAsX%H#I42)04sRlW#320?h>b9F^tHg(Q~85$ zD1ti_J}dz57piC|6qkT@G+^tTKpWx^1&}&kUrU#AfOI1e;u49?>UR){SH>6vAzd64Dr#mV^vsnES5VVT9Hi8%_vC8a5u`Iy^97?h#+ z2|?#(H58y50~M?kK(@onMQ}ecueby$*g^BR;7fZz0SepagMG9Q(GN$zTpiTs)POi! z6B4nIyU#&p#w#m>R{X>EJc7dt)}O_8aXr`=9njVxaB&0~KZgwWfb%msXBvR=DF`F& zgGBcNsw<%bMIb#OtOef61a*%sE+2wV!v+sH!2Aaa*m!Utpo9=Y7}ZvA*nmTj(Dk99JBShYu|jSr1sMy@dEjwca6};`*vvfeVt?q`2~g5P zl&g^X7IM>SJb0HVB5UR3=VwDML0K zy9>gFmT4uG1*xD5sz6tDCYONx3W;rqU*o}k1w|?-tdl_n0Ay=1$kFkjTPCB8OikgN zm7(n`c$|QWEJ(EiPWK>j4FxSwk^s97DTjd)7ieq*JX8X0s)B-_p%%N7pr%5`$1_qv zcWXng9nQ=vPAw{d+$WlrpOcec4l0I`Hvhmbum`Od$;?B&9v5^)SaNDHC`Q4-3A-q^ zJR`Lz6)XapCIH>42nlm&1Z5U0uf323C+KwnD%di5G?$0Rs7K=%;_`TJtV5ps@37#JO^U<-;pP(7#s9>P!n?f1)AC3SU>>ct;;kcfWWu6DQA*U%upgc1tM%UxWs`#ydrZxCVp9#-Kq56E`#i z`^8ql5F!B+H#UNb8=;Cr{cfuOx*UsvfuR=OssP71Jl%sG3#rEyG++&H4Tbn{Pd{TL z1x*DtHPD?u(Ar(W##X`5!T>b$gDMVcAsU0lVGRRVY{bWdl6ri+LVP@E)+@x*-w!-> zrJS0RnTBLvd~k>hxCIdmRspd&9$nN%!O+su(!kIM6l7qhD}y^cuxkYs>}(Yvi!Cwi zSF$P111}x3Qvzwmu-_egFCn~rfT2G=9#mz5+bWp8fu38Sm7AIypO}-ApNu*>3l0KM z*9Nqgv;G60V+;Wa|viPIv(OG)X;;*H=-EEUc2Bd zOc6B`s4fGaH36O)LW@}Fwe~uoCIb90jCK5te^o=D^FHJkabSD2O2<8VVo* zgjZqeK`{?0R}6I&Knv=@vv{C_HV-NQ(F0QtDgaQ+1&|1|pg_8B3@Ph_hJ7HJ9Z4Q3 zi(_qSK}tVFd>}_8sBx>K0G_RbI1W_LLd#vG2*Rce(SJ_`t%(7LvIeMbh5N5GFBuvS zV6#E{z#;p-!Q&UHMG9q!MVa81J!r};IWZ@>GzW66b$*%xXaqP1Gz3(sP@W22j}2~= zFfcH{+9i;7JlJS(3IN4WX&z|xVQLCE;uBL+K>Z?cKRUMnYFIeLu>3RyLueBgLtk-e z5?T5{8wrc8K`lAwe3Ibed6IJkflE_H9fH;6%=#?;|i<&;00?S?Zns)88<~qmp<{iiOH1dFD|7_e`2y9 z5h)eqd+hEnE~Q96G-nbO{NVmHTKGY8DB1cGQ&QqVF@P%qji5yXH~=uxzfXK|X%a>H zVJQ%o{jj15r~Tj(gMe;q?gp0_r0N6Zw)i4~nH|Hv;*27YHk`3!3<+fneYuIrc=bU; z2UA~hDOev!0;i==&7l6if`S5Cx=Kkc$S=+$vSb8VgF`=2B_kI7un<#F!0CQypka4^ zVp1`vTmYF&Ad<1`FHQs%%(%3g;E1oh{G!}=!o>;5RVd+=l351QhSRHt77z=;xd2N! z1h$uOP-EDen_re{XhwQ^2I(_4vc?@ZD8&Yraw|VQGnojBarqZ~Viw2&xFU#v{UNEv zpy(yr{l)RQi4~yqh0A_K-U4|6BixJQb2IZO&=0CNDY4&&Qu|E|AR$1e|9wFEK_Nh< z{^E=rSowy_1Vrh8CBOK@!%ZMhzllLSw1lESKiCgs=?CX`9}@#SIS@GoVx&J%_!om~ zPTW}l$p9Ss!EJ8bWfr2y!m6Kynjfov5?W4J^^?$Y!m1xq!{CZOq|n2b{y^y;-1etH zKe**go_=t<0&ns`DL}FMKNr&S##2GV!vI5nE~tG1wjU&g%MWljfE1zBm%as+@y15+ zhGy}_cxqdM`i+h7>W9|y*y0b|?*e5%kkfFvAGiNO<#)0H>GiHpd~R_m8TxXdnVo=3 zL7qVg=N#fX))@MH;vqJYY9Cl1xL6^e6I82Wix(3E;%vsRpKuEwhyLRD#60jw3o)f4 z7WWs&=YxGuRH=+re+9?@LV<@RzQFD#Lm$XGf}X`1JPAEIkS|fn0g(ML{e-(2 zSlast`|-8fVFf0J{jL=yMTyBJCI;~y#I&06==UK@zfU~e1?1^BF@WrS1?k3_d|=+k z5`OW;i6x~)i6yC^N)uP|!L1)WP6yHo3K=r&_e=vj9IP96*@U~kbk8rzN0@-i{kZiz zfi|Ln4Iro&R5F9yiIRSU%QH)oGe8F5(vQ-?#?bEuF6KbOxb(xa9>{vk_zTa-%)vj* z3imt60FXr}?gwqu%*-oI#oc1Suiqy=HwQExg3I-0khVI8y`XUkyag`2i3M^troS`6 z?Ihf;hK5?Lf|Fygr*pi20A%I~GFI$Cgv!?{ zxcUUUDtNjux)&PGAJNZ!Mm*(VBwpSpO+3^2a%Z)Uy@&vm;<@(AwIDL(*$q?BH0Hv z9o1A+b3;G|LZ+fpQ{ZckVaqPT#xZ~$;F6kCl89d+cs4XRwItrjG1xyK9x_i3onq4f zPlQ1^o+;27d2q6Y+=CGWp1i}V6KpQhEGrex4@WwH92D~qcYxMYffmJqr_cQob5j+p z6x{p~>vTc#0i}?Gqai67p$~FkIQYmXkRGJdf=fXMzk`l`N=*cxbp%SH>S_5!>I%-F zJ+39Gxv6<2;PeME4ZLnl0b(A~++!wa!Bt9XL26z~YF-KG&})!Ed8N5YsYM`OPJVs? zXq|EqI4^(}<0Y1WvJx*BX#JXkfyG&FS-3^c73z&g_Mi%`sg?lp~%&&&g@Jc8W*k_pua=4pb9 z2GIJM(wq`l$rugFyU;=~R?jWJ2)6kOvIr01Fi?1-r?YSmPajvPPeAgJ_=lt?upFTj z1>U%dJxw9ZLrqTwMfnB!MWECUInbVPf`T{@VqRiVDq5NXiDOGgCJGe_>WH+1mQvN> z2?!RyVE=+*L;>t65DRQEPI*w=fa`crv?hY4{=xB&Gaeyokzx|898|6&*L0}y3DyIN zQIJ2;_o6ZAbI5YbMYq>c`5nWV-9Q_IR9b`R|5qNqzHwSttkpgl?vbhgd8M? zoIPRT=i;xBk`FBx(EZ`*hT9*WZZLm9N!=eD~92Ph;Z7H1|afX|r&rSf8EN`tu@=4SN58Duq5 z*$i4)1-aG%axDXR>lY{lAm)Jl1@<*)+fFLziipHKn5$v#R{$9aN{-;d9l$;OuSuw~Bi8%_`JO(il;U0YEB!b%#pzr`M3xb9T$TcAS*wUE^ zG)chHkEa_bODcehQ*dU(A`Z%to@uDr5q3WbX1VH_25E3Wid9fP#MN{JITIwWprzoM z22M^&o^DFeD9$eewGdN_6|zc;OB52*N>Ymy67v+4K+QQN9R<+RWk@C|f_MlN=2{B5 zAjQzr4nWQZM-fUb308-whQRiNm(pq|AQkzb&AUW4?-Vo@YHAcT6mT@YG+{;&(cps_ zh0@Rioe%(8Dh4eHLGA}(+=ZKG8l+?c2QS!vXyzd zAWccI1)y|>UhaV62ofvE?H@?}2a|m!xeL*X8c2}*jl0|h>wyFk$lvJU zGuRxELa;B<#9_e$8oPyr4m4a48gPaSSPw?9fXY$a;R4bF2^I!ue^p;g0bGd3dq9RK zA%Ou3Uo8a8#ARLAsG1?T*tf_%v6fF5{5dk{#zSOGM` zQ&fgjv@64|FS98wNy*ID%dmq41d4c0W)e&SS-dDSFCCkBN@iXO7V*kreNbpYWMKCq zqHn}Tn4gka1R9iqItU@2T2z#W&7I|$c`5nj#Sr5e;Odp~3qbAcV!aH=J}Q`hl|ZK} zB$k%sLnL7N0<;w*#NXd1KG@qc05nYyoSj(!u6jT{6v)Zp;L#mKwVIiesslO=FEg(! zKRXrN`AbYr&IAt;fyW*}k){AT=L^0L99*G+HfX~4>?=^?d;p{k`!N6bIz}KiviUjs zy2kss`niXAfa-q*Qv>i!hHqj;W^QS&LQZO4dPxSvW2xZg0x0AlCqBYG0`d&fz5tN< z0ggeAzQM=_gH2Z;()@zNqQu-(P)DJ-1eB!EQaZ#!WdDFJ3l4I1_78FihFS!rKwJ9s zwG=$_GD|WOa};u+{z5c}Kqs(+4tdnIQve_9o&-AA9aLMSCW1x?Q%b@17nSCfWadI5 z6?E)jD*TpSh+9A;4)??dxjOpz_&di3hqwm7{2vbLj~Autf;XupmVo0uBUK?Mvlu*v z2z3;w$&*|JatJuNVLCdgQUSdG87hMsBgpOn?O%xx337FX9McC490dghLjwa)l7@v# zN@@X?=mzyV6hKG*p~M5sd>8*vCm&Z(X98g?oMlj9VE_S;LIf00Pz=-W=I9Jpj=|7S za0_zubq$UWa1DwNc6Ijmb5YP&FibUr?OH+K?}0R)2WkLjBo--v?|zO3B}@4JO{8QG z-?9y|8$6~C@@_mNNI}h0xOge#PUz%3$Qe2yaquKdVonZt`w-X)w2+3I4xW!t0Gkgw zSuY$ks1Gt7BA$|8nv|0Y8h9=$i7!sgNrPDeD%TYhpnG`1{o2$#G!-CsK=tP)R-o%f zF&}iyEt=^l@+J9bW`m*%$^7Dy#G(?=J)+i#Uffl zaB<{K;PK(k@!*6J@95{~6B+Coj7VM}b2IZwjE&+;-~omfr66x1ySqFY>?w#DApOwr zEKkM^POv_h`5=v;=tra$&^~4G-oJQACWgc@$U>-@&;xle#4#>LhpGovG9cGQgUUEh zzu*v9k^UX zCMexObb)2z?PPG0M#~x?@508Fpx!_v9Y`p{^+V-Rk_Hz2C`km1JS>>v%ahSU3hEEA zJJUcR0NN#2o(%N`*eEaoRR;zVLMr8XkQWFaxJB-0C39td+G6ileP8E>dy|$nO3vjCeg)VqwAhZt* z@-TS*4zhU=>}tqhAEI0Z5kP2Fwu-&B~zhQwzZJLNFU69!zjCn4X zE9k&ND}~TJ@Mg=Bd{FlQe2RyH541r7?r|str6z+8#8yO{6$Xn3kh!4Em>Ov3aiNC~ zcp@3ne^CIpc#-bO2AKg4ALQN;Xv`FJ4hJHbKvse=NIeLnDp$~et(s8K(uAH3pn<)V zQ$U0nTn~le1sWX0;zyJa1G!mWOCb}~B+bdJBA9Tns>fmpaykPo&(KiF1f^GNg-it- z>;Yh{kco6sEyx}aE-oobE~wN{Py;8V=*(C>NCV0s7IcK00X*_SYC#yT45^X@TMRAe zL25u4t`1wKg_a*6br82_fsIheQm|0~6%J_4DrI%(*e#$YYjjpDYOw*X zzd`EZY9W~(+AacF3(5E(H6RRE2P=#)RDzQurn#VuibXBROb~{f3#!@>>M#l>kXjIi zs|U4;5bEIt97qia!_`6jg?;iHB?(=K{-$3#sY>$1uoj5GKFAb_O?6i&1JH zNc=(43|jqw%blpz1UP&^?!r_aorzr5g4Dq3xkPY9msnbnnUk4VR0&$d=pO)W2f$8w zK#pHfd?RLokPh!;fSp@YTATstv!EV01FotdjRlbXpm5DgEsqCXmxG+IK}$X}Qj@d6 zqjcaQl+0pO7P#3;m=3dlT|Sqex_0*PaUCq@Ge5r`o5APi1ppvpG40CdFy z=!9ulU8@5bvry0kB{%uCA$7wH+P;0y&# zYw!pI=?AATs76@u*nuy~fTUSa6oAx$Fjy_v(bx)cJ6mwu7NVvx2rsDMX}H;i-x zs`HbROLIYo^`t7~7eLxRu+kkA6A%ot8-&4@fmih*hL~dYV3xody4vugtQB-2V_q0q zAnjeK2Dr1}<)Xfp0;J~wZg*ggXM@}V!-zBo$|&I42;P~ng^wyi(+M<*!SsUYYS4N( z5Ce)qi`1b^Fa=uf0-7L#79`j#0Uc}&&J17;NCYIjGGp~norUHqRR1IV4l3`VVT+n$ zQSv8L1uSdYDrBOX2XOQgG`72LNQ~6BcMUgq*VA~U}$--ucZK9Z<3L!;OPQtfkN8xuy$xMBrSv5tnlChr!Sn# z>rsOUF&G1H$G}fw15XUYD@&+*z=M`0`QQl$P&k0Z$`re#3# z;B<>-rw!=lA*A$(+@8!YEdh1vi@?Xpfg?vl(+V^Vk({jnH(m#Ho~%MHXb~tV#KG-# z(BWTD^)Y$yApubEgTn(<2Bf5bs|QF3BCUum$p?$05C4GmmE?oQ*l=uWfbKN_`4gH- z6try>prHe;=MV`UY(6Lop}_%bPrxG%WDeL17zGJb2W;#gWDCqf63QOJ=7Ul^(d8O^ z9t31A=&ZEV5{0D1zO(a3(-^O9%%X)-Txr{q~=wS9uUR|2T1oHvQGw5v%q>J;GuPBwEzxBP(K7#grdx2 zfu=RV6ItM*9^_51dg$B$=%h&nt+dP(=rjPhR0O*P_55kjX_}w|jun)^fg7KgmzYyo zoLQ^{(g0GQmXn`YqEM1s;06)_TLZQSe|k_vX_0}<0b$JY1I6>2R?vPOsH{jWf+ob| z{Gy`Lf|Aq}&}re|5)5*!c}@=Mahag)3%Q9U$r-6Bko(1v3K~V!k_O}!Sa}HT$E7Od zmzETimVl3)2j5nnm{XLRm{O^bl$x3cT92HEn7Ie(2m2o!zUZUz(DFn;kSkd|MN zng=d6Z1gpok8{}s1_^6q zz{~*A=wt4nm<5T076}z)mZZWO1)vq!uoDiUc*M zmnL~73c8@Q0-0Y{umiX1!N$XK21q>!lhW6Qg$GC<2!pc+sI>(e%L9)k!bM=&8>O5D z=>cK5DwMHBxF}37O4}2p4~F3?LH44IA;M)~W`ME{v~dE-s~Bd0#!I0#fvP496QFVs z-H3DyR|nD$3R!JvQ4R_Zxb4uz4bb`mWH&gD;F@6yp_V8h>I{%t7$&3#ZXBrN1TzX& zV1gnI$$prbSoL7>0@OH|_o1dC!U1F+e)rix6MAN>9`e{c(eBI4gEt+Ba39D$APn~( zdJseBY(Z*37`xj+5sHWlkf%XvVHlqtxV@mb02u@ICrmGl#!!dFZ}7~67JsjAj>O?FBC{pSNnF$VmWKDR=S6DJY^mCCz6_JlH z%3;vB8fbwEVyF|848iUNxdDWcS80F;i(vvtGaMjwAdIwDL%|l>bq7!0Yb$^k0f5wC z_{&BClw*-n5yHJN34Hz{#!n!7K^V#DpkxA>G=!#mNNX144EV4GJVroz!QxfGmSygl14cKrzC-Ap4Qb!D>IqJh)>Z4uhHsG6&Qi2QO+t@fXN_p#Gg9HRf9)ywQi%W`fK+RKdf&kU$U`f<+1)NvF;-C}( zZDAq!&{7|fUqE)Cy92Hq%{{2h z7tk^M{sFGtB;!k$UW!Bh-a89Sh5DS=?``SD7-N22PG*?8$n7zxG2B0 zBr`7+WDR&wvKY()6=9H@BS1+9%1SIthq7`rq4!Fl%R<8j>=VdTuk+TOucPpWey?_D~tN)Z@@{sm8!V7XxZ3k*C zm**E1m*|4G>O)#RsyQiE;DTL80lB>gY3YJ&L166mfy;MLlf@8JWg8k{E#egvlt8*c z7<-WmD)m8;j9k#87x5t781ac{%7E-wP*62A!0H0hQWPlR!L0|`3&P;~8=gnd1`<%a ze&9d@>49Nf?oI(Y7~D)UG}1Fp1CKa?5)o2ffZGTbgRXxDH8D_KpaV^UaOH@R5^PeS zoQoF8Ah%+=GbRtTiUl%TM_DSuYCb6cgQh@0lAy7^(!6BQf+J8`$SchSQJ@+HvV{wz z1|BPrb`pkrVdjBi5D9|}($&?4QpggBoCh)BQVz6@24oKiLpFOW zXeelaZq!o%buWub!PXRODr6#N20?0J7+jLZJG!`7p|^%1=@X_7L}T%LiDODiu@y)X zf>jNT^b8@T0LXe!ZyU6qA~O~mW#F)ZD20$v`<;TxwLhsiKc}=L73v5w?e`7!3Bhy# z#DxeFoBw@52SpX+WI`Q4uKkYAnAT&oZ?M|$=nVBb*q!9s?;qxh=>V{aNCZ~<^UI)K z2P-7ge(+8A7!ClNh(utsKe!~n2+09t+VA7AzXVhal4*ZPkfR@F2?!2! zBm$fNLy8h%eg~-}(|*vlR?G+h8HkLr*$+BrK>^gj0{Nco^ylO6A3&b{KA__fL7THF zvftCs#WTp&87&PU`yIr_=6}yT(3t|sB?^uyDMeNaWQKo0NKm||pC=ji2jpjh*C{}Q zfK2;CT!Yc<236D`KO`}n(K*iKyg$0t8Mu_&`7BNt>l+3DZcGZ?e_A*%dw%*laV%dC)JKy3Jf;ueHK zVTz2ghHp@ie~^`eXI@!iPA2HqL&({?nfZC(rmK~LY6`UXjp#{$%+%LXaDksrfVAp5 zKMgXngt3?kTHb^E1mOM#s9%7(aSvoJ2t#hMgeXF4#)HF)puM0@Kxz?ukv`Hi8(2TW zew6i1D2@TS0fdp))46uVn2#v zu+0iu3cjhi`9+nGDIxIL5c&Bz3c0C?#gNk|f*gGnAXnFGfUngAAGiqG{0kq$2iXKN z2YTEENJC~Z)C5RpHa9;nvm_sUxCLln20Q=-+PMVY_n88^ff(chbn`(w22vA~Gaz$T zNQak!;$KSvc5Dd5Rrqa8$xKU2EduZKNlGm#2d&QmIYhlAzd#-AA@!vEl9K#fb+>r5+O%$DyV~2b%NHf6_v!RgU&Qf z&Hx#anOB@z1X`#BIteB>u>^EXc1|T|K|5%Y7o-O?Kv1jzJsAY#GEiR$`5c&nqI}Rf zWT?RdIxhpyQ80y<2RdOiG|C zXel@rD-rViFu%uQIcAOB3P7)$QZ?`prdC> zQgbTx6g>0Lv=^nOfmZ&OQ6OM9Xd6H15GU}u;N1KoP?4ROrvN%} z73_adQUo2&nTI$*uc$N+ybc%Y4RBEgPJf`X29&B{NnHVCcu73yZgJ4b37{mS2|1oK zDHS|xm71aeT3ncss*seLo|%^iG9^C^YPP%30Ju5@`_7y!N)d%@=Z}H=!9g@HNM5*_1a~biD2tMkq0?9NFC->bv*^o5{2Z% zJkYs5;I-ZP3I+-qNtGq3#hN+_h6)Fi>a3%TR*4_PLEYEYH{RJl)Gq{j`FXH9B*7_Yfr2VAxg@hJu_QG`Momjkm5l@Qy)@Tfdi;m2Xt~K)L{x*3a}%C zP>2CY_4Q$Uq~IK3b-vq&KkeAx#$_8?`FhNceKiu`0~kqNODDaOHjgg^xw z=+yR91<-{CsR|mIc?yuUqfnAxo(MWQ3X)Jk-UAoW;KCaetY8~cQ}h(v@{1HwD-uCR zed#D9DnL|$E|@klhM1)TDP~JSr2^Emp!!rnAyL8DNFfPyLT+(oaY<^fjzW26PL2X7 z{goCdlq6<@vYMfh3B(vssgexJ`Kb!vBS}m1z=zy}oD0eTpv9%Ib6P4|xegOkDT z(St5N0G;ENnU<28rT|J-jy|65e(`1|PM#r%19o7M;N;`)>>VHEAL{4g>F2Is0Xj#@ zF()$}RO~32nJ74c+>NxZ6o)<&6n(}<82Z485#+9v)U?dJR0Y3yVmNEqT>YfUvaD&DT``o#Lye zP={eNLdM7gkpUyh2YHeJkW(U zu(SqASfCULYmy|Trh&?KP(21YM;TmEgDZYe7KgRkz%dHWIw_#6nUY!px~3z)v_v;Q zO*bjOG%rOVF&WfCK}0%I_#(SEG}zTeK|`SqSq$U{O;DtTCFYbu&ld+5W2w4npwx-o zIgqRjb`R_(cW?<(3Obby(!zl>Y2hgb7JmNzPVvDZjzJ;NkOGAtjESK2wG`ZP64Mnj z^HMUCAt$OKd$<_pV`vaU%PDY3K|=xAK36{%gwX~SMhFg!MXY_0c*0^G19Tq%D4(Ge z->?!O8L`G+E4jEV9=;OXRzWE@H5b0fUoW}13~Bih?A#^z-hp^D&7fWxXmt+AC*bu= zu!=q&w9XuSh#6==Da6y?FCOWfGzD!1L-1w}kiN{k5<|225(O=AqddN#1nB~rT5!3V zS`-he%s>`FvmA6!1E`#bO2V{5go>k$K)Va8LGIH5A7E9Bq#J%-6x`~9lA`#e#Nt#? z6CQj%6XfPW(AHGws0wtYJER{0YEFY)tDphWrBDD-q^YM6TmsrglU|fxUaU}B051ul z?nSW=wuBO55NKg8C?mi|aiI1=6@gZ>gSO{D?13gSXjp(KZ03XJUXjcO1vRFBU@drv zLa09!G(a^_T4GUZaS6n43gCS}AW^gc(1f@JVL$k&G|+r4C?Mj&4My;qGm!Nl|G7aI zC>9l^78ihyzRybsl`9~lktXyZ&Oyt>Adf;Z!amrp1aP+-wD8aXvit|M;~10{KtfoL zW&oQ6H3yt@b3onI%=|piy}OWf5N%{?21-Us;08fvUTO*~Z|G|&c%&v4=oY2sfD22k z=MI3*3nU^NfI>yv5Zv1K3-y77Cn&VQjsmwri=zz{w87iWQP08z=OXYKn^67gx$64r z$?A}for0PIR2Xh7cw7U1TnBhVU`Aqb1|n;K>;B;A$PK(cp9eG9MHU<;n4&{u$WF_)JhI4w9sy7oCNJm!LQ& z7N>&xT}6qykkk!I8VbRnGP_z?+&7A+Mop2-;H&YUd#Yp*^$Qd{Cztn)AWI z1x{C>@B-DZpsEv+3LtVI667F|d>;6ss>HnHRLHHee(=kUKqCa8#xcweNHq>lFWB4% z?)id!56LhfOBg`sB|=@BUj*H63~>p%sDc($1eD*wM^-@gY(Z2b*AEJQrMdCY!^(6( zgHrKG0x;#Uda^jPDmA_YR0)*CJLi?egVTVmLTIpSyi;U|YcRTcpaD5Z^`!x>JK{^g6sjB0y#*QvMT~es`*I*Vz~g7&W27^y zQuV<~U>z>h!87zhb7+Ge>@cu4@K~AxxbVo#ONW#=u<DwkSq7;@pne3!GYo^=2ExemYLLCUgwM-_bSa=!5SH_|V5JZ!SU{~^_#sZv zcm)+4gj&NOx1q)}I3yvBf6zcRv@`&z!{{riVWudUI*{EElWY}G^?{QYxZMB}hxq}Y zT2NSm%tdu4s4)W`<^_%aAvYR8$r;`@0O<=ZNkplYVYvk45|BK~{%?@({4~(%cc2c9 zCTI)}HZlec3XpTa?k~wL0B0BlTX2bhGFAjK8>A3qJ~%zW6)V~*m>?1gNFIc7rVrPO zg4AU2+3xDlN?sk*Z32y)g2wg0<71wAC8_DDMaW46WF~0;5cIq*P$32xss&Zz;4TL= zduYOnA8?Bco}oed!S03@(1_*|YElQO17QqhL}X{E9z@v>&C{T8gJF=_AdEA75a-Q0 zL;MOmZ5Fwqi#WXwWEN684%|Zp6|Ep~-^2>!Hl6~;L0_;)h2}44`wEm|P|SgfgWFwb z$A*H_4J^&WI~Z`?ka=BwEy&yuG<-mPAJDl$@H7ny8<2a!`Vor21rm5=E~Fz1>W1L- z0!TkNesLOtR&awXh58$$7mqg3@OBCExw$yiBHW26<3TM=q;vqX3xso1bBj|;G{6A^ z>-K=sB&h5I`&map*H8zyG$E@%cHnj=N)&@b0;FDFOQAd&)Vo8SAOsf^AbC(3h_m5~ zBXxoFf#U^~PqDS9(V_*U9)xi#$A}L6&cYcJU~hxdFUUSveBiPd5*_4Q1+oKAuL7Q9 zK1euHQB`jy7cRp}LHZ(sW z;v2Vq)KV7`7a$U3KL~^40k?KMi2$c2tSJFx7YL)oKQ1HC69F!DNKHJn><>Q zpIEiwiArqhvBo0ECI|-E1;QxtiNzfBsKlZKPb@;}HCQ}i(+i72kXyjfyc(AR>j)PMvFxGDo#1I~vaHAShQ z`>;Sq7@-9Nc-0wreF~&^3U1JAz&X<_HsA?rjt$qr;UO8Xz$ zcLrMnGY;N*1-qjFbhf5KkTp!unf?m!#(NY+;G?2I z2mQjPQPMyYqDb@ppmGe!0jL8OnK`MT=>gOsgtX)mkRY^c0P-)iy$_%00J{L(<3Kb- zLF%yeqtLr%Aaxp`!2?auQD6}JtwAI4C9tIxpmPK=b0D3B^28$W0vy!%2d7C`xe97{ z6(gV53lV@vI5^cn@(svt@H&XpBJdr`m}m7uMiYoRr59ut2!rZeMBkRk!%?B-21q|7 zEJ1FD4O1YFcN}_9ioH=fev_t2|}z7R0X%p zqT&*Tkj&gv&`MK~N#I#D1<))SJduL*fzv03Lltbm14*Ea5B88kO%0j=@?|(6bHM31 zG8L&-Kq-%cL21qtbj~znkz6M1>=anIg3JIp17Rg(EDPpeurrXt52PM+t|Z7@koSGf2D`qaB6F(xAiu&NZN=yP$=mpi&XMU=mck6_geg ztCTfoZJjbDlRu6;hLkUA9OJQdkgIoqu2g3SV;G=L;^GX!*QqvPl zz$+9$D_X!qyokgEQVYT;E&{jB;6oE2W5M+sF8j6N2?#v$1P%y0*sLv>hZ41L^Fa1O z#~8t?5NDAgc@B%=po{|23&K$Skg^8(U^I{-XuKDtmXsFdDS+?x1f^I%@FCF<1qxc= z)1JW=A~ml;?dzaaP|kv6Ea)mOh19%~qDsVCB2e!Z(pCbulk*E8v5YpENJKLk9KN7z z0LzwINF4ZL6{vr}`*5(7%OOW+M6P;04J!54JYE!6EG`@rc9 zTwsGP1wpf2*A7-S5Z?*{?LUIH5JBdHFz)srWbIad8glwTwD>@J^|cgSi$F_fT*0XV z98w^0{4PZ;pg`*NL4C@SqRiB?RB)yRpI;3QS$JO#Y&Iw$LF&Qb0?V)<%ZfpRFc6P{ zzM>8Ofmf5PaHwayC*z1?8)v%)Amvh5%~@4{yWr zn1Yr<07xGDI($e&2C3Zvb^>IZ7bL$y=kq~5LCBr~42w`Z-XOn$@+c^{;&W2VQga~w z2Z@7c^r3Y>&Soxr#V07VAnh;Yv;#Z84O~6ur-7FYfO-$bkk#z4?lr_8;LPkqYc2TPa$prksyDhfzLSs>4x|aT!Mp3E+`+Z#I8uth?W(>2^@4P8K~3;=>cKT!cA~|gR(j_ zkAvI|!yq*v49@PLi&>!Y0oj*;6dGuj5$g1S%miW3eJ_b68i*#Il7=QCH$&nRqz*Gq zRdr2_K#Q254uV7zxLgIPhx-fCu?a0sOixwNa7qMSmz|%d-~!**2W>-u^nfrt9HCKz zdb&8mJs`DM+>}$Qpb9x!3A8X@100b^fdtBv3Yxlh;N%91BG5tO=#hqy#MJ9?*3W&SFKzRyQ^+HR* zj7-oLQ|R7J$jVsol3h>@3Rz08qX1f*qyXub>40_tLN1Ii)=@|;Nd}MRDQGFUW#%R3 zV!?7gZJIQCcQy9m;nr+`=4NSu0mo?aXz$9Rt(xO20O?M z)B=PwF+rUL1{DV9E96CmAPXTCJVXU39zf+dSRCZ*ynOH( zdLVI-@vv1*5Y=F(g9(s4xSU6<+|t(qcSO^`-FdJabh|`qu|h87GI~%4KN-r@(uWRd z!p#G@19=S=s73+V1D(o7tOo#H90*;f1yTbt0Hh9F27nxmsJ=l`U<{H6VdT65S#RT( zTw<$QtfSzQXRDfN1vwmFNe5ivKmrQFgocfR5_kz`ewsp5YEixdXgO?fX#r%zAbR-+ z>T{+h7J*V*evv|Ao_XEW=<;Th$nEL2x^C|0{X%^HONvqaEyaSmZ5%yc@PwU@x>)YItpqi7J_oyQ7hU5?)6k zrvuQ~9_a32$eoO!nGi^VfCUZ64iHAzqiY9Bj|#S+Mcs&v2Ou>djI0i6tvEdSgVca9 zvO4sg1#rbk@q(!yvgCgkP2ko!bH1s}9U3NZ}iPjDH6!!V>G2ciK= zg7kqf<@F78Jt*`77e`otLzc0@m-d0|0@XL5F=o)Y4)|I?7@><0AbI`Tp>=UAl+(H8qN`cJ5>K@2`C`9Z*Ixwi)qBJ4XDfuO-R^VOdpejzG zxCDGY3HUJmVo0J&%`C}CEmBYi9Sc&V0NOWIk`LSSnFbiE2REF#)NEo52LJAM?;J;f@YAR^ZKeGff9|q6Z&@ctL4LJ?Rxk<$SHt19=s+~|hAg_S*K_$U^Tp%^BHe@gjlD>595RnN@ z)sXZAY7c_eXn+@4!0uHBg(;|>A#%O}WIw3hN=X4XDk0;~&;$+cYau0fP~Q}CHZYP0 zK%Ri+Gmu%B=>;19;2^=7{OxW3iGe33};Hf>(@?mh6frbQx z0+|oOxQ&NvCZ_od?ziGK4>~mjT2BnU!5Qx&U?SXwSiS-3h@!NP;pq>wbO$NnXcXiZ zXM*Q~AY%ofvwrf5!I#b{3|@GJXcvN=0v@9Pg#>t9 z9C9`U=m;{TMku&gMQSD@b(X2Ip9^XnC>}sz8egISJ(2~Sk5I}j@K}fzXrl)r0Fm_N z=_sV3sE5vYf|lCl#DhvpmG$}9EG;lA+ZW7lZ#6d^HLIv zQs6^h3Q3iqP5`KqgWt%GIFtl@+y~N%43PQYn1;34!HGx%C6E;`4o}fiFhX)4xV%F$ z1i7saG9QGYX&tl^4IEe?F_6DfQjkteae|zT0`gXH3G_%X5C;;7@bD`rDKa*KmP?>b zLZGq=a0s0UGt-?BNUUMS;T})T%Xr_0l2k0Cl(^=?~3T(7`PbYa!_oG!6qw z8=&43bhZN2cm@>+Aa{W%2jdQC%`RE5fcD3CcI3|f<(k(viC z8$d1rN29s{2-&5!C9;0JR>lbdf=3fG}u166knnP_B$N)U`7*(NQqcwKFu+ zQ83oEvxr5c1d#0z_kr|*$`;T#Mui&`DA?G5ha5o>hvGQ}U4=C8QVa_PNdHU25UC~u znFYe2QVK0~fsO!DQvg{64nb7=Az_r611%WAfmH#Sss$?qnF+$+HC~_zJjix7h1}Gl z^i*)Dp$-~=)WR^>E!wuABZ)w^D`+aHDIlLsgp};T=^mu77Sz@T*#l~q0ic$wiF+YC*bNpiqDpqu_K6(hTnP#e)x=hzE^~g2Don8bI*_ z%IfhY3V9$g5FZjr1tmomAQ6x%NP2^+Loy0g9-Nmopr`$UoS|z69X2tDRnP>@7{F=~ zhDBVEnu+`g$uz__)5p6e+ z4?+5n+yf3HP`L>6AxIunEPzgV179Pbm;(t-td*NW9_XrDYXwA&2GS40;4p$03W~Pi zA`Dt7BiFAWwHWS!j`d(EF2L~&51*pc+{8@q!hUdsD`D!+^AcU^P2P4ulbn2n9PkTLpLu2gyOp3v_G1NdQ`IfHOYmU_My60ZKa{ z3@SfBg#zd#*)-6_;_%b+K&1)z_&iYm9(+0u=$J>?^2!v@sjEqqpd)T!`@cbD3UaRr z++%>01|XXtSV2pnBr&5z0c0q6vN16w1#~npq-6^#q7%VQ9FSqemNgKQAtbcifgj2N zDnmd85F!AGD}X@Zied=zTGr<&~>Cn~B1ssMTcfv48 zEvSE1nv+9XVCpDj>ZR&|3LE$_7~tRqCkk*qmy%kf04eOiA)A?(juf;Ydou~NvojU6 z@wT&}^#aVBV84Ot18`dnayk+$d&0a6S|5!_>);7-@BxdUMH--Gj|z}k5YWsAYy=-v zW}XpB zQ)3J81=I%xPL`md zk_xEB5P5LgPAoy{U7#;JLQO5yKd%eo4p2OS%O=#*yg*wzYHAcv1?`ZJ@`I)vkbclS z47}a}g*sY%f!(fP3mw^nW+!m;f|4$dmZcVf7DB@Z7(g+JY#+oBuuCC?f|i0Ge7yrK-$PPJ5qKX?3hJ&KaQcAW z9#E7D>hUW;=7;n1K;;D}Ou(r^LsJnPD&S!hkSN#_L{}zYZJ-htn%%(V8>q_31f9W` zk_szS5b*(-w?Hb(KwgK8Q^5wEpmWaPtpc#NG$?*SP>OhvrXkc7w@b&R>(d9u_*^jW}=1Ei*4g0kU&S!8sqxvCgpd5Gg3FV8mQFEIbi? zb5NXvC)6<-@*sa;t|!nXdOZQWoCjIq2+47fO$X5Vc9fo)hEINeHh6g(yn6?2JA&MS zh#y@$$e;iyAAyIZKrKd4Zb2H4L#T#U4IpoW^8>6O2`=OPOG|Y9({!CcsiIiH5puFV zyl>zFK7Btm1y<~V^&?EywSzT6LDf}iZah+V9H9!?ey}5;9VW|%#@u7qtY+Tt^0X)hCn#O|<{(<}flh-9M z?hGyl6u_rzfXskugA_s_b09@0NEPx-5F`db@;GPliJITnMb7pROCd&sNs#&AeR7~% zYmjRa_!c=0*a{nPnn_K8Y`g-m(gKZSqn&UDs-?gUO6cuJ5F??P1Dc)?DGq5&6*Sfn z>f-}*pn?{37X+wji`1sYsDHr@NrhCeNZTSnGc2%cnILWe*KDBNjj9TMrV~UJtO5mB zP!O}hEeEVcr4fN053@7cCxEP=OtZbjTQ7 zH8^U(1Soz$`XGk`i7`XicN^VFkIq)7R$nqyph;- z(V2)%h9Es43~n#LHQOn`rZPctFpQGQpq*=&9B5w{sJo^CPkIWVz7Di?0ZFegwJ7F5 zhf-m3AR6urTLoPh8#&xTY7luC`~Co!K9tP?(0Bmp2m2Rc2-bZf(Cn9-R|2|09$7J> z`GkC?2PngU%!Xm`c~EHAt3eYZB+`)F1JVO_6R6*UGlRlAJy^pPWCj847>BdrPl8C> zHb8{{+FCSp|AOpCIj0R*MuHsHMwZneJ78E}3p{%bS{a>Mp^%cFTAZg28jb~B+5ozt z31tasc}6ODQFUgCI_M}h@Od7oDWKIRh=v4Y?P7T<_yRD{2yQWC=mJz~g8~*_TA-$9 zaJ<1194LxlnFlR?LGDIL`_McD3P%_QsX@k&G9wFInkZx`*uamn#}&5L3R$o{zaTS_ z&4RJP?gjY=XF7|{0-uWw_Y*w1!OJ0-Ss=QamkX;nNDjrn(7cYzT_E*IMX8C|u*{An z{6K1I(d+~J2gxFkYeDLevAz~)(HAIAK^{j$B(fS18zhT6SP0b+&=rkHl`qIlWQ@Pg zAa4CJvU%V!2Y7ldO4S8f0InWDJ^?MS1|{B1$X2MFN?5&`3fcrym8wvjkzbkv+T^E@ zlL%UvlA4!anx26O9+Y?mmGR(CH*fVM(n*)N7oAJ{5L_Yrms zCW=2H^&Gq*3o6$^i*iAmHjteLP606UK{Wa0H&QarFH#_@00+AUwHybziJ0;hwyzDm zae&=zEe2}Z7kB`4|d~k?s0IZ4t*@uonu13ytsOEyE zfgwYP;64OSg^*JY3HSr=T76I`k>s{$LJ>=P{etRu((4!8 zDW6e{B({7;(L`kVj4~Hef^_~EXg?5AZy!{)Aoo_W6_lX#0?y<3D-Jtw$&d9=aZs)X zr921*nFqpPGqEHu*xp`nS%z9}Ku$PDRRA{}WF`zF$_r3i1C;x4ml-fUAR19lV6zHq z5rOI&B8mu*JunP%8P*^}FA}gg2e~xBB8{`71hX5IM)C_PVJE6V$16ZC0<}qz5(!uc zQEkHX!}B3X9-AjXXN44(AeUw+VMTao2D=wv_QR46Hop^&DOhQZsBgi^8@pj(DWpmZ z#UC(}VD19<<3JOH*v&$8;h`E~`t)Jrd*HTmc`|f01Nab8(7t8Rks)Q7DWKJ~kZ~61 z8fln*P+o@2okHhi@B|R@Kn_elh=zBsY#}uf7B9euYC!5?7}2I9ZR`V7BEZZ5(Fk*N z?a=q`!vbA_zzhb+98lVZ&jk}M|L`^xLFR$WD)dx!Of2dOMA`0YPcsmtrCM=GS z5*MmoJJ4i0zQgq4hJ)M*!-(<^lsR#ieIN(H^nhse@({ywD3Uk4>);Z zHw-L=D~Z8O0=Wr<(aJ9rTNO|?Q$u>*AUz;Vp!`8GhqUqsMJv4g0i|6K2H6e6_{tBM zDMXeZ;FI;iJAPqZJJ6&aXfF$7(1-!; zLQl<2RnS!c4+uj0H~D!v;3dtODWE;)$jdBX4glE?E=xdJ9cOI|TUCIl?;vw*1T?`C z2PmCsDHN9`6_>!KoW;-(vnp0g0RG7&{nX_Jm>)ukmLco4--6n1Tg@tSV5~8 zdcz@Tcm~QW$wzf3Y<-&+_}od5LR5K>-?fUtd;dycSMY+?6N2V*^GiWzLYC&{CKgq~ z+zd`H80SH16r>jEg1S|j3YdqYAvcM^i%g*2Lh%=90vmi8VSF*vLd5JC$c><(>P#Jl zEa*}WD1|gA2MS*W1xORRL?I_NFTDhI;txnaXi2|9QfXSWu>t6G<+Oaz!EK=BaM7k9 zK4@_jn1}Pk5p4zISnzRexy5jWD5q~gdqO3Z1)z()i=qud=7RkTR&NC2f{T&jlA>rZ z547SEEN2KgArjVTIdA`%oxJ!oApboLD5Cuq_^8twzvm&M?tpVKrz zb7i@SprbyEbQF|SRdrQUiWO8YYmKyxfOE;t6M0b%%@e{o3)`k9{4IT>ggL>rYZj3qadfN>ZVV&x;i_ia{rDfS09#rYn(}{@}z9 zvH&q%4L1+u2jq!#1tQvvAP0f;!7w;{Q4O(GfF6bhQv;)u^YcnF^GZ`;DF`MGq7kVK zNBc7mv49HK{2Ry|NF4^6+sFiE2y2x24M^RJ6933UZ6N)~80;;4fszH8^F-DIVk5!? zG;sqB3~2cPl1IkKVS+3UVuMys*eYOK3%*17S#|0J=G|q$npf4_OH)TfxHv)!j;} z23n9)gg_T`YC@|P(5bCDprQ+wnUK;Kw2lV*THQchM?qaz9qJSmdq8dirxkEQht_4F z)#lJ73zA31gw_eb)FR@Zw7d+{52L|rI3O!CkZX0w;a1STGsr_Q^)MQKmKLm5MLkXl zBnqiIuvIEZ0R=M;M#Ihp1{naVH+2+H4+e&*gV8W`;FGej*@b>!7RWP5@dz^q?w^9h zB1rA811c2|!3^J9Y80!W3Go`XS`lU*jD{Nrb|8ul6qmu&!)S1t!D2h);$zSWW1vz2 z(N2Zw1JR%`1RdE7Yo_QZC_#2^z%mgQ|HI}8LHf}#7V|(Y{QP7*=E3t9tN{dSiKHl@ zrV@}`UOrN4fJP1$_aUWI)Wytduqi801q^K%A*EZGi5Px@wUywlH?RX$Rh4wWYb~JH zMWp5ACzgPBq(ZYU=E_WcltV;e^58}ZWbRE{!4Nb_si37`Xkegc06NqF(SkyE7e>4z z73>OjAd?_1Yjk}eK0M4pK>^J?swow!DGI8ff)zP6A(@KsFR}uhl@aA=9Io%>9Yz12dL+~yt$RGuH5CPQP1#RCeRsdZw4qICY+P9Da zI{6a3vpFfhBm>m<1ock9Q}5svpvcP;VT~YI;eu9P5z#(I@feBiV-&s7_}a(hwNGK@ zgBsSzL5p4_z}10jB3N7?(@5=1m|Af9L~duof)J(;cRo~tHy1%y7JwRt#I`3Pm$+kX zPQt7Q=PQ^SKs4MP@VrdJ`oTcY5L_!Dst9cb13go)7_{vPauYg+yAhPxAcd6@waR-~ zgej0wwt@l`-K`)#cJ~rr-c#Zx@Huaw`%iLHbFq$dA-8@Z2mJ^6`+{>m=%jq;Py;wI zfGc3|KpnXLf-Lh6^7oAgrLcI=4v*4;c*tFX&iQ%8CGjqaC5iC?AQfQI=vc(?95~&9 zx>uPx3VE(MskzYT28&~>3u5vVbai!Mdk?_w0ShR^$S1p3Q35rTE2FZaiY^)K~CIsCAgw^DH3f9tLJH*a5A30li4qbx)qqn7 z*knZW5FGX(0^}xStgi(=Q>9ozBO|paRY##bRUxssxHK0u{+(C?IrAqouehYBG#R|z zup}`%wO9dcg{NO|NPMtol&eA#=ma3>J|&P8v?+}=j0Lh9jFIgIu}KLZ@S!l^GkS6Q z9Vw;YR0DD$q(!Zzpn>iceFY0pBO8`|!1)K{P7nsC51hujrzk@>}vI5MmaH#BCnfzu-8*2rE2BgUkb`E9ixH;CzeNegRK^nC^!S zZ-J^6v|9~9hCrhRv}qR7_*8`qOrh9A{5?QAuzUX?hQUh~ko!TH4EKS~AI2HnAT#x~ z6u^7Fz%%NgW;gg|BT#PubfR@7^0WmwoWS7-YH32}_#jt@focnoAkxJ{poS(WGLhQb z$nJ-nw;c|-W7-OIRZ?;`$X1Yp!8Yq55(mhgaC?!gfZPWOn&F2y8WyD>^&pIFA7nlP z7M~FH&?p4o2Za%bpi?B!yo7Ea6|Q~)pKS|rD+)%tkQJT~@PsFB|A9gjXA%IL2(nvW zOCcw*xCFW(4}Gc^+N1)_r6BjMAj06J1D)Ij_qIUhf#VA_*#cV&4O%}08i@kmWCy7l z(BlibkOIYAojGCFZ8;AkDqU!z_l3t?4KzLF*-yeaN8w zzo0k-_jg?odskOuX^!Hqmn$pZ>2%0NDq^nBn7@hZr~nCpl=Xl8L;15mf7;Y=42C zK>}W50B))wTLvw^Am5s3S6YJxcr9Bv5nVGVb%laLN3Kn(*>UIn=egpusQ zsTpn=H2ov&gDhS^t>1|B52_}(6(Bc(%|}051kDQ|bs(IUoReRis-b|P9BQI+YF{DAv%_FUT)|u@wpuGmD^i978OI9qW}`l3516rWBGf zL3fQ~S_CQsVFe?o&dyI$aB>Xx4^T+X&n?JFt;j5a_1>HugFT(&{R0%Va!YecGQl%| zsYTH9B#;`~V1Jet6(JNrHWP!yK}Vi>ro@+nMzG>RJq2*_5MPoX51NgR2cKPAl$ruI z4SYl(NJC~yJmhQ~u%qkx1UdO>jy5j4_KFajw+7dO;VFh&(O0dW-!Eg%%Qdj>WitQ}+sn1L|I7;FNB zG=wMztB2TY2(lNV7@9A@A|P|X7D1#C?u6(v#%7L*j)Do2xQUK}1=wmdaZ?=yV&W{?foZy+FUG)y=O@*2o1!P6w<14^s zfT9v)4hVw^8T2%WEMJrgI=v8-azLVx@*PzV)UlqB^q5*vl3D~h+N=b8QwO-p2I&T; z(~$g<#GG(&s!C1qFGwu{9}@zeb^y5rev%=`+n~eDAd5c1H?e@^!Df`?msl%+LLA|q zl6+7ih2$TQI#93DRzU;RI86mLBClpoKU%)4{S6v_=Bw%b--yxnfvzCRiRaWC2bHAa{bp3ltGxmw<)A{?^x0 zNX|)3ECO%MLbW;{mI>h2LvQc|ZM6hv9tH3{p0MT%*gR0AvwRGvItx? zhUI4_r#hymg3jYB$cGeXdJ2v?ISN4_`C-I$ss;** z@=H>aOF*Z^S0b62lUNR(UIiaU4=PN-u1N$pwG&G+Q;YQ=cWvgE7A2=DBg40ZAJS8(=s@$_?72o7=db8!rE30BhM;&RNZ1YPn0@;Z2{9!dyz!!sn73SraWF~_n0yN?WJG>LrfdH$?gI-z+YWgLXmSp4?flm1>;=&q!pcqX_ zP0dXO-!%drAk9roNmWS9t5hgTEdVXFfu^crg~Vb|Xn>3@F3l`SOv=mwwI0E1)2$k8t(5*)xG9-hGpuz&}JCB&ar3ht$q3PG8m zeIqG43Sl{kDVe#MMGC%&IjMR1WyRT*3K}p$J%pe`XmCbqQBqNUes-!}a-t>|7Xt%B zKv5=W;e9$r?()n-41xLQlapT#%Kz}<5p z*MLG1l%Y%V^K-1gCg>_8B_?Ns^p+MV*29+blQ2CV9V#owAD5rxIf=0OE z3Un2+Q&S5-!nuigpxv?vwcr#BHiUtJL06$TJF@_+5KRRrC4w5{pg}2!ouINu7dkM7 zVrgj}coMo8oZm}8vvdlOxi(D&(8MHk+8J!6u0ksK3R#fL%5#(B6H80-^)kR3;oM|U z!cs-p39&aZ1zePZ4=yh*$xJR*fQ&eT=IcSJ9W>ttnhY(?g^Z&?M_eESjo|qK_&^V6 z;s(up*enn9p2qw%aK={vEpEt6%S;A`SurSsgQ6-qKQ|X-C1?y@A+;hoH8mwQMG;(_ zbMX$!h11SAK- zs#=)}AoEmo! zVaNyPq^1@)=jWwlg3@tVVo@e2c{&G!H8U_UgePXFI_BhHsDR1C=>KQ{B>sNt5^#OY z%fP_E!OXyL;SDpxg-gsJDFzFWXTdD$5;fHQ&f-n;}d<&p7x;z7o+=F2cRA9v$ zX0UspTsV~hbzcRPZh+DsWU>1Tu8{!a$9t%KA0YG$sCgHl=0mg_Fi0>kFfcVRH9+_b z3SXB(8m^z{HTi%)p?R2`c?mOhNh*gqavLKxzyOlGD-|7&?TR7&t(D=b#Xk2xmu- znh9uPAi)`^Vo@M<3sA&7LCP3bpoxJ5H=v0*GcYjhKotWCF&sb@1KV)|Ma&0e9K!`v zF|fKDC}II%bq`R*!0KM0h=qXFeGp~>hrJ#+3_`%_7(|#D8g4K$=oNv&j)9@!4KpO% zz`_B&9PjFx+_03<>L^l4KQ6N3h)wP{g9Z zcE3Ot3xTNnfFcG__v1Y?0}CkbN^*)p?)ihnR{;rpfZA7*Q>+pN(Zlh9nL$K=fkCeV z;x8En7KRTXGazZi2&9dNk%d77A!ZB`Q($C4PD>^ru?7|vh8}i!`Z5EFF$l0QIDpa| z#CQe=VHSoDTnr3)NyT6{GAOVxECKOB7jh>uFfbUfFeHHNDk?5YRxvOHnUP??!qC9T zz@P^a1G@<%P6USMCq^+A2C*Qa0>K0U14bcM2B9Rr0^S6k0B!>Y21Yg}1~wxm14(&S z23|%h2DT3@2bcmF7-~K-GHhUEU{KWJV9;!#8mTh8ZBe z{A>*TN7xy-N_ZJqLwLaAtP%_i3qW!*Yz#7ASQtc~urjb-VPgP^i%2jqYyruEV*d*Z z0|Q7-f`I`;yo49kECwD12B><5D{Kr5N7xw{N_ZI<(CuX4La4*3h5^M7jFMaok|ul% zl18E*gdYfA;6K1yz>~loAZftOAa7F5AkSFDAn<|j0nY`l0~`hH32Xrj3_m_GGVJ)s z%+SQlz@TyPBQwK^kIW2AT%f%8fNvK=rXZ6R!&+%3JqAW8CQyQdm^G0>p0N$9SuCHJ z8I)KU7&Lf4F*AsKf|=EzCdtH5$;qU_@QO);A(4qmgMkx7{D6v7f;h6QOd1S<%uJxN z5u84Xm_8_i;^hh}16K(<18WKo!vsABhBtZ)3@)FT85G4i7{s5jFz_E?W8ezmW?(hp z0?R4tGcfpoKiM2rLq7)3c4L`ygrL{r!qL`~Qj zM2!R=NLuhRsF!?YP*3^7pl7(`2W83a;z7+6EN85W2zFdPk}_-zypuQ|uwP(3z?=Xv-vVU55F3Ng7Y+vA5>5t=5J3h8AqIvL zAqIvuQ1emwYzz!vI2ag8I2jnw)Jke{Gl-k$GKe!OVNEY4Uziz~7#SEeY`-uwxPUm| zv{%4p%gj)~G>w4~6#psg4E!c+4E#pi1&o3m41y*+41z|yAGj}Y9$+tEOHdSIVGw%4 z&A=MM#o%y{fnmWt28Ng~kZ?fdgYqdi0|S~mMhPwki4<-Ii4ZOZ2@_5R2_umYLI(s2 zz~#gf4u${&28Oi;3=A8fW}@<$7#PshFbZ%m2$%>k2o&*r;CcYbX^J8&3?f(f8CZ|- zF$6?0Fl+?XGG8HXMCMB>b1{gRh%ksuLd~h5c=upnU|{58Vc;@hW8gAkD`2$dV6aYM zW8e?rVBj}l2ZxWOA{zrgqap*x2et<+2O#kYs#_FQI2cr}C@{#BXfg<-XfSYus53n9 zV_;DCXJDv-x&xKZ!N71ufq|h!lYt>cgMk4}JtST=8N?aoFya;D)(0TBDswR?hX^tV z1cAfh0^0$W0#F)blw@a+Okrc-N@9D!QotO*1gZ~YI2dF~_!)SDz%EY!iAp;0GB`ca zU@!|&XAm>dWDsLiVBr72dx84^X8}h7B+r2S2Fah!4C*OP4C*G14C;(lDESlQo&$^w z43K!{VUP&nW{@!9Vvqwh#w{PzVo$kO?<~P!Qh(o&xR! zNo|mQf($Yt0t_-H{0uTh2>U>81?4}8z3L3|A!-crCaMhbjB*(Eg2EW0PMbkKM2kV* zM3X_DQ3*vIsC=LC9Vw43{Lak4c9w;qlAQ_EfRfbZWYB%0z@SzB zNjqK!-I8W0-IOLNU6V#BUB)UYc&dfA+YVf2V31T|XAoeNW8nP2{($uYa{(xCgUkS> zB}FAR2Bjl13{okw3>+b<3=`fmFnoW@!0-p^9#lT4Z6w3MkRr>#fTosFnuS3+NW4HS zLDWD}kC{P+QH?>=01^%gj0_AAF*k%569WUJUgu&EP2pq^HQ`_o4HA67$im3L;>5rJ z$^SeIG9layGA3LMGDdKp6@c5PDZUK6j2`g%*no)v(*88@VOSu=$nZdlk>SiQNSLDX znHU(*)JV#)GVn0EF|a-Wm4r|?!^|u3WeAXDWSAhy$RP6@Vje1=iGcx44Y-|T#FU`O z%fi45Y9pDjF-&;C$gt=EBSQ|<3}n8f0y_gAV*msD18{l=m%X6)DS)}*OBe&gJw}G3 z_ZS)GK=q^YnHU(*)JSTwGe|I+f#Mv}ih!mEQ2#+uf{j7qi3x*1i75kzi48--1x5y* zi;N5(KxTv5@EMX|{_Km43_O1zeg?@S^HKDGdT$w$3=B_97#K=S85q#b1hwr;xEUOj z7#Y%(7~$<9R6ZyiQPn`|RSrD!D92S8#B z3>bW5J(8;I48kS448kco48n{W3_K4Y@ofMqKS6#s(PB_gW@I?6%*ep;7vgthJ|izP z18)=O1NH+94B)m%2nR#KZAOOuw;35cKw)!8uCOvNl&~={q_8tEgm5r0nDC(3Eh)#& zz|Sbc!0`Z9t3&)&zyQq~85|4?t}!z3UuR@^0<{-~FU-Oq{6&a?BSe^?WKzhb#F)Va zZ5@L9IH2^c5Dax!NgmgS2aF6y9x^gifb0Xs!;=Co5MS;QBf|`sScWkxh`;_BBf}by z7y|f;d?i zZU{0l%s>(=;bdW`5M*L_fh0DIlZD}gAQQt4B(YtbEDSpYK_L!x91;Z@vjK5?pl+H6 zrSEV<{C5mWZ-CO%pmY9L1`-}4Uz-lFKB!PDE}Okz5%7JI3VUoK=~lOAglrv z2eCm|g&m>}#0KFFQ2rt)eGE!ZgVK+n^cyJs4N8|lX%Q%W1xiOj?JI-Qlc4khD9r>_ z_Xz6FASmAgN`u@4!VysUBq;3#)xQI(E(*fqv zw8>BpX1iq;6_ssATJZd?uUpLR5DBgu?muk zvKc0WSRgG75)7b~zzhtM43Hy=K&-;z{Gt+u0EWbp{7eRhM3CB&{2T^`84M-)r3D44 zMGS2qF_7U5|MV2B4@q6}39(~Yde z3}Qw}YEdqOIf5OZ%Am{;5B5$7#EogW`6;Ok3@i-s@dfemAQvPvFt8$cWef~r4Drce zEexUz@yQU~whZw_sp*-;ARm`xfY#2$gZ6CYfV>}{SOQWGUh@lD%fJB20m=D!X_@H| zrC^n*Aag;Xl$Tl_4|W72#8z+u1-Z!t;_l4E98fsq=Yb6cFERk-LWKQL8BjV0P4zO! zF~oz?KExFa=?tJi$jnPDNo7bZ$kfd()-BJ>(@ica(FJD+-5f(*LtRK_!jLb@%u7dB zfNlb4bv{1%(h~6E7-S`Ab|mNLm8BMy;89UjnpcvUn~FyTcWhDXL^(cnFdS%Paz2 zP8^z7o|%`zz_5okG!IhXrMOlkr-F+(H*iK_V5nvdPA$PHEz9JdTH;(N!b zjF4d#YY1pT6euoXLJXbEp2bj3evw;hBFL=)ko8IoZ4BUg0aA=Jm@>NNm82Fq7iE@Y zCMV_urzV3O&%khi*(WuzEEPjMgV_^uOH*bQx};-XN^n7D9(dg`gCL_zYEEhix*7%* zkpEoEQu9g}7*4T(7SfeKdCytH6EjQP@{58q^U`xt{gbj%lS^DH81^$b7o{eaq=J=& zGceSF!oW8_r8FlM;)ieshOHnmkcS;pQi@VRb9_zAp2aSyNu}xOsYNiK2e1T|rWREO zK-L<8wibZhnp(sl2hxukuAV6jN=Tw1;QZ{F!octWBpM7(Ss|IZsgA{>psWlD2yI<0eO0x%nmQXhMO%9- zy=aIqoa|A6tX~1u5)8}?3{#N#j0_A5;Cu!SP-k}ooX^4lQhx%<7XTT+$iTqIpa3@8 zKpkc-m^(_0h5)4@0AA~GHdf(M+LizRjTYV4ovF>hP&$Kw0klL6G~NNS07QdE0`wut zkb&U`NECrV@(AA0X9)-}F#Hl^VBq<}j52Qwnm_ImW?(q-nVA7ZFA-*7c<`B-0Ysk` zW?=a6nVA7ZpNEQH5N2S|6JcOj@rjwiK!kx|B9x6h*A1HUmJ?-QNcqgn0HO^=85kNq zGc$nbL{SEY37?r6Ky(>Yyg`(Kfkljg!R9kFgMb(V!(uT828GYe3>(B481{=ZFl2mX zMp;tAD9_H^cx8VhBqIW89;QhBm)D>M`i{P?Ih2@ zAoG!#0Yq<7WMFXl$jktu9h4wyK(w0@14G6~W`+PI28K173=9OR;7`iMN7;?Td zGfc2xU^wW=z~J(onc;#X1H%h%28J`=m>E8JGcersV_@L;#*8wz44Px!9KgUZKGVQJ}@&ZsAFKb)&OBYXkcKN*9c)RXk=h0YGz=t`O3`D(9FOvy9JVN7ql=i zc(gJw{Q1Gm(9p`jux!#oCt{1prgcRn&R6s%xi=wHpi zAo7EmVZv$#hN>+L3?(4FTNuFepP;;eJnspb5B+w6fx+hoGXsd`Jj=k4@`IT{;4A|J z;}r&mD?gbT1gXZ2^V$OjhC@#v=3jWiz|j1bf#Jd@W|a9r(7d44djL+Vh%hpUd|+l^5M^YD6NQK;h%z!* zi!n0f{9 zGs@f`XpZomBqM{#Z)OG%%`3&o;PIQ80Yp!eVq}Q;&5SZP37VsHm1bmk@{5@PM5jqJ zGW__(%mAVfNi#BV{AOklkYQw4EyD)7`#|*NJB$n+f0-FT^z%E640HZ6Gk|D@yNnEL{xUOwXqCH+414}EGZ@@uWcYU% z5|7C9zM%PF+XsvcJAN}WfavH4j0|UfGc$nb#s`cHcYZUY%sYeTpD#aPWGMN~%mAXF zJYZz#`OS9hCH_hnsf7g&d6}!A2S1pW_`iPaOEE}1BmW_#mMmFA2S1pR(K5& z2hp{!85w^3V`c!+Hg6djIQ}y;fM~zB5OEM)`j(MF;XgA&#al*(HE$tl4@B3!V`Q-S z&&<&9j*(&VJ4jlc@{WjVEo{tc{AUfwG#C#Ba8Opx$k&!|46GV-~Cq{>;XgCOgwKo&_dYW+RQzXV`0$yLf$s|=L&JY&27xb(49C7e%sKIek>SP{ zi1{G;Bb5E+3nN3pH%5k*|IA>z=^I2%%Qr@by-@anZ;T9_-y!Dkd}m~s4rR~y&d6Z! zgOOnmC>(w;GKBnqr~%QnP{ zISOT|Ma7xrypgm!>>Y*WSx)$mR#U+V(DTz7xd8xMQm8r$*_IA8n zHi^Z>skuoxl?oNPIeEpl>ZL__R>jE~skw>8y1ALjMfso&hPui5xmJnAxq4-W>I%7u zd6{Xc#U)|Lw%PG=DJa;K6qOd2fVTWWO;aLZnz0gCpMru-acXjDQD#Xcl&_#*QES1&vYqq?V=TDCB@hTlK_Z&%Cny?9?K4h0;t% z@TMzU^|ZvC;#747eYiO``nYYe(MNHUjXvCSpkUL7g_|AXkOH(gLE#E8F@WQ5amM0; z#TAPi7Ef5bV)2H>I~Fr6kyv7|#A8Xql8Pl0maJHEV9AXoAC_<|Rak1V)M2T|(txEA zOB0qBEUj4Du(V?-g8~zH55$7yE0%9qzGL}? Date: Wed, 31 Jul 2024 09:23:30 +0200 Subject: [PATCH 62/77] resolve warnings about unreachable code --- lib_com/core_com_config.c | 1 - lib_dec/lib_dec_fx.c | 1 - lib_enc/lib_enc.c | 2 -- lib_rend/ivas_reverb.c | 1 - 4 files changed, 5 deletions(-) diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index 293f5b5b7..4b16b0b53 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -85,7 +85,6 @@ Word16 is_EVS_bitrate( { return 0; } - BREAK; } *Opt_AMR_WB = 1; diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index a2047f04a..08fb40dfd 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -3896,7 +3896,6 @@ static ivas_error input_format_API_to_internal( BREAK; default: return IVAS_ERR_INVALID_BITSTREAM; - BREAK; } move16(); diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 6ca4545f2..faf701d12 100644 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -2800,7 +2800,6 @@ static ivas_error bandwidthApiToInternal( case IVAS_ENC_BANDWIDTH_UNDEFINED: default: return IVAS_ERR_INVALID_BANDWIDTH; - BREAK; } return IVAS_ERR_OK; @@ -2827,7 +2826,6 @@ static ivas_error fecIndicatorApiToInternal( BREAK; default: return IVAS_ERR_INTERNAL; - BREAK; } return IVAS_ERR_OK; diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index 4c3017f96..f656ed31f 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -3299,7 +3299,6 @@ static ivas_error downmix_input_block_fx( } default: return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported input format for reverb" ); - BREAK; } return IVAS_ERR_OK; -- GitLab From 66ca14cef758701a2ef62024d24ae978e8293995 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 31 Jul 2024 09:40:50 +0200 Subject: [PATCH 63/77] fix missing "{" problem (shall be resolved in main) --- lib_enc/ext_sig_ana_fx.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 15fe1cf79..358f89ea1 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -74,9 +74,11 @@ void core_signal_analysis_high_bitrate_fx( TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; #ifndef IVAS_CODE + /* dummy */ (void) vad_hover_flag; (void) last_element_mode; #endif + #ifdef IVAS_CODE if ( NE_16( last_element_mode, st->element_mode ) ) { @@ -551,8 +553,8 @@ void core_signal_analysis_high_bitrate_fx( { set_f( &mdst_spectrum[frameno][MCT_LFE_MAX_LINE], 0.f, L_subframe - MCT_LFE_MAX_LINE ); } -#endif } +#endif IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) { test(); @@ -615,3 +617,6 @@ void core_signal_analysis_high_bitrate_fx( } } } + + return; +} -- GitLab From 73650e0a2cae28ebfc3726681b15e587ba117288 Mon Sep 17 00:00:00 2001 From: malenov Date: Wed, 31 Jul 2024 09:49:57 +0200 Subject: [PATCH 64/77] clang format --- apps/decoder.c | 1 - lib_com/cldfb_evs.c | 2 +- lib_com/count.c | 35 +++++++++++++++++------------------ lib_com/log2.c | 2 +- lib_dec/acelp_core_dec_fx.c | 22 +++++++++++----------- lib_dec/bass_psfilter.c | 2 +- lib_dec/dec_higher_acelp.c | 2 +- lib_dec/dec_tcx.c | 2 +- lib_dec/ivas_ism_dec.c | 2 +- lib_dec/ivas_mct_dec.c | 2 +- lib_dec/ivas_spar_decoder.c | 4 ++-- lib_enc/rom_enc.h | 2 +- 12 files changed, 38 insertions(+), 40 deletions(-) diff --git a/apps/decoder.c b/apps/decoder.c index 196a7cdca..54a4c1dfe 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -1810,7 +1810,6 @@ static ivas_error decodeG192( update_mem(); } #endif - } /*------------------------------------------------------------------------------------------* diff --git a/lib_com/cldfb_evs.c b/lib_com/cldfb_evs.c index 8d9e13c1e..1186c82fa 100644 --- a/lib_com/cldfb_evs.c +++ b/lib_com/cldfb_evs.c @@ -1017,7 +1017,7 @@ ivas_error openCldfb( HANDLE_CLDFB_FILTER_BANK hs; hs = (HANDLE_CLDFB_FILTER_BANK) malloc( sizeof( CLDFB_FILTER_BANK ) ); - IF ( hs == NULL ) + IF( hs == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); } diff --git a/lib_com/count.c b/lib_com/count.c index bc5f66ced..ca56559a3 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -58,25 +58,25 @@ static double frameRate = FRAME_RATE; /* default value : 10 ms */ #define MAX_STACK 64 #define MAX_CHAR 64 -//struct wmops_record +// struct wmops_record //{ -// char label[MAX_CHAR]; -// long call_number; -// long update_cnt; -// int call_tree[MAX_RECORDS]; -// double start_selfcnt; -// double current_selfcnt; -// double max_selfcnt; -// double min_selfcnt; -// double tot_selfcnt; -// double start_cnt; /* The following take into account the decendants */ -// double current_cnt; -// double max_cnt; -// double min_cnt; -// double tot_cnt; -//}; +// char label[MAX_CHAR]; +// long call_number; +// long update_cnt; +// int call_tree[MAX_RECORDS]; +// double start_selfcnt; +// double current_selfcnt; +// double max_selfcnt; +// double min_selfcnt; +// double tot_selfcnt; +// double start_cnt; /* The following take into account the decendants */ +// double current_cnt; +// double max_cnt; +// double min_cnt; +// double tot_cnt; +// }; // -//static struct wmops_record wmops[MAX_RECORDS]; +// static struct wmops_record wmops[MAX_RECORDS]; static int stack[MAX_STACK]; static int sptr; @@ -802,7 +802,6 @@ void generic_WMOPS_output( Word16 dtx_mode, char *test_file_name ) /* FROM_EVS_DEV */ - /* jdr 20120117: add FLC similar functions */ void BASOP_frame_update( void ) { diff --git a/lib_com/log2.c b/lib_com/log2.c index db7c382a1..9e1cb14ae 100644 --- a/lib_com/log2.c +++ b/lib_com/log2.c @@ -78,7 +78,7 @@ Word32 log10_fx( Word32 Linput ) Word32 Ltemp1, Ltemp2; Word32 L_tmp; - IF ( Linput <= 0 ) + IF( Linput <= 0 ) { return ( LW_MIN ); } diff --git a/lib_dec/acelp_core_dec_fx.c b/lib_dec/acelp_core_dec_fx.c index 6f1c542c8..024e8f1e2 100644 --- a/lib_dec/acelp_core_dec_fx.c +++ b/lib_dec/acelp_core_dec_fx.c @@ -1562,18 +1562,18 @@ ivas_error acelp_core_dec_fx( } } #else - IF( st_fx->flag_cna && NE_16( st_fx->coder_type, AUDIO ) ) - { - generate_masking_noise_fx( syn_fx, st_fx->Q_syn, st_fx->hFdCngDec->hFdCngCom, st_fx->hFdCngDec->hFdCngCom->frameSize, 0 ); - } - ELSE IF( st_fx->flag_cna && st_fx->coder_type == AUDIO && st_fx->last_core == ACELP_CORE && st_fx->last_coder_type != AUDIO ) + IF( st_fx->flag_cna && NE_16( st_fx->coder_type, AUDIO ) ) + { + generate_masking_noise_fx( syn_fx, st_fx->Q_syn, st_fx->hFdCngDec->hFdCngCom, st_fx->hFdCngDec->hFdCngCom->frameSize, 0 ); + } + ELSE IF( st_fx->flag_cna && st_fx->coder_type == AUDIO && st_fx->last_core == ACELP_CORE && st_fx->last_coder_type != AUDIO ) + { + FOR( i = 0; i < st_fx->hFdCngDec->hFdCngCom->frameSize / 2; i++ ) { - FOR( i = 0; i < st_fx->hFdCngDec->hFdCngCom->frameSize / 2; i++ ) - { - syn_fx[i] = add( syn_fx[i], shr_r( mult_r( st_fx->hFdCngDec->hFdCngCom->olapBufferSynth2[i + 5 * st_fx->hFdCngDec->hFdCngCom->frameSize / 4], st_fx->hFdCngDec->hFdCngCom->fftlenFac ), -st_fx->Q_syn ) ); - move16(); - } + syn_fx[i] = add( syn_fx[i], shr_r( mult_r( st_fx->hFdCngDec->hFdCngCom->olapBufferSynth2[i + 5 * st_fx->hFdCngDec->hFdCngCom->frameSize / 4], st_fx->hFdCngDec->hFdCngCom->fftlenFac ), -st_fx->Q_syn ) ); + move16(); } + } #endif #ifndef IVAS_CODE @@ -1674,7 +1674,7 @@ ivas_error acelp_core_dec_fx( /* set NB mask for upsampling */ st_fx->cldfbSyn->bandsToZero = sub( st_fx->cldfbSyn->no_channels, 10 ); } - ELSE IF ( NE_16( st_fx->cldfbSyn->bandsToZero, sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ) ) ) + ELSE IF( NE_16( st_fx->cldfbSyn->bandsToZero, sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ) ) ) { /* in case of BW switching, re-init to default */ st_fx->cldfbSyn->bandsToZero = sub( st_fx->cldfbSyn->no_channels, st_fx->cldfbAna->no_channels ); diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c index f6760c77c..52ed9efa2 100644 --- a/lib_dec/bass_psfilter.c +++ b/lib_dec/bass_psfilter.c @@ -47,7 +47,7 @@ #include "wmc_auto.h" //#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -//#endif +//#endif /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c index 904bae3ed..cd88c2185 100644 --- a/lib_dec/dec_higher_acelp.c +++ b/lib_dec/dec_higher_acelp.c @@ -43,7 +43,7 @@ #include "wmc_auto.h" //#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif +//#endif /*-----------------------------------------------------------------* * transf_cdbk_dec() diff --git a/lib_dec/dec_tcx.c b/lib_dec/dec_tcx.c index b2bc532ad..61a910c4f 100644 --- a/lib_dec/dec_tcx.c +++ b/lib_dec/dec_tcx.c @@ -48,7 +48,7 @@ #include "ivas_prot_fx.h" //#ifndef IVAS_FLOAT_FIXED_UNIT_TESTING #include "debug.h" -//#endif +//#endif #ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 0e01b3030..6fc6761a7 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -40,7 +40,7 @@ //#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -//#endif +//#endif #define IVAS_FLOAT_FIXED_TO_BE_REMOVED /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 4f17b6595..7821bea67 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -45,7 +45,7 @@ #include "wmc_auto.h" //#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -//#endif +//#endif /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 56ca51e31..345816dec 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -47,10 +47,10 @@ //#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif +//#endif //#ifdef DUMPS_ENABLED #include "debug.h" -//#endif +//#endif /*-------------------------------------------------------------------* diff --git a/lib_enc/rom_enc.h b/lib_enc/rom_enc.h index 3c2dbe11a..87537fc80 100644 --- a/lib_enc/rom_enc.h +++ b/lib_enc/rom_enc.h @@ -60,7 +60,7 @@ extern const Word16 W_HIST_S_FX[DTX_HIST_SIZE]; /* CNG & DTX - table for calcula extern const int16_t bwd_start_bin[]; extern const int16_t bwd_end_bin[]; -extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ +extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ extern const Word16 h_fir_fx[]; /* 2nd order fir filter for wsp, decimation by 2 */ extern const float preemphCompensation[]; -- GitLab From 90fc40346e1007a1f6f677468ee72796df0ec86c Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Wed, 31 Jul 2024 16:30:22 +0200 Subject: [PATCH 65/77] dummy commit to trigger CI -- GitLab From 09a8c87d56b05de6c3a8a53075ccb77ba978e590 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 15:13:19 +0200 Subject: [PATCH 66/77] uncomment #ifdef IVAS_FLOAT_FIXED ... #endif --- lib_com/wtda.c | 4 ++-- lib_dec/bass_psfilter.c | 4 ++-- lib_dec/dec_higher_acelp.c | 4 ++-- lib_dec/ivas_ism_dec.c | 5 +++-- lib_dec/ivas_jbm_dec.c | 6 +++--- lib_dec/ivas_mct_dec.c | 4 ++-- lib_dec/ivas_mdct_core_dec.c | 4 ++-- lib_dec/ivas_osba_dec.c | 4 ++-- lib_dec/ivas_sba_rendering_internal.c | 5 +++-- lib_dec/ivas_spar_decoder.c | 5 +++-- lib_dec/ivas_stereo_dft_dec.c | 4 ++-- lib_dec/ivas_stereo_mdct_stereo_dec.c | 4 ++-- lib_dec/swb_bwe_dec_hr.c | 4 ++-- lib_dec/tonalMDCTconcealment.c | 4 ++-- lib_enc/ivas_lfe_enc.c | 5 ++--- lib_rend/ivas_masa_merge.c | 4 ++-- lib_rend/ivas_mcmasa_ana.c | 4 ++-- lib_rend/ivas_objectRenderer_mix.c | 5 ++--- lib_rend/ivas_objectRenderer_sources.c | 4 ++-- lib_rend/ivas_orient_trk.c | 4 ++-- 20 files changed, 44 insertions(+), 43 deletions(-) diff --git a/lib_com/wtda.c b/lib_com/wtda.c index 6384138d4..b3374f864 100644 --- a/lib_com/wtda.c +++ b/lib_com/wtda.c @@ -41,9 +41,9 @@ #include "rom_com.h" #include #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*--------------------------------------------------------------------------* * mvr2r_inv() diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c index 52ed9efa2..557207714 100644 --- a/lib_dec/bass_psfilter.c +++ b/lib_dec/bass_psfilter.c @@ -45,9 +45,9 @@ #include "rom_com.h" #include #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -//#endif +#endif /*---------------------------------------------------------------------* * Local constants diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c index cd88c2185..d3d0876fd 100644 --- a/lib_dec/dec_higher_acelp.c +++ b/lib_dec/dec_higher_acelp.c @@ -41,9 +41,9 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif +#endif /*-----------------------------------------------------------------* * transf_cdbk_dec() diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 6fc6761a7..1615a1776 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -37,10 +37,11 @@ #include "ivas_prot_fx.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -//#endif +#endif + #define IVAS_FLOAT_FIXED_TO_BE_REMOVED /*-------------------------------------------------------------------------* diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 36f33fe25..4ca2f88a1 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -43,14 +43,14 @@ #include #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING #include "debug.h" -#endif // DUMPS_ENABLED +#endif #include "prot_fx.h" + #define float_to_fixed( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fixed_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#include "debug.h" /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 7821bea67..8045f3256 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -43,9 +43,9 @@ #include "ivas_prot_rend.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -//#endif +#endif /*-----------------------------------------------------------------------* diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index 921a220b0..948971be9 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -44,10 +44,10 @@ #include "ivas_stat_dec.h" #include "ivas_stat_com.h" #include -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index d3d1026d3..187ead976 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -39,9 +39,9 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index 846ed6806..d34c33faf 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -39,10 +39,11 @@ #include "ivas_cnst.h" #include #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif // IVAS_FLOAT_FIXED + //#ifdef DUMPS_ENABLED #include "debug.h" //#endif // DUMPS_ENABLED diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 345816dec..19b290e23 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -44,10 +44,11 @@ #include #include #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif +#endif + //#ifdef DUMPS_ENABLED #include "debug.h" //#endif diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index 75175699c..b36b4880b 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -45,9 +45,9 @@ #include "ivas_rom_com_fx.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index f0104eaa1..21e3eccd4 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -38,10 +38,10 @@ #include "ivas_prot.h" #include "prot.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-------------------------------------------------------------------* diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index 8051a93b5..d3ddd1de5 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -40,9 +40,9 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-------------------------------------------------------------------* * swb_bwe_dec_hr() diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index 93ef3e61e..e8da62cdf 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -43,10 +43,10 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*******************************************************/ diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index 24599558b..4b6857710 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -38,11 +38,10 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" - -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*-----------------------------------------------------------------------------------------* diff --git a/lib_rend/ivas_masa_merge.c b/lib_rend/ivas_masa_merge.c index babc4376a..734751f2d 100644 --- a/lib_rend/ivas_masa_merge.c +++ b/lib_rend/ivas_masa_merge.c @@ -38,10 +38,10 @@ #include "ivas_cnst.h" #include "prot.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_mcmasa_ana.c b/lib_rend/ivas_mcmasa_ana.c index a78bbc6d5..06c895335 100644 --- a/lib_rend/ivas_mcmasa_ana.c +++ b/lib_rend/ivas_mcmasa_ana.c @@ -42,10 +42,10 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*------------------------------------------------------------------------- * Local constants diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 496efca37..1cf3f2a85 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -39,10 +39,9 @@ #include "wmc_auto.h" #include "ivas_rom_rend.h" #include "ivas_prot_fx.h" - -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif #define IVAS_FLOAT_FIXED_TO_BE_REMOVED diff --git a/lib_rend/ivas_objectRenderer_sources.c b/lib_rend/ivas_objectRenderer_sources.c index d90a5afa5..743b98a1d 100644 --- a/lib_rend/ivas_objectRenderer_sources.c +++ b/lib_rend/ivas_objectRenderer_sources.c @@ -36,10 +36,10 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -//#endif // IVAS_FLOAT_FIXED +#endif /*---------------------------------------------------------------------* diff --git a/lib_rend/ivas_orient_trk.c b/lib_rend/ivas_orient_trk.c index 88a8b35f4..6f308742c 100644 --- a/lib_rend/ivas_orient_trk.c +++ b/lib_rend/ivas_orient_trk.c @@ -39,9 +39,9 @@ #include #include #include "wmc_auto.h" -//#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -//#endif +#endif /*------------------------------------------------------------------------------------------* * Local constants -- GitLab From 39ce46865b62b0e8ae6aa757e3ada0208267461e Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 15:19:57 +0200 Subject: [PATCH 67/77] replace DUMPS_ENABLED by DEBUGGING --- lib_com/options.h | 3 --- lib_dec/ivas_sba_dec.c | 6 ++--- lib_dec/ivas_sba_rendering_internal.c | 12 +++++----- lib_dec/ivas_spar_decoder.c | 10 ++++----- lib_dec/ivas_stereo_dft_dec_fx.c | 8 +++---- lib_enc/ivas_entropy_coder.c | 8 +++---- lib_enc/ivas_mc_paramupmix_enc.c | 4 ++-- lib_enc/ivas_spar_encoder.c | 32 +++++++++++++++++---------- lib_rend/ivas_crend.c | 4 ++-- lib_rend/ivas_rotation.c | 2 +- lib_rend/ivas_td_decorr.c | 10 ++++----- lib_rend/lib_rend.c | 2 +- 12 files changed, 49 insertions(+), 52 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 88d6c339c..29f11d302 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -113,11 +113,8 @@ #define FIX_TMP_714 #define BASOP_NOGLOB_TMP_715 #define EVS_FUNC_MODIFIED -//#define DEBUGGING //#define DBG_WAV_WRITER #define EVS_FLOAT_ENC -//#define DUMPS_ENABLED -//#define WMOPS #define FIX_667_DISABLE_INITIAL_PLC_SUPPRESSION #define IVAS_CNST #define REMOVE_IVAS_UNUSED_PARAMETERS_WARNING /*temporary operation on unused EVS parameters to remove warnings, these parameters will be used in IVAS */ diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 68ce82211..f609095a1 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -1570,12 +1570,10 @@ void ivas_sba_dec_digest_tc( { #ifndef IVAS_FLOAT_FIXED ivas_td_decorr_process( st_ivas->hDiracDecBin->hTdDecorr, p_tc, decorr_signal, nSamplesToDecorr ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING for ( i = 0; i < st_ivas->hDiracDecBin->hTdDecorr->num_apd_outputs; i++ ) { -#ifdef DUMPS_ENABLED dbgwrite_txt( decorr_signal[i], nSamplesToDecorr, "fixed.txt", NULL ); -#endif } #endif #else @@ -1605,7 +1603,7 @@ void ivas_sba_dec_digest_tc( { decorr_signal[i][j] = ( decorr_signal_fx[i][j] ) / (float) ( 1 << q_format ); } -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( decorr_signal[i], nSamplesToDecorr, "fixed.txt", NULL ); #endif } diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index d34c33faf..cc7db6b03 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -42,12 +42,10 @@ #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED - -//#ifdef DUMPS_ENABLED +#endif +#ifdef DEBUGGING #include "debug.h" -//#endif // DUMPS_ENABLED - +#endif /*-------------------------------------------------------------------------* * ivas_sba2MC_cldfb() @@ -913,9 +911,9 @@ void ivas_sba_mix_matrix_determiner_fx( move16(); ivas_agc_dec_process_fx( hSpar->hAgcDec, ( output_fx ), ( output_fx ), nchan_transport, output_frame ); Q_p_output = sub( Q_p_output, 3 ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( &output[0][0], output_frame, "fix_ivas_agc_dec_process_output.txt", NULL ); -#endif // DUMPS_ENABLED +#endif /* Convert numeric range back */ FOR( ch = 0; ch < nchan_out; ch++ ) diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 19b290e23..7186d031a 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -31,6 +31,8 @@ *******************************************************************************************************/ #include +#include +#include #include "options.h" #include "ivas_stat_dec.h" #include "prot.h" @@ -41,18 +43,14 @@ #include "ivas_rom_dec.h" #include "ivas_stat_com.h" #include "stat_com.h" -#include -#include #include "wmc_auto.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #endif - -//#ifdef DUMPS_ENABLED +#ifdef DEBUGGING #include "debug.h" -//#endif - +#endif /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_dec/ivas_stereo_dft_dec_fx.c b/lib_dec/ivas_stereo_dft_dec_fx.c index ea5f56998..0c4409291 100644 --- a/lib_dec/ivas_stereo_dft_dec_fx.c +++ b/lib_dec/ivas_stereo_dft_dec_fx.c @@ -3926,9 +3926,9 @@ void stereo_dft_dec_read_BS_fx( rc_uni_dec_init_fx( &range_uni_dec_state, bit_stream_side + *nb_bits, max_bits - *nb_bits ); hStereoDft->res_global_gain_fx = ECSQ_dequantize_gain_fx( I ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( &hStereoDft->res_global_gain, 1, "fixed_res_global_gain.txt", NULL ); -#endif // DUMPS_ENABLED +#endif ecsq_inst.config_index = sub( shl( hStereoDft->res_cod_mode[k_offset], 1 ), 1 ); @@ -3946,9 +3946,9 @@ void stereo_dft_dec_read_BS_fx( ECSQ_dequantize_vector_fx( dec, hStereoDft->res_global_gain_fx, hStereoDft->res_cod_line_max, res_buf_fx ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( res_buf, hStereoDft->res_cod_line_max, "fixed_res_buf.txt", NULL ); -#endif // DUMPS_ENABLED +#endif } ELSE { diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index dec1dfc26..60be0e537 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -83,7 +83,7 @@ static ivas_error ivas_get_dyn_freq_model( curr_bps -= ( curr_dist[i] * pArith->saved_dist_arr[0][i] ); } curr_bps_min = curr_bps; -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( &curr_bps_min, 1, "float_curr_bps_min.txt", NULL ); #endif model_idx = 0; @@ -95,7 +95,7 @@ static ivas_error ivas_get_dyn_freq_model( { curr_bps_new -= ( curr_dist[i] * pArith->saved_dist_arr[m + 1][i] ); } -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( &curr_bps_new, 1, "float_curr_bps_new.txt", NULL ); #endif if ( curr_bps_new < curr_bps_min ) @@ -159,7 +159,7 @@ static ivas_error ivas_get_dyn_freq_model_fx( curr_bps = L_sub( curr_bps, curr_dist[i] * pArith->saved_dist_arr[0][i] ); } curr_bps_min = curr_bps; -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING { float a = curr_bps_min / 32768.0f; dbgwrite_txt( &a, 1, "fixed_curr_bps_min.txt", NULL ); @@ -174,7 +174,7 @@ static ivas_error ivas_get_dyn_freq_model_fx( { curr_bps_new = L_sub( curr_bps_new, ( curr_dist[i] * pArith->saved_dist_arr[m + 1][i] ) ); } -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING { float a = curr_bps_new / 32768.0f; dbgwrite_txt( &a, 1, "fixed_curr_bps_new.txt", NULL ); diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index a4ba849d4..6d23d82c4 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -757,14 +757,14 @@ static void ivas_mc_paramupmix_param_est_enc( ivas_transient_det_process( hMCParamUpmix->hTranDet[2 * i + 1], pcm_in[2 * i + 1], input_frame, transient_det_r ); #else ivas_transient_det_process_fx( hMCParamUpmix->hTranDet[2 * i], pcm_in_fx[2 * i], input_frame, transient_det_l ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING float a[2]; a[0] = transient_det_l[0]; a[1] = transient_det_l[1]; dbgwrite_txt( a, 2, "fixed.txt", NULL ); #endif ivas_transient_det_process_fx( hMCParamUpmix->hTranDet[2 * i + 1], pcm_in_fx[2 * i + 1], input_frame, transient_det_r ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING a[0] = transient_det_r[0]; a[1] = transient_det_r[1]; dbgwrite_txt( a, 2, "fixed.txt", NULL ); diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 1b5b215f7..c0d7b77ba 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -944,7 +944,7 @@ static ivas_error ivas_spar_enc_process( ivas_total_brate = hEncoderConfig->ivas_total_brate; num_del_samples = hSpar->hFbMixer->fb_cfg->fb_latency; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); sba_order = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); #ifndef IVAS_FLOAT_FIXED nchan_inp = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); @@ -969,19 +969,23 @@ static ivas_error ivas_spar_enc_process( Word32 data_fix[L_FRAME48k]; FOR( i = 0; i < input_frame; i++ ) { - data_fix[i] = (Word32) ( data_f[0][i] * ( 1 << Q14 ) ); + data_fix[i] = ( Word32 )( data_f[0][i] * ( 1 << Q14 ) ); } ivas_transient_det_process_fx( hSpar->hTranDet, data_fix, input_frame, transient_det ); } #else ivas_transient_det_process( hSpar->hTranDet, data_f[0], input_frame, transient_det ); #endif -#ifdef DUMPS_ENABLED - float a[2]; - a[0] = transient_det[0]; - a[1] = transient_det[1]; - dbgwrite_txt( a, 2, "fixed.txt", NULL ); + +#ifdef DEBUGGING + { + float a[2]; + a[0] = transient_det[0]; + a[1] = transient_det[1]; + dbgwrite_txt( a, 2, "fixed.txt", NULL ); + } #endif + if ( ivas_total_brate < IVAS_24k4 ) { transient_det[1] = 0; @@ -1295,12 +1299,16 @@ static ivas_error ivas_spar_enc_process( * Transient detector *-----------------------------------------------------------------------------------------*/ ivas_transient_det_process( hSpar->hTranDet, data_f[0], input_frame, transient_det ); -#ifdef DUMPS_ENABLED - float a[2]; - a[0] = transient_det[0]; - a[1] = transient_det[1]; - dbgwrite_txt( a, 2, "fixed.txt", NULL ); + +#ifdef DEBUGGING + { + float a[2]; + a[0] = transient_det[0]; + a[1] = transient_det[1]; + dbgwrite_txt( a, 2, "fixed.txt", NULL ); + } #endif + if ( ivas_total_brate < IVAS_24k4 ) { transient_det[1] = 0; diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 37c588f71..66d67aad2 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -3178,7 +3178,7 @@ static ivas_error ivas_rend_crendConvolver( ivas_mdft_fx( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( pFreq_buf_re, subframe_length, "Fixed_pFreq_buf_re_mdft.txt", NULL ); dbgwrite_txt( pFreq_buf_im, subframe_length, "Fixed_pFreq_buf_im_mdft.txt", NULL ); #endif @@ -3246,7 +3246,7 @@ static ivas_error ivas_rend_crendConvolver( ivas_imdft_fx( tmp_out_re, tmp_out_im, pOut, subframe_length ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( pOut, subframe_length << 1, "Fixed_imdft_out.txt", NULL ); #endif pFreq_buf_re = &pcm_out[j][imult1616( i_ts, subframe_length )]; diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index b929ee30f..5ead36d31 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -1517,7 +1517,7 @@ void rotateFrame_shd_cldfb( /* calculate Ambisonics rotation matrix from the quaternion */ SHrotmatgen_fx( SHrotmat, Rmat, shd_rot_max_order ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( SHrotmat, HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); #endif /* rotation by mtx multiplication */ diff --git a/lib_rend/ivas_td_decorr.c b/lib_rend/ivas_td_decorr.c index e3e224c9a..880844a9f 100644 --- a/lib_rend/ivas_td_decorr.c +++ b/lib_rend/ivas_td_decorr.c @@ -31,21 +31,19 @@ *******************************************************************************************************/ #include +#include #include "options.h" #include "prot.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif -#include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #endif +#include "ivas_prot.h" #include "ivas_prot_rend.h" #include "math.h" -#include #include "wmc_auto.h" -#ifdef DUMPS_ENABLED -#include +#ifdef DEBUGGING +#include "debug.h" #endif /*------------------------------------------------------------------------------------------* diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index f2c6a7833..5fe18d8ef 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9095,7 +9095,7 @@ static ivas_error rotateFrameSba_fx( /* calculate ambisonics rotation matrices for the previous and current frames */ SHrotmatgen_fx( gains, Rmat, shd_rot_max_order ); -#ifdef DUMPS_ENABLED +#ifdef DEBUGGING dbgwrite_txt( gains, HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_code_gains.txt", NULL ); dbgwrite_txt( Rmat, 3 * 3, "Fixed_code_Rmat.txt", NULL ); #endif -- GitLab From 4191f3ec380805ec0edbd782d6c3800a5f78e70d Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 15:44:39 +0200 Subject: [PATCH 68/77] avoid including debug.h in options.h --- lib_com/options.h | 3 +-- lib_debug/debug.c | 2 +- lib_debug/debug.h | 4 +++- lib_dec/ivas_sba_rendering_internal.c | 2 +- lib_dec/ivas_stereo_dft_dec_fx.c | 11 +++++++++-- lib_enc/ivas_entropy_coder.c | 5 ++++- lib_enc/ivas_mc_paramupmix_enc.c | 3 +++ lib_enc/ivas_spar_encoder.c | 6 ++++-- lib_rend/ivas_crend.c | 12 ++++++++---- lib_rend/ivas_rotation.c | 3 ++- lib_rend/lib_rend.c | 4 ++-- 11 files changed, 38 insertions(+), 17 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 29f11d302..fdd0757d3 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -47,7 +47,7 @@ /*#define DEBUGGING*/ /* Allows debugging message to be printed out during runtime */ #ifdef DEBUGGING -#include "debug.h" +/*#define DBG_WAV_WRITER*/ #endif #define SUPPORT_JBM_TRACEFILE /* Support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ @@ -113,7 +113,6 @@ #define FIX_TMP_714 #define BASOP_NOGLOB_TMP_715 #define EVS_FUNC_MODIFIED -//#define DBG_WAV_WRITER #define EVS_FLOAT_ENC #define FIX_667_DISABLE_INITIAL_PLC_SUPPRESSION #define IVAS_CNST diff --git a/lib_debug/debug.c b/lib_debug/debug.c index 5e6537990..f1cfa928a 100644 --- a/lib_debug/debug.c +++ b/lib_debug/debug.c @@ -919,6 +919,7 @@ int16_t dbgwrite_wav( return 0; } +#endif int16_t dbgwrite_txt( @@ -974,5 +975,4 @@ int16_t dbgwrite_txt( return 0; } -#endif #endif /* DEBUGGING */ diff --git a/lib_debug/debug.h b/lib_debug/debug.h index 0d3e920ca..e88def922 100644 --- a/lib_debug/debug.h +++ b/lib_debug/debug.h @@ -105,12 +105,14 @@ int16_t dbgwrite_wav( const char *const filename, int32_t fs, int16_t num_chs ); +#endif + int16_t dbgwrite_txt( const float *buffer, /* i : Write buffer */ const int16_t count, /* i : Number of elements */ const char *const filename, const char *const msg_opt ); -#endif + void dbgwrite_mat_repeat( float *buffer, /* i : write buffer */ int16_t nRow, /* i : matrix size (rows) */ diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index cc7db6b03..2f019584b 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -912,7 +912,7 @@ void ivas_sba_mix_matrix_determiner_fx( ivas_agc_dec_process_fx( hSpar->hAgcDec, ( output_fx ), ( output_fx ), nchan_transport, output_frame ); Q_p_output = sub( Q_p_output, 3 ); #ifdef DEBUGGING - dbgwrite_txt( &output[0][0], output_frame, "fix_ivas_agc_dec_process_output.txt", NULL ); + dbgwrite_txt( (const float *)(output_fx[0]), output_frame, "fix_ivas_agc_dec_process_output.txt", NULL ); #endif /* Convert numeric range back */ diff --git a/lib_dec/ivas_stereo_dft_dec_fx.c b/lib_dec/ivas_stereo_dft_dec_fx.c index 0c4409291..05f34ea41 100644 --- a/lib_dec/ivas_stereo_dft_dec_fx.c +++ b/lib_dec/ivas_stereo_dft_dec_fx.c @@ -49,6 +49,13 @@ #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "basop_util.h" +#endif +#ifdef DEBUGGING +#include "debug.h" +#endif + + +#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants @@ -3927,7 +3934,7 @@ void stereo_dft_dec_read_BS_fx( hStereoDft->res_global_gain_fx = ECSQ_dequantize_gain_fx( I ); #ifdef DEBUGGING - dbgwrite_txt( &hStereoDft->res_global_gain, 1, "fixed_res_global_gain.txt", NULL ); + dbgwrite_txt( (const float *)(&hStereoDft->res_global_gain_fx), 1, "fixed_res_global_gain.txt", NULL ); #endif ecsq_inst.config_index = sub( shl( hStereoDft->res_cod_mode[k_offset], 1 ), 1 ); @@ -3947,7 +3954,7 @@ void stereo_dft_dec_read_BS_fx( ECSQ_dequantize_vector_fx( dec, hStereoDft->res_global_gain_fx, hStereoDft->res_cod_line_max, res_buf_fx ); #ifdef DEBUGGING - dbgwrite_txt( res_buf, hStereoDft->res_cod_line_max, "fixed_res_buf.txt", NULL ); + dbgwrite_txt( (const float *) res_buf_fx, hStereoDft->res_cod_line_max, "fixed_res_buf.txt", NULL ); #endif } ELSE diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index 60be0e537..900f0bb49 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -31,17 +31,20 @@ *******************************************************************************************************/ #include +#include #include "options.h" #include "ivas_cnst.h" #include "prot.h" #include "ivas_prot.h" #include "ivas_rom_com.h" #include "math.h" -#include #include "wmc_auto.h" #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #endif +#ifdef DEBUGGING +#include "debug.h" +#endif #ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index 6d23d82c4..06c9dde4d 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -46,6 +46,9 @@ #include "ivas_rom_com.h" #include "ivas_rom_enc.h" #include "wmc_auto.h" +#ifdef DEBUGGING +#include "debug.h" +#endif /*------------------------------------------------------------------------- * Local function prototypes diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index c0d7b77ba..2d8bee58e 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -31,20 +31,22 @@ *******************************************************************************************************/ #include +#include #include "options.h" #include "ivas_prot.h" #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#include "options.h" #endif #include "ivas_rom_com.h" #include "ivas_stat_com.h" #include "prot.h" #include "math.h" -#include #include "wmc_auto.h" #include "prot_fx_enc.h" +#ifdef DEBUGGING +#include "debug.h" +#endif /*-------------------------------------------------------------------* diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 66d67aad2..766937955 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -42,13 +42,17 @@ #include "ivas_stat_rend.h" #include "lib_rend.h" #include "wmc_auto.h" +#ifdef DEBUGGING +#include "debug.h" +#endif + #ifdef IVAS_FLOAT_FIXED #include "control.h" #include "prot_fx.h" -#include "debug.h" #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) #endif + #ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_hrtf_init() @@ -3179,8 +3183,8 @@ static ivas_error ivas_rend_crendConvolver( ivas_mdft_fx( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); #ifdef DEBUGGING - dbgwrite_txt( pFreq_buf_re, subframe_length, "Fixed_pFreq_buf_re_mdft.txt", NULL ); - dbgwrite_txt( pFreq_buf_im, subframe_length, "Fixed_pFreq_buf_im_mdft.txt", NULL ); + dbgwrite_txt( (const float *) pFreq_buf_re, subframe_length, "Fixed_pFreq_buf_re_mdft.txt", NULL ); + dbgwrite_txt( (const float *) pFreq_buf_im, subframe_length, "Fixed_pFreq_buf_im_mdft.txt", NULL ); #endif i++; } @@ -3247,7 +3251,7 @@ static ivas_error ivas_rend_crendConvolver( ivas_imdft_fx( tmp_out_re, tmp_out_im, pOut, subframe_length ); #ifdef DEBUGGING - dbgwrite_txt( pOut, subframe_length << 1, "Fixed_imdft_out.txt", NULL ); + dbgwrite_txt( (const float *) pOut, subframe_length << 1, "Fixed_imdft_out.txt", NULL ); #endif pFreq_buf_re = &pcm_out[j][imult1616( i_ts, subframe_length )]; FOR( k = 0; k < subframe_length; k++ ) diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 5ead36d31..6030fbaf2 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -1518,8 +1518,9 @@ void rotateFrame_shd_cldfb( SHrotmatgen_fx( SHrotmat, Rmat, shd_rot_max_order ); #ifdef DEBUGGING - dbgwrite_txt( SHrotmat, HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); + dbgwrite_txt( (const float *)SHrotmat[0], HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); #endif + /* rotation by mtx multiplication */ FOR( i = 0; i < numTimeSlots; i++ ) { diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 5fe18d8ef..e837ec156 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9096,8 +9096,8 @@ static ivas_error rotateFrameSba_fx( SHrotmatgen_fx( gains, Rmat, shd_rot_max_order ); #ifdef DEBUGGING - dbgwrite_txt( gains, HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_code_gains.txt", NULL ); - dbgwrite_txt( Rmat, 3 * 3, "Fixed_code_Rmat.txt", NULL ); + dbgwrite_txt( (const float *)(gains[0]), HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_code_gains.txt", NULL ); + dbgwrite_txt( (const float *)(Rmat[0]), 3 * 3, "Fixed_code_Rmat.txt", NULL ); #endif FOR( i = 0; i < subframe_len; i++ ) { -- GitLab From cfcf1842215d35dd0862c0e4b0e9a84ae23b393a Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 1 Aug 2024 15:53:05 +0200 Subject: [PATCH 69/77] clang format --- lib_com/wtda.c | 2 +- lib_dec/ivas_jbm_dec.c | 2 +- lib_dec/ivas_osba_dec.c | 2 +- lib_dec/ivas_sba_rendering_internal.c | 6 +++--- lib_dec/ivas_stereo_dft_dec.c | 2 +- lib_dec/ivas_stereo_dft_dec_fx.c | 6 +++--- lib_dec/ivas_stereo_mdct_stereo_dec.c | 2 +- lib_dec/swb_bwe_dec_hr.c | 2 +- lib_dec/tonalMDCTconcealment.c | 2 +- lib_enc/ivas_lfe_enc.c | 2 +- lib_enc/ivas_spar_encoder.c | 4 ++-- lib_rend/ivas_mcmasa_ana.c | 2 +- lib_rend/ivas_objectRenderer_mix.c | 2 +- lib_rend/ivas_rotation.c | 2 +- lib_rend/lib_rend.c | 4 ++-- 15 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib_com/wtda.c b/lib_com/wtda.c index b3374f864..eed61a240 100644 --- a/lib_com/wtda.c +++ b/lib_com/wtda.c @@ -43,7 +43,7 @@ #include "wmc_auto.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif +#endif /*--------------------------------------------------------------------------* * mvr2r_inv() diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 4ca2f88a1..56a0ae046 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -45,7 +45,7 @@ #include "ivas_prot_fx.h" #ifdef DEBUGGING #include "debug.h" -#endif +#endif #include "prot_fx.h" #define float_to_fixed( n, factor ) ( round( n * ( 1 << factor ) ) ) diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 187ead976..4c8c8103e 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -41,7 +41,7 @@ #include "ivas_prot_fx.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif +#endif /*-------------------------------------------------------------------* diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index 2f019584b..b3a11a07a 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -42,7 +42,7 @@ #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif +#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -912,8 +912,8 @@ void ivas_sba_mix_matrix_determiner_fx( ivas_agc_dec_process_fx( hSpar->hAgcDec, ( output_fx ), ( output_fx ), nchan_transport, output_frame ); Q_p_output = sub( Q_p_output, 3 ); #ifdef DEBUGGING - dbgwrite_txt( (const float *)(output_fx[0]), output_frame, "fix_ivas_agc_dec_process_output.txt", NULL ); -#endif + dbgwrite_txt( (const float *) ( output_fx[0] ), output_frame, "fix_ivas_agc_dec_process_output.txt", NULL ); +#endif /* Convert numeric range back */ FOR( ch = 0; ch < nchan_out; ch++ ) diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index b36b4880b..a3618a627 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -47,7 +47,7 @@ #include "wmc_auto.h" #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif +#endif /*-------------------------------------------------------------------* * Local constants diff --git a/lib_dec/ivas_stereo_dft_dec_fx.c b/lib_dec/ivas_stereo_dft_dec_fx.c index 05f34ea41..069b26a2c 100644 --- a/lib_dec/ivas_stereo_dft_dec_fx.c +++ b/lib_dec/ivas_stereo_dft_dec_fx.c @@ -3934,8 +3934,8 @@ void stereo_dft_dec_read_BS_fx( hStereoDft->res_global_gain_fx = ECSQ_dequantize_gain_fx( I ); #ifdef DEBUGGING - dbgwrite_txt( (const float *)(&hStereoDft->res_global_gain_fx), 1, "fixed_res_global_gain.txt", NULL ); -#endif + dbgwrite_txt( (const float *) ( &hStereoDft->res_global_gain_fx ), 1, "fixed_res_global_gain.txt", NULL ); +#endif ecsq_inst.config_index = sub( shl( hStereoDft->res_cod_mode[k_offset], 1 ), 1 ); @@ -3955,7 +3955,7 @@ void stereo_dft_dec_read_BS_fx( #ifdef DEBUGGING dbgwrite_txt( (const float *) res_buf_fx, hStereoDft->res_cod_line_max, "fixed_res_buf.txt", NULL ); -#endif +#endif } ELSE { diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index 21e3eccd4..a745752bd 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -41,7 +41,7 @@ #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif +#endif /*-------------------------------------------------------------------* diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index d3ddd1de5..949b45481 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -42,7 +42,7 @@ #include "wmc_auto.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif +#endif /*-------------------------------------------------------------------* * swb_bwe_dec_hr() diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index e8da62cdf..328c00d18 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -46,7 +46,7 @@ #ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif +#endif /*******************************************************/ diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index 4b6857710..636658d25 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -41,7 +41,7 @@ #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif +#endif /*-----------------------------------------------------------------------------------------* diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index 2d8bee58e..ead9c4d25 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -946,7 +946,7 @@ static ivas_error ivas_spar_enc_process( ivas_total_brate = hEncoderConfig->ivas_total_brate; num_del_samples = hSpar->hFbMixer->fb_cfg->fb_latency; - input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); sba_order = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); #ifndef IVAS_FLOAT_FIXED nchan_inp = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); @@ -971,7 +971,7 @@ static ivas_error ivas_spar_enc_process( Word32 data_fix[L_FRAME48k]; FOR( i = 0; i < input_frame; i++ ) { - data_fix[i] = ( Word32 )( data_f[0][i] * ( 1 << Q14 ) ); + data_fix[i] = (Word32) ( data_f[0][i] * ( 1 << Q14 ) ); } ivas_transient_det_process_fx( hSpar->hTranDet, data_fix, input_frame, transient_det ); } diff --git a/lib_rend/ivas_mcmasa_ana.c b/lib_rend/ivas_mcmasa_ana.c index 06c895335..08c01b3b7 100644 --- a/lib_rend/ivas_mcmasa_ana.c +++ b/lib_rend/ivas_mcmasa_ana.c @@ -45,7 +45,7 @@ #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif +#endif /*------------------------------------------------------------------------- * Local constants diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index 1cf3f2a85..67a70fcb1 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -41,7 +41,7 @@ #include "ivas_prot_fx.h" #ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif +#endif #define IVAS_FLOAT_FIXED_TO_BE_REMOVED diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index 6030fbaf2..b5fa40ab5 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -1518,7 +1518,7 @@ void rotateFrame_shd_cldfb( SHrotmatgen_fx( SHrotmat, Rmat, shd_rot_max_order ); #ifdef DEBUGGING - dbgwrite_txt( (const float *)SHrotmat[0], HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); + dbgwrite_txt( (const float *) SHrotmat[0], HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); #endif /* rotation by mtx multiplication */ diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index e837ec156..3416fec38 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -9096,8 +9096,8 @@ static ivas_error rotateFrameSba_fx( SHrotmatgen_fx( gains, Rmat, shd_rot_max_order ); #ifdef DEBUGGING - dbgwrite_txt( (const float *)(gains[0]), HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_code_gains.txt", NULL ); - dbgwrite_txt( (const float *)(Rmat[0]), 3 * 3, "Fixed_code_Rmat.txt", NULL ); + dbgwrite_txt( (const float *) ( gains[0] ), HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_code_gains.txt", NULL ); + dbgwrite_txt( (const float *) ( Rmat[0] ), 3 * 3, "Fixed_code_Rmat.txt", NULL ); #endif FOR( i = 0; i < subframe_len; i++ ) { -- GitLab From a4ae7c4894dc78fac533c6c5be4400b5cf8b0992 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 17:21:59 +0200 Subject: [PATCH 70/77] small correction of malloc() inside count.c --- lib_com/count.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/count.c b/lib_com/count.c index ca56559a3..93d72ddf4 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -311,7 +311,7 @@ static char *my_strdup( const char *s ) /* allocate memory for copy of ID string (including string terminator) */ /* NOTE: the ID strings will never be deallocated because there is no way to "destroy" a counter that is not longer needed */ - if ( ( dup = (char *) malloc_( strlen( s ) + 1 ) ) == NULL ) + if ( ( dup = (char *) malloc( strlen( s ) + 1 ) ) == NULL ) return NULL; return strcpy( dup, s ); -- GitLab From 9400c8065867018023d66dcdc4b27b9aa65815f9 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 17:26:02 +0200 Subject: [PATCH 71/77] proper includes --- lib_com/count.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib_com/count.c b/lib_com/count.c index 93d72ddf4..e2c2ba8ee 100644 --- a/lib_com/count.c +++ b/lib_com/count.c @@ -46,8 +46,10 @@ #include #include #include -#include "stl.h" #include +#include "stl.h" +#include "options.h" +#include "wmc_auto.h" #define WMC_TOOL_SKIP -- GitLab From ea7845e778ba449f3152d33e4dc47b0a59af1e75 Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 17:47:20 +0200 Subject: [PATCH 72/77] replace 1llu with unsigned Word64 --- lib_com/float_to_fix_ops.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib_com/float_to_fix_ops.c b/lib_com/float_to_fix_ops.c index 297ebca91..ad05e872a 100644 --- a/lib_com/float_to_fix_ops.c +++ b/lib_com/float_to_fix_ops.c @@ -15,15 +15,16 @@ Word32 floatToFixed( float f, Word16 Q ) if ( f == 1.0f && Q == Q31 ) return MAXVAL_WORD32; if ( Q < 0 ) - result_32 = (Word64) ( (float) ( f ) / (double) ( (Word64) 1 << ( -Q ) ) + ( f >= 0 ? 0.5 : -0.5 ) ); + result_32 = (Word64) ( (float) ( f ) / (double) ( (unsigned Word64) 1 << ( -Q ) ) + ( f >= 0 ? 0.5 : -0.5 ) ); else - result_32 = (Word64) ( f * (double) ( (Word64) 1 << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); + result_32 = (Word64) ( f * (double) ( (unsigned Word64) 1 << Q ) + ( f >= 0 ? 0.5 : -0.5 ) ); if ( result_32 > MAX_32 ) return MAX_32; if ( result_32 < MIN_32 ) return MIN_32; return (Word32) result_32; } + float fixedToFloat( Word32 i, Word16 Q ) { -- GitLab From 351c2c8dde09d7a5ab7b0730eae2883502a8f82d Mon Sep 17 00:00:00 2001 From: malenov Date: Thu, 1 Aug 2024 19:14:33 +0200 Subject: [PATCH 73/77] fix incorrect placement of the closing parenthesis --- lib_enc/ext_sig_ana_fx.c | 92 ++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 358f89ea1..ec3b2632e 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -555,68 +555,70 @@ void core_signal_analysis_high_bitrate_fx( } } #endif - IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) - { - test(); - test(); - TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, - st->hTcxCfg->tcx_coded_lines, - transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), - spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL ); + } + + IF( NE_16( st->element_mode, IVAS_CPE_MDCT ) ) + { + test(); + test(); + TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, + st->hTcxCfg->tcx_coded_lines, + transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), + spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL ); #ifdef IVAS_CODE - IF( st->hTcxCfg->fIsTNSAllowed ) + IF( st->hTcxCfg->fIsTNSAllowed ) #endif + { + EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], + param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); + } + IF( EQ_16( transform_type[frameno], TCX_5 ) ) + { + /* group sub-windows: interleave bins according to their frequencies */ + FOR( i = 0; i < tcx5SizeFB; i++ ) { - EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], - param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); - } - IF( EQ_16( transform_type[frameno], TCX_5 ) ) - { - /* group sub-windows: interleave bins according to their frequencies */ - FOR( i = 0; i < tcx5SizeFB; i++ ) - { - interleaveBuf[2 * i] = spectrum[frameno][i]; - move32(); - interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; - move32(); - } - Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); + interleaveBuf[2 * i] = spectrum[frameno][i]; + move32(); + interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; + move32(); } + Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); + } - /*--------------------------------------------------------------* + /*--------------------------------------------------------------* * LPC analysis *---------------------------------------------------------------*/ #ifdef IVAS_CODE - IF( st->tcxonly ) + IF( st->tcxonly ) #endif - { - HBAutocorrelation_fx( st->hTcxCfg, lpc_left_overlap_mode, lpc_right_overlap_mode, &st->speech_enc_pe[frameno * tcx10Size], - shr( L_frame, sub( nSubframes, 1 ) ), r, M ); - - FOR( i = 0; i <= M; i++ ) - { - move16(); - move16(); - r_l[frameno][i] = L_Extract_lc( r[i], &r_h[frameno][i] ); - } - - adapt_lag_wind( r_h[frameno], r_l[frameno], M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); - - E_LPC_lev_dur( r_h[frameno], r_l[frameno], A, epsP, M, NULL ); + { + HBAutocorrelation_fx( st->hTcxCfg, lpc_left_overlap_mode, lpc_right_overlap_mode, &st->speech_enc_pe[frameno * tcx10Size], + shr( L_frame, sub( nSubframes, 1 ) ), r, M ); - E_LPC_a_lsp_conversion( A, lsp[nSubframes - 1 - frameno], st->lspold_enc_fx, M ); - } - IF( st->igf ) + FOR( i = 0; i <= M; i++ ) { - ProcessIGF_fx( st->hIGFEnc, st, spectrum[frameno], &( spectrum_e[frameno] ), powerSpec, &powerSpec_e, transform_type[frameno] == TCX_20, hTcxEnc->fUseTns[frameno], ( st->last_core == ACELP_CORE ), frameno ); + move16(); + move16(); + r_l[frameno][i] = L_Extract_lc( r[i], &r_h[frameno][i] ); } - /* Copy memory */ - MVR2R_WORD16( lsp_new, st->lspold_enc_fx, M ); + adapt_lag_wind( r_h[frameno], r_l[frameno], M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); + + E_LPC_lev_dur( r_h[frameno], r_l[frameno], A, epsP, M, NULL ); + + E_LPC_a_lsp_conversion( A, lsp[nSubframes - 1 - frameno], st->lspold_enc_fx, M ); } + IF( st->igf ) + { + ProcessIGF_fx( st->hIGFEnc, st, spectrum[frameno], &( spectrum_e[frameno] ), powerSpec, &powerSpec_e, transform_type[frameno] == TCX_20, hTcxEnc->fUseTns[frameno], ( st->last_core == ACELP_CORE ), frameno ); + } + + /* Copy memory */ + MVR2R_WORD16( lsp_new, st->lspold_enc_fx, M ); } } return; } + -- GitLab From 326c54798c547777f2600b0c6d765fc01d46b2bb Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 1 Aug 2024 19:21:45 +0200 Subject: [PATCH 74/77] clang format --- lib_com/float_to_fix_ops.c | 2 +- lib_enc/ext_sig_ana_fx.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib_com/float_to_fix_ops.c b/lib_com/float_to_fix_ops.c index ad05e872a..7a081f351 100644 --- a/lib_com/float_to_fix_ops.c +++ b/lib_com/float_to_fix_ops.c @@ -24,7 +24,7 @@ Word32 floatToFixed( float f, Word16 Q ) return MIN_32; return (Word32) result_32; } - + float fixedToFloat( Word32 i, Word16 Q ) { diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index ec3b2632e..4f87b1bd2 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -586,8 +586,8 @@ void core_signal_analysis_high_bitrate_fx( } /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ + * LPC analysis + *---------------------------------------------------------------*/ #ifdef IVAS_CODE IF( st->tcxonly ) @@ -621,4 +621,3 @@ void core_signal_analysis_high_bitrate_fx( return; } - -- GitLab From ea7d1ccca00ed40d65b92cd30cceaad0d1a3b2d2 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 2 Aug 2024 13:31:43 +0200 Subject: [PATCH 75/77] revert to EVS test fix commit --- lib_enc/ext_sig_ana_fx.c | 62 ++-------------------------------------- 1 file changed, 3 insertions(+), 59 deletions(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 31aef1308..ec3b2632e 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -571,63 +571,6 @@ void core_signal_analysis_high_bitrate_fx( { EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); - test(); - test(); - TNSAnalysis_fx( st->hTcxCfg, L_frameTCX, - st->hTcxCfg->tcx_coded_lines, - transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), - spectrum[frameno], &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL ); -#ifdef IVAS_CODE - IF( st->hTcxCfg->fIsTNSAllowed ) -#endif - { - EncodeTnsData_fx( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], - param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); - } - IF( EQ_16( transform_type[frameno], TCX_5 ) ) - { - /* group sub-windows: interleave bins according to their frequencies */ - FOR( i = 0; i < tcx5SizeFB; i++ ) - { - interleaveBuf[2 * i] = spectrum[frameno][i]; - move32(); - interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; - move32(); - } - Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); - } - - /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ - -#ifdef IVAS_CODE - IF( st->tcxonly ) -#endif - { - HBAutocorrelation_fx( st->hTcxCfg, lpc_left_overlap_mode, lpc_right_overlap_mode, &st->speech_enc_pe[frameno * tcx10Size], - shr( L_frame, sub( nSubframes, 1 ) ), r, M ); - - FOR( i = 0; i <= M; i++ ) - { - move16(); - move16(); - r_l[frameno][i] = L_Extract_lc( r[i], &r_h[frameno][i] ); - } - - adapt_lag_wind( r_h[frameno], r_l[frameno], M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); - - E_LPC_lev_dur( r_h[frameno], r_l[frameno], A, epsP, M, NULL ); - - E_LPC_a_lsp_conversion( A, lsp[nSubframes - 1 - frameno], st->lspold_enc_fx, M ); - } - IF( st->igf ) - { - ProcessIGF_fx( st->hIGFEnc, st, spectrum[frameno], &( spectrum_e[frameno] ), powerSpec, &powerSpec_e, transform_type[frameno] == TCX_20, hTcxEnc->fUseTns[frameno], ( st->last_core == ACELP_CORE ), frameno ); - } - - /* Copy memory */ - Copy( lsp_new, st->lspold_enc_fx, M ); } IF( EQ_16( transform_type[frameno], TCX_5 ) ) { @@ -643,8 +586,8 @@ void core_signal_analysis_high_bitrate_fx( } /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ + * LPC analysis + *---------------------------------------------------------------*/ #ifdef IVAS_CODE IF( st->tcxonly ) @@ -678,3 +621,4 @@ void core_signal_analysis_high_bitrate_fx( return; } + -- GitLab From d9f35f22ab84e75fdf5eab1aadcb52eb49375a88 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 2 Aug 2024 13:39:52 +0200 Subject: [PATCH 76/77] exchange one function call --- lib_enc/ext_sig_ana_fx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index ec3b2632e..d96a98a0b 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -582,12 +582,12 @@ void core_signal_analysis_high_bitrate_fx( interleaveBuf[2 * i + 1] = spectrum[frameno][tcx5SizeFB + i]; move32(); } - Copy32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); + MVR2R_WORD32( interleaveBuf, spectrum[frameno], tcx10SizeFB ); } /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ + * LPC analysis + *---------------------------------------------------------------*/ #ifdef IVAS_CODE IF( st->tcxonly ) -- GitLab From 8820caad683c38c48402b79690be7ba665cb57e7 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 2 Aug 2024 13:41:48 +0200 Subject: [PATCH 77/77] apply clang-format --- lib_enc/ext_sig_ana_fx.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index d96a98a0b..ee7c572c0 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -621,4 +621,3 @@ void core_signal_analysis_high_bitrate_fx( return; } - -- GitLab