1*15dc779aSAndroid Build Coastguard Worker /****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker * * 3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2023 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 21*15dc779aSAndroid Build Coastguard Worker #pragma once 22*15dc779aSAndroid Build Coastguard Worker 23*15dc779aSAndroid Build Coastguard Worker /* read only memory, intra frame */ 24*15dc779aSAndroid Build Coastguard Worker #define IA_MEMTYPE_INPUT 0x02 25*15dc779aSAndroid Build Coastguard Worker /* read-write memory, for usable output, intra frame */ 26*15dc779aSAndroid Build Coastguard Worker #define IA_MEMTYPE_OUTPUT 0x03 27*15dc779aSAndroid Build Coastguard Worker 28*15dc779aSAndroid Build Coastguard Worker #define DEFAULT_MEM_ALIGN_8 (8) 29*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MEM_ALLOC_CNT (6) 30*15dc779aSAndroid Build Coastguard Worker /* 1 <ixheaace_api_struct> 2 <ixheaace_mem_info_struct> 3 <Persistent> 4 <Scratch> 5 <Input> 31*15dc779aSAndroid Build Coastguard Worker * 6 <Output> */ 32*15dc779aSAndroid Build Coastguard Worker 33*15dc779aSAndroid Build Coastguard Worker /* Audio Object Type */ 34*15dc779aSAndroid Build Coastguard Worker #define AOT_AAC_LC (2) 35*15dc779aSAndroid Build Coastguard Worker #define AOT_SBR (5) 36*15dc779aSAndroid Build Coastguard Worker #define AOT_AAC_LD (23) 37*15dc779aSAndroid Build Coastguard Worker #define AOT_AAC_ELD (39) 38*15dc779aSAndroid Build Coastguard Worker #define AOT_USAC (42) 39*15dc779aSAndroid Build Coastguard Worker #define AOT_PS (29) 40*15dc779aSAndroid Build Coastguard Worker 41*15dc779aSAndroid Build Coastguard Worker /* standard memory table descriptor for libraries */ 42*15dc779aSAndroid Build Coastguard Worker typedef struct { 43*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_size; /* size of the memory in bytes */ 44*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_alignment; /* alignment in bytes */ 45*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_type; /* type of memory */ 46*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_placement[2]; /* 64 bit placement info */ 47*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_priority; /* the importance for placement */ 48*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_placed[2]; /* the o_red location for placement */ 49*15dc779aSAndroid Build Coastguard Worker } ixheaace_mem_info_struct; 50*15dc779aSAndroid Build Coastguard Worker 51*15dc779aSAndroid Build Coastguard Worker typedef struct { 52*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_size; 53*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_alignment; 54*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_type; 55*15dc779aSAndroid Build Coastguard Worker pVOID mem_ptr; 56*15dc779aSAndroid Build Coastguard Worker } ixheaace_mem_info_table; 57*15dc779aSAndroid Build Coastguard Worker 58*15dc779aSAndroid Build Coastguard Worker typedef struct { 59*15dc779aSAndroid Build Coastguard Worker WORD32 sample_rate; /* audio file sample rate */ 60*15dc779aSAndroid Build Coastguard Worker WORD32 bitrate; /* encoder bit rate in bits/sec */ 61*15dc779aSAndroid Build Coastguard Worker WORD32 num_channels_in; /* number of channels on input (1,2) */ 62*15dc779aSAndroid Build Coastguard Worker WORD32 num_channels_out; /* number of channels on output (1,2) */ 63*15dc779aSAndroid Build Coastguard Worker WORD32 bandwidth; /* targeted audio bandwidth in Hz */ 64*15dc779aSAndroid Build Coastguard Worker WORD32 dual_mono; /* flag: make 2 SCEs for stereo input files */ 65*15dc779aSAndroid Build Coastguard Worker WORD32 use_tns; /* flag: use temporal noise shaping */ 66*15dc779aSAndroid Build Coastguard Worker WORD32 noise_filling; /* flag: use noise filling */ 67*15dc779aSAndroid Build Coastguard Worker WORD32 use_adts; /* flag: use ADTS instead of ADIF */ 68*15dc779aSAndroid Build Coastguard Worker WORD32 private_bit; /* private bit of MPEG Header */ 69*15dc779aSAndroid Build Coastguard Worker WORD32 copyright_bit; /* copyright bit of MPEG Header */ 70*15dc779aSAndroid Build Coastguard Worker WORD32 original_copy_bit; /* original bit of MPEG Header */ 71*15dc779aSAndroid Build Coastguard Worker WORD32 f_no_stereo_preprocessing; /* forbid usage of stereo prerpocessing */ 72*15dc779aSAndroid Build Coastguard Worker WORD32 inv_quant; /* improve distortion by inverse quantization */ 73*15dc779aSAndroid Build Coastguard Worker WORD32 full_bandwidth; /* improve distortion by inverse quantization */ 74*15dc779aSAndroid Build Coastguard Worker WORD32 bitreservoir_size; /* size of bit reservoir (default:0; max 6144)*/ 75*15dc779aSAndroid Build Coastguard Worker WORD32 length; 76*15dc779aSAndroid Build Coastguard Worker } ixheaace_aac_enc_config; 77*15dc779aSAndroid Build Coastguard Worker 78*15dc779aSAndroid Build Coastguard Worker typedef struct { 79*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_pcm_wd_sz; 80*15dc779aSAndroid Build Coastguard Worker WORD32 i_bitrate; 81*15dc779aSAndroid Build Coastguard Worker WORD32 frame_length; 82*15dc779aSAndroid Build Coastguard Worker WORD32 frame_cmd_flag; 83*15dc779aSAndroid Build Coastguard Worker WORD32 out_bytes_flag; 84*15dc779aSAndroid Build Coastguard Worker WORD32 user_tns_flag; 85*15dc779aSAndroid Build Coastguard Worker WORD32 user_esbr_flag; 86*15dc779aSAndroid Build Coastguard Worker WORD32 aot; 87*15dc779aSAndroid Build Coastguard Worker WORD32 i_mps_tree_config; 88*15dc779aSAndroid Build Coastguard Worker WORD32 esbr_flag; 89*15dc779aSAndroid Build Coastguard Worker WORD32 i_channels; 90*15dc779aSAndroid Build Coastguard Worker UWORD32 i_samp_freq; 91*15dc779aSAndroid Build Coastguard Worker WORD32 i_native_samp_freq; 92*15dc779aSAndroid Build Coastguard Worker WORD32 i_channels_mask; 93*15dc779aSAndroid Build Coastguard Worker WORD32 i_num_coupling_chan; 94*15dc779aSAndroid Build Coastguard Worker /* Add config params here */ 95*15dc779aSAndroid Build Coastguard Worker WORD32 i_use_mps; 96*15dc779aSAndroid Build Coastguard Worker WORD32 i_use_adts; 97*15dc779aSAndroid Build Coastguard Worker WORD32 i_use_es; 98*15dc779aSAndroid Build Coastguard Worker WORD32 usac_en; 99*15dc779aSAndroid Build Coastguard Worker WORD32 codec_mode; 100*15dc779aSAndroid Build Coastguard Worker WORD32 cplx_pred; 101*15dc779aSAndroid Build Coastguard Worker WORD32 ccfl_idx; 102*15dc779aSAndroid Build Coastguard Worker WORD32 pvc_active; 103*15dc779aSAndroid Build Coastguard Worker WORD32 harmonic_sbr; 104*15dc779aSAndroid Build Coastguard Worker WORD32 inter_tes_active; 105*15dc779aSAndroid Build Coastguard Worker pVOID pv_drc_cfg; 106*15dc779aSAndroid Build Coastguard Worker FLAG use_drc_element; 107*15dc779aSAndroid Build Coastguard Worker WORD32 drc_frame_size; 108*15dc779aSAndroid Build Coastguard Worker WORD32 hq_esbr; 109*15dc779aSAndroid Build Coastguard Worker FLAG write_program_config_element; 110*15dc779aSAndroid Build Coastguard Worker ixheaace_aac_enc_config aac_config; 111*15dc779aSAndroid Build Coastguard Worker WORD32 random_access_interval; 112*15dc779aSAndroid Build Coastguard Worker UWORD32 method_def; 113*15dc779aSAndroid Build Coastguard Worker FLAG use_measured_loudness; 114*15dc779aSAndroid Build Coastguard Worker FLOAT64 measured_loudness; 115*15dc779aSAndroid Build Coastguard Worker UWORD32 measurement_system; 116*15dc779aSAndroid Build Coastguard Worker FLOAT32 sample_peak_level; 117*15dc779aSAndroid Build Coastguard Worker UWORD16 stream_id; 118*15dc779aSAndroid Build Coastguard Worker } ixheaace_input_config; 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker typedef struct { 121*15dc779aSAndroid Build Coastguard Worker WORD8 *p_lib_name; 122*15dc779aSAndroid Build Coastguard Worker WORD8 *p_version_num; 123*15dc779aSAndroid Build Coastguard Worker 124*15dc779aSAndroid Build Coastguard Worker } ixheaace_version; 125*15dc779aSAndroid Build Coastguard Worker typedef struct { 126*15dc779aSAndroid Build Coastguard Worker WORD32 i_out_bytes; 127*15dc779aSAndroid Build Coastguard Worker WORD32 i_bytes_consumed; 128*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_inp_buf_size; 129*15dc779aSAndroid Build Coastguard Worker UWORD32 malloc_count; 130*15dc779aSAndroid Build Coastguard Worker SIZE_T ui_rem; 131*15dc779aSAndroid Build Coastguard Worker UWORD32 ui_proc_mem_tabs_size; 132*15dc779aSAndroid Build Coastguard Worker pVOID pv_ia_process_api_obj; 133*15dc779aSAndroid Build Coastguard Worker pVOID arr_alloc_memory[IXHEAACE_MEM_ALLOC_CNT]; 134*15dc779aSAndroid Build Coastguard Worker pVOID (*malloc_xheaace)(UWORD32, UWORD32); 135*15dc779aSAndroid Build Coastguard Worker VOID (*free_xheaace)(pVOID); 136*15dc779aSAndroid Build Coastguard Worker ixheaace_version version; 137*15dc779aSAndroid Build Coastguard Worker ixheaace_mem_info_table mem_info_table[4]; 138*15dc779aSAndroid Build Coastguard Worker WORD32 input_size; 139*15dc779aSAndroid Build Coastguard Worker WORD32 samp_freq; 140*15dc779aSAndroid Build Coastguard Worker WORD32 header_samp_freq; 141*15dc779aSAndroid Build Coastguard Worker WORD32 audio_profile; 142*15dc779aSAndroid Build Coastguard Worker FLOAT32 down_sampling_ratio; 143*15dc779aSAndroid Build Coastguard Worker pWORD32 pb_inp_buf_32; 144*15dc779aSAndroid Build Coastguard Worker } ixheaace_output_config; 145*15dc779aSAndroid Build Coastguard Worker 146*15dc779aSAndroid Build Coastguard Worker typedef struct { 147*15dc779aSAndroid Build Coastguard Worker ixheaace_input_config input_config; 148*15dc779aSAndroid Build Coastguard Worker ixheaace_output_config output_config; 149*15dc779aSAndroid Build Coastguard Worker } ixheaace_user_config_struct; 150*15dc779aSAndroid Build Coastguard Worker 151*15dc779aSAndroid Build Coastguard Worker typedef struct { 152*15dc779aSAndroid Build Coastguard Worker WORD32 codec_mode; 153*15dc779aSAndroid Build Coastguard Worker } ia_input_config; 154*15dc779aSAndroid Build Coastguard Worker 155*15dc779aSAndroid Build Coastguard Worker /* gets the encoder library name and version number details */ 156*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_get_lib_id_strings(pVOID pv_output); 157*15dc779aSAndroid Build Coastguard Worker 158*15dc779aSAndroid Build Coastguard Worker /* handles memory requirements and initialization*/ 159*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_create(pVOID pv_input, pVOID pv_output); 160*15dc779aSAndroid Build Coastguard Worker 161*15dc779aSAndroid Build Coastguard Worker /* encodes the input frame data */ 162*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_process(pVOID pv_ia_process_api_obj, pVOID pstr_in_cfg, pVOID pstr_out_cfg); 163*15dc779aSAndroid Build Coastguard Worker 164*15dc779aSAndroid Build Coastguard Worker /* frees the allocated memories for the encoder*/ 165*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_delete(pVOID pv_output); 166