xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_api.h (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
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