From 959add561c0f2d5efcaf95a51d9968f2a6ea0dc6 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Thu, 22 Sep 2022 13:43:27 +0200 Subject: [PATCH 1/3] Changing all 1 / sqrt() to inv_sqrt() --- lib_com/ivas_pca_tools.c | 8 ++++++++ lib_com/options.h | 1 + lib_com/swb_bwe_com.c | 4 ++++ lib_com/vlpc_2st_com.c | 12 ++++++++++++ lib_dec/ivas_dirac_dec.c | 8 ++++++++ lib_dec/ivas_dirac_dec_binaural_functions.c | 14 ++++++++++++++ lib_dec/ivas_dirac_output_synthesis_dec.c | 4 ++++ lib_dec/ivas_efap.c | 8 ++++++++ lib_dec/ivas_init_dec.c | 4 ++++ lib_dec/ivas_mdct_core_dec.c | 4 ++++ lib_dec/ivas_objectRenderer_vec.c | 4 ++++ lib_dec/ivas_reverb.c | 4 ++++ lib_dec/ivas_stereo_cng_dec.c | 16 ++++++++++++++++ lib_dec/ivas_vbap.c | 4 ++++ lib_dec/swb_tbe_dec.c | 4 ++++ lib_enc/core_enc_ol.c | 4 ++++ lib_enc/eval_pit_contr.c | 4 ++++ lib_enc/frame_spec_dif_cor_rate.c | 4 ++++ lib_enc/igf_enc.c | 8 ++++++++ lib_enc/ivas_stereo_dft_enc.c | 4 ++++ lib_enc/ivas_stereo_ica_enc.c | 4 ++++ lib_enc/ivas_tcx_core_enc.c | 4 ++++ lib_enc/pit_enc.c | 2 -- lib_enc/voiced_enc.c | 4 ++++ 24 files changed, 135 insertions(+), 2 deletions(-) diff --git a/lib_com/ivas_pca_tools.c b/lib_com/ivas_pca_tools.c index 3f96e81294..123bcb26b8 100644 --- a/lib_com/ivas_pca_tools.c +++ b/lib_com/ivas_pca_tools.c @@ -152,7 +152,11 @@ static void house_refl( pu[0] -= 1; } +#ifdef FIX_I120_INV_SQRT + _rcp = inv_sqrt( fabsf( pu[0] ) ); +#else _rcp = 1.f / sqrtf( fabsf( pu[0] ) ); +#endif for ( i = 0; i < sizex; i++ ) { @@ -645,7 +649,11 @@ static void norm_quat( norm_q = dotp( q, q, IVAS_PCA_INTERP ); +#ifdef FIX_I120_INV_SQRT + norm_q = inv_sqrt( norm_q ); // VE: TBV: possible division by 0 +#else norm_q = 1 / sqrtf( norm_q ); // VE: TBV: possible division by 0 +#endif for ( i = 0; i < IVAS_PCA_INTERP; i++ ) { diff --git a/lib_com/options.h b/lib_com/options.h index db358692a9..0666e82d07 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -149,6 +149,7 @@ #define SPAR_SCALING_HARMONIZATION /* Issue 80: Changes to harmonize scaling in spar */ #define SBA_INTERN_CONFIG_FIX_HOA2 /* Issue 99 : Fix for incorrect internal_config when output format is HOA2 or FOA*/ #define FIX_I98_HANDLES_TO_NULL /* Issue 98: do the setting of all handles to NULL in one place */ +#define FIX_I120_INV_SQRT /* Issue 120: inv_sqrt() shall be used instead of 1 / sqrt() to measure the correct complexity */ #define QUANTISE_REAL_FCN_CLEAN_UP /*Clean up the ivas_quantise_real_values() function*/ diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c index 4e692fc22b..1d8ba7869b 100644 --- a/lib_com/swb_bwe_com.c +++ b/lib_com/swb_bwe_com.c @@ -308,7 +308,11 @@ void calc_tilt_bwe( } } +#ifdef FIX_I120_INV_SQRT + *tilt = r1 * inv_sqrt( r0 ); +#else *tilt = (float) ( r1 / sqrt( r0 ) ); +#endif return; } diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c index 86fdf68c5f..79981bab0b 100644 --- a/lib_com/vlpc_2st_com.c +++ b/lib_com/vlpc_2st_com.c @@ -74,15 +74,27 @@ void lsf_weight_2st( if ( mode == 0 ) { +#ifdef FIX_I120_INV_SQRT + w[i] = (float) ( 60.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* abs */ +#else w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ +#endif } else if ( mode == 1 ) { +#ifdef FIX_I120_INV_SQRT + w[i] = (float) ( 65.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* mid */ +#else w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ +#endif } else { +#ifdef FIX_I120_INV_SQRT + w[i] = (float) ( 63.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ +#else w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ +#endif } } diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 8dd47fe774..621b92a375 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -2514,7 +2514,11 @@ static void initDiffuseResponses( if ( output_config == AUDIO_CONFIG_MONO ) { diffuse_response_function[0] = 1.0f; +#ifdef FIX_I120_INV_SQRT + diffuse_response_function[1] = inv_sqrt( 3.0f ); +#else diffuse_response_function[1] = 1.0f / sqrtf( 3.0f ); +#endif } else if ( !( output_config == AUDIO_CONFIG_FOA || output_config == AUDIO_CONFIG_HOA2 || output_config == AUDIO_CONFIG_HOA3 ) ) { @@ -2596,7 +2600,11 @@ static void initDiffuseResponses( { for ( k = 0; k < ( 2 * l + 1 ); k++ ) { +#ifdef FIX_I120_INV_SQRT + diffuse_response_function[idx++] = inv_sqrt( 2.0f * l + 1.0f ); +#else diffuse_response_function[idx++] = 1.0f / sqrtf( 2.0f * l + 1.0f ); +#endif } } } diff --git a/lib_dec/ivas_dirac_dec_binaural_functions.c b/lib_dec/ivas_dirac_dec_binaural_functions.c index 5e698ab289..6d7bdf2491 100644 --- a/lib_dec/ivas_dirac_dec_binaural_functions.c +++ b/lib_dec/ivas_dirac_dec_binaural_functions.c @@ -431,8 +431,13 @@ static void ivas_dirac_dec_binaural_internal( { /* At mono input duplicate the channel to dual-mono, and apply gain correction to ensure same overall level as in stereo mode */ +#ifdef FIX_I120_INV_SQRT + v_multc( Cldfb_RealBuffer_in[0][slot], INV_SQRT_2, Cldfb_RealBuffer_in[0][slot], nBins ); + v_multc( Cldfb_ImagBuffer_in[0][slot], INV_SQRT_2, Cldfb_ImagBuffer_in[0][slot], nBins ); +#else v_multc( Cldfb_RealBuffer_in[0][slot], 1.0f / SQRT2, Cldfb_RealBuffer_in[0][slot], nBins ); v_multc( Cldfb_ImagBuffer_in[0][slot], 1.0f / SQRT2, Cldfb_ImagBuffer_in[0][slot], nBins ); +#endif mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); } @@ -449,8 +454,13 @@ static void ivas_dirac_dec_binaural_internal( nBins, st_ivas->cldfbAnaDec[ch] ); if ( st_ivas->nchan_transport == 1 && st_ivas->ivas_format == SBA_FORMAT ) { +#ifdef FIX_I120_INV_SQRT + v_multc( Cldfb_RealBuffer_in[ch][slot], INV_SQRT_2, Cldfb_RealBuffer_in[ch][slot], nBins ); + v_multc( Cldfb_ImagBuffer_in[ch][slot], INV_SQRT_2, Cldfb_ImagBuffer_in[ch][slot], nBins ); +#else v_multc( Cldfb_RealBuffer_in[ch][slot], 1.0f / SQRT2, Cldfb_RealBuffer_in[ch][slot], nBins ); v_multc( Cldfb_ImagBuffer_in[ch][slot], 1.0f / SQRT2, Cldfb_ImagBuffer_in[ch][slot], nBins ); +#endif } } } @@ -762,7 +772,11 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric { /* 0.5f <= spreadCoh < 1.0f */ centerMul = 2.0f - ( 2.0f * spreadCoh ); +#ifdef FIX_I120_INV_SQRT + sidesMul = inv_sqrt( centerMul + 2.0f ); +#else sidesMul = 1.0f / sqrtf( centerMul + 2.0f ); +#endif centerMul *= sidesMul; } diff --git a/lib_dec/ivas_dirac_output_synthesis_dec.c b/lib_dec/ivas_dirac_output_synthesis_dec.c index e5c396d07b..dfda59fde9 100644 --- a/lib_dec/ivas_dirac_output_synthesis_dec.c +++ b/lib_dec/ivas_dirac_output_synthesis_dec.c @@ -2078,7 +2078,11 @@ static void spreadCoherencePanningVbap( if ( hVBAPdata == NULL ) { /* Distribute signal to all channels if VBAP is not properly initialized. */ +#ifdef FIX_I120_INV_SQRT + set_f( direct_response, inv_sqrt( num_channels_dir ), num_channels_dir ); +#else set_f( direct_response, 1.0f / sqrtf( num_channels_dir ), num_channels_dir ); +#endif return; } diff --git a/lib_dec/ivas_efap.c b/lib_dec/ivas_efap.c index efd7795dfe..7999264eb3 100644 --- a/lib_dec/ivas_efap.c +++ b/lib_dec/ivas_efap.c @@ -266,7 +266,11 @@ void efap_determine_gains( } normBuffer = normBuffer + hEFAPdata->bufferShort[j] * hEFAPdata->bufferShort[j]; } +#ifdef FIX_I120_INV_SQRT + normBuffer = inv_sqrt( normBuffer ); +#else normBuffer = 1.f / sqrtf( normBuffer ); +#endif for ( j = 0; j < hEFAPdata->numSpk; ++j ) { @@ -1628,7 +1632,11 @@ static float point_plane_distance( /* Dot Product */ tmpNorm = dotp( resultCross, resultCross, 3 ); +#ifdef FIX_I120_INV_SQRT + tmpNorm = inv_sqrt( tmpNorm ); +#else tmpNorm = 1.f / sqrtf( tmpNorm ); +#endif v_sub( X, P1, tmpDot1, 3 ); v_multc( resultCross, tmpNorm, tmpDot2, 3 ); dist = dotp( tmpDot1, tmpDot2, 3 ); diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 87b48cd0d8..afd25c6600 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -1084,7 +1084,11 @@ ivas_error ivas_init_decoder( if ( st_ivas->hVBAPdata == NULL ) { /* Distribute signal to all channels if VBAP is not properly initialized. */ +#ifdef FIX_I120_INV_SQRT + set_f( st_ivas->hLsSetupCustom->separate_ch_gains, inv_sqrt( st_ivas->hLsSetupCustom->num_spk ), st_ivas->hLsSetupCustom->num_spk ); +#else set_f( st_ivas->hLsSetupCustom->separate_ch_gains, 1 / sqrtf( st_ivas->hLsSetupCustom->num_spk ), st_ivas->hLsSetupCustom->num_spk ); +#endif } else { diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index ed5114c651..ab9105c513 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -991,7 +991,11 @@ void ivas_mdct_core_reconstruct( xcorr += signal_outFB[0][i] * signal_outFB[1][i]; } +#ifdef FIX_I120_INV_SQRT + hCPE->hStereoMdct->lastCoh = fabsf( xcorr ) * inv_sqrt( nrgL * nrgR ); +#else hCPE->hStereoMdct->lastCoh = fabsf( xcorr ) / sqrtf( nrgL * nrgR ); +#endif hCPE->hStereoMdct->lastCoh = min( hCPE->hStereoMdct->lastCoh, 1.f ); } diff --git a/lib_dec/ivas_objectRenderer_vec.c b/lib_dec/ivas_objectRenderer_vec.c index a3bd94683b..54f7c51727 100644 --- a/lib_dec/ivas_objectRenderer_vec.c +++ b/lib_dec/ivas_objectRenderer_vec.c @@ -89,7 +89,11 @@ void TDREND_SPATIAL_VecNormalize( { float scaler; +#ifdef FIX_I120_INV_SQRT + scaler = inv_sqrt( Vec_p[0] * Vec_p[0] + Vec_p[1] * Vec_p[1] + Vec_p[2] * Vec_p[2] ); +#else scaler = 1.0f / sqrtf( Vec_p[0] * Vec_p[0] + Vec_p[1] * Vec_p[1] + Vec_p[2] * Vec_p[2] ); +#endif VecNorm_p[0] = scaler * Vec_p[0]; VecNorm_p[1] = scaler * Vec_p[1]; VecNorm_p[2] = scaler * Vec_p[2]; diff --git a/lib_dec/ivas_reverb.c b/lib_dec/ivas_reverb.c index e25eacff54..955b7c0d50 100644 --- a/lib_dec/ivas_reverb.c +++ b/lib_dec/ivas_reverb.c @@ -156,7 +156,11 @@ static ivas_error compute_feedback_matrix( { return IVAS_ERR_INTERNAL; /* n must be 4, 6, 8 or 16, else ERROR */ } +#ifdef FIX_I120_INV_SQRT + u = inv_sqrt( n ); +#else u = 1.0f / sqrtf( n ); +#endif if ( n == 4 ) { u = -u; diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index 05e9222ddb..72af40a341 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -343,7 +343,11 @@ static void stereo_dft_generate_comfort_noise( ptr2 = ptr1 + 1; for ( i = 0; i < st->L_frame / 2 - 1; i++ ) { +#ifdef FIX_I120_INV_SQRT + *ptr0++ = 2.0f * sqrtf( st->lp_ener / st->L_frame * 0.5f ) * inv_sqrt( *ptr1 * *ptr1 + *ptr2 * *ptr2 ); +#else *ptr0++ = 2.0f * sqrtf( st->lp_ener / st->L_frame * 0.5f ) / sqrtf( *ptr1 * *ptr1 + *ptr2 * *ptr2 ); +#endif ptr1 += 2; ptr2 += 2; } @@ -769,7 +773,11 @@ void stereo_cng_compute_PScorr( enrS += *outputSptr * *outputSptr; dotPS += *outputPptr++ * *outputSptr++; } +#ifdef FIX_I120_INV_SQRT + c_PS = ( dotPS + EPSILON ) * inv_sqrt( enrP * enrS + EPSILON ); +#else c_PS = ( dotPS + EPSILON ) / sqrtf( enrP * enrS + EPSILON ); +#endif *c_PS_LT = STEREO_TD_PS_CORR_FILT * *c_PS_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_PS; return; @@ -806,7 +814,11 @@ static void stereo_cng_compute_LRcorr( dotLR += output[0][i] * output[1][i]; } +#ifdef FIX_I120_INV_SQRT + c_LR = fabsf( dotLR + EPSILON ) * inv_sqrt( enrL * enrR + EPSILON ); +#else c_LR = fabsf( dotLR + EPSILON ) / sqrtf( enrL * enrR + EPSILON ); +#endif c = ( enrL + DELTA ) / ( enrR + DELTA ); hCPE->hStereoTD->c_LR_LT = STEREO_TD_PS_CORR_FILT * hCPE->hStereoTD->c_LR_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_LR; hCPE->hStereoCng->c_LR_LT = hCPE->hStereoTD->c_LR_LT; @@ -930,7 +942,11 @@ void stereo_cna_update_params( } /* estimate L/R correlation factor and ILD in time domain */ +#ifdef FIX_I120_INV_SQRT + c_LR = fabsf( dotLR + EPSILON ) * inv_sqrt( enrL * enrR + EPSILON ); +#else c_LR = fabsf( dotLR + EPSILON ) / sqrtf( enrL * enrR + EPSILON ); +#endif c = ( enrL + DELTA ) / ( enrR + DELTA ); c_ILD = ( c - 1 ) / ( c + 1 ); } diff --git a/lib_dec/ivas_vbap.c b/lib_dec/ivas_vbap.c index a173e627ee..0417fd742f 100644 --- a/lib_dec/ivas_vbap.c +++ b/lib_dec/ivas_vbap.c @@ -436,7 +436,11 @@ void vbap_determine_gains( gain_ene += gain_triplet[ch] * gain_triplet[ch]; } +#ifdef FIX_I120_INV_SQRT + norm_value = inv_sqrt( gain_ene ); +#else norm_value = 1.0f / sqrtf( gain_ene ); +#endif for ( ch = 0; ch < 3; ch++ ) { diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index 2664aaa08d..cbf1dddceb 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -832,7 +832,11 @@ void swb_tbe_dec( { if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) { +#ifdef FIX_I120_INV_SQRT + scale = (float) ( hBWE_TD->prev1_shb_ener_sf * inv_sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001f ) ); +#else scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); +#endif scale = hBWE_TD->prev_res_shb_gshape * min( scale, 1.0f ); if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) { diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c index a761893653..19c793a381 100644 --- a/lib_enc/core_enc_ol.c +++ b/lib_enc/core_enc_ol.c @@ -789,7 +789,11 @@ void core_acelp_tcx20_switching( for ( i = 0; i < L_frame; i++ ) { +#ifdef FIX_I120_INV_SQRT + x[i] *= (float) ( L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ) ); +#else x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); +#endif } weight_a( A_q_tcx, Ap, st->gamma, M ); diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c index d7eb087e57..465e7781c9 100644 --- a/lib_enc/eval_pit_contr.c +++ b/lib_enc/eval_pit_contr.c @@ -120,7 +120,11 @@ int16_t Pit_exc_contribution_len( ener_pit += dct_pitex[j + freq] * dct_pitex[j + freq]; } +#ifdef FIX_I120_INV_SQRT + corr_dct_pit[i] = (float) ( corr_tmp * inv_sqrt( ener_res * ener_pit ) ); +#else corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); +#endif freq += mfreq_bindiv_loc[i]; } diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c index 1922964416..a9a85e4356 100644 --- a/lib_enc/frame_spec_dif_cor_rate.c +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -81,7 +81,11 @@ void frame_spec_dif_cor_rate( } /* 1073741.824 = 0.001 * 32768 * 32768 */ +#ifdef FIX_I120_INV_SQRT + spec_low_dif_cor_rate = (float) ( m * inv_sqrt( ( dx * dy + 1073741.824f ) ) ); +#else spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); +#endif spec_dif_cor_rate = spec_low_dif_cor_rate; f_tonality_rate[0] = spec_dif_cor_rate; diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index 2cf98207bb..be55a8cc88 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -130,7 +130,11 @@ static float IGF_getCrest_new( if ( x_eff > 0 && x_max > 0 ) { +#ifdef FIX_I120_INV_SQRT + crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); +#else crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); +#endif } return crest; @@ -312,7 +316,11 @@ static float IGF_getCrest( if ( x_eff > 0 && x_max > 0 ) { +#ifdef FIX_I120_INV_SQRT + crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); +#else crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); +#endif } return crest; diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index 2e81bd99bc..7b3d6af832 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -1644,7 +1644,11 @@ void stereo_dft_enc_process( dot_prod_real2 += pDFT_L[2 * j] * pDFT_R[2 * j] + pDFT_L[2 * j + 1] * pDFT_R[2 * j + 1]; } sum_nrg_Mid = max( 0.f, sum_nrg_L2 + sum_nrg_R2 + 2.f * dot_prod_real2 ); +#ifdef FIX_I120_INV_SQRT + wL = 0.5f * max( sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) - sqrtf( sum_nrg_Mid ), 0 ) * inv_sqrt( sum_nrg_L2 + EPSILON ); +#else wL = 0.5f * max( sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) - sqrtf( sum_nrg_Mid ), 0 ) / sqrtf( sum_nrg_L2 + EPSILON ); +#endif wS = 1; if ( hStereoDft->res_cod_sw_flag ) { diff --git a/lib_enc/ivas_stereo_ica_enc.c b/lib_enc/ivas_stereo_ica_enc.c index d63c8b217c..0e1b1a9af1 100644 --- a/lib_enc/ivas_stereo_ica_enc.c +++ b/lib_enc/ivas_stereo_ica_enc.c @@ -345,7 +345,11 @@ static void utilCrossCorr( temp = sum2_f( tempBuf1, len ); temp *= sum2_f( tempBuf2, len ); +#ifdef FIX_I120_INV_SQRT + scale = ( temp == 0 ) ? 1.0f : inv_sqrt( temp ); +#else scale = ( temp == 0 ) ? 1.0f : 1.0f / sqrtf( temp ); +#endif /* starting point of lag search range should be less than the ending point */ assert( lagSearchRange[0] <= lagSearchRange[1] ); diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index 79bb2f04a7..784973d1c4 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -680,7 +680,11 @@ int16_t ivas_acelp_tcx20_switching( for ( i = 0; i < L_frame; i++ ) { +#ifdef FIX_I120_INV_SQRT + x[i] *= (float) L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ); +#else x[i] *= (float) L_frame / sqrtf( 2 * NORM_MDCT_FACTOR ); +#endif y[i] = x[i]; } diff --git a/lib_enc/pit_enc.c b/lib_enc/pit_enc.c index f2c518bd3d..454da71966 100644 --- a/lib_enc/pit_enc.c +++ b/lib_enc/pit_enc.c @@ -622,7 +622,6 @@ void norm_corr( for ( t = t_min; t <= t_max; t++ ) { /* Compute correlation between xn[] and excf[] */ - ps = 0.0f; for ( j = 0; j < L_subfr; ++j ) { @@ -630,7 +629,6 @@ void norm_corr( } /* Compute 1/sqrt(energie of excf[]) */ - alp = 0.01f; for ( j = 0; j < L_subfr; ++j ) { diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index 55ee77a476..21c6993096 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -189,7 +189,11 @@ static double DTFS_freq_corr( tmp = 0.001; } +#ifdef FIX_I120_INV_SQRT + return corr * inv_sqrt( tmp ); +#else return corr / sqrt( tmp ); +#endif } /*-------------------------------------------------------------------* -- GitLab From 87bbe681b3a9085a7d2ccf1cc7a3dce39c142539 Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Fri, 23 Sep 2022 13:25:59 +0200 Subject: [PATCH 2/3] Restricting modifications to keep EVS BE --- lib_com/prot.h | 35 ++++++++++++++++++++++- lib_com/swb_bwe_com.c | 17 +++++++++-- lib_com/vlpc_2st_com.c | 45 ++++++++++++++++++++++------- lib_dec/core_switching_dec.c | 13 +++++++-- lib_dec/dlpc_avq.c | 25 +++++++++++++--- lib_dec/dlpc_stoch.c | 7 ++++- lib_dec/swb_bwe_dec_hr.c | 7 ++++- lib_dec/swb_tbe_dec.c | 21 +++++++++++--- lib_dec/updt_dec.c | 7 ++++- lib_dec/vlpc_2st_dec.c | 10 ++++++- lib_enc/core_enc_ol.c | 13 +++++++-- lib_enc/eval_pit_contr.c | 13 +++++++-- lib_enc/frame_spec_dif_cor_rate.c | 17 +++++++++-- lib_enc/igf_enc.c | 47 +++++++++++++++++++++++++------ lib_enc/pre_proc.c | 6 +++- lib_enc/qlpc_avq.c | 24 ++++++++++++++-- lib_enc/qlpc_stoch.c | 7 +++-- lib_enc/swb_bwe_enc.c | 14 +++++++-- lib_enc/vad_proc.c | 10 ++++++- lib_enc/vlpc_2st_cod.c | 18 ++++++++++-- lib_enc/voiced_enc.c | 4 --- 21 files changed, 300 insertions(+), 60 deletions(-) diff --git a/lib_com/prot.h b/lib_com/prot.h index 4c91c8cd52..d354c9db2d 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -2784,6 +2784,10 @@ void calc_tilt_bwe( const float *sp, /* i : input signal */ float *tilt, /* o : signal tilt */ const int16_t N /* i : signal length */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i : IVAS element mode */ +#endif ); void fd_bwe_enc_init( @@ -7083,6 +7087,10 @@ void qlpc_avq( int16_t *nbbits, /* o : Number of quantization bits */ const int16_t core, /* i : core */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i" IVAS element mode */ +#endif ); int16_t encode_lpc_avq( @@ -7098,6 +7106,10 @@ int16_t dlpc_avq( float *LSF_Q, /* o : Quantized LSF vectors */ const int16_t numlpc, /* i : Number of sets of lpc */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ); int16_t decode_lpc_avq( @@ -7124,6 +7136,10 @@ int16_t vlpc_2st_cod( int16_t *indx, /* o : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i" IVAS element mode */ +#endif ); void vlpc_2st_dec( @@ -7131,13 +7147,22 @@ void vlpc_2st_dec( int16_t *indx, /* i : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ); void lsf_weight_2st( const float *lsfq, float *w, const int16_t mode, - const int32_t sr_core ); + const int32_t sr_core +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode +#endif +); void mdct_window_sine( float *window, @@ -8367,6 +8392,10 @@ int16_t vad_proc( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ int16_t *cldfb_addition, const int16_t vada_flag /* i : VAD flag */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ); void subband_FFT( @@ -8389,6 +8418,10 @@ void frame_spec_dif_cor_rate( float spec_amp[], /* i : spectral amplitude */ float pre_spec_low_dif[], /* i/o: low spectrum different */ float f_tonality_rate[] /* o : tonality rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ); void ltd_stable( diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c index 1d8ba7869b..c54d343b97 100644 --- a/lib_com/swb_bwe_com.c +++ b/lib_com/swb_bwe_com.c @@ -288,6 +288,10 @@ void calc_tilt_bwe( const float *sp, /* i : input signal */ float *tilt, /* o : signal tilt */ const int16_t N /* i : signal length */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i : IVAS element mode */ +#endif ) { int16_t i; @@ -309,9 +313,16 @@ void calc_tilt_bwe( } #ifdef FIX_I120_INV_SQRT - *tilt = r1 * inv_sqrt( r0 ); -#else - *tilt = (float) ( r1 / sqrt( r0 ) ); + if ( element_mode != EVS_MONO ) + { + *tilt = r1 * inv_sqrt( r0 ); + } + else + { +#endif + *tilt = (float) ( r1 / sqrt( r0 ) ); +#ifdef FIX_I120_INV_SQRT + } #endif return; diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c index 79981bab0b..3753565678 100644 --- a/lib_com/vlpc_2st_com.c +++ b/lib_com/vlpc_2st_com.c @@ -52,7 +52,11 @@ void lsf_weight_2st( const float *lsfq, float *w, const int16_t mode, - const int32_t sr_core ) + const int32_t sr_core +#ifdef FIX_I120_INV_SQRT + ,const int16_t element_mode +#endif +) { int16_t i; float d[M + 1]; @@ -75,25 +79,46 @@ void lsf_weight_2st( if ( mode == 0 ) { #ifdef FIX_I120_INV_SQRT - w[i] = (float) ( 60.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* abs */ -#else - w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ + if ( element_mode != EVS_MONO ) + { + w[i] = (float) ( 60.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* abs */ + } + else + { +#endif + w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ +#ifdef FIX_I120_INV_SQRT + } #endif } else if ( mode == 1 ) { #ifdef FIX_I120_INV_SQRT - w[i] = (float) ( 65.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* mid */ -#else - w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ + if ( element_mode != EVS_MONO ) + { + w[i] = (float) ( 65.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* mid */ + } + else + { +#endif + w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ +#ifdef FIX_I120_INV_SQRT + } #endif } else { #ifdef FIX_I120_INV_SQRT - w[i] = (float) ( 63.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ -#else - w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ + if ( element_mode != EVS_MONO ) + { + w[i] = (float) ( 63.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ + } + else + { +#endif + w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ +#ifdef FIX_I120_INV_SQRT + } #endif } } diff --git a/lib_dec/core_switching_dec.c b/lib_dec/core_switching_dec.c index 61537f76e3..1f8c34b2e5 100644 --- a/lib_dec/core_switching_dec.c +++ b/lib_dec/core_switching_dec.c @@ -1051,7 +1051,11 @@ void bw_switching_pre_proc( if ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) && st->hBWE_FD != NULL && !( st->core_brate <= SID_2k40 && st->element_mode == IVAS_CPE_DFT && nchan_out == 2 ) && !( st->element_mode == IVAS_CPE_MDCT && nchan_out == 1 && st->idchan == 1 && last_element_brate <= IVAS_SID_4k4 ) ) { /* Calculate tilt of the ACELP core synthesis - needed in SWB BWE decoding */ - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame +#ifdef FIX_I120_INV_SQRT + ,st->element_mode +#endif + ); } return; @@ -1063,7 +1067,12 @@ void bw_switching_pre_proc( * Calculate tilt of the ACELP core synthesis *----------------------------------------------------------------------*/ - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); /*-------------------------------------------------------------------------------* * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis diff --git a/lib_dec/dlpc_avq.c b/lib_dec/dlpc_avq.c index 83a0029fb3..b32315ec38 100644 --- a/lib_dec/dlpc_avq.c +++ b/lib_dec/dlpc_avq.c @@ -51,13 +51,16 @@ int16_t dlpc_avq( float *LSF_Q, /* o : Quantized LSF vectors */ const int16_t numlpc, /* i : Number of sets of lpc */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ) { int16_t i, nbi, last; int16_t *p_index, q_type; /* Last LPC index */ - if ( numlpc == 1 ) { last = 0; @@ -77,7 +80,11 @@ int16_t dlpc_avq( vlpc_1st_dec( p_index[0], &LSF_Q[last], sr_core ); p_index++; - vlpc_2st_dec( &LSF_Q[last], &p_index[0], 0, sr_core ); + vlpc_2st_dec( &LSF_Q[last], &p_index[0], 0, sr_core +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); nbi = 2 + p_index[0] + p_index[1]; p_index += nbi; @@ -97,7 +104,12 @@ int16_t dlpc_avq( } vlpc_1st_dec( p_index[0], &LSF_Q[0], sr_core ); p_index++; - vlpc_2st_dec( &LSF_Q[0], &p_index[0], 0, sr_core ); + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 0, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); } else if ( q_type == 1 ) { @@ -106,7 +118,12 @@ int16_t dlpc_avq( LSF_Q[i] = LSF_Q[M + i]; } - vlpc_2st_dec( &LSF_Q[0], &p_index[0], 3, sr_core ); + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 3, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); } nbi = 2 + p_index[0] + p_index[1]; diff --git a/lib_dec/dlpc_stoch.c b/lib_dec/dlpc_stoch.c index 59ec142c0a..07d0de95a9 100644 --- a/lib_dec/dlpc_stoch.c +++ b/lib_dec/dlpc_stoch.c @@ -70,7 +70,12 @@ void lpc_unquantize( nb_indices = 0; if ( st->lpcQuantization == 0 ) { - nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core ); + nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core +#ifdef FIX_I120_INV_SQRT + ,st->element_mode +#endif + ); + for ( k = 0; k < st->numlpc; k++ ) { lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index edfaaf67be..b42ad33adf 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -103,7 +103,12 @@ void swb_bwe_dec_hr( * calculate tilt of the core synthesis *---------------------------------------------------------------------*/ - calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k ); + calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); pitch = sum_f( pitch_buf, NB_SUBFR16k ) + EPSILON; /*---------------------------------------------------------------------* diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index cbf1dddceb..f4c81147a5 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -529,7 +529,12 @@ void swb_tbe_dec( } /* find tilt */ - calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME ); + calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); if ( st->bfi && st->clas_dec != UNVOICED_CLAS ) { @@ -833,10 +838,18 @@ void swb_tbe_dec( if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) { #ifdef FIX_I120_INV_SQRT - scale = (float) ( hBWE_TD->prev1_shb_ener_sf * inv_sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001f ) ); -#else - scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); + if ( st->element_mode != EVS_MONO ) + { + scale = (float) ( hBWE_TD->prev1_shb_ener_sf * inv_sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001f ) ); + } + else + { #endif + scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); +#ifdef FIX_I120_INV_SQRT + } +#endif + scale = hBWE_TD->prev_res_shb_gshape * min( scale, 1.0f ); if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) { diff --git a/lib_dec/updt_dec.c b/lib_dec/updt_dec.c index 2c3eed80e3..4d1d9793cc 100644 --- a/lib_dec/updt_dec.c +++ b/lib_dec/updt_dec.c @@ -363,7 +363,12 @@ void updt_bw_switching( { if ( st->output_Fs == 32000 && st->bwidth == SWB ) { - calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k ); + calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); } st->prev_enerLH = st->enerLH; diff --git a/lib_dec/vlpc_2st_dec.c b/lib_dec/vlpc_2st_dec.c index 83163cda78..b77be1a1a0 100644 --- a/lib_dec/vlpc_2st_dec.c +++ b/lib_dec/vlpc_2st_dec.c @@ -50,6 +50,10 @@ void vlpc_2st_dec( int16_t *indx, /* i : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ) { int16_t i; @@ -58,7 +62,11 @@ void vlpc_2st_dec( float scale = ( (float) sr_core ) / INT_FS_12k8; /* weighting from the 1st stage */ - lsf_weight_2st( lsfq, w, mode, sr_core ); + lsf_weight_2st( lsfq, w, mode, sr_core +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); /* quantize */ AVQ_dec_lpc( indx, xq, 2 ); diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c index 19c793a381..4b98d1088f 100644 --- a/lib_enc/core_enc_ol.c +++ b/lib_enc/core_enc_ol.c @@ -790,9 +790,16 @@ void core_acelp_tcx20_switching( for ( i = 0; i < L_frame; i++ ) { #ifdef FIX_I120_INV_SQRT - x[i] *= (float) ( L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ) ); -#else - x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); + if ( st->element_mode != EVS_MONO ) + { + x[i] *= (float) ( L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ) ); + } + else + { +#endif + x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); +#ifdef FIX_I120_INV_SQRT + } #endif } diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c index 465e7781c9..e6d08feb01 100644 --- a/lib_enc/eval_pit_contr.c +++ b/lib_enc/eval_pit_contr.c @@ -121,9 +121,16 @@ int16_t Pit_exc_contribution_len( } #ifdef FIX_I120_INV_SQRT - corr_dct_pit[i] = (float) ( corr_tmp * inv_sqrt( ener_res * ener_pit ) ); -#else - corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); + if ( st->element_mode != EVS_MONO ) + { + corr_dct_pit[i] = (float) ( corr_tmp * inv_sqrt( ener_res * ener_pit ) ); + } + else + { +#endif + corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); +#ifdef FIX_I120_INV_SQRT + } #endif freq += mfreq_bindiv_loc[i]; } diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c index a9a85e4356..f344979097 100644 --- a/lib_enc/frame_spec_dif_cor_rate.c +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -50,6 +50,10 @@ void frame_spec_dif_cor_rate( float spec_amp[], /* i : spectral amplitude */ float pre_spec_low_dif[], /* i/o: low spectrum different */ float f_tonality_rate[] /* o : tonality rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ) { int16_t i; @@ -82,9 +86,16 @@ void frame_spec_dif_cor_rate( /* 1073741.824 = 0.001 * 32768 * 32768 */ #ifdef FIX_I120_INV_SQRT - spec_low_dif_cor_rate = (float) ( m * inv_sqrt( ( dx * dy + 1073741.824f ) ) ); -#else - spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); + if ( element_mode != EVS_MONO ) + { + spec_low_dif_cor_rate = (float) ( m * inv_sqrt( ( dx * dy + 1073741.824f ) ) ); + } + else + { +#endif + spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); +#ifdef FIX_I120_INV_SQRT + } #endif spec_dif_cor_rate = spec_low_dif_cor_rate; diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index be55a8cc88..ac1ee5aa38 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -107,6 +107,10 @@ static float IGF_getCrest_new( const int16_t *logSpec, /* i : power spectrum */ const int16_t start, /* i : start subband index */ const int16_t stop /* i : stop subband index */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ) { int16_t i; @@ -131,9 +135,16 @@ static float IGF_getCrest_new( if ( x_eff > 0 && x_max > 0 ) { #ifdef FIX_I120_INV_SQRT - crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); -#else - crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); + if ( element_mode != EVS_MONO ) + { + crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); + } + else + { +#endif + crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); +#ifdef FIX_I120_INV_SQRT + } #endif } @@ -470,8 +481,16 @@ static void IGF_CalculateEnvelope( float diffSFM; float shiftedSFM = 0.f; - tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ); - tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy ); + tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); + tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); if ( last_core_acelp || hPrivateData->wasTransient ) { @@ -502,12 +521,20 @@ static void IGF_CalculateEnvelope( if ( slope < -threshold ) { int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); } else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) { int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); } if ( shiftedSFM > 0.04f ) @@ -1134,7 +1161,11 @@ static void IGF_Whitening( } else { - tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ); + tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); } if ( last_core_acelp || hPrivateData->wasTransient ) diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c index a17612290f..47d58c293b 100644 --- a/lib_enc/pre_proc.c +++ b/lib_enc/pre_proc.c @@ -198,7 +198,11 @@ void pre_proc( noise_est_pre( *Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); st->vad_flag = wb_vad( st, fr_bands, &noisy_speech_HO, &clean_speech_HO, &NB_speech_HO, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); - vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag ); + vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag +#ifdef FIX_I120_INV_SQRT + ,st->element_mode +#endif + ); if ( st->Pos_relE_cnt < 20 ) /* Ensure the level is high enough and cldfb decision is reliable */ { diff --git a/lib_enc/qlpc_avq.c b/lib_enc/qlpc_avq.c index 03aeab128e..5506e43f72 100644 --- a/lib_enc/qlpc_avq.c +++ b/lib_enc/qlpc_avq.c @@ -56,6 +56,10 @@ void qlpc_avq( int16_t *nbbits, /* o : Number of quantization bits */ const int16_t core, /* i : core */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i" IVAS element mode */ +#endif ) { int16_t i; @@ -72,7 +76,11 @@ void qlpc_avq( tmp_index[0] = vlpc_1st_cod( lsf, lsf_q, sr_core, dummy ); - nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core ); + nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); nit = 1 + 2 + index[1] + index[2]; tmp_index += nit; @@ -92,7 +100,12 @@ void qlpc_avq( tmp_index[0] = vlpc_1st_cod( lsfmid, lsfmid_q, sr_core, dummy ); - nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core ); + nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); nbt = 8 + nbits; nit = 1 + 2 + tmp_index[1] + tmp_index[2]; @@ -103,7 +116,12 @@ void qlpc_avq( lsfmid_q0[i] = lsf_q[i]; } - nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core ); + nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); if ( nbits < nbt ) { diff --git a/lib_enc/qlpc_stoch.c b/lib_enc/qlpc_stoch.c index 7723f507ec..33571d4d03 100644 --- a/lib_enc/qlpc_stoch.c +++ b/lib_enc/qlpc_stoch.c @@ -88,7 +88,11 @@ void lpc_quantization( lsp2lsf( lspmid, lsfmid, M, st->sr_core ); } - qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core ); + qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core +#ifdef FIX_I120_INV_SQRT + ,st->element_mode +#endif + ); lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); @@ -101,7 +105,6 @@ void lpc_quantization( } /****** Low-rate LPC quantizer *******/ - else if ( st->lpcQuantization == 1 ) { diff --git a/lib_enc/swb_bwe_enc.c b/lib_enc/swb_bwe_enc.c index b54fbede57..6f6de03025 100644 --- a/lib_enc/swb_bwe_enc.c +++ b/lib_enc/swb_bwe_enc.c @@ -596,7 +596,12 @@ void swb_bwe_enc( * Calculate tilt of the input signal and the ACELP core synthesis *----------------------------------------------------------------------*/ - calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME ); + calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); /*---------------------------------------------------------------------* * SWB BWE encoding @@ -1361,7 +1366,12 @@ static int16_t SWB_BWE_encoding( st->hBWE_FD->EnergyLF = energy; } - calc_tilt_bwe( insig, &tilt, L_FRAME32k ); + calc_tilt_bwe( insig, &tilt, L_FRAME32k +#ifdef FIX_I120_INV_SQRT + , + st->element_mode +#endif + ); if ( IsTransient == 1 && ( tilt > 8.0 || st->clas > 1 ) ) { IsTransient = 0; diff --git a/lib_enc/vad_proc.c b/lib_enc/vad_proc.c index f40ca2cb5f..2c491c7801 100644 --- a/lib_enc/vad_proc.c +++ b/lib_enc/vad_proc.c @@ -226,6 +226,10 @@ int16_t vad_proc( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ int16_t *cldfb_addition, const int16_t vada_flag /* i : VAD flag */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i: IVAS element mode */ +#endif ) { float frame_energy, frame_energy2; @@ -269,7 +273,11 @@ int16_t vad_proc( spec_flatness( spec_amp, hVAD_CLDFB->smooth_spec_amp, hVAD_CLDFB->sfm ); - frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate ); + frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate +#ifdef FIX_I120_INV_SQRT + ,element_mode +#endif + ); bg_music_decision( hVAD_CLDFB, &music_backgound_f, frame_energy ); diff --git a/lib_enc/vlpc_2st_cod.c b/lib_enc/vlpc_2st_cod.c index 86abfec1b0..acb5beddca 100644 --- a/lib_enc/vlpc_2st_cod.c +++ b/lib_enc/vlpc_2st_cod.c @@ -53,6 +53,10 @@ int16_t vlpc_2st_cod( int16_t *indx, /* o : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ +#ifdef FIX_I120_INV_SQRT + , + const int16_t element_mode /* i" IVAS element mode */ +#endif ) { int16_t i, nbits; @@ -63,7 +67,12 @@ int16_t vlpc_2st_cod( /* 0 bit with true weighting: save 0.5 bit */ - lsf_weight_2st( lsf, w, 1, sr_core ); + lsf_weight_2st( lsf, w, 1, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); for ( i = 0; i < M; i++ ) { @@ -91,7 +100,12 @@ int16_t vlpc_2st_cod( } /* weighting from the 1st stage */ - lsf_weight_2st( lsfq, w, mode, sr_core ); + lsf_weight_2st( lsfq, w, mode, sr_core +#ifdef FIX_I120_INV_SQRT + , + element_mode +#endif + ); /* find lsf residual */ diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index 21c6993096..55ee77a476 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -189,11 +189,7 @@ static double DTFS_freq_corr( tmp = 0.001; } -#ifdef FIX_I120_INV_SQRT - return corr * inv_sqrt( tmp ); -#else return corr / sqrt( tmp ); -#endif } /*-------------------------------------------------------------------* -- GitLab From 9152905dde0f20f8080543dec10cd5de4e44657b Mon Sep 17 00:00:00 2001 From: Vladimir Malenovsky Date: Mon, 3 Oct 2022 15:41:24 +0200 Subject: [PATCH 3/3] delimit modifications to IVAS only --- lib_com/prot.h | 32 ------------------- lib_com/swb_bwe_com.c | 17 +---------- lib_com/vlpc_2st_com.c | 42 ++----------------------- lib_dec/core_switching_dec.c | 13 ++------ lib_dec/dlpc_avq.c | 24 ++------------- lib_dec/dlpc_stoch.c | 6 +--- lib_dec/swb_bwe_dec_hr.c | 7 +---- lib_dec/swb_tbe_dec.c | 22 ++----------- lib_dec/updt_dec.c | 7 +---- lib_dec/vlpc_2st_dec.c | 10 +----- lib_enc/core_enc_ol.c | 13 +------- lib_enc/eval_pit_contr.c | 13 +------- lib_enc/frame_spec_dif_cor_rate.c | 18 +---------- lib_enc/igf_enc.c | 51 ++++--------------------------- lib_enc/pre_proc.c | 6 +--- lib_enc/qlpc_avq.c | 24 ++------------- lib_enc/qlpc_stoch.c | 6 +--- lib_enc/swb_bwe_enc.c | 16 +++------- lib_enc/vad_proc.c | 10 +----- lib_enc/vlpc_2st_cod.c | 18 ++--------- 20 files changed, 37 insertions(+), 318 deletions(-) diff --git a/lib_com/prot.h b/lib_com/prot.h index d354c9db2d..974ff88df3 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -2784,10 +2784,6 @@ void calc_tilt_bwe( const float *sp, /* i : input signal */ float *tilt, /* o : signal tilt */ const int16_t N /* i : signal length */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i : IVAS element mode */ -#endif ); void fd_bwe_enc_init( @@ -7087,10 +7083,6 @@ void qlpc_avq( int16_t *nbbits, /* o : Number of quantization bits */ const int16_t core, /* i : core */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i" IVAS element mode */ -#endif ); int16_t encode_lpc_avq( @@ -7106,10 +7098,6 @@ int16_t dlpc_avq( float *LSF_Q, /* o : Quantized LSF vectors */ const int16_t numlpc, /* i : Number of sets of lpc */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ); int16_t decode_lpc_avq( @@ -7136,10 +7124,6 @@ int16_t vlpc_2st_cod( int16_t *indx, /* o : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i" IVAS element mode */ -#endif ); void vlpc_2st_dec( @@ -7147,10 +7131,6 @@ void vlpc_2st_dec( int16_t *indx, /* i : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ); void lsf_weight_2st( @@ -7158,10 +7138,6 @@ void lsf_weight_2st( float *w, const int16_t mode, const int32_t sr_core -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode -#endif ); void mdct_window_sine( @@ -8392,10 +8368,6 @@ int16_t vad_proc( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ int16_t *cldfb_addition, const int16_t vada_flag /* i : VAD flag */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ); void subband_FFT( @@ -8418,10 +8390,6 @@ void frame_spec_dif_cor_rate( float spec_amp[], /* i : spectral amplitude */ float pre_spec_low_dif[], /* i/o: low spectrum different */ float f_tonality_rate[] /* o : tonality rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ); void ltd_stable( diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c index c54d343b97..4e692fc22b 100644 --- a/lib_com/swb_bwe_com.c +++ b/lib_com/swb_bwe_com.c @@ -288,10 +288,6 @@ void calc_tilt_bwe( const float *sp, /* i : input signal */ float *tilt, /* o : signal tilt */ const int16_t N /* i : signal length */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i : IVAS element mode */ -#endif ) { int16_t i; @@ -312,18 +308,7 @@ void calc_tilt_bwe( } } -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - *tilt = r1 * inv_sqrt( r0 ); - } - else - { -#endif - *tilt = (float) ( r1 / sqrt( r0 ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif + *tilt = (float) ( r1 / sqrt( r0 ) ); return; } diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c index 3753565678..f027ecd8ea 100644 --- a/lib_com/vlpc_2st_com.c +++ b/lib_com/vlpc_2st_com.c @@ -53,9 +53,6 @@ void lsf_weight_2st( float *w, const int16_t mode, const int32_t sr_core -#ifdef FIX_I120_INV_SQRT - ,const int16_t element_mode -#endif ) { int16_t i; @@ -78,48 +75,15 @@ void lsf_weight_2st( if ( mode == 0 ) { -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - w[i] = (float) ( 60.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* abs */ - } - else - { -#endif - w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ -#ifdef FIX_I120_INV_SQRT - } -#endif + w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ } else if ( mode == 1 ) { -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - w[i] = (float) ( 65.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* mid */ - } - else - { -#endif - w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ -#ifdef FIX_I120_INV_SQRT - } -#endif + w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ } else { -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - w[i] = (float) ( 63.0f / ( freq_div * inv_sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ - } - else - { -#endif - w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ -#ifdef FIX_I120_INV_SQRT - } -#endif + w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ } } diff --git a/lib_dec/core_switching_dec.c b/lib_dec/core_switching_dec.c index fe7989ea54..e8c74bc2ef 100644 --- a/lib_dec/core_switching_dec.c +++ b/lib_dec/core_switching_dec.c @@ -1055,11 +1055,7 @@ void bw_switching_pre_proc( #endif { /* Calculate tilt of the ACELP core synthesis - needed in SWB BWE decoding */ - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame -#ifdef FIX_I120_INV_SQRT - ,st->element_mode -#endif - ); + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); } return; @@ -1071,12 +1067,7 @@ void bw_switching_pre_proc( * Calculate tilt of the ACELP core synthesis *----------------------------------------------------------------------*/ - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); /*-------------------------------------------------------------------------------* * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis diff --git a/lib_dec/dlpc_avq.c b/lib_dec/dlpc_avq.c index b32315ec38..2a89cdb35c 100644 --- a/lib_dec/dlpc_avq.c +++ b/lib_dec/dlpc_avq.c @@ -51,10 +51,6 @@ int16_t dlpc_avq( float *LSF_Q, /* o : Quantized LSF vectors */ const int16_t numlpc, /* i : Number of sets of lpc */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ) { int16_t i, nbi, last; @@ -80,11 +76,7 @@ int16_t dlpc_avq( vlpc_1st_dec( p_index[0], &LSF_Q[last], sr_core ); p_index++; - vlpc_2st_dec( &LSF_Q[last], &p_index[0], 0, sr_core -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + vlpc_2st_dec( &LSF_Q[last], &p_index[0], 0, sr_core ); nbi = 2 + p_index[0] + p_index[1]; p_index += nbi; @@ -104,12 +96,7 @@ int16_t dlpc_avq( } vlpc_1st_dec( p_index[0], &LSF_Q[0], sr_core ); p_index++; - vlpc_2st_dec( &LSF_Q[0], &p_index[0], 0, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 0, sr_core ); } else if ( q_type == 1 ) { @@ -118,12 +105,7 @@ int16_t dlpc_avq( LSF_Q[i] = LSF_Q[M + i]; } - vlpc_2st_dec( &LSF_Q[0], &p_index[0], 3, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + vlpc_2st_dec( &LSF_Q[0], &p_index[0], 3, sr_core ); } nbi = 2 + p_index[0] + p_index[1]; diff --git a/lib_dec/dlpc_stoch.c b/lib_dec/dlpc_stoch.c index 07d0de95a9..21b1ab2d8d 100644 --- a/lib_dec/dlpc_stoch.c +++ b/lib_dec/dlpc_stoch.c @@ -70,11 +70,7 @@ void lpc_unquantize( nb_indices = 0; if ( st->lpcQuantization == 0 ) { - nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core -#ifdef FIX_I120_INV_SQRT - ,st->element_mode -#endif - ); + nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core ); for ( k = 0; k < st->numlpc; k++ ) { diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index b42ad33adf..edfaaf67be 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -103,12 +103,7 @@ void swb_bwe_dec_hr( * calculate tilt of the core synthesis *---------------------------------------------------------------------*/ - calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k ); pitch = sum_f( pitch_buf, NB_SUBFR16k ) + EPSILON; /*---------------------------------------------------------------------* diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index f4c81147a5..5b602bbfd6 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -529,12 +529,7 @@ void swb_tbe_dec( } /* find tilt */ - calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME ); if ( st->bfi && st->clas_dec != UNVOICED_CLAS ) { @@ -837,20 +832,9 @@ void swb_tbe_dec( { if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) { -#ifdef FIX_I120_INV_SQRT - if ( st->element_mode != EVS_MONO ) - { - scale = (float) ( hBWE_TD->prev1_shb_ener_sf * inv_sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001f ) ); - } - else - { -#endif - scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif - + scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); scale = hBWE_TD->prev_res_shb_gshape * min( scale, 1.0f ); + if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) { shb_ener_sf = 0.5f * scale * hBWE_TD->prev1_shb_ener_sf; diff --git a/lib_dec/updt_dec.c b/lib_dec/updt_dec.c index 4d1d9793cc..2c3eed80e3 100644 --- a/lib_dec/updt_dec.c +++ b/lib_dec/updt_dec.c @@ -363,12 +363,7 @@ void updt_bw_switching( { if ( st->output_Fs == 32000 && st->bwidth == SWB ) { - calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k ); } st->prev_enerLH = st->enerLH; diff --git a/lib_dec/vlpc_2st_dec.c b/lib_dec/vlpc_2st_dec.c index b77be1a1a0..83163cda78 100644 --- a/lib_dec/vlpc_2st_dec.c +++ b/lib_dec/vlpc_2st_dec.c @@ -50,10 +50,6 @@ void vlpc_2st_dec( int16_t *indx, /* i : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ) { int16_t i; @@ -62,11 +58,7 @@ void vlpc_2st_dec( float scale = ( (float) sr_core ) / INT_FS_12k8; /* weighting from the 1st stage */ - lsf_weight_2st( lsfq, w, mode, sr_core -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + lsf_weight_2st( lsfq, w, mode, sr_core ); /* quantize */ AVQ_dec_lpc( indx, xq, 2 ); diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c index 4b98d1088f..a761893653 100644 --- a/lib_enc/core_enc_ol.c +++ b/lib_enc/core_enc_ol.c @@ -789,18 +789,7 @@ void core_acelp_tcx20_switching( for ( i = 0; i < L_frame; i++ ) { -#ifdef FIX_I120_INV_SQRT - if ( st->element_mode != EVS_MONO ) - { - x[i] *= (float) ( L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ) ); - } - else - { -#endif - x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif + x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); } weight_a( A_q_tcx, Ap, st->gamma, M ); diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c index e6d08feb01..d7eb087e57 100644 --- a/lib_enc/eval_pit_contr.c +++ b/lib_enc/eval_pit_contr.c @@ -120,18 +120,7 @@ int16_t Pit_exc_contribution_len( ener_pit += dct_pitex[j + freq] * dct_pitex[j + freq]; } -#ifdef FIX_I120_INV_SQRT - if ( st->element_mode != EVS_MONO ) - { - corr_dct_pit[i] = (float) ( corr_tmp * inv_sqrt( ener_res * ener_pit ) ); - } - else - { -#endif - corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif + corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); freq += mfreq_bindiv_loc[i]; } diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c index f344979097..9b3329c5c1 100644 --- a/lib_enc/frame_spec_dif_cor_rate.c +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -50,10 +50,6 @@ void frame_spec_dif_cor_rate( float spec_amp[], /* i : spectral amplitude */ float pre_spec_low_dif[], /* i/o: low spectrum different */ float f_tonality_rate[] /* o : tonality rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ) { int16_t i; @@ -85,19 +81,7 @@ void frame_spec_dif_cor_rate( } /* 1073741.824 = 0.001 * 32768 * 32768 */ -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - spec_low_dif_cor_rate = (float) ( m * inv_sqrt( ( dx * dy + 1073741.824f ) ) ); - } - else - { -#endif - spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif - + spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); spec_dif_cor_rate = spec_low_dif_cor_rate; f_tonality_rate[0] = spec_dif_cor_rate; f_tonality_rate[1] = f_tonality_rate[1] * 0.96f + spec_dif_cor_rate * 0.04f; diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index ac1ee5aa38..623288ff88 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -107,10 +107,6 @@ static float IGF_getCrest_new( const int16_t *logSpec, /* i : power spectrum */ const int16_t start, /* i : start subband index */ const int16_t stop /* i : stop subband index */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ) { int16_t i; @@ -134,18 +130,7 @@ static float IGF_getCrest_new( if ( x_eff > 0 && x_max > 0 ) { -#ifdef FIX_I120_INV_SQRT - if ( element_mode != EVS_MONO ) - { - crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); - } - else - { -#endif - crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); -#ifdef FIX_I120_INV_SQRT - } -#endif + crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); } return crest; @@ -327,11 +312,7 @@ static float IGF_getCrest( if ( x_eff > 0 && x_max > 0 ) { -#ifdef FIX_I120_INV_SQRT - crest = max( 1.f, (float) x_max * inv_sqrt( (float) x_eff ) ); -#else crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); -#endif } return crest; @@ -481,16 +462,8 @@ static void IGF_CalculateEnvelope( float diffSFM; float shiftedSFM = 0.f; - tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); - tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ); + tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy ); if ( last_core_acelp || hPrivateData->wasTransient ) { @@ -521,20 +494,12 @@ static void IGF_CalculateEnvelope( if ( slope < -threshold ) { int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new ( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); } else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) { int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new ( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); } if ( shiftedSFM > 0.04f ) @@ -1161,11 +1126,7 @@ static void IGF_Whitening( } else { - tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ); } if ( last_core_acelp || hPrivateData->wasTransient ) diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c index 47d58c293b..a17612290f 100644 --- a/lib_enc/pre_proc.c +++ b/lib_enc/pre_proc.c @@ -198,11 +198,7 @@ void pre_proc( noise_est_pre( *Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); st->vad_flag = wb_vad( st, fr_bands, &noisy_speech_HO, &clean_speech_HO, &NB_speech_HO, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); - vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag -#ifdef FIX_I120_INV_SQRT - ,st->element_mode -#endif - ); + vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag ); if ( st->Pos_relE_cnt < 20 ) /* Ensure the level is high enough and cldfb decision is reliable */ { diff --git a/lib_enc/qlpc_avq.c b/lib_enc/qlpc_avq.c index 5506e43f72..03aeab128e 100644 --- a/lib_enc/qlpc_avq.c +++ b/lib_enc/qlpc_avq.c @@ -56,10 +56,6 @@ void qlpc_avq( int16_t *nbbits, /* o : Number of quantization bits */ const int16_t core, /* i : core */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i" IVAS element mode */ -#endif ) { int16_t i; @@ -76,11 +72,7 @@ void qlpc_avq( tmp_index[0] = vlpc_1st_cod( lsf, lsf_q, sr_core, dummy ); - nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core ); nit = 1 + 2 + index[1] + index[2]; tmp_index += nit; @@ -100,12 +92,7 @@ void qlpc_avq( tmp_index[0] = vlpc_1st_cod( lsfmid, lsfmid_q, sr_core, dummy ); - nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core ); nbt = 8 + nbits; nit = 1 + 2 + tmp_index[1] + tmp_index[2]; @@ -116,12 +103,7 @@ void qlpc_avq( lsfmid_q0[i] = lsf_q[i]; } - nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core ); if ( nbits < nbt ) { diff --git a/lib_enc/qlpc_stoch.c b/lib_enc/qlpc_stoch.c index 33571d4d03..403132b6e8 100644 --- a/lib_enc/qlpc_stoch.c +++ b/lib_enc/qlpc_stoch.c @@ -88,11 +88,7 @@ void lpc_quantization( lsp2lsf( lspmid, lsfmid, M, st->sr_core ); } - qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core -#ifdef FIX_I120_INV_SQRT - ,st->element_mode -#endif - ); + qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core ); lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); diff --git a/lib_enc/swb_bwe_enc.c b/lib_enc/swb_bwe_enc.c index 6f6de03025..54e786d761 100644 --- a/lib_enc/swb_bwe_enc.c +++ b/lib_enc/swb_bwe_enc.c @@ -596,12 +596,7 @@ void swb_bwe_enc( * Calculate tilt of the input signal and the ACELP core synthesis *----------------------------------------------------------------------*/ - calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME ); /*---------------------------------------------------------------------* * SWB BWE encoding @@ -1366,12 +1361,9 @@ static int16_t SWB_BWE_encoding( st->hBWE_FD->EnergyLF = energy; } - calc_tilt_bwe( insig, &tilt, L_FRAME32k -#ifdef FIX_I120_INV_SQRT - , - st->element_mode -#endif - ); + + calc_tilt_bwe( insig, &tilt, L_FRAME32k ); + if ( IsTransient == 1 && ( tilt > 8.0 || st->clas > 1 ) ) { IsTransient = 0; diff --git a/lib_enc/vad_proc.c b/lib_enc/vad_proc.c index 2c491c7801..f40ca2cb5f 100644 --- a/lib_enc/vad_proc.c +++ b/lib_enc/vad_proc.c @@ -226,10 +226,6 @@ int16_t vad_proc( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ int16_t *cldfb_addition, const int16_t vada_flag /* i : VAD flag */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i: IVAS element mode */ -#endif ) { float frame_energy, frame_energy2; @@ -273,11 +269,7 @@ int16_t vad_proc( spec_flatness( spec_amp, hVAD_CLDFB->smooth_spec_amp, hVAD_CLDFB->sfm ); - frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate -#ifdef FIX_I120_INV_SQRT - ,element_mode -#endif - ); + frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate ); bg_music_decision( hVAD_CLDFB, &music_backgound_f, frame_energy ); diff --git a/lib_enc/vlpc_2st_cod.c b/lib_enc/vlpc_2st_cod.c index acb5beddca..86abfec1b0 100644 --- a/lib_enc/vlpc_2st_cod.c +++ b/lib_enc/vlpc_2st_cod.c @@ -53,10 +53,6 @@ int16_t vlpc_2st_cod( int16_t *indx, /* o : index[] (4 bits per words) */ const int16_t mode, /* i : 0=abs, >0=rel */ const int32_t sr_core /* i : internal sampling rate */ -#ifdef FIX_I120_INV_SQRT - , - const int16_t element_mode /* i" IVAS element mode */ -#endif ) { int16_t i, nbits; @@ -67,12 +63,7 @@ int16_t vlpc_2st_cod( /* 0 bit with true weighting: save 0.5 bit */ - lsf_weight_2st( lsf, w, 1, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + lsf_weight_2st( lsf, w, 1, sr_core ); for ( i = 0; i < M; i++ ) { @@ -100,12 +91,7 @@ int16_t vlpc_2st_cod( } /* weighting from the 1st stage */ - lsf_weight_2st( lsfq, w, mode, sr_core -#ifdef FIX_I120_INV_SQRT - , - element_mode -#endif - ); + lsf_weight_2st( lsfq, w, mode, sr_core ); /* find lsf residual */ -- GitLab