From 355a9b309d313608faf575a6472eca85a0d498d7 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Wed, 11 Dec 2024 18:23:59 +0530 Subject: [PATCH 1/2] Float code cleanup, msvs warning fix and mld fixes --- lib_com/ivas_qspherical_com.c | 10 +++++++++- lib_dec/ivas_range_uni_dec.c | 2 +- lib_enc/cod4t64_fast.c | 2 +- lib_enc/ext_sig_ana_fx.c | 4 +++- lib_enc/ivas_core_pre_proc.c | 28 +++++++++++++++++++++------- lib_enc/ivas_core_pre_proc_front.c | 7 +++++-- lib_enc/speech_music_classif_fx.c | 2 -- 7 files changed, 40 insertions(+), 15 deletions(-) diff --git a/lib_com/ivas_qspherical_com.c b/lib_com/ivas_qspherical_com.c index c3dbc8fe6..499585221 100644 --- a/lib_com/ivas_qspherical_com.c +++ b/lib_com/ivas_qspherical_com.c @@ -668,7 +668,15 @@ Word16 quantize_phi_chan_compand_fx( delta_phi = L_shr( delta_phi, sub( 9, tmp_e ) ); // Q22 // id_phi = (int16_t) round_f( ( phi / (float) delta_phi ) ); id_phi = BASOP_Util_Divide3232_Scale( phi, delta_phi, &tmp_e ); // Q15 - id_phi = shr( id_phi, sub( 15, tmp_e ) ); // Q0 + IF( GE_16( abs_s( id_phi ), shl_sat( 1, sub( 15, tmp_e ) ) ) ) + { + id_phi = shr( id_phi, sub( 15, tmp_e ) ); // Q0 + } + ELSE + { + id_phi = 0; + move16(); + } IF( add( id_phi, shr( n, 1 ) ) < 0 ) { diff --git a/lib_dec/ivas_range_uni_dec.c b/lib_dec/ivas_range_uni_dec.c index 785d5e9f5..3da244dd8 100644 --- a/lib_dec/ivas_range_uni_dec.c +++ b/lib_dec/ivas_range_uni_dec.c @@ -397,7 +397,7 @@ UWord16 rc_uni_dec_read_bits( FOR( tmp = range; tmp <= low; tmp += range ) { - val = add( val, 1 ); + val = UL_addNsD( val, 1 ); } /* in case of bitstream errors it is possible that val >= (1 << bits) */ diff --git a/lib_enc/cod4t64_fast.c b/lib_enc/cod4t64_fast.c index 3e28b35a6..e40766bec 100644 --- a/lib_enc/cod4t64_fast.c +++ b/lib_enc/cod4t64_fast.c @@ -791,7 +791,7 @@ void acelp_fast_fx( FOR( i = 0; i < L_subfr; i++ ) { - y_tmp[i] = add( y_tmp[i], *p_hn++ ); // q_H + y_tmp[i] = add_sat( y_tmp[i], *p_hn++ ); // q_H move16(); } diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index 97d6f3b91..adf80d04d 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -764,7 +764,9 @@ void core_signal_analysis_high_bitrate_ivas_fx( Q_exp = sub( *Q_new, st->prev_Q_new ); move16(); - Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( *Q_new, st->Q_old ) ); // *Q_new + Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( *Q_new, sub( Q15, st->exp_old_inp_16k ) ) ); // *Q_new + st->exp_old_inp_16k = sub( Q15, *Q_new ); + move16(); IF( Q_exp != 0 ) { Scale_sig( st->buf_speech_enc_pe, st->encoderPastSamples_enc + st->encoderLookahead_enc, Q_exp ); // *Q_new diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c index 5bbd635cb..ff79c509e 100644 --- a/lib_enc/ivas_core_pre_proc.c +++ b/lib_enc/ivas_core_pre_proc.c @@ -533,24 +533,29 @@ ivas_error pre_proc_ivas( inp_16k_fx = old_inp_16k_fx + L_INP_MEM - L_look; -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS Word16 Q_old_inp_16k = -1; + move16(); Word16 Q_r[2] = { 0 }; + move16(); + move16(); inp_16k_fx = old_inp_16k_fx + L_INP_MEM - L_look; - Word16 shift = getScaleFactor16( st->old_inp_12k8_fx, 240 ); - Scale_sig( st->old_inp_12k8_fx, 240, shift ); + Word16 shift = getScaleFactor16( st->old_inp_12k8_fx, L_INP_MEM ); + Scale_sig( st->old_inp_12k8_fx, L_INP_MEM, shift ); st->exp_old_inp_12k8 = sub( st->exp_old_inp_12k8, shift ); move16(); - Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( Q_old_inp_16k, sub( Q15, Q_old_inp_16k ) ) ); + Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( Q_old_inp_16k, sub( Q15, st->exp_old_inp_16k ) ) ); st->exp_old_inp_16k = sub( Q15, Q_old_inp_16k ); - if ( st->hBWE_FD != NULL ) + move16(); + + IF( st->hBWE_FD != NULL ) { Scale_sig( st->hBWE_FD->L_old_wtda_swb_fx, L_FRAME48k, sub( -1, st->Q_old_wtda ) ); st->Q_old_wtda = -1; // This reset needs to be looked into + move16(); } -#endif + st->mem_preemph_enc = shl( st->mem_preemph_enc, sub( Q_old_inp_16k, sub( Q15, st->exp_mem_preemph_enc ) ) ); move16(); st->exp_mem_preemph_enc = sub( Q15, Q_old_inp_16k ); @@ -1215,15 +1220,24 @@ ivas_error ivas_compute_core_buffers_fx( IF( ( EQ_16( element_mode, IVAS_CPE_TD ) && EQ_16( st->idchan, 1 ) ) || EQ_16( element_mode, IVAS_CPE_MDCT ) ) { set16_fx( st->old_inp_16k_fx, 0, L_INP_MEM ); + st->exp_old_inp_16k = 0; + move16(); } ELSE IF( GT_32( input_Fs, 8000 ) && EQ_32( sr_core, INT_FS_16k ) ) { Copy( &old_inp_16k_fx[L_frame_tmp], st->old_inp_16k_fx, L_INP_MEM ); + IF( Q_new ) + { + st->exp_old_inp_16k = sub( Q16, *Q_new ); //(*Q_new - 1) + move16(); + } } ELSE IF( GT_32( input_Fs, 8000 ) ) { lerp( st->old_inp_12k8_fx + L_INP_MEM - L_INP_MEM * 4 / 5, st->old_inp_16k_fx, L_INP_MEM, L_INP_MEM * 4 / 5 ); - Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( -1 /* Q st->old_inp_16k_fx = -1 */, sub( 15, st->exp_old_inp_12k8 ) ) ); + Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( -1 /* Q st->old_inp_16k_fx = -1 */, sub( 15, st->exp_old_inp_16k ) ) ); + st->exp_old_inp_16k = Q16; // Q-1 + move16(); } IF( inp16k_out_fx != NULL ) diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 42e577816..1fb611cfb 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -1703,8 +1703,9 @@ ivas_error pre_proc_front_ivas_fx( Word16 Q_old_inp_16k = -1; move16(); - Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( Q_old_inp_16k, sub( Q15, Q_old_inp_16k ) ) ); + Scale_sig( st->old_inp_16k_fx, L_INP_MEM, sub( Q_old_inp_16k, sub( Q15, st->exp_old_inp_16k ) ) ); st->exp_old_inp_16k = sub( Q15, Q_old_inp_16k ); + move16(); IF( st->hBWE_FD != NULL ) { @@ -1737,7 +1738,9 @@ ivas_error pre_proc_front_ivas_fx( *epsP_fx_q = add( Q_r[0], 1 ); move16(); - Scale_sig( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( Q15, st->exp_buf_speech_enc ) ); + Scale_sig( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, sub( 0, sub( Q15, st->exp_buf_speech_enc ) ) ); + st->exp_buf_speech_enc = Q15; + move16(); smc_dec = ivas_acelp_tcx20_switching_fx( st, st->speech_enc, 0, st->wspeech_enc, non_staX_fx, pitch_fr_fx, voicing_fr_fx, currFlatness_fx, lsp_mid_fx, stab_fac_fx, res_cod_SNR_M_fx, res_cod_SNR_M_fx_e, flag_16k_smc ); } ELSE diff --git a/lib_enc/speech_music_classif_fx.c b/lib_enc/speech_music_classif_fx.c index 54ea16f6f..6f8fba9f1 100644 --- a/lib_enc/speech_music_classif_fx.c +++ b/lib_enc/speech_music_classif_fx.c @@ -2624,10 +2624,8 @@ Word16 ivas_smc_gmm_fx( mvs2s( &hSpMusClas->past_dec[0], &hSpMusClas->past_dec[1], HANG_LEN - 2 ); hSpMusClas->past_dec[0] = dec; move16(); -#ifndef IVAS_FLOAT_FIXED #ifdef DEBUG_MODE_INFO dbgwrite( &st->hSpMusClas->wdlp_0_95_sp_32fx, sizeof( Word32 ), 1, 1, "res/wdlp_0_95_sp.x" ); -#endif #endif return dec; -- GitLab From 7a730c21b3e5a61e3a5382d0b1fd26f450359ae0 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Wed, 11 Dec 2024 18:33:06 +0530 Subject: [PATCH 2/2] ivas_mcmasa_enc_fx bug fixes --- lib_enc/ivas_mcmasa_enc.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c index b2be23e73..43e16b81c 100644 --- a/lib_enc/ivas_mcmasa_enc.c +++ b/lib_enc/ivas_mcmasa_enc.c @@ -713,7 +713,7 @@ void ivas_mcmasa_enc_fx( /* Determine LFE-to-total energy ratio */ FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - hMasa->data.lfeToTotalEnergyRatio_fx[i] = BASOP_Util_Divide3232_Scale( hMcMasa->lfeLfEne[i], L_add( EPSILON_FX, hMcMasa->totalLfEne[i] ), &hMasa->data.lfeToTotalEnergyRatio_e[i] ); + hMasa->data.lfeToTotalEnergyRatio_fx[i] = L_deposit_h( BASOP_Util_Divide3232_Scale( hMcMasa->lfeLfEne[i], L_add( EPSILON_FX, hMcMasa->totalLfEne[i] ), &hMasa->data.lfeToTotalEnergyRatio_e[i] ) ); hMasa->data.lfeToTotalEnergyRatio_e[i] = add( sub( hMcMasa->lfeLfEne_e[i], hMcMasa->totalLfEne_e[i] ), hMasa->data.lfeToTotalEnergyRatio_e[i] ); move32(); move16(); @@ -1220,8 +1220,12 @@ void ivas_mcmasa_param_est_enc_fx( hMcMasa->buffer_energy_q[index - 1] = sub( Q31, ref_e ); move16(); - computeDiffuseness_mdft_fx( hMcMasa->buffer_intensity_real_fx, hMcMasa->buffer_energy_fx, num_freq_bands, hMcMasa->no_col_avg_diff, diffuseness_vector_fx, hMcMasa->buffer_intensity_real_q, hMcMasa->buffer_energy_q, out_exp ); - + computeDiffuseness_mdft_fx( hMcMasa->buffer_intensity_real_fx, hMcMasa->buffer_energy_fx, num_freq_bands, hMcMasa->no_col_avg_diff, diffuseness_vector_fx, hMcMasa->buffer_intensity_real_q, hMcMasa->buffer_energy_q, &out_exp[0] ); + FOR( i = 1; i < num_freq_bands; i++ ) + { + out_exp[i] = out_exp[0]; + move16(); + } /* Compute vertical diffuseness, and tune original diffuseness if needed */ IF( !hMcMasa->isHorizontalSetup ) { @@ -1243,9 +1247,9 @@ void ivas_mcmasa_param_est_enc_fx( move32(); IF( hMcMasa->combineRatios ) { - diffuseness_m_fx[0][band_m_idx] = BASOP_Util_Add_Mant32Exp( diffuseness_m_fx[0][band_m_idx], diffuseness_e[0][band_m_idx], Mult_32_32( reference_power_fx[ts][band_m_idx], diffuseness_vector_fx[band_m_idx] ), sub( 31, sub( shl( inp_q, 1 ), 31 ) ), &diffuseness_e[0][band_m_idx] ); + diffuseness_m_fx[0][band_m_idx] = BASOP_Util_Add_Mant32Exp( diffuseness_m_fx[0][band_m_idx], diffuseness_e[0][band_m_idx], Mult_32_32( reference_power_fx[ts][band_m_idx], diffuseness_vector_fx[band_m_idx] ), ref_e, &diffuseness_e[0][band_m_idx] ); move32(); - renormalization_factor_diff_fx[band_m_idx] = BASOP_Util_Add_Mant32Exp( renormalization_factor_diff_fx[band_m_idx], renormalization_factor_diff_e[band_m_idx], reference_power_fx[ts][band_m_idx], sub( 31, sub( shl( inp_q, 1 ), 31 ) ), &renormalization_factor_diff_e[band_m_idx] ); + renormalization_factor_diff_fx[band_m_idx] = BASOP_Util_Add_Mant32Exp( renormalization_factor_diff_fx[band_m_idx], renormalization_factor_diff_e[band_m_idx], reference_power_fx[ts][band_m_idx], ref_e, &renormalization_factor_diff_e[band_m_idx] ); move32(); } ELSE @@ -1458,11 +1462,11 @@ void ivas_mcmasa_param_est_enc_fx( cohPanCoh_e = tempCoh2_e; move16(); } - IF( GT_32( cohPanCoh_fx, ONE_IN_Q30 ) ) - { - cohPanCoh_fx = ONE_IN_Q30; - move32(); - } + /* IF( GT_32( cohPanCoh_fx, ONE_IN_Q30 ) ) + { + cohPanCoh_fx = ONE_IN_Q30; + move32(); + }*/ cohPanCoh_fx = L_shl_sat( cohPanCoh_fx, cohPanCoh_e ); /*Q31*/ cohPanCoh_e = 0; move16(); -- GitLab