299 lines
8.2 KiB
C
299 lines
8.2 KiB
C
/******************************************************************************
|
|
* *
|
|
* 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_STRUCT_DEF_H
|
|
#define IXHEAACD_STRUCT_DEF_H
|
|
|
|
#include <setjmp.h>
|
|
|
|
#define MAX_OUTPUT_CHANNELS (8)
|
|
#define MAX_NUM_OTT (1)
|
|
|
|
#define MAX_ARBITRARY_TREE_LEVELS (2)
|
|
#define MAX_PARAMETER_SETS (8)
|
|
#define MAX_ARBITRARY_TREE_INDEX ((1 << (MAX_ARBITRARY_TREE_LEVELS + 1)) - 1)
|
|
#define MAX_NUM_QMF_BANDS (64)
|
|
#define MAX_NUM_OTT_AT \
|
|
(MAX_OUTPUT_CHANNELS * ((1 << MAX_ARBITRARY_TREE_LEVELS) - 1))
|
|
#define MAX_PARAMETER_BANDS (28)
|
|
#define MAX_DECOR_CONFIG_IDX (2)
|
|
|
|
#define MAX_HYBRID_BANDS (MAX_NUM_QMF_BANDS - 3 + 10)
|
|
|
|
#define MAX_TIME_SLOTS (72)
|
|
|
|
#define MAX_M2_OUTPUT (8)
|
|
#define QMF_BANDS_TO_HYBRID (3)
|
|
#define PROTO_LEN (13)
|
|
#define BUFFER_LEN_LF (PROTO_LEN - 1 + MAX_TIME_SLOTS)
|
|
#define BUFFER_LEN_HF ((PROTO_LEN - 1) / 2)
|
|
#define MAX_TIME_SLOTS (72)
|
|
#define MAX_NO_TIME_SLOTS_DELAY (14)
|
|
|
|
typedef struct {
|
|
WORD8 element_instance_tag;
|
|
WORD32 object_type;
|
|
WORD32 samp_freq_index;
|
|
WORD32 num_front_channel_elements;
|
|
WORD32 num_side_channel_elements;
|
|
WORD32 num_back_channel_elements;
|
|
WORD32 num_lfe_channel_elements;
|
|
WORD32 num_assoc_data_elements;
|
|
WORD32 num_valid_cc_elements;
|
|
|
|
WORD8 front_element_is_cpe[16];
|
|
WORD8 front_element_tag_select[16];
|
|
WORD8 side_element_is_cpe[16];
|
|
WORD8 side_element_tag_select[16];
|
|
WORD8 back_element_is_cpe[16];
|
|
WORD8 back_element_tag_select[16];
|
|
WORD8 lfe_element_tag_select[16];
|
|
|
|
WORD32 channels;
|
|
WORD32 alignment_bits;
|
|
|
|
} ia_program_config_struct;
|
|
|
|
typedef struct ia_enhaacplus_dec_ind_cc {
|
|
WORD8 cc_target_is_cpe[MAX_BS_ELEMENT];
|
|
WORD8 cc_target_tag_select[MAX_BS_ELEMENT];
|
|
WORD8 cc_l[MAX_BS_ELEMENT];
|
|
WORD8 cc_r[MAX_BS_ELEMENT];
|
|
WORD32 cc_gain[2 * MAX_BS_ELEMENT];
|
|
WORD8 elements_coupled[MAX_BS_ELEMENT];
|
|
WORD num_coupled_elements;
|
|
|
|
} ia_enhaacplus_dec_ind_cc;
|
|
|
|
typedef struct {
|
|
UWORD32 ui_pcm_wdsz;
|
|
UWORD32 ui_samp_freq;
|
|
UWORD32 ui_n_channels;
|
|
WORD32 i_channel_mask;
|
|
UWORD32 ui_channel_mode;
|
|
UWORD32 ui_sbr_mode;
|
|
WORD32 ui_effect_type;
|
|
WORD32 ui_target_loudness;
|
|
WORD32 ui_loud_norm_flag;
|
|
|
|
UWORD32 flag_downmix;
|
|
UWORD32 flag_08khz_out;
|
|
UWORD32 flag_16khz_out;
|
|
UWORD32 flag_to_stereo;
|
|
UWORD32 down_sample_flag;
|
|
UWORD32 header_dec_done;
|
|
UWORD32 ui_mp4_flag;
|
|
UWORD32 ui_disable_sync;
|
|
UWORD32 ui_auto_sbr_upsample;
|
|
WORD32 frame_status;
|
|
UWORD32 ui_max_channels;
|
|
UWORD32 ui_pce_found_in_hdr;
|
|
UWORD32 ui_n_memtabs;
|
|
|
|
WORD32 ui_drc_enable;
|
|
WORD32 ui_drc_boost;
|
|
WORD32 ui_drc_cut;
|
|
WORD32 ui_drc_target_level;
|
|
WORD32 ui_drc_set;
|
|
WORD32 ui_drc_heavy_comp;
|
|
|
|
ia_program_config_struct str_prog_config;
|
|
WORD32 element_type[MAX_BS_ELEMENT + 1];
|
|
WORD32 slot_element[MAX_BS_ELEMENT + 1];
|
|
|
|
WORD element_instance_order[MAX_BS_ELEMENT];
|
|
WORD ui_coupling_channel;
|
|
WORD downmix;
|
|
WORD32 loas_present;
|
|
|
|
WORD framesize_480;
|
|
WORD ld_decoder;
|
|
|
|
WORD eld_sbr_present;
|
|
|
|
UWORD32 ui_out_channels;
|
|
WORD32 ui_channel_mask;
|
|
|
|
WORD32 ui_dec_type;
|
|
|
|
UWORD32 ui_qmf_bands;
|
|
|
|
WORD32 ui_flush_cmd;
|
|
|
|
ia_drc_config drc_config_struct;
|
|
|
|
} ia_aac_dec_config_struct;
|
|
|
|
typedef struct ia_aac_dec_state_struct {
|
|
ia_aac_dec_config_struct *p_config;
|
|
|
|
AUDIO_OBJECT_TYPE audio_object_type;
|
|
|
|
UWORD32 ui_in_bytes;
|
|
UWORD32 ui_out_bytes;
|
|
UWORD32 ui_exec_done;
|
|
|
|
WORD16 b_n_raw_data_blk;
|
|
WORD16 s_adts_hdr_present;
|
|
WORD16 s_adif_hdr_present;
|
|
WORD16 num_channel_last;
|
|
UWORD32 sampling_rate;
|
|
UWORD32 extension_samp_rate;
|
|
UWORD32 bit_rate;
|
|
UWORD32 ui_init_done;
|
|
UWORD32 ui_input_over;
|
|
UWORD32 header_dec_done;
|
|
WORD32 frame_counter;
|
|
ia_aac_decoder_struct *pstr_aac_dec_info[MAX_BS_ELEMENT];
|
|
|
|
UWORD32 ch_config;
|
|
struct ia_bit_buf_struct str_bit_buf, *pstr_bit_buf;
|
|
ia_aac_dec_sbr_bitstream_struct (*pstr_stream_sbr)[2];
|
|
ia_handle_sbr_dec_inst_struct str_sbr_dec_info[MAX_BS_ELEMENT];
|
|
WORD32 sbr_present_flag;
|
|
WORD32 ps_present;
|
|
|
|
ia_bit_buf_struct *ptr_bit_stream;
|
|
|
|
VOID *aac_scratch_mem_v;
|
|
VOID *aac_persistent_mem_v;
|
|
|
|
VOID *sbr_persistent_mem_v;
|
|
WORD32 *ptr_overlap_buf;
|
|
WORD16 num_of_out_samples;
|
|
WORD32 last_frame_ok;
|
|
WORD32 i_bytes_consumed;
|
|
|
|
WORD16 *coup_ch_output;
|
|
ia_enhaacplus_dec_ind_cc ind_cc_info;
|
|
|
|
WORD8 protection_absent;
|
|
WORD32 crc_check;
|
|
WORD32 ui_flush_cmd;
|
|
|
|
WORD32 frame_len_flag;
|
|
WORD32 depends_on_core_coder;
|
|
WORD32 extension_flag;
|
|
|
|
WORD32 bs_format;
|
|
WORD32 bit_count;
|
|
WORD32 sync_status;
|
|
WORD32 extension_flag_3;
|
|
|
|
ixheaacd_latm_struct latm_struct_element;
|
|
WORD32 latm_initialized;
|
|
|
|
ia_drc_dec_struct str_drc_dec_info;
|
|
ia_drc_dec_struct drc_dummy;
|
|
ia_drc_dec_struct *pstr_drc_dec;
|
|
ixheaac_drc_data_struct *pstr_hdrc_data[MAX_BS_ELEMENT * 3];
|
|
|
|
WORD32 prev_channel_mode;
|
|
WORD32 drc_cut_fac;
|
|
WORD32 drc_boost_fac;
|
|
|
|
WORD32 first_drc_frame;
|
|
|
|
ia_aac_err_config_struct str_err_config;
|
|
WORD32 frame_size;
|
|
WORD32 frame_length;
|
|
|
|
WORD32 dwnsmp_signal;
|
|
ia_eld_specific_config_struct eld_specific_config;
|
|
FLAG usac_flag;
|
|
|
|
WORD32 num_of_output_ch;
|
|
VOID *ia_audio_specific_config;
|
|
ia_mps_dec_state_struct mps_dec_handle;
|
|
|
|
UWORD16 *huffman_code_book_scl;
|
|
UWORD32 *huffman_code_book_scl_index;
|
|
|
|
ia_aac_dec_tables_struct *pstr_aac_tables;
|
|
|
|
VOID *pstr_dec_data;
|
|
VOID *sbr_persistent_mem_u;
|
|
VOID *sbr_scratch_mem_u;
|
|
UWORD8 *header_ptr;
|
|
WORD32 header_length;
|
|
ia_sbr_header_data_struct str_sbr_config;
|
|
jmp_buf xaac_jmp_buf;
|
|
WORD32 decode_create_done;
|
|
WORD32 fatal_err_present;
|
|
WORD8 *pers_mem_ptr;
|
|
} ia_aac_dec_state_struct;
|
|
|
|
typedef struct ia_exhaacplus_dec_api_struct {
|
|
ia_aac_dec_state_struct *p_state_aac;
|
|
|
|
ia_aac_dec_config_struct aac_config;
|
|
|
|
ia_mem_info_struct *p_mem_info_aac;
|
|
|
|
pVOID *pp_mem_aac;
|
|
|
|
ia_aac_dec_tables_struct aac_tables;
|
|
ixheaacd_misc_tables *common_tables;
|
|
ia_sbr_tables_struct str_sbr_tables;
|
|
|
|
} ia_exhaacplus_dec_api_struct;
|
|
|
|
WORD32 ixheaacd_aacdec_decodeframe(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec,
|
|
ia_aac_dec_scratch_struct *aac_scratch_ptrs, WORD16 *time_data,
|
|
FLAG frame_status, WORD *type, WORD *ch_idx, WORD init_flag, WORD channel,
|
|
WORD *element_index_order, WORD skip_full_decode, WORD ch_fac,
|
|
WORD slot_element, WORD max_channels, WORD32 total_channels,
|
|
WORD32 frame_length, WORD32 frame_size, ia_drc_dec_struct *pstr_drc_dec,
|
|
WORD32 object_type, WORD32 ch_config,
|
|
ia_eld_specific_config_struct eld_specific_config, WORD16 adtsheader,
|
|
ia_drc_dec_struct *drc_dummy);
|
|
|
|
WORD ixheaacd_get_channel_mask(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
VOID ixheaacd_allocate_mem_persistent(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec,
|
|
ia_aac_dec_state_struct *p_state_enhaacplus_dec, WORD channels,
|
|
WORD *persistent_used_total, WORD *sbr_persistent_start, WORD ps_enable);
|
|
|
|
WORD32 ixheaacd_dec_mem_api(ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec,
|
|
WORD32 i_cmd, WORD32 i_idx, VOID *pv_value);
|
|
|
|
VOID ixheaacd_fill_aac_mem_tables(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
WORD32 ixheaacd_decoder_2_ga_hdr(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
WORD32 ixheaacd_decoder_flush_api(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
WORD32 ixheaacd_fill_usac_mem_tables(ia_exhaacplus_dec_api_struct *self);
|
|
|
|
WORD32 ixheaacd_dec_init(ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
WORD32 ixheaacd_dec_execute(ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec);
|
|
|
|
WORD32 ixheaacd_dec_table_api(
|
|
ia_exhaacplus_dec_api_struct *p_obj_exhaacplus_dec, WORD32 i_cmd,
|
|
WORD32 i_idx, VOID *pv_value);
|
|
|
|
#endif /* IXHEAACD_STRUCT_DEF_H */
|