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_EXTR_H 21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_ENV_EXTR_H 22*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h" 23*15dc779aSAndroid Build Coastguard Worker #define ENV_EXP_FRACT 0 24*15dc779aSAndroid Build Coastguard Worker 25*15dc779aSAndroid Build Coastguard Worker #define EXP_BITS 6 26*15dc779aSAndroid Build Coastguard Worker 27*15dc779aSAndroid Build Coastguard Worker #define MASK_M (((1 << (SHORT_BITS - EXP_BITS)) - 1) << EXP_BITS) 28*15dc779aSAndroid Build Coastguard Worker #define MASK_FOR_EXP ((1 << EXP_BITS) - 1) 29*15dc779aSAndroid Build Coastguard Worker 30*15dc779aSAndroid Build Coastguard Worker #define SIGN_EXT (((WORD8)-1) ^ MASK_FOR_EXP) 31*15dc779aSAndroid Build Coastguard Worker #define ROUNDING (1 << (EXP_BITS - 1)) 32*15dc779aSAndroid Build Coastguard Worker #define NRG_EXP_OFFSET 16 33*15dc779aSAndroid Build Coastguard Worker #define NOISE_EXP_OFFSET 38 34*15dc779aSAndroid Build Coastguard Worker #define MAX_QMF_SUB_BANDS 64 35*15dc779aSAndroid Build Coastguard Worker 36*15dc779aSAndroid Build Coastguard Worker typedef const UWORD16 *ia_huffman_data_type; 37*15dc779aSAndroid Build Coastguard Worker 38*15dc779aSAndroid Build Coastguard Worker #define COUPLING_OFF 0 39*15dc779aSAndroid Build Coastguard Worker #define COUPLING_LEVEL 1 40*15dc779aSAndroid Build Coastguard Worker #define COUPLING_BAL 2 41*15dc779aSAndroid Build Coastguard Worker 42*15dc779aSAndroid Build Coastguard Worker #define MAX_INVF_BANDS MAX_NOISE_COEFFS 43*15dc779aSAndroid Build Coastguard Worker 44*15dc779aSAndroid Build Coastguard Worker typedef struct { 45*15dc779aSAndroid Build Coastguard Worker WORD16 sfb_nrg_prev[MAX_FREQ_COEFFS]; 46*15dc779aSAndroid Build Coastguard Worker WORD16 prev_noise_level[MAX_NOISE_COEFFS]; 47*15dc779aSAndroid Build Coastguard Worker WORD16 amp_res; 48*15dc779aSAndroid Build Coastguard Worker WORD16 end_position; 49*15dc779aSAndroid Build Coastguard Worker WORD32 max_qmf_subband_aac; 50*15dc779aSAndroid Build Coastguard Worker WORD32 coupling_mode; 51*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES]; 52*15dc779aSAndroid Build Coastguard Worker } ia_sbr_prev_frame_data_struct; 53*15dc779aSAndroid Build Coastguard Worker 54*15dc779aSAndroid Build Coastguard Worker typedef struct { 55*15dc779aSAndroid Build Coastguard Worker WORD16 num_env_sfac; 56*15dc779aSAndroid Build Coastguard Worker ia_frame_info_struct str_frame_info_details; 57*15dc779aSAndroid Build Coastguard Worker WORD16 del_cod_dir_arr[MAX_ENVELOPES]; 58*15dc779aSAndroid Build Coastguard Worker WORD16 del_cod_dir_noise_arr[MAX_NOISE_ENVELOPES]; 59*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES]; 60*15dc779aSAndroid Build Coastguard Worker WORD32 coupling_mode; 61*15dc779aSAndroid Build Coastguard Worker WORD16 amp_res; 62*15dc779aSAndroid Build Coastguard Worker WORD32 max_qmf_subband_aac; 63*15dc779aSAndroid Build Coastguard Worker FLAG add_harmonics[MAX_FREQ_COEFFS]; 64*15dc779aSAndroid Build Coastguard Worker WORD16 int_env_sf_arr[MAX_NUM_ENVELOPE_VALUES]; 65*15dc779aSAndroid Build Coastguard Worker WORD16 int_noise_floor[MAX_NUM_NOISE_VALUES]; 66*15dc779aSAndroid Build Coastguard Worker WORD32 num_noise_sfac; 67*15dc779aSAndroid Build Coastguard Worker ia_frame_info_struct str_pvc_frame_info; 68*15dc779aSAndroid Build Coastguard Worker WORD32 env_short_flag_prev; 69*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *pstr_sbr_header; 70*15dc779aSAndroid Build Coastguard Worker WORD32 num_time_slots; 71*15dc779aSAndroid Build Coastguard Worker WORD32 rate; 72*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_patching_mode; 73*15dc779aSAndroid Build Coastguard Worker WORD32 prev_sbr_patching_mode; 74*15dc779aSAndroid Build Coastguard Worker WORD32 over_sampling_flag; 75*15dc779aSAndroid Build Coastguard Worker WORD32 pitch_in_bins; 76*15dc779aSAndroid Build Coastguard Worker WORD32 pvc_mode; 77*15dc779aSAndroid Build Coastguard Worker WORD32 cov_count; 78*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_invf_mode_prev[MAX_NUM_NOISE_VALUES]; 79*15dc779aSAndroid Build Coastguard Worker FLOAT32 flt_env_sf_arr[MAX_NUM_ENVELOPE_VALUES]; 80*15dc779aSAndroid Build Coastguard Worker FLOAT32 flt_noise_floor[MAX_NUM_NOISE_VALUES]; 81*15dc779aSAndroid Build Coastguard Worker FLOAT32 sfb_nrg_prev[MAX_FREQ_COEFFS]; 82*15dc779aSAndroid Build Coastguard Worker FLOAT32 prev_noise_level[MAX_NUM_NOISE_VALUES]; 83*15dc779aSAndroid Build Coastguard Worker WORD32 inter_temp_shape_mode[MAX_ENVELOPES]; 84*15dc779aSAndroid Build Coastguard Worker WORD32 var_len; 85*15dc779aSAndroid Build Coastguard Worker WORD32 bs_sin_pos_present; 86*15dc779aSAndroid Build Coastguard Worker WORD32 sine_position; 87*15dc779aSAndroid Build Coastguard Worker WORD32 sin_start_for_next_top; 88*15dc779aSAndroid Build Coastguard Worker WORD32 sin_len_for_next_top; 89*15dc779aSAndroid Build Coastguard Worker WORD32 sin_start_for_cur_top; 90*15dc779aSAndroid Build Coastguard Worker WORD32 sin_len_for_cur_top; 91*15dc779aSAndroid Build Coastguard Worker WORD32 var_len_id_prev; 92*15dc779aSAndroid Build Coastguard Worker ia_frame_info_struct str_frame_info_prev; 93*15dc779aSAndroid Build Coastguard Worker FLOAT32 bw_array_prev[MAX_NUM_PATCHES]; 94*15dc779aSAndroid Build Coastguard Worker struct ixheaacd_lpp_trans_patch patch_param; 95*15dc779aSAndroid Build Coastguard Worker WORD32 harm_index; 96*15dc779aSAndroid Build Coastguard Worker WORD32 phase_index; 97*15dc779aSAndroid Build Coastguard Worker WORD8 harm_flag_prev[64]; 98*15dc779aSAndroid Build Coastguard Worker FLOAT32 e_gain[5][64]; 99*15dc779aSAndroid Build Coastguard Worker FLOAT32 noise_buf[5][64]; 100*15dc779aSAndroid Build Coastguard Worker WORD32 lim_table[4][12 + 1]; 101*15dc779aSAndroid Build Coastguard Worker WORD32 gate_mode[4]; 102*15dc779aSAndroid Build Coastguard Worker WORD8 harm_flag_varlen_prev[64]; 103*15dc779aSAndroid Build Coastguard Worker WORD8 harm_flag_varlen[64]; 104*15dc779aSAndroid Build Coastguard Worker FLOAT32 qmapped_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 105*15dc779aSAndroid Build Coastguard Worker FLOAT32 env_tmp[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 106*15dc779aSAndroid Build Coastguard Worker FLOAT32 noise_level_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 107*15dc779aSAndroid Build Coastguard Worker FLOAT32 nrg_est_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 108*15dc779aSAndroid Build Coastguard Worker FLOAT32 nrg_ref_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 109*15dc779aSAndroid Build Coastguard Worker FLOAT32 nrg_gain_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 110*15dc779aSAndroid Build Coastguard Worker FLOAT32 nrg_tone_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR]; 111*15dc779aSAndroid Build Coastguard Worker WORD32 stereo_config_idx; 112*15dc779aSAndroid Build Coastguard Worker FLAG reset_flag; 113*15dc779aSAndroid Build Coastguard Worker FLAG mps_sbr_flag; 114*15dc779aSAndroid Build Coastguard Worker FLAG usac_independency_flag; 115*15dc779aSAndroid Build Coastguard Worker FLAG inter_tes_flag; 116*15dc779aSAndroid Build Coastguard Worker FLAG sbr_mode; 117*15dc779aSAndroid Build Coastguard Worker FLAG prev_sbr_mode; 118*15dc779aSAndroid Build Coastguard Worker WORD32 eld_sbr_flag; 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker } ia_sbr_frame_info_data_struct; 121*15dc779aSAndroid Build Coastguard Worker 122*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_sbr_read_sce(ia_sbr_header_data_struct *ptr_header_data, 123*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data, 124*15dc779aSAndroid Build Coastguard Worker ia_ps_dec_struct *ptr_ps_dec, ia_bit_buf_struct *it_bit_buff, 125*15dc779aSAndroid Build Coastguard Worker ia_sbr_tables_struct *ptr_sbr_tables, WORD audio_object_type, 126*15dc779aSAndroid Build Coastguard Worker WORD32 ec_flag); 127*15dc779aSAndroid Build Coastguard Worker 128*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_sbr_read_cpe( 129*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 130*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct **ptr_frame_data, 131*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *itt_bit_buf, ia_sbr_tables_struct *ptr_sbr_tables, 132*15dc779aSAndroid Build Coastguard Worker WORD audio_object_type); 133*15dc779aSAndroid Build Coastguard Worker 134*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_sbr_read_header_data( 135*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_sbr_header, ia_bit_buf_struct *it_bit_buf, 136*15dc779aSAndroid Build Coastguard Worker FLAG stereo_flag, ia_sbr_header_data_struct *ptr_sbr_dflt_header); 137*15dc779aSAndroid Build Coastguard Worker 138*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_ssc_huff_dec(ia_huffman_data_type h, 139*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff); 140*15dc779aSAndroid Build Coastguard Worker 141*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_extract_frame_info_ld( 142*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 143*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *h_frame_data); 144*15dc779aSAndroid Build Coastguard Worker 145*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_pvc_time_freq_grid_info( 146*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 147*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data); 148*15dc779aSAndroid Build Coastguard Worker 149*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_sbr_time_freq_grid_info( 150*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 151*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data, 152*15dc779aSAndroid Build Coastguard Worker ia_env_extr_tables_struct *env_extr_tables_ptr, WORD16 number_of_timeslots); 153*15dc779aSAndroid Build Coastguard Worker 154*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_read_sbr_env_data( 155*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 156*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data, 157*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 158*15dc779aSAndroid Build Coastguard Worker ia_env_extr_tables_struct *env_extr_tables_ptr, WORD audio_object_type); 159*15dc779aSAndroid Build Coastguard Worker 160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_sbr_env_dtdf_data(ia_sbr_frame_info_data_struct *ptr_frame_data, 161*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 162*15dc779aSAndroid Build Coastguard Worker WORD32 usac_flag); 163*15dc779aSAndroid Build Coastguard Worker 164*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_read_sbr_noise_floor_data( 165*15dc779aSAndroid Build Coastguard Worker ia_sbr_header_data_struct *ptr_header_data, 166*15dc779aSAndroid Build Coastguard Worker ia_sbr_frame_info_data_struct *ptr_frame_data, 167*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *it_bit_buff, 168*15dc779aSAndroid Build Coastguard Worker ia_env_extr_tables_struct *env_extr_tables_ptr); 169*15dc779aSAndroid Build Coastguard Worker 170*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *h_index, WORD16 *len, 171*15dc779aSAndroid Build Coastguard Worker const UWORD16 *input_table, 172*15dc779aSAndroid Build Coastguard Worker const UWORD32 *idx_table); 173*15dc779aSAndroid Build Coastguard Worker 174*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_createlimiterbands(WORD32 lim_table[4][12 + 1], WORD32 gate_mode[4], 175*15dc779aSAndroid Build Coastguard Worker WORD16 *freq_band_tbl, WORD32 ixheaacd_num_bands, 176*15dc779aSAndroid Build Coastguard Worker WORD32 x_over_qmf[MAX_NUM_PATCHES], 177*15dc779aSAndroid Build Coastguard Worker WORD32 b_patching_mode, WORD32 upsamp_4_flag, 178*15dc779aSAndroid Build Coastguard Worker struct ixheaacd_lpp_trans_patch *patch_param, 179*15dc779aSAndroid Build Coastguard Worker WORD32 ec_flag); 180*15dc779aSAndroid Build Coastguard Worker 181*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1, 182*15dc779aSAndroid Build Coastguard Worker FLOAT32 *qmf_real, FLOAT32 *qmf_imag, 183*15dc779aSAndroid Build Coastguard Worker WORD32 num_sample, WORD32 sub_band_start, 184*15dc779aSAndroid Build Coastguard Worker WORD32 num_subband, WORD32 gamma_idx); 185*15dc779aSAndroid Build Coastguard Worker 186*15dc779aSAndroid Build Coastguard Worker #endif 187