Loading lib_com/ivas_filters.c +27 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,33 @@ void ivas_filter_process_fx( } #endif void ivas_filter_process_exp_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering (exp[i] : pIn_out_e[i]) */ const Word16 length, /* i : filter order */ Word16 *pIn_Out_e ) { SWITCH( filter_state->order ) { case IVAS_FILTER_ORDER_1: case IVAS_FILTER_ORDER_2: ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); /* Scale pIn_Out_fx back to input Q */ BREAK; case IVAS_FILTER_ORDER_4: /* biquad-1 */ ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); /* biquad-2 */ ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_1, pIn_Out_e ); /* Scale pIn_Out_fx back to input Q */ BREAK; default: BREAK; } return; } /*-----------------------------------------------------------------------------------------* * Function ivas_iir_2_filter() Loading lib_com/ivas_prot.h +13 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,8 @@ ivas_error pre_proc_front_ivas_fx( Word16 *relE_fx, /* o : frame relative energy Q8 */ Word16 A_fx[NB_SUBFR16k * ( M + 1 )], /* o : A(z) unquantized for the 4 subframes */ Word16 Aw_fx[NB_SUBFR16k * ( M + 1 )], /* o : weighted A(z) unquantized for subframes */ float epsP[M + 1], /* o : LP prediction errors */ Word32 epsP_fx[M + 1], /* o : LP prediction errors */ Word16 *epsP_fx_q, Word16 lsp_new_fx[M], /* o : LSPs at the end of the frame Q15 */ Word16 lsp_mid_fx[M], /* o : LSPs in the middle of the frame Q15 */ Word16 *vad_hover_flag, /* o : VAD hangover flag */ Loading @@ -262,11 +263,14 @@ ivas_error pre_proc_front_ivas_fx( const Word16 tdm_lsp_new_PCh_fx[M], /* i : unq. LSPs of primary channel Q15 */ const Word16 currFlatness_fx, /* i : flatness parameter Q7 */ const Word16 tdm_ratio_idx, /* i : Current Ratio_L index */ float fr_bands_LR[][2 * NB_BANDS], /* i : energy in frequency bands */ Word32 fr_bands_LR_fx[][2 * NB_BANDS], /* i : energy in frequency bands (fr_bands_LR_fx_q) */ Word16 fr_bands_LR_fx_q, const Word16 Etot_LR_fx[], /* i : total energy Left & Right channel Q8*/ float lf_E_LR[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ Word32 lf_E_LR_fx[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels (lf_E_LR_fx_q) */ Word16 lf_E_LR_fx_q, const Word16 localVAD_HE_SAD_LR[], /* i : HE-SAD flag without hangover, LR channels */ float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ Word32 band_energies_LR_fx[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN (band_energies_LR_fx_q) */ Word16 band_energies_LR_fx_q, const Word16 flag_16k_smc, /* i : flag to indicate if the OL SMC is run at 16 kHz */ const Word16 front_vad_flag, /* i : front-VAD flag to overwrite VAD decision */ const Word16 force_front_vad, /* i : flag to force VAD decision */ Loading @@ -289,7 +293,8 @@ ivas_error pre_proc_ivas( Word32 *ener_fx, /* o : residual energy from Levinson-Durbin Q6 */ Word16 A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ Word16 Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ float epsP[M + 1], /* i/o: LP prediction errors */ Word32 epsP_fx[M + 1], /* i : LP prediction errors epsP_fx_q */ Word16 *epsP_fx_q, /* i : LP prediction errors */ Word16 lsp_new[M], /* i/o: LSPs at the end of the frame */ Word16 lsp_mid[M], /* i/o: LSPs in the middle of the frame */ Word16 *new_inp_resamp16k_fx, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ Loading Loading @@ -529,14 +534,15 @@ ivas_error ivas_core_enc( Word32 ener_fx[], /* i : residual energy from Levinson-Durbin Q6*/ Word16 A_fx[][NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ Word16 Aw_fx[][NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquantized for subframes*/ float epsP[][M + 1], /* i : LP prediction errors */ Word32 epsP_fx[][M + 1], /* i : LP prediction errors epsP_fx_q */ Word16 epsP_fx_q[], /* i : LP prediction errors */ Word16 lsp_new[][M], /* i : LSPs at the end of the frame Q15 */ Word16 lsp_mid[][M], /* i : LSPs in the middle of the frame Q15 */ const int16_t vad_hover_flag[], /* i : VAD hanglover flag */ int16_t attack_flag[], /* i : attack flag (GSC or TC) */ Word32 realBuffer_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ Word32 imagBuffer_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ Word16 q_re_im_buf, Word16 *q_re_im_buf, float old_wsp[][L_WSP], /* i : weighted input signal buffer */ const int16_t loc_harm[], /* i : harmonicity flag */ const Word16 cor_map_sum[], /* i : speech/music clasif. parameter Q8 */ Loading lib_com/ivas_prot_fx.h +6 −0 Original line number Diff line number Diff line Loading @@ -3761,6 +3761,12 @@ void ivas_filter_process_fx( const Word16 length, /* i : filter order */ Word16 q_factor ); void ivas_filter_process_exp_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering (exp[i] : pIn_out_e[i]) */ const Word16 length, /* i : filter order */ Word16 *pIn_Out_e ); ivas_error ivas_osba_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ); Loading lib_com/ivas_transient_det.c +30 −20 Original line number Diff line number Diff line Loading @@ -554,15 +554,18 @@ static float ivas_calc_duck_gain( static Word32 ivas_calc_duck_gain_fx( const Word32 duck_gain, /*Q30*/ const Word32 duck_coeff, /*Q30*/ const Word32 env_1, /*Q14*/ const Word32 env_2, /*Q14*/ const Word32 env_1, /*exp : env1_e*/ const Word16 env1_e, const Word32 env_2, /*exp : env2_e*/ const Word16 env2_e, const Word32 duck_mult_fac /*Q29*/ ) { Word32 duck_gain_out; Word32 duck_gain_out, L_tmp; Word16 tmp_e; duck_gain_out = L_add( L_shl( Mpy_32_32( L_sub( duck_gain, ONE_IN_Q30 ), duck_coeff ), Q1 ), ONE_IN_Q30 ); /*Q30*/ IF( LT_32( Mpy_32_32( duck_mult_fac, env_1 ), Mpy_32_32( L_shr( duck_gain_out, 1 ), env_2 ) ) ) IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( Mpy_32_32( duck_mult_fac, env_1 ), add( 2, env1_e ), Mpy_32_32( duck_gain_out, env_2 ), add( 1, env2_e ) ), -1 ) ) { test(); IF( ( env_1 == 0 ) || ( env_2 == 0 ) ) Loading @@ -572,7 +575,10 @@ static Word32 ivas_calc_duck_gain_fx( } ELSE { duck_gain_out = Mpy_32_32( duck_mult_fac, L_shl( (Word32) ( divide3232( env_1, env_2 ) ), Q16 ) ); /*Q29*/ L_tmp = BASOP_Util_Divide3232_Scale_cadence( env_1, env_2, &tmp_e ); L_tmp = L_shl( L_tmp, add( sub( env1_e, env2_e ), tmp_e ) ); duck_gain_out = Mpy_32_32( duck_mult_fac, L_tmp ); /*Q29*/ duck_gain_out = L_shl( duck_gain_out, Q1 ); /*Q30*/ } } Loading Loading @@ -660,9 +666,9 @@ void ivas_td_decorr_get_ducking_gains_fx( const Word16 frame_len, /*Q0*/ const Word16 tdet_flag /*Q0*/ ) { Word16 i, q = Q14; move16(); Word16 i; Word32 e_fast_fx[L_FRAME48k], e_slow_fx[L_FRAME48k]; Word16 e_fast_e[L_FRAME48k], e_slow_e[L_FRAME48k]; Word32 in_duck_gain = hTranDet->in_duck_gain; /*Q30*/ move32(); Word32 out_duck_gain = hTranDet->out_duck_gain; /*Q30*/ Loading @@ -676,30 +682,34 @@ void ivas_td_decorr_get_ducking_gains_fx( Copy32( pIn_pcm, e_fast_fx, frame_len ); /*Q11*/ set16_fx( e_fast_e, 31 - Q11, L_FRAME48k ); /* env hpf */ ivas_filter_process_fx( &hTranDet->env_hpf, e_fast_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_hpf, e_fast_fx, frame_len, e_fast_e ); Word16 q_factor_diff = sub( 31, q ); FOR( i = 0; i < frame_len; i++ ) { e_fast_fx[i] = L_add( L_abs( e_fast_fx[i] ), L_shr( IVAS_TDET_PARM_ENV_EPS_fx, q_factor_diff ) ); /*Q14*/ // e_fast_fx[i] = L_add( L_abs( e_fast_fx[i] ), L_shr( IVAS_TDET_PARM_ENV_EPS_fx, q_factor_diff ) ); /*Q14*/ e_fast_fx[i] = BASOP_Util_Add_Mant32Exp( L_abs( e_fast_fx[i] ), e_fast_e[i], IVAS_TDET_PARM_ENV_EPS_fx, 0, &e_fast_e[i] ); move32(); e_slow_fx[i] = e_fast_fx[i]; /*Q14*/ e_slow_fx[i] = e_fast_fx[i]; move32(); e_slow_e[i] = e_fast_e[i]; move16(); } /* env fast*/ ivas_filter_process_fx( &hTranDet->env_fast, e_fast_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_fast, e_fast_fx, frame_len, e_fast_e ); /* env slow */ ivas_filter_process_fx( &hTranDet->env_slow, e_slow_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_slow, e_slow_fx, frame_len, e_slow_e ); IF( tdet_flag ) { FOR( i = 0; i < frame_len; i++ ) { in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_fast_fx[i], duck_mult_fac ); /*Q30*/ in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_slow_e[i], e_fast_fx[i], e_fast_e[i], duck_mult_fac ); /*Q30*/ pIn_duck_gains[i] = in_duck_gain; /*Q30*/ move32(); } Loading @@ -710,10 +720,10 @@ void ivas_td_decorr_get_ducking_gains_fx( { FOR( i = 0; i < frame_len; i++ ) { in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_fast_fx[i], duck_mult_fac ); /*Q30*/ in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_slow_e[i], e_fast_fx[i], e_fast_e[i], duck_mult_fac ); /*Q30*/ pIn_duck_gains[i] = in_duck_gain; /*Q30*/ move32(); out_duck_gain = ivas_calc_duck_gain_fx( out_duck_gain, out_duck_coeff, e_fast_fx[i], e_slow_fx[i], duck_mult_fac ); /*Q30*/ out_duck_gain = ivas_calc_duck_gain_fx( out_duck_gain, out_duck_coeff, e_fast_fx[i], e_fast_e[i], e_slow_fx[i], e_slow_e[i], duck_mult_fac ); /*Q30*/ pOut_duck_gains[i] = out_duck_gain; /*Q30*/ move32(); } Loading lib_com/trans_inv_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -531,7 +531,7 @@ void preecho_sb_fx( tmp_fx1 = norm_l( es_mdct_fx[i] ); tmp_fxL1 = L_shl( es_mdct_fx[i], tmp_fx1 ); tmp_fxL2 = L_shl( mean_prev_fx_loc, tmp_fx1 ); tmp_fx1 = round_fx( tmp_fxL1 ); tmp_fx1 = round_fx_sat( tmp_fxL1 ); tmp_fx2 = round_fx( tmp_fxL2 ); tmp_fx3 = div_s( tmp_fx2, tmp_fx1 ); min_g_fx[i] = Frac_sqrt( tmp_fx3 ); Loading Loading
lib_com/ivas_filters.c +27 −0 Original line number Diff line number Diff line Loading @@ -279,6 +279,33 @@ void ivas_filter_process_fx( } #endif void ivas_filter_process_exp_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering (exp[i] : pIn_out_e[i]) */ const Word16 length, /* i : filter order */ Word16 *pIn_Out_e ) { SWITCH( filter_state->order ) { case IVAS_FILTER_ORDER_1: case IVAS_FILTER_ORDER_2: ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); /* Scale pIn_Out_fx back to input Q */ BREAK; case IVAS_FILTER_ORDER_4: /* biquad-1 */ ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_0, pIn_Out_e ); /* biquad-2 */ ivas_iir_2_filter_fx( filter_state, pIn_Out_fx, length, IVAS_FILTER_STAGE_1, pIn_Out_e ); /* Scale pIn_Out_fx back to input Q */ BREAK; default: BREAK; } return; } /*-----------------------------------------------------------------------------------------* * Function ivas_iir_2_filter() Loading
lib_com/ivas_prot.h +13 −7 Original line number Diff line number Diff line Loading @@ -240,7 +240,8 @@ ivas_error pre_proc_front_ivas_fx( Word16 *relE_fx, /* o : frame relative energy Q8 */ Word16 A_fx[NB_SUBFR16k * ( M + 1 )], /* o : A(z) unquantized for the 4 subframes */ Word16 Aw_fx[NB_SUBFR16k * ( M + 1 )], /* o : weighted A(z) unquantized for subframes */ float epsP[M + 1], /* o : LP prediction errors */ Word32 epsP_fx[M + 1], /* o : LP prediction errors */ Word16 *epsP_fx_q, Word16 lsp_new_fx[M], /* o : LSPs at the end of the frame Q15 */ Word16 lsp_mid_fx[M], /* o : LSPs in the middle of the frame Q15 */ Word16 *vad_hover_flag, /* o : VAD hangover flag */ Loading @@ -262,11 +263,14 @@ ivas_error pre_proc_front_ivas_fx( const Word16 tdm_lsp_new_PCh_fx[M], /* i : unq. LSPs of primary channel Q15 */ const Word16 currFlatness_fx, /* i : flatness parameter Q7 */ const Word16 tdm_ratio_idx, /* i : Current Ratio_L index */ float fr_bands_LR[][2 * NB_BANDS], /* i : energy in frequency bands */ Word32 fr_bands_LR_fx[][2 * NB_BANDS], /* i : energy in frequency bands (fr_bands_LR_fx_q) */ Word16 fr_bands_LR_fx_q, const Word16 Etot_LR_fx[], /* i : total energy Left & Right channel Q8*/ float lf_E_LR[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ Word32 lf_E_LR_fx[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels (lf_E_LR_fx_q) */ Word16 lf_E_LR_fx_q, const Word16 localVAD_HE_SAD_LR[], /* i : HE-SAD flag without hangover, LR channels */ float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ Word32 band_energies_LR_fx[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN (band_energies_LR_fx_q) */ Word16 band_energies_LR_fx_q, const Word16 flag_16k_smc, /* i : flag to indicate if the OL SMC is run at 16 kHz */ const Word16 front_vad_flag, /* i : front-VAD flag to overwrite VAD decision */ const Word16 force_front_vad, /* i : flag to force VAD decision */ Loading @@ -289,7 +293,8 @@ ivas_error pre_proc_ivas( Word32 *ener_fx, /* o : residual energy from Levinson-Durbin Q6 */ Word16 A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ Word16 Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ float epsP[M + 1], /* i/o: LP prediction errors */ Word32 epsP_fx[M + 1], /* i : LP prediction errors epsP_fx_q */ Word16 *epsP_fx_q, /* i : LP prediction errors */ Word16 lsp_new[M], /* i/o: LSPs at the end of the frame */ Word16 lsp_mid[M], /* i/o: LSPs in the middle of the frame */ Word16 *new_inp_resamp16k_fx, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ Loading Loading @@ -529,14 +534,15 @@ ivas_error ivas_core_enc( Word32 ener_fx[], /* i : residual energy from Levinson-Durbin Q6*/ Word16 A_fx[][NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ Word16 Aw_fx[][NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquantized for subframes*/ float epsP[][M + 1], /* i : LP prediction errors */ Word32 epsP_fx[][M + 1], /* i : LP prediction errors epsP_fx_q */ Word16 epsP_fx_q[], /* i : LP prediction errors */ Word16 lsp_new[][M], /* i : LSPs at the end of the frame Q15 */ Word16 lsp_mid[][M], /* i : LSPs in the middle of the frame Q15 */ const int16_t vad_hover_flag[], /* i : VAD hanglover flag */ int16_t attack_flag[], /* i : attack flag (GSC or TC) */ Word32 realBuffer_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ Word32 imagBuffer_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ Word16 q_re_im_buf, Word16 *q_re_im_buf, float old_wsp[][L_WSP], /* i : weighted input signal buffer */ const int16_t loc_harm[], /* i : harmonicity flag */ const Word16 cor_map_sum[], /* i : speech/music clasif. parameter Q8 */ Loading
lib_com/ivas_prot_fx.h +6 −0 Original line number Diff line number Diff line Loading @@ -3761,6 +3761,12 @@ void ivas_filter_process_fx( const Word16 length, /* i : filter order */ Word16 q_factor ); void ivas_filter_process_exp_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering (exp[i] : pIn_out_e[i]) */ const Word16 length, /* i : filter order */ Word16 *pIn_Out_e ); ivas_error ivas_osba_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ); Loading
lib_com/ivas_transient_det.c +30 −20 Original line number Diff line number Diff line Loading @@ -554,15 +554,18 @@ static float ivas_calc_duck_gain( static Word32 ivas_calc_duck_gain_fx( const Word32 duck_gain, /*Q30*/ const Word32 duck_coeff, /*Q30*/ const Word32 env_1, /*Q14*/ const Word32 env_2, /*Q14*/ const Word32 env_1, /*exp : env1_e*/ const Word16 env1_e, const Word32 env_2, /*exp : env2_e*/ const Word16 env2_e, const Word32 duck_mult_fac /*Q29*/ ) { Word32 duck_gain_out; Word32 duck_gain_out, L_tmp; Word16 tmp_e; duck_gain_out = L_add( L_shl( Mpy_32_32( L_sub( duck_gain, ONE_IN_Q30 ), duck_coeff ), Q1 ), ONE_IN_Q30 ); /*Q30*/ IF( LT_32( Mpy_32_32( duck_mult_fac, env_1 ), Mpy_32_32( L_shr( duck_gain_out, 1 ), env_2 ) ) ) IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( Mpy_32_32( duck_mult_fac, env_1 ), add( 2, env1_e ), Mpy_32_32( duck_gain_out, env_2 ), add( 1, env2_e ) ), -1 ) ) { test(); IF( ( env_1 == 0 ) || ( env_2 == 0 ) ) Loading @@ -572,7 +575,10 @@ static Word32 ivas_calc_duck_gain_fx( } ELSE { duck_gain_out = Mpy_32_32( duck_mult_fac, L_shl( (Word32) ( divide3232( env_1, env_2 ) ), Q16 ) ); /*Q29*/ L_tmp = BASOP_Util_Divide3232_Scale_cadence( env_1, env_2, &tmp_e ); L_tmp = L_shl( L_tmp, add( sub( env1_e, env2_e ), tmp_e ) ); duck_gain_out = Mpy_32_32( duck_mult_fac, L_tmp ); /*Q29*/ duck_gain_out = L_shl( duck_gain_out, Q1 ); /*Q30*/ } } Loading Loading @@ -660,9 +666,9 @@ void ivas_td_decorr_get_ducking_gains_fx( const Word16 frame_len, /*Q0*/ const Word16 tdet_flag /*Q0*/ ) { Word16 i, q = Q14; move16(); Word16 i; Word32 e_fast_fx[L_FRAME48k], e_slow_fx[L_FRAME48k]; Word16 e_fast_e[L_FRAME48k], e_slow_e[L_FRAME48k]; Word32 in_duck_gain = hTranDet->in_duck_gain; /*Q30*/ move32(); Word32 out_duck_gain = hTranDet->out_duck_gain; /*Q30*/ Loading @@ -676,30 +682,34 @@ void ivas_td_decorr_get_ducking_gains_fx( Copy32( pIn_pcm, e_fast_fx, frame_len ); /*Q11*/ set16_fx( e_fast_e, 31 - Q11, L_FRAME48k ); /* env hpf */ ivas_filter_process_fx( &hTranDet->env_hpf, e_fast_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_hpf, e_fast_fx, frame_len, e_fast_e ); Word16 q_factor_diff = sub( 31, q ); FOR( i = 0; i < frame_len; i++ ) { e_fast_fx[i] = L_add( L_abs( e_fast_fx[i] ), L_shr( IVAS_TDET_PARM_ENV_EPS_fx, q_factor_diff ) ); /*Q14*/ // e_fast_fx[i] = L_add( L_abs( e_fast_fx[i] ), L_shr( IVAS_TDET_PARM_ENV_EPS_fx, q_factor_diff ) ); /*Q14*/ e_fast_fx[i] = BASOP_Util_Add_Mant32Exp( L_abs( e_fast_fx[i] ), e_fast_e[i], IVAS_TDET_PARM_ENV_EPS_fx, 0, &e_fast_e[i] ); move32(); e_slow_fx[i] = e_fast_fx[i]; /*Q14*/ e_slow_fx[i] = e_fast_fx[i]; move32(); e_slow_e[i] = e_fast_e[i]; move16(); } /* env fast*/ ivas_filter_process_fx( &hTranDet->env_fast, e_fast_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_fast, e_fast_fx, frame_len, e_fast_e ); /* env slow */ ivas_filter_process_fx( &hTranDet->env_slow, e_slow_fx, frame_len, q ); ivas_filter_process_exp_fx( &hTranDet->env_slow, e_slow_fx, frame_len, e_slow_e ); IF( tdet_flag ) { FOR( i = 0; i < frame_len; i++ ) { in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_fast_fx[i], duck_mult_fac ); /*Q30*/ in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_slow_e[i], e_fast_fx[i], e_fast_e[i], duck_mult_fac ); /*Q30*/ pIn_duck_gains[i] = in_duck_gain; /*Q30*/ move32(); } Loading @@ -710,10 +720,10 @@ void ivas_td_decorr_get_ducking_gains_fx( { FOR( i = 0; i < frame_len; i++ ) { in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_fast_fx[i], duck_mult_fac ); /*Q30*/ in_duck_gain = ivas_calc_duck_gain_fx( in_duck_gain, in_duck_coeff, e_slow_fx[i], e_slow_e[i], e_fast_fx[i], e_fast_e[i], duck_mult_fac ); /*Q30*/ pIn_duck_gains[i] = in_duck_gain; /*Q30*/ move32(); out_duck_gain = ivas_calc_duck_gain_fx( out_duck_gain, out_duck_coeff, e_fast_fx[i], e_slow_fx[i], duck_mult_fac ); /*Q30*/ out_duck_gain = ivas_calc_duck_gain_fx( out_duck_gain, out_duck_coeff, e_fast_fx[i], e_fast_e[i], e_slow_fx[i], e_slow_e[i], duck_mult_fac ); /*Q30*/ pOut_duck_gains[i] = out_duck_gain; /*Q30*/ move32(); } Loading
lib_com/trans_inv_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -531,7 +531,7 @@ void preecho_sb_fx( tmp_fx1 = norm_l( es_mdct_fx[i] ); tmp_fxL1 = L_shl( es_mdct_fx[i], tmp_fx1 ); tmp_fxL2 = L_shl( mean_prev_fx_loc, tmp_fx1 ); tmp_fx1 = round_fx( tmp_fxL1 ); tmp_fx1 = round_fx_sat( tmp_fxL1 ); tmp_fx2 = round_fx( tmp_fxL2 ); tmp_fx3 = div_s( tmp_fx2, tmp_fx1 ); min_g_fx[i] = Frac_sqrt( tmp_fx3 ); Loading