Loading lib_com/gs_bitallocation_ivas_fx.c +1 −3 Original line number Diff line number Diff line Loading @@ -106,7 +106,6 @@ void bands_and_bit_alloc_ivas_fx( Word32 sum_bit /*Q0*/, bit_fracf /*Q18*/; Word16 etmp; Word16 tmp; Word16 Ener_per_bd_iQ_tmp[MBANDS_GN_BITALLOC16k]; // Q13 Word16 pos, band; Word32 SWB_bit_budget; // Q0 -> Q18 Word32 bits_per_bands[MBANDS_GN_BITALLOC16k]; // Q18 Loading @@ -126,7 +125,6 @@ void bands_and_bit_alloc_ivas_fx( nb_tot_bands = MBANDS_GN_BITALLOC16k; move16(); } Copy( Ener_per_bd_iQ, Ener_per_bd_iQ_tmp, nb_tot_bands ); set32_fx( bits_per_bands, 0, MBANDS_GN_BITALLOC16k ); set16_fx( out_bits_per_bands, 0, MBANDS_GN_BITALLOC16k ); Loading @@ -138,7 +136,7 @@ void bands_and_bit_alloc_ivas_fx( ener_vec[0] = add( Ener_per_bd_iQ[0], Ener_per_bd_iQ[1] ); /*Q12 */ #endif move16(); Copy( Ener_per_bd_iQ_tmp + 1, ener_vec, MBANDS_GN - 1 ); /*Q12 */ Copy( Ener_per_bd_iQ + 1, ener_vec, MBANDS_GN - 1 ); /*Q12 */ ener_vec[MBANDS_GN - 1] = ener_vec[MBANDS_GN - 2]; move16(); IF( EQ_16( L_frame, L_FRAME16k ) ) 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_pca_tools.c +11 −9 Original line number Diff line number Diff line Loading @@ -322,20 +322,19 @@ static void house_refl_fx( Word32 rcp_fx = L_deposit_h( tmp ); // rcp_q Word16 rcp_q = sub( Q31, exp ); rcp_fx = L_shr( rcp_fx, sub( rcp_q, Q31 ) ); // making rcp_fx in Q31 FOR( i = 0; i < sizex; i++ ) { norm = norm_l( pu_fx[i] ); L_tmp = L_shl( pu_fx[i], norm ); pu_fx[i] = Mpy_32_32( L_tmp, rcp_fx ); // px_q + Q31 - Q31 -> px_q pu_e[i] = sub( 31, add( px_q, norm ) ); pu_fx[i] = Mpy_32_32( L_tmp, rcp_fx ); // ( px_q + norm ) + rcp_q - 31 -> exp: 31 + 31 - (px_q + norm + rcp_q) pu_e[i] = sub( 62, add( add( px_q, norm ), rcp_q ) ); move32(); move16(); } IF( pu_fx[0] >= 0 ) { pu_fx[0] = L_add( pu_fx[0], L_shl( 1, sub( 31, pu_e[0] ) ) ); pu_fx[0] = BASOP_Util_Add_Mant32Exp( pu_fx[0], pu_e[0], ONE_IN_Q30, 1, &pu_e[0] ); ( *normu_fx ) = L_negate( *normu_fx ); move32(); Loading @@ -343,7 +342,7 @@ static void house_refl_fx( } ELSE { pu_fx[0] = L_sub( pu_fx[0], L_shl( 1, sub( 31, pu_e[0] ) ) ); pu_fx[0] = BASOP_Util_Add_Mant32Exp( pu_fx[0], pu_e[0], -ONE_IN_Q30, 1, &pu_e[0] ); move32(); } Loading @@ -357,8 +356,8 @@ static void house_refl_fx( FOR( i = 0; i < sizex; i++ ) { pu_fx[i] = Mpy_32_32( pu_fx[i], rcp_fx ); // pu_e[i] + exp2 pu_fx[i] = L_shl( pu_fx[i], exp2 ); // pu_e[i] + exp2 move32(); pu_e[i] = add( pu_e[i], exp2 ); move32(); } Loading Loading @@ -489,6 +488,7 @@ static void house_qr_fx( Word32 U_fx[FOA_CHANNELS * FOA_CHANNELS]; Word16 U_e[FOA_CHANNELS * FOA_CHANNELS]; Word32 pu_fx[FOA_CHANNELS]; Word16 tmp_pu_e[FOA_CHANNELS]; Word16 pv_exp[FOA_CHANNELS]; Word32 pa_fx[FOA_CHANNELS]; Word16 tmp_e; Loading Loading @@ -573,8 +573,10 @@ static void house_qr_fx( { FOR( i = 0; i < n_rows; i++ ) { pu_fx[i] = L_shr( U_fx[i * n + k], sub( sub( 31, U_e[i * n + k] ), pu_fx_q ) ); // pu_fx_q pu_fx[i] = U_fx[i * n + k]; move32(); tmp_pu_e[i] = U_e[i * n + k]; move16(); } FOR( s = k; s < n_rows; s++ ) Loading @@ -586,8 +588,8 @@ static void house_qr_fx( } pv_fx[s - k] = dotp_fixed( &pu_fx[k], &pa_fx[k], sub( n_rows, k ) ); // pu_fx_q + Q31 - Q31 pv_exp[s - k] = sub( 31, pu_fx_q ); pv_fx[s - k] = dotp_fixed( &pu_fx[k], &pa_fx[k], sub( n_rows, k ) ); // exp: tmp_pu_e[k] pv_exp[s - k] = tmp_pu_e[k]; move32(); move16(); } Loading lib_com/ivas_prot_fx.h +10 −0 Original line number Diff line number Diff line Loading @@ -779,6 +779,10 @@ void destroy_core_enc_fx( ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ ); void destroy_evs_core_enc_fx( ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ ); ivas_error ivas_sce_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 sce_id, /* i : SCE # identifier */ Loading Loading @@ -3761,6 +3765,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 Loading
lib_com/gs_bitallocation_ivas_fx.c +1 −3 Original line number Diff line number Diff line Loading @@ -106,7 +106,6 @@ void bands_and_bit_alloc_ivas_fx( Word32 sum_bit /*Q0*/, bit_fracf /*Q18*/; Word16 etmp; Word16 tmp; Word16 Ener_per_bd_iQ_tmp[MBANDS_GN_BITALLOC16k]; // Q13 Word16 pos, band; Word32 SWB_bit_budget; // Q0 -> Q18 Word32 bits_per_bands[MBANDS_GN_BITALLOC16k]; // Q18 Loading @@ -126,7 +125,6 @@ void bands_and_bit_alloc_ivas_fx( nb_tot_bands = MBANDS_GN_BITALLOC16k; move16(); } Copy( Ener_per_bd_iQ, Ener_per_bd_iQ_tmp, nb_tot_bands ); set32_fx( bits_per_bands, 0, MBANDS_GN_BITALLOC16k ); set16_fx( out_bits_per_bands, 0, MBANDS_GN_BITALLOC16k ); Loading @@ -138,7 +136,7 @@ void bands_and_bit_alloc_ivas_fx( ener_vec[0] = add( Ener_per_bd_iQ[0], Ener_per_bd_iQ[1] ); /*Q12 */ #endif move16(); Copy( Ener_per_bd_iQ_tmp + 1, ener_vec, MBANDS_GN - 1 ); /*Q12 */ Copy( Ener_per_bd_iQ + 1, ener_vec, MBANDS_GN - 1 ); /*Q12 */ ener_vec[MBANDS_GN - 1] = ener_vec[MBANDS_GN - 2]; move16(); IF( EQ_16( L_frame, L_FRAME16k ) ) 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_pca_tools.c +11 −9 Original line number Diff line number Diff line Loading @@ -322,20 +322,19 @@ static void house_refl_fx( Word32 rcp_fx = L_deposit_h( tmp ); // rcp_q Word16 rcp_q = sub( Q31, exp ); rcp_fx = L_shr( rcp_fx, sub( rcp_q, Q31 ) ); // making rcp_fx in Q31 FOR( i = 0; i < sizex; i++ ) { norm = norm_l( pu_fx[i] ); L_tmp = L_shl( pu_fx[i], norm ); pu_fx[i] = Mpy_32_32( L_tmp, rcp_fx ); // px_q + Q31 - Q31 -> px_q pu_e[i] = sub( 31, add( px_q, norm ) ); pu_fx[i] = Mpy_32_32( L_tmp, rcp_fx ); // ( px_q + norm ) + rcp_q - 31 -> exp: 31 + 31 - (px_q + norm + rcp_q) pu_e[i] = sub( 62, add( add( px_q, norm ), rcp_q ) ); move32(); move16(); } IF( pu_fx[0] >= 0 ) { pu_fx[0] = L_add( pu_fx[0], L_shl( 1, sub( 31, pu_e[0] ) ) ); pu_fx[0] = BASOP_Util_Add_Mant32Exp( pu_fx[0], pu_e[0], ONE_IN_Q30, 1, &pu_e[0] ); ( *normu_fx ) = L_negate( *normu_fx ); move32(); Loading @@ -343,7 +342,7 @@ static void house_refl_fx( } ELSE { pu_fx[0] = L_sub( pu_fx[0], L_shl( 1, sub( 31, pu_e[0] ) ) ); pu_fx[0] = BASOP_Util_Add_Mant32Exp( pu_fx[0], pu_e[0], -ONE_IN_Q30, 1, &pu_e[0] ); move32(); } Loading @@ -357,8 +356,8 @@ static void house_refl_fx( FOR( i = 0; i < sizex; i++ ) { pu_fx[i] = Mpy_32_32( pu_fx[i], rcp_fx ); // pu_e[i] + exp2 pu_fx[i] = L_shl( pu_fx[i], exp2 ); // pu_e[i] + exp2 move32(); pu_e[i] = add( pu_e[i], exp2 ); move32(); } Loading Loading @@ -489,6 +488,7 @@ static void house_qr_fx( Word32 U_fx[FOA_CHANNELS * FOA_CHANNELS]; Word16 U_e[FOA_CHANNELS * FOA_CHANNELS]; Word32 pu_fx[FOA_CHANNELS]; Word16 tmp_pu_e[FOA_CHANNELS]; Word16 pv_exp[FOA_CHANNELS]; Word32 pa_fx[FOA_CHANNELS]; Word16 tmp_e; Loading Loading @@ -573,8 +573,10 @@ static void house_qr_fx( { FOR( i = 0; i < n_rows; i++ ) { pu_fx[i] = L_shr( U_fx[i * n + k], sub( sub( 31, U_e[i * n + k] ), pu_fx_q ) ); // pu_fx_q pu_fx[i] = U_fx[i * n + k]; move32(); tmp_pu_e[i] = U_e[i * n + k]; move16(); } FOR( s = k; s < n_rows; s++ ) Loading @@ -586,8 +588,8 @@ static void house_qr_fx( } pv_fx[s - k] = dotp_fixed( &pu_fx[k], &pa_fx[k], sub( n_rows, k ) ); // pu_fx_q + Q31 - Q31 pv_exp[s - k] = sub( 31, pu_fx_q ); pv_fx[s - k] = dotp_fixed( &pu_fx[k], &pa_fx[k], sub( n_rows, k ) ); // exp: tmp_pu_e[k] pv_exp[s - k] = tmp_pu_e[k]; move32(); move16(); } Loading
lib_com/ivas_prot_fx.h +10 −0 Original line number Diff line number Diff line Loading @@ -779,6 +779,10 @@ void destroy_core_enc_fx( ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ ); void destroy_evs_core_enc_fx( ENC_CORE_HANDLE hCoreCoder /* i/o: core encoder structure */ ); ivas_error ivas_sce_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 sce_id, /* i : SCE # identifier */ Loading Loading @@ -3761,6 +3765,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