Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ #define FIX_2010_PREP_TBE_EXC /* FhG: fix issues with varying Q-values for code_preQ_fx[] */ #define FIX_2025_FDCNG_MULT /* Nokia, FhG: Fix LB FDCNG noise introduced by changing mult to i_mult */ #define OPT_IGF_GET_WHITE_SPEC_DATA /* FhG: optimized version of IGF_getWhiteSpectralData_ivas() */ #define FIX_1962_FORMAT_CONV_SPECTRAL_DIFF /* FhG: Improved precision of targetEnergy in ivas_ls_setup_conversion_process_mdct_fx() */ #define FIX_2003_CON_TCX_OVERFLOW /* FhG: Use a dynamic scaling factor for the synth buffer at the output of con_tcx_ivas_fx() */ #define HP20_FIX32_RECODING /* FhG: optimized hp20_fx_32 calculation and applied it as hp20_fx_32_opt in decoder */ Loading lib_dec/igf_dec_fx.c +25 −1 Original line number Diff line number Diff line Loading @@ -2905,6 +2905,9 @@ static void IGF_getWhiteSpectralData_ivas( Word16 tmp_e; Word16 out_e_arr[IGF_START_MX + MAX_IGF_SFB_LEN]; Word16 max_out_e; #ifdef OPT_IGF_GET_WHITE_SPEC_DATA Word64 window_sum; #endif assert( LT_16( stop, IGF_START_MX + MAX_IGF_SFB_LEN ) ); /* inits */ Loading @@ -2930,8 +2933,22 @@ static void IGF_getWhiteSpectralData_ivas( ak_e = add( tmp_e, sub( shl( sub( in_e, s_l ), 1 ), 15 ) ); // tmp_e + 2 * (in_e - s_l) - 15 ak_e = sub( ak_e, 1 ); #ifdef OPT_IGF_GET_WHITE_SPEC_DATA window_sum = 0; move64(); FOR( j = start - level; j < start + level; j++ ) { window_sum = W_mac_32_32( window_sum, in[j], in[j] ); } #endif FOR( i = start; i < stop - level; i++ ) { #ifdef OPT_IGF_GET_WHITE_SPEC_DATA window_sum = W_mac_32_32( window_sum, in[i + level], in[i + level] ); /* add the right one */ ak = Mult_32_16( W_shl_sat_l( window_sum, shift ), quo ); // add( shl( level, 1 ), 1 ), &tmp_e ) ); window_sum = W_sub( window_sum, W_mult_32_32( in[i - level], in[i - level] ) ); /* subtract the left one */ #else Word64 temp = 0; move64(); FOR( j = i - level; j < i + level + 1; j++ ) Loading @@ -2939,7 +2956,7 @@ static void IGF_getWhiteSpectralData_ivas( temp = W_mac_32_32( temp, in[j], in[j] ); } ak = Mult_32_16( W_shl_sat_l( temp, shift ), quo ); // add( shl( level, 1 ), 1 ), &tmp_e ) ); #endif n = sub( ak_e, norm_l( ak ) ); n = shr( n, 1 ); Loading @@ -2951,6 +2968,11 @@ static void IGF_getWhiteSpectralData_ivas( FOR( ; i < stop; i++ ) { #ifdef OPT_IGF_GET_WHITE_SPEC_DATA ak = L_deposit_h( BASOP_Util_Divide3216_Scale( W_shl_sat_l( window_sum, shift ), sub( stop, sub( i, level ) ), &tmp_e ) ); window_sum = W_sub( window_sum, W_mult_32_32( in[i - level], in[i - level] ) ); /* subtract the left one */ ak_e = add( tmp_e, eff_e ); // tmp_e + 2 * (in_e - s_l) - 15 #else Word64 temp = 0; move64(); Loading @@ -2961,6 +2983,8 @@ static void IGF_getWhiteSpectralData_ivas( ak = L_deposit_h( BASOP_Util_Divide3216_Scale( W_shl_sat_l( temp, shift ), sub( stop, sub( i, level ) ), &tmp_e ) ); ak_e = add( tmp_e, eff_e ); // tmp_e + 2 * (in_e - s_l) - 15 #endif n = sub( ak_e, add( norm_l( ak ), 1 ) ); n = shr( n, 1 ); Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ #define FIX_2010_PREP_TBE_EXC /* FhG: fix issues with varying Q-values for code_preQ_fx[] */ #define FIX_2025_FDCNG_MULT /* Nokia, FhG: Fix LB FDCNG noise introduced by changing mult to i_mult */ #define OPT_IGF_GET_WHITE_SPEC_DATA /* FhG: optimized version of IGF_getWhiteSpectralData_ivas() */ #define FIX_1962_FORMAT_CONV_SPECTRAL_DIFF /* FhG: Improved precision of targetEnergy in ivas_ls_setup_conversion_process_mdct_fx() */ #define FIX_2003_CON_TCX_OVERFLOW /* FhG: Use a dynamic scaling factor for the synth buffer at the output of con_tcx_ivas_fx() */ #define HP20_FIX32_RECODING /* FhG: optimized hp20_fx_32 calculation and applied it as hp20_fx_32_opt in decoder */ Loading
lib_dec/igf_dec_fx.c +25 −1 Original line number Diff line number Diff line Loading @@ -2905,6 +2905,9 @@ static void IGF_getWhiteSpectralData_ivas( Word16 tmp_e; Word16 out_e_arr[IGF_START_MX + MAX_IGF_SFB_LEN]; Word16 max_out_e; #ifdef OPT_IGF_GET_WHITE_SPEC_DATA Word64 window_sum; #endif assert( LT_16( stop, IGF_START_MX + MAX_IGF_SFB_LEN ) ); /* inits */ Loading @@ -2930,8 +2933,22 @@ static void IGF_getWhiteSpectralData_ivas( ak_e = add( tmp_e, sub( shl( sub( in_e, s_l ), 1 ), 15 ) ); // tmp_e + 2 * (in_e - s_l) - 15 ak_e = sub( ak_e, 1 ); #ifdef OPT_IGF_GET_WHITE_SPEC_DATA window_sum = 0; move64(); FOR( j = start - level; j < start + level; j++ ) { window_sum = W_mac_32_32( window_sum, in[j], in[j] ); } #endif FOR( i = start; i < stop - level; i++ ) { #ifdef OPT_IGF_GET_WHITE_SPEC_DATA window_sum = W_mac_32_32( window_sum, in[i + level], in[i + level] ); /* add the right one */ ak = Mult_32_16( W_shl_sat_l( window_sum, shift ), quo ); // add( shl( level, 1 ), 1 ), &tmp_e ) ); window_sum = W_sub( window_sum, W_mult_32_32( in[i - level], in[i - level] ) ); /* subtract the left one */ #else Word64 temp = 0; move64(); FOR( j = i - level; j < i + level + 1; j++ ) Loading @@ -2939,7 +2956,7 @@ static void IGF_getWhiteSpectralData_ivas( temp = W_mac_32_32( temp, in[j], in[j] ); } ak = Mult_32_16( W_shl_sat_l( temp, shift ), quo ); // add( shl( level, 1 ), 1 ), &tmp_e ) ); #endif n = sub( ak_e, norm_l( ak ) ); n = shr( n, 1 ); Loading @@ -2951,6 +2968,11 @@ static void IGF_getWhiteSpectralData_ivas( FOR( ; i < stop; i++ ) { #ifdef OPT_IGF_GET_WHITE_SPEC_DATA ak = L_deposit_h( BASOP_Util_Divide3216_Scale( W_shl_sat_l( window_sum, shift ), sub( stop, sub( i, level ) ), &tmp_e ) ); window_sum = W_sub( window_sum, W_mult_32_32( in[i - level], in[i - level] ) ); /* subtract the left one */ ak_e = add( tmp_e, eff_e ); // tmp_e + 2 * (in_e - s_l) - 15 #else Word64 temp = 0; move64(); Loading @@ -2961,6 +2983,8 @@ static void IGF_getWhiteSpectralData_ivas( ak = L_deposit_h( BASOP_Util_Divide3216_Scale( W_shl_sat_l( temp, shift ), sub( stop, sub( i, level ) ), &tmp_e ) ); ak_e = add( tmp_e, eff_e ); // tmp_e + 2 * (in_e - s_l) - 15 #endif n = sub( ak_e, add( norm_l( ak ), 1 ) ); n = shr( n, 1 ); Loading