1*15dc779aSAndroid Build Coastguard Worker /****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker * * 3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 4*15dc779aSAndroid Build Coastguard Worker * 5*15dc779aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 6*15dc779aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 7*15dc779aSAndroid Build Coastguard Worker * You may obtain a copy of the License at: 8*15dc779aSAndroid Build Coastguard Worker * 9*15dc779aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 10*15dc779aSAndroid Build Coastguard Worker * 11*15dc779aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 12*15dc779aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 13*15dc779aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*15dc779aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 15*15dc779aSAndroid Build Coastguard Worker * limitations under the License. 16*15dc779aSAndroid Build Coastguard Worker * 17*15dc779aSAndroid Build Coastguard Worker ***************************************************************************** 18*15dc779aSAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*15dc779aSAndroid Build Coastguard Worker */ 20*15dc779aSAndroid Build Coastguard Worker #ifndef IXHEAACD_ENV_CALC_H 21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_ENV_CALC_H 22*15dc779aSAndroid Build Coastguard Worker 23*15dc779aSAndroid Build Coastguard Worker typedef struct { 24*15dc779aSAndroid Build Coastguard Worker WORD16 *filt_buf_me; 25*15dc779aSAndroid Build Coastguard Worker WORD16 *filt_buf_noise_m; 26*15dc779aSAndroid Build Coastguard Worker WORD32 filt_buf_noise_e; 27*15dc779aSAndroid Build Coastguard Worker FLAG start_up; 28*15dc779aSAndroid Build Coastguard Worker WORD16 ph_index; 29*15dc779aSAndroid Build Coastguard Worker WORD16 tansient_env_prev; 30*15dc779aSAndroid Build Coastguard Worker WORD8 harm_flags_prev[MAX_FREQ_COEFFS]; 31*15dc779aSAndroid Build Coastguard Worker WORD16 harm_index; 32*15dc779aSAndroid Build Coastguard Worker } ia_sbr_calc_env_struct; 33*15dc779aSAndroid Build Coastguard Worker 34*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_calc_sbrenvelope( 35*15dc779aSAndroid Build Coastguard Worker ia_sbr_scale_fact_struct *sbr_scale_factor, 36*15dc779aSAndroid Build Coastguard Worker ia_sbr_calc_env_struct *ptr_sbr_calc_env, 37*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 38*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data, 39*15dc779aSAndroid Build Coastguard Worker ia_sbr_prev_frame_data_struct *ptr_prev_frame_data, 40*15dc779aSAndroid Build Coastguard Worker WORD32 **anal_buf_real_mant, WORD32 **anal_buf_imag_mant, 41*15dc779aSAndroid Build Coastguard Worker WORD16 *degree_alias, FLAG low_pow_flag, 42*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *ptr_sbr_tables, 43*15dc779aSAndroid Build Coastguard Worker ixheaacd_misc_tables *pstr_common_tables, WORD32 *ptr_qmf_matrix, 44*15dc779aSAndroid Build Coastguard Worker WORD32 audio_object_type); 45*15dc779aSAndroid Build Coastguard Worker 46*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_reset_sbrenvelope_calc(ia_sbr_calc_env_struct *ptr_calc_env); 47*15dc779aSAndroid Build Coastguard Worker 48*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_derive_lim_band_tbl( 49*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 50*15dc779aSAndroid Build Coastguard Worker const ia_patch_param_struct *p_str_patch_param, WORD16 num_patches, 51*15dc779aSAndroid Build Coastguard Worker ixheaacd_misc_tables *pstr_common_tables); 52*15dc779aSAndroid Build Coastguard Worker 53*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_filt_buf_update(WORD16 *filt_buf_mant, 54*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_filt_buf_noise, 55*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_gain_mant, 56*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_level_mant, 57*15dc779aSAndroid Build Coastguard Worker WORD32 num_sub_bands); 58*15dc779aSAndroid Build Coastguard Worker 59*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_noise_level_rescaling(WORD16 *noise_level_mant, WORD32 diff, 60*15dc779aSAndroid Build Coastguard Worker WORD32 num_sub_bands, 61*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_drc_offset); 62*15dc779aSAndroid Build Coastguard Worker 63*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_persfb(WORD32 **anal_buf_real, WORD32 **anal_buf_imag, 64*15dc779aSAndroid Build Coastguard Worker WORD32 num_sf_bands, WORD16 *freq_band_table, 65*15dc779aSAndroid Build Coastguard Worker WORD32 start_pos, WORD32 next_pos, 66*15dc779aSAndroid Build Coastguard Worker WORD32 max_qmf_subband_aac, WORD32 frame_exp, 67*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_est_m, FLAG low_pow_flag, 68*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *ptr_sbr_tables); 69*15dc779aSAndroid Build Coastguard Worker 70*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_avggain_calc(WORD16 *ptr_enrg_orig, WORD16 *nrg_est, 71*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_start, WORD32 sub_band_end, 72*15dc779aSAndroid Build Coastguard Worker WORD16 *sum_orig_mant, WORD16 *sum_orig_exp, 73*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_avg_gain_mant, WORD16 *ptr_avg_gain_exp, 74*15dc779aSAndroid Build Coastguard Worker ixheaacd_misc_tables *pstr_common_tables, 75*15dc779aSAndroid Build Coastguard Worker WORD32 flag); 76*15dc779aSAndroid Build Coastguard Worker 77*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adj_timeslot(WORD32 *ptr_buf_real, WORD32 *ptr_buf_imag, 78*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_filt_buf, WORD16 *ptr_filt_buf_noise, 79*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_gain_buf, WORD16 *ptr_noise_floor, 80*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_sine_lvl_buf, WORD16 noise_floor_exp, 81*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_harm_index, WORD16 sub_band_start, 82*15dc779aSAndroid Build Coastguard Worker WORD16 num_sub_bands, WORD16 scale_change, 83*15dc779aSAndroid Build Coastguard Worker WORD16 smooth_ratio, FLAG num_noise_flg, 84*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_phase_index, 85*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *ptr_sbr_tables); 86*15dc779aSAndroid Build Coastguard Worker 87*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_map_sineflags(WORD16 *freq_band_table, WORD16 num_sf_bands, 88*15dc779aSAndroid Build Coastguard Worker FLAG *add_harmonics, WORD8 *harm_flags_prev, 89*15dc779aSAndroid Build Coastguard Worker WORD16 transient_env, WORD8 *sine_mapped_matrix); 90*15dc779aSAndroid Build Coastguard Worker 91*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adjust_scale_dec(WORD32 **re, WORD32 **im, WORD sub_band_start, 92*15dc779aSAndroid Build Coastguard Worker WORD num_sub_bands, WORD start_pos, 93*15dc779aSAndroid Build Coastguard Worker WORD next_pos, WORD shift, FLAG low_pow_flag); 94*15dc779aSAndroid Build Coastguard Worker 95*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adjust_scale_armv7(WORD32 **re, WORD32 **im, WORD sub_band_start, 96*15dc779aSAndroid Build Coastguard Worker WORD num_sub_bands, WORD start_pos, 97*15dc779aSAndroid Build Coastguard Worker WORD next_pos, WORD shift, FLAG low_pow_flag); 98*15dc779aSAndroid Build Coastguard Worker 99*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_expsubbandsamples_dec(WORD32 **anal_buf_real_mant, 100*15dc779aSAndroid Build Coastguard Worker WORD32 **anal_buf_imag_mant, 101*15dc779aSAndroid Build Coastguard Worker WORD sub_band_start, WORD sub_band_end, 102*15dc779aSAndroid Build Coastguard Worker WORD start_pos, WORD end_pos, 103*15dc779aSAndroid Build Coastguard Worker FLAG low_pow_flag); 104*15dc779aSAndroid Build Coastguard Worker 105*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_expsubbandsamples_armv7(WORD32 **anal_buf_real_mant, 106*15dc779aSAndroid Build Coastguard Worker WORD32 **anal_buf_imag_mant, 107*15dc779aSAndroid Build Coastguard Worker WORD sub_band_start, WORD sub_band_end, 108*15dc779aSAndroid Build Coastguard Worker WORD start_pos, WORD end_pos, 109*15dc779aSAndroid Build Coastguard Worker FLAG low_pow_flag); 110*15dc779aSAndroid Build Coastguard Worker 111*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_per_subband_dec(WORD32 start_pos, WORD32 next_pos, 112*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_start, 113*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_end, WORD32 frame_exp, 114*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_est_mant, 115*15dc779aSAndroid Build Coastguard Worker FLAG low_pow_flag, 116*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *ptr_sbr_tables, 117*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_qmf_matrix); 118*15dc779aSAndroid Build Coastguard Worker 119*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_per_subband_armv7( 120*15dc779aSAndroid Build Coastguard Worker WORD32 start_pos, WORD32 next_pos, WORD32 sub_band_start, 121*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_end, WORD32 frame_exp, WORD16 *nrg_est_mant, 122*15dc779aSAndroid Build Coastguard Worker FLAG low_pow_flag, ia_sbr_tables_struct *ptr_sbr_tables, 123*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_qmf_matrix); 124*15dc779aSAndroid Build Coastguard Worker 125*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_reset_hf_generator(ia_sbr_hf_generator_struct *hf_generator, 126*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 127*15dc779aSAndroid Build Coastguard Worker WORD audio_obj_type); 128*15dc779aSAndroid Build Coastguard Worker 129*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_zerotwolp_dec(WORD32 *ptr_real_buf, WORD16 *ptr_gain_buf, 130*15dc779aSAndroid Build Coastguard Worker WORD scale_change, 131*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_sine_level_buf, 132*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_rand_ph, 133*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_lvl_me, WORD num_sub_bands, 134*15dc779aSAndroid Build Coastguard Worker FLAG noise_absc_flag, WORD32 harm_index); 135*15dc779aSAndroid Build Coastguard Worker 136*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_zerotwolp_armv7(WORD32 *ptr_real_buf, 137*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_gain_buf, WORD scale_change, 138*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_sine_level_buf, 139*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_rand_ph, 140*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_lvl_me, WORD num_sub_bands, 141*15dc779aSAndroid Build Coastguard Worker FLAG noise_absc_flag, WORD32 harm_index); 142*15dc779aSAndroid Build Coastguard Worker 143*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_onethreelp(WORD32 *ptr_real_buf, WORD16 *ptr_gain_buf, 144*15dc779aSAndroid Build Coastguard Worker WORD scale_change, WORD16 *ptr_sine_level_buf, 145*15dc779aSAndroid Build Coastguard Worker const WORD32 *ptr_rand_ph, 146*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_lvl_me, WORD num_sub_bands, 147*15dc779aSAndroid Build Coastguard Worker FLAG noise_absc_flag, WORD freq_inv_flag, 148*15dc779aSAndroid Build Coastguard Worker WORD noise_e, WORD sub_band_start); 149*15dc779aSAndroid Build Coastguard Worker 150*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitudelp_dec(WORD32 bands, WORD16 noise_e, 151*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_sine, WORD16 *nrg_gain, 152*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_level_mant, 153*15dc779aSAndroid Build Coastguard Worker WORD16 *sqrt_table); 154*15dc779aSAndroid Build Coastguard Worker 155*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitudelp_armv7(WORD32 bands, WORD16 noise_e, 156*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_sine, WORD16 *nrg_gain, 157*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_level_mant, 158*15dc779aSAndroid Build Coastguard Worker WORD16 *sqrt_table); 159*15dc779aSAndroid Build Coastguard Worker 160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitude_dec(WORD32 bands, WORD16 noise_e, 161*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_sine, WORD16 *nrg_gain, 162*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_level_mant, 163*15dc779aSAndroid Build Coastguard Worker WORD16 *sqrt_table); 164*15dc779aSAndroid Build Coastguard Worker 165*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitude_armv7(WORD32 bands, WORD16 noise_e, 166*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_sine, WORD16 *nrg_gain, 167*15dc779aSAndroid Build Coastguard Worker WORD16 *noise_level_mant, 168*15dc779aSAndroid Build Coastguard Worker WORD16 *sqrt_table); 169*15dc779aSAndroid Build Coastguard Worker 170*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_subbandgain_calc(WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant, 171*15dc779aSAndroid Build Coastguard Worker WORD16 nrg_est_mant, WORD16 nrg_est_exp, 172*15dc779aSAndroid Build Coastguard Worker WORD16 tmp_noise_exp, WORD16 nrg_ref_exp, 173*15dc779aSAndroid Build Coastguard Worker FLAG sine_present_flag, FLAG sine_mapped_matrix, 174*15dc779aSAndroid Build Coastguard Worker FLAG noise_absc_flag, WORD16 *ptr_nrg_gain_mant, 175*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_noise_floor_mant, 176*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_nrg_sine_m, 177*15dc779aSAndroid Build Coastguard Worker ixheaacd_misc_tables *pstr_common_tables); 178*15dc779aSAndroid Build Coastguard Worker 179*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_equalize_filt_buff_exp(WORD16 *ptr_filt_buf, 180*15dc779aSAndroid Build Coastguard Worker WORD16 *nrg_gain, 181*15dc779aSAndroid Build Coastguard Worker WORD32 subbands); 182*15dc779aSAndroid Build Coastguard Worker 183*15dc779aSAndroid Build Coastguard Worker #endif 184