| /****************************************************************************** |
| * * |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ***************************************************************************** |
| * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
| */ |
| #ifndef IXHEAACD_CHANNELINFO_H |
| #define IXHEAACD_CHANNELINFO_H |
| |
| #include "ixheaacd_lt_predict.h" |
| |
| #define MAX_SFB_SHORT 16 |
| #define MAX_QUANTIZED_VALUE 8191 |
| |
| #define OVERLAP_BUFFER_SIZE 512 |
| |
| #define JOINT_STEREO_MAX_GROUPS 8 |
| #define JOINT_STEREO_MAX_BANDS 64 |
| |
| typedef struct { |
| WORD16 window_shape; |
| WORD16 window_sequence; |
| WORD16 max_sfb; |
| WORD16 num_swb_window; |
| WORD16 sampling_rate_index; |
| WORD16 num_window_groups; |
| WORD8 window_group_length[8]; |
| WORD16 frame_length; |
| WORD32 frame_size; |
| WORD16 predictor_data_present; |
| ltp_info ltp; |
| ltp_info ltp2; |
| } ia_ics_info_struct; |
| |
| typedef struct { |
| WORD32 aac_sect_data_resil_flag; |
| WORD32 aac_sf_data_resil_flag; |
| WORD32 aac_spect_data_resil_flag; |
| WORD32 ep_config; |
| } ia_aac_err_config_struct; |
| |
| typedef struct { |
| WORD32 ld_sbr_flag_present; |
| WORD32 ld_sbr_samp_rate; |
| WORD32 ld_sbr_crc_flag; |
| WORD32 ldSbrHeaderPresent; |
| |
| WORD32 aac_sect_data_resil_flag; |
| WORD32 aac_sf_data_resil_flag; |
| WORD32 aac_spect_data_resil_flag; |
| WORD32 ep_config; |
| |
| } ia_eld_specific_config_struct; |
| |
| typedef struct { |
| UWORD8 ms_used[JOINT_STEREO_MAX_GROUPS][JOINT_STEREO_MAX_BANDS]; |
| } ia_stereo_info_struct; |
| |
| typedef struct { |
| WORD16 start_band; |
| WORD16 stop_band; |
| WORD8 direction; |
| WORD8 resolution; |
| WORD8 order; |
| WORD8 coef[MAX_ORDER]; |
| } ia_filter_info_struct; |
| |
| typedef struct { |
| FLAG tns_data_present; |
| WORD8 n_filt[MAX_WINDOWS]; |
| ia_filter_info_struct str_filter[MAX_WINDOWS][MAX_FILTERS]; |
| } ia_tns_info_aac_struct; |
| |
| typedef struct { |
| const WORD16 *ptr_long_window[2]; |
| const WORD16 *ptr_short_window[2]; |
| WORD16 window_shape; |
| WORD16 window_sequence; |
| WORD32 *ptr_overlap_buf; |
| |
| WORD16 rvlc_prev_sf[128]; |
| WORD16 rvlc_prev_cb[128]; |
| WORD8 rvlc_prev_blk_type; |
| WORD8 rvlc_prev_sf_ok; |
| |
| } ia_aac_dec_overlap_info; |
| |
| typedef struct { |
| WORD32 sf_concealment; |
| WORD32 rev_global_gain; |
| WORD16 rvlc_sf_len; |
| WORD32 dpcm_noise_nrg; |
| WORD32 sf_esc_present; |
| WORD16 rvlc_esc_len; |
| WORD32 dpcm_noise_last_pos; |
| |
| WORD32 dpcm_is_last_pos; |
| |
| WORD16 rvlc_sf_fwd_len; |
| WORD16 rvlc_sf_bwd_len; |
| |
| WORD16 *ptr_rvl_bit_cnt; |
| UWORD16 *ptr_rvl_bit_str_idx; |
| |
| WORD16 num_wind_grps; |
| WORD16 max_sfb_transmitted; |
| UWORD8 first_noise_group; |
| UWORD8 first_noise_band; |
| UWORD8 direction; |
| |
| UWORD16 rvl_fwd_bit_str_idx; |
| UWORD16 rvl_bwd_bit_str_idx; |
| UWORD16 esc_bit_str_idx; |
| |
| const UWORD32 *ptr_huff_tree_rvl_cw; |
| const UWORD32 *ptr_huff_tree_rvl_esc; |
| |
| UWORD8 num_fwd_esc_words_decoded; |
| UWORD8 num_bwd_esc_words_decoded; |
| UWORD8 num_esc_words_decoded; |
| |
| WORD8 noise_used; |
| WORD8 intensity_used; |
| WORD8 sf_used; |
| |
| WORD16 firt_scale_fac; |
| WORD16 last_scale_fac; |
| WORD16 first_nrg; |
| WORD16 last_nrg; |
| WORD16 is_first; |
| WORD16 is_last; |
| |
| UWORD32 rvlc_err_log; |
| WORD16 conceal_min; |
| WORD16 conceal_max; |
| WORD16 conceal_min_esc; |
| WORD16 conceal_max_esc; |
| } ia_rvlc_info_struct; |
| |
| #define LINES_PER_UNIT 4 |
| |
| #define MAX_SFB_HCR (((1024 / 8) / LINES_PER_UNIT) * 8) |
| #define NUMBER_OF_UNIT_GROUPS (LINES_PER_UNIT * 8) |
| #define LINES_PER_UNIT_GROUP (1024 / NUMBER_OF_UNIT_GROUPS) |
| |
| #define FROM_LEFT_TO_RIGHT 0 |
| #define FROM_RIGHT_TO_LEFT 1 |
| |
| #define MAX_CB_PAIRS 23 |
| #define MAX_HCR_SETS 14 |
| |
| #define ESCAPE_VALUE 16 |
| #define POSITION_OF_FLAG_A 21 |
| #define POSITION_OF_FLAG_B 20 |
| |
| #define MAX_CB 32 |
| |
| #define MAX_CB_CHECK 32 |
| #define WORD_BITS 32 |
| |
| #define THIRTYTWO_LOG_DIV_TWO_LOG 5 |
| #define EIGHT_LOG_DIV_TWO_LOG 3 |
| #define FOUR_LOG_DIV_TWO_LOG 2 |
| |
| #define CPE_TOP_LENGTH 12288 |
| #define SCE_TOP_LENGTH 6144 |
| #define LEN_OF_LONGEST_CW_TOP_LENGTH 49 |
| #define Q_VALUE_INVALID 8192 |
| #define NODE_MASK 0x400 |
| |
| #define ERROR_POS 0x00000001 |
| #define HCR_FATAL_PCW_ERROR_MASK 0x100E01FC |
| |
| typedef enum { PCW, PCW_SIGN, PCW_ESC_SIGN } ia_pcw_type_struct; |
| |
| typedef struct { |
| UWORD32 err_log; |
| WORD32 *ptr_quant_spec_coeff_base; |
| WORD32 quant_spec_coeff_idx; |
| WORD16 reordered_spec_data_len; |
| WORD16 num_sect; |
| WORD16 *ptr_num_line_in_sect; |
| UWORD16 bit_str_idx; |
| WORD8 longest_cw_len; |
| UWORD8 *ptr_cb; |
| } ia_huff_code_reorder_io_struct; |
| |
| typedef struct { |
| const UWORD8 *ptr_min_cb_pair_tbl; |
| const UWORD8 *ptr_max_cb_pair_tbl; |
| } ia_huff_code_reorder_cb_pairs_struct; |
| |
| typedef struct { |
| const UWORD16 *ptr_lav_tbl; |
| const UWORD8 *ptr_max_cw_len_tbl; |
| const UWORD8 *ptr_cb_dimension_tbl; |
| const UWORD8 *ptr_cb_dim_shift_tbl; |
| const UWORD8 *ptr_cb_sign_tbl; |
| const UWORD8 *ptr_cb_priority; |
| } ia_huff_code_reorder_tbl_struct; |
| |
| typedef struct { |
| WORD32 num_segment; |
| UWORD32 segment_offset; |
| WORD32 arr_temp_values[1024]; |
| UWORD16 arr_seg_start_l[1024 >> 1]; |
| UWORD16 arr_seg_start_r[1024 >> 1]; |
| WORD8 p_remaining_bits_in_seg[1024 >> 1]; |
| WORD32 code[512]; |
| WORD32 code_extra[512]; |
| WORD8 p_num_bits[512]; |
| UWORD8 read_direction; |
| WORD32 is_decoded[512]; |
| } ia_huff_code_reord_seg_info_struct; |
| |
| typedef struct { |
| UWORD32 num_code_word; |
| UWORD32 current_codeword; |
| UWORD32 num_sorted_section; |
| UWORD16 ptr_num_cw_in_sect[MAX_SFB_HCR]; |
| UWORD16 ptr_num_sorted_cw_in_sect[MAX_SFB_HCR]; |
| UWORD16 ptr_num_ext_sorted_cw_in_sect[MAX_SFB_HCR + MAX_HCR_SETS]; |
| WORD32 num_ext_sorted_cw_in_sect_idx; |
| UWORD16 ptr_num_ext_sorted_sect_in_sets[MAX_HCR_SETS]; |
| WORD32 num_ext_sorted_sect_in_sets_idx; |
| UWORD16 ptr_reorder_offset[MAX_SFB_HCR]; |
| UWORD8 ptr_sorted_cb[MAX_SFB_HCR]; |
| |
| UWORD8 ptr_ext_sorted_cw[MAX_SFB_HCR + MAX_HCR_SETS]; |
| WORD32 ext_sorted_cw_idx; |
| UWORD8 ptr_ext_sorted_sect_max_cb_len[MAX_SFB_HCR + MAX_HCR_SETS]; |
| WORD32 ext_sorted_sect_max_cb_len_idx; |
| UWORD8 ptr_cb_switch[MAX_SFB_HCR]; |
| } ia_huff_code_reord_sect_info_struct; |
| |
| typedef UWORD32 (*ixheaacd_ptr_state_func)(ia_bit_buf_struct *, pVOID); |
| |
| typedef struct { |
| WORD32 *ptr_result_base; |
| UWORD16 res_ptr_idx[1024 >> 2]; |
| UWORD32 cw_offset; |
| UWORD8 ptr_cb[1024 >> 2]; |
| } ia_hcr_non_pcw_sideinfo_struct; |
| |
| typedef struct { |
| ia_huff_code_reorder_io_struct str_dec_io; |
| ia_huff_code_reorder_cb_pairs_struct codebook_pairs; |
| ia_huff_code_reorder_tbl_struct table_info; |
| ia_huff_code_reord_seg_info_struct str_segment_info; |
| ia_huff_code_reord_sect_info_struct sect_info; |
| ia_hcr_non_pcw_sideinfo_struct str_non_pcw_side_info; |
| |
| WORD32 global_hcr_type; |
| } ia_hcr_info_struct; |
| |
| typedef struct { |
| WORD16 scale_factor[MAX_WINDOWS * MAX_SFB_SHORT]; |
| WORD8 code_book[MAX_WINDOWS * MAX_SFB_SHORT]; |
| } ia_aac_sfb_code_book_struct; |
| |
| typedef struct { |
| ia_stereo_info_struct str_stereo_info; |
| ia_pns_correlation_info_struct str_pns_corr_info; |
| } ia_pns_stereo_data_struct; |
| |
| typedef struct { |
| WORD16 win_shape; |
| WORD16 win_seq; |
| |
| WORD32 *ptr_overlap_buf; |
| |
| } ia_aac_dec_ola_data; |
| |
| typedef struct { |
| const WORD16 *ptr_long_window[2]; |
| const WORD16 *ptr_short_window[2]; |
| |
| ia_aac_dec_ola_data overlap_add_data; |
| |
| WORD16 *ltp_buf; |
| UWORD16 ltp_lag; |
| |
| } ia_aac_dec_channel_info; |
| |
| typedef struct { |
| WORD16 *ptr_scale_factor; |
| WORD8 *ptr_code_book; |
| WORD32 *ptr_spec_coeff; |
| ia_stereo_info_struct *pstr_stereo_info; |
| ia_pns_correlation_info_struct *pstr_pns_corr_info; |
| ia_pns_rand_vec_struct *pstr_pns_rand_vec_data; |
| ia_ics_info_struct str_ics_info; |
| ia_tns_info_aac_struct str_tns_info; |
| ia_pulse_info_struct str_pulse_info; |
| ia_pns_info_struct str_pns_info; |
| WORD16 common_window; |
| WORD16 element_instance_tag; |
| WORD16 global_gain; |
| WORD32 *scratch_buf_ptr; |
| WORD32 *pulse_scratch; |
| ia_rvlc_info_struct ptr_rvlc_info; |
| ia_hcr_info_struct str_hcr_info; |
| WORD16 reorder_spect_data_len; |
| WORD8 longest_cw_len; |
| WORD16 rvlc_scf_esc_arr[128]; |
| WORD16 rvlc_scf_fwd_arr[128]; |
| WORD16 rvlc_scf_bwd_arr[128]; |
| WORD8 rvlc_intensity_used; |
| WORD16 num_line_in_sec4_hcr_arr[32 * 8]; |
| UWORD8 cb4_hcr_arr[32 * 8]; |
| WORD32 number_sect; |
| WORD32 granule_len; |
| WORD16 rvlc_curr_sf_flag; |
| WORD16 *ltp_buf; |
| UWORD16 ltp_lag; |
| } ia_aac_dec_channel_info_struct; |
| WORD16 ixheaacd_ics_read(ia_bit_buf_struct *it_bit_buff, |
| ia_ics_info_struct *ptr_ics_info, |
| WORD8 num_swb_window[2], WORD32 object_type, |
| WORD32 common_window, WORD32 frame_size); |
| |
| WORD16 ixheaacd_ltp_decode(ia_bit_buf_struct *it_bit_buff, |
| ia_ics_info_struct *ptr_ics_info, WORD32 object_type, |
| WORD32 frame_size, WORD32 ch); |
| |
| #endif /* #ifndef IXHEAACD_CHANNELINFO_H */ |