Loading lib_com/ivas_spar_com_quant_util_fx.c +12 −12 Original line number Diff line number Diff line Loading @@ -356,22 +356,22 @@ void ivas_map_prior_coeffs_quant( { FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) { Word32 trial1 = L_mult0( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial1 = Mpy_32_32( trial1, one_by_q_lvl_PR_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = round_fx( trial1 ); /*q0*/ Word16 trial1_16 = imult1616 ( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_PR_fx, trial1_16 ) ); /*q0*/ #else Word32 trial1 = L_mult0( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_PR_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = extract_l( trial1 ); /*q0*/ #endif move16(); Word32 trial2 = L_mult0( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ trial2 = L_shl( trial2, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial2 = Mpy_32_32( trial2, one_by_q_lvl_P_r_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = round_fx( trial2 ); /*q0*/ Word16 trial2_16 = imult1616( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_P_r_fx, trial2_16 ) ); /*q0*/ #else Word32 trial2 = L_mult0( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ trial2 = L_shl( trial2, 16 ); /*q16*/ trial2 = round_fx( Mpy_32_32( trial2, one_by_q_lvl_P_r_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = extract_l( trial2 ); /*q0*/ #endif Loading @@ -379,12 +379,12 @@ void ivas_map_prior_coeffs_quant( } FOR( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) { Word32 trial1 = L_mult0( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial1 = Mpy_32_32( trial1, one_by_q_lvl_C_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = round_fx( trial1 ); /*q0*/ Word16 trial1_16 = imult1616( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_C_fx, trial1_16 ) ); /*q0*/ #else Word32 trial1 = L_mult0( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_C_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = extract_l( trial1 ); /*q0*/ #endif Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ #define NONBE_FIX_2493_EXTRACT_L_acelp_fast_fx /* FhG: Fix extract_l overflow inside acelp_fast_fx(). Saturation, not a optimal fix. */ #define NONBE_FIX_2493_EXTRACT_L_swb_tbe_enc_fx /* FhG: Fix extract_l overflow inside swb_tbe_enc_fx() */ #define NONBE_FIX_2493_EXTRACT_L_bw_detect_fx /* FhG: Fix extract_l overflow inside bw_detect_fx(). Saturation, not a optimal fix. */ #define FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION /* FhG: Fix instrumentation related to extract_l. */ #define FIX_2585_BIT_ALLOCATION_DIFF /* VA : issue 2585, bit allocation different behaviors between float and fixed-point for corner cases */ #define FIX_BASOP_2592_OVERFLOW /* FhG: BASOP #2592: fix overflow in GetF0() */ #define FIX_BASOP_2591_EDGE_DETECT_COMP /* FhG: BASOP #2591: Wrong comparison in edge_detect_fx() */ Loading Loading
lib_com/ivas_spar_com_quant_util_fx.c +12 −12 Original line number Diff line number Diff line Loading @@ -356,22 +356,22 @@ void ivas_map_prior_coeffs_quant( { FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) { Word32 trial1 = L_mult0( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial1 = Mpy_32_32( trial1, one_by_q_lvl_PR_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = round_fx( trial1 ); /*q0*/ Word16 trial1_16 = imult1616 ( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_PR_fx, trial1_16 ) ); /*q0*/ #else Word32 trial1 = L_mult0( sub( qs.PR.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_PR_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = extract_l( trial1 ); /*q0*/ #endif move16(); Word32 trial2 = L_mult0( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ trial2 = L_shl( trial2, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial2 = Mpy_32_32( trial2, one_by_q_lvl_P_r_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = round_fx( trial2 ); /*q0*/ Word16 trial2_16 = imult1616( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_P_r_fx, trial2_16 ) ); /*q0*/ #else Word32 trial2 = L_mult0( sub( qs.P_r.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] ); /*q0*/ trial2 = L_shl( trial2, 16 ); /*q16*/ trial2 = round_fx( Mpy_32_32( trial2, one_by_q_lvl_P_r_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = extract_l( trial2 ); /*q0*/ #endif Loading @@ -379,12 +379,12 @@ void ivas_map_prior_coeffs_quant( } FOR( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) { Word32 trial1 = L_mult0( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ #ifdef FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION trial1 = Mpy_32_32( trial1, one_by_q_lvl_C_fx ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = round_fx( trial1 ); /*q0*/ Word16 trial1_16 = imult1616( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = round_fx( Mpy_32_16_1( one_by_q_lvl_C_fx, trial1_16 ) ); /*q0*/ #else Word32 trial1 = L_mult0( sub( qs.C.q_levels[0], 1 ), pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] ); /*q0*/ trial1 = L_shl( trial1, 16 ); /*q16*/ trial1 = round_fx( Mpy_32_32( trial1, one_by_q_lvl_C_fx ) ); /*q16+q31-31-16->0*/ pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = extract_l( trial1 ); /*q0*/ #endif Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ #define NONBE_FIX_2493_EXTRACT_L_acelp_fast_fx /* FhG: Fix extract_l overflow inside acelp_fast_fx(). Saturation, not a optimal fix. */ #define NONBE_FIX_2493_EXTRACT_L_swb_tbe_enc_fx /* FhG: Fix extract_l overflow inside swb_tbe_enc_fx() */ #define NONBE_FIX_2493_EXTRACT_L_bw_detect_fx /* FhG: Fix extract_l overflow inside bw_detect_fx(). Saturation, not a optimal fix. */ #define FIX_2493_CHECK_EXTRACT_L_FIX_INSTRUMENTATION /* FhG: Fix instrumentation related to extract_l. */ #define FIX_2585_BIT_ALLOCATION_DIFF /* VA : issue 2585, bit allocation different behaviors between float and fixed-point for corner cases */ #define FIX_BASOP_2592_OVERFLOW /* FhG: BASOP #2592: fix overflow in GetF0() */ #define FIX_BASOP_2591_EDGE_DETECT_COMP /* FhG: BASOP #2591: Wrong comparison in edge_detect_fx() */ Loading