You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
9.0 KiB
341 lines
9.0 KiB
/******************************************************************************
|
|
* *
|
|
* 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);
|
|
|
|
IA_ERRORCODE 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 */
|