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 #define IXHEAACE_MEM_FREE(pv_output) \ 24*15dc779aSAndroid Build Coastguard Worker { \ 25*15dc779aSAndroid Build Coastguard Worker WORD32 idx; \ 26*15dc779aSAndroid Build Coastguard Worker ixheaace_output_config *pstr_output_config = (ixheaace_output_config *)pv_output; \ 27*15dc779aSAndroid Build Coastguard Worker if (pstr_output_config->malloc_count > 0) { \ 28*15dc779aSAndroid Build Coastguard Worker for (idx = pstr_output_config->malloc_count - 1; idx >= 0; idx--) { \ 29*15dc779aSAndroid Build Coastguard Worker if (pstr_output_config->arr_alloc_memory[idx]) { \ 30*15dc779aSAndroid Build Coastguard Worker pstr_output_config->free_xheaace(pstr_output_config->arr_alloc_memory[idx]); \ 31*15dc779aSAndroid Build Coastguard Worker } \ 32*15dc779aSAndroid Build Coastguard Worker } \ 33*15dc779aSAndroid Build Coastguard Worker pstr_output_config->malloc_count = 0; \ 34*15dc779aSAndroid Build Coastguard Worker } \ 35*15dc779aSAndroid Build Coastguard Worker } 36*15dc779aSAndroid Build Coastguard Worker 37*15dc779aSAndroid Build Coastguard Worker /*-------------------- structure definitions ------------------------------*/ 38*15dc779aSAndroid Build Coastguard Worker 39*15dc779aSAndroid Build Coastguard Worker typedef struct { 40*15dc779aSAndroid Build Coastguard Worker WORD32 sample_rate; /* mapped input sample rate */ 41*15dc779aSAndroid Build Coastguard Worker WORD32 core_sample_rate; /* core coder processing sample rate */ 42*15dc779aSAndroid Build Coastguard Worker WORD32 native_sample_rate; /* audio file sample rate */ 43*15dc779aSAndroid Build Coastguard Worker WORD32 bit_rate; /* encoder bit rate in bits/sec */ 44*15dc779aSAndroid Build Coastguard Worker WORD32 num_in_channels; /* number of channels on input (1,2) */ 45*15dc779aSAndroid Build Coastguard Worker WORD32 num_out_channels; /* number of channels on output (1,2) */ 46*15dc779aSAndroid Build Coastguard Worker WORD32 band_width; /* targeted audio bandwidth in Hz */ 47*15dc779aSAndroid Build Coastguard Worker WORD32 dual_mono; /* flag: make 2 SCEs for stereo input files */ 48*15dc779aSAndroid Build Coastguard Worker WORD32 use_tns; /* flag: use temporal noise shaping */ 49*15dc779aSAndroid Build Coastguard Worker WORD32 use_adts; /* flag: use ADTS instead of ADIF */ 50*15dc779aSAndroid Build Coastguard Worker WORD32 calc_crc; /* flag: write CRC checks */ 51*15dc779aSAndroid Build Coastguard Worker WORD32 private_bit; /* private bit of MPEG Header */ 52*15dc779aSAndroid Build Coastguard Worker WORD32 copyright_bit; /* copyright bit of MPEG Header */ 53*15dc779aSAndroid Build Coastguard Worker WORD32 original_copy_bit; /* original bit of MPEG Header */ 54*15dc779aSAndroid Build Coastguard Worker WORD32 num_stereo_preprocessing; /* forbid usage of stereo prerpocessing */ 55*15dc779aSAndroid Build Coastguard Worker WORD32 inv_quant; /* improve distortion by inverse quantization */ 56*15dc779aSAndroid Build Coastguard Worker WORD32 full_bandwidth; /* improve distortion by inverse quantization */ 57*15dc779aSAndroid Build Coastguard Worker WORD32 flag_framelength_small; /* indicates frame size. 0 -> 512, 1 -> 480 58*15dc779aSAndroid Build Coastguard Worker indicates frame size. 0 -> 1024, 1 -> 960 */ 59*15dc779aSAndroid Build Coastguard Worker WORD32 bitreservoir_size; /* size of bit reservoir (default:0; max 6144)*/ 60*15dc779aSAndroid Build Coastguard Worker } iaace_config; 61*15dc779aSAndroid Build Coastguard Worker 62*15dc779aSAndroid Build Coastguard Worker typedef struct { 63*15dc779aSAndroid Build Coastguard Worker WORD32 *shared_buffer1; 64*15dc779aSAndroid Build Coastguard Worker WORD32 *shared_buffer_2; 65*15dc779aSAndroid Build Coastguard Worker WORD32 *shared_buffer3; 66*15dc779aSAndroid Build Coastguard Worker WORD8 *shared_buffer5; 67*15dc779aSAndroid Build Coastguard Worker } iaace_scratch; 68*15dc779aSAndroid Build Coastguard Worker 69*15dc779aSAndroid Build Coastguard Worker /* pstr_ancillary configuration struct */ 70*15dc779aSAndroid Build Coastguard Worker typedef struct { 71*15dc779aSAndroid Build Coastguard Worker WORD32 anc_flag; 72*15dc779aSAndroid Build Coastguard Worker WORD32 anc_mode; 73*15dc779aSAndroid Build Coastguard Worker WORD32 anc_rate; 74*15dc779aSAndroid Build Coastguard Worker } ixheaace_config_ancillary; 75*15dc779aSAndroid Build Coastguard Worker 76*15dc779aSAndroid Build Coastguard Worker typedef struct { 77*15dc779aSAndroid Build Coastguard Worker iaace_config config; 78*15dc779aSAndroid Build Coastguard Worker ixheaace_element_info element_info; 79*15dc779aSAndroid Build Coastguard Worker ixheaace_psy_out psy_out; 80*15dc779aSAndroid Build Coastguard Worker ixheaace_psy_kernel psy_kernel; 81*15dc779aSAndroid Build Coastguard Worker ixheaace_qc_state qc_kernel; 82*15dc779aSAndroid Build Coastguard Worker ixheaace_qc_out qc_out; 83*15dc779aSAndroid Build Coastguard Worker ixheaace_bitstream_enc_init bse_init; 84*15dc779aSAndroid Build Coastguard Worker ixheaace_stereo_pre_pro_struct str_stereo_pre_pro; 85*15dc779aSAndroid Build Coastguard Worker WORD32 downmix; 86*15dc779aSAndroid Build Coastguard Worker WORD32 downmix_fac; 87*15dc779aSAndroid Build Coastguard Worker WORD32 dual_mono; 88*15dc779aSAndroid Build Coastguard Worker WORD32 bandwidth_90_dB; 89*15dc779aSAndroid Build Coastguard Worker iaace_scratch *pstr_aac_scratch; 90*15dc779aSAndroid Build Coastguard Worker } iexheaac_encoder_str; 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_aac_init_default_config(iaace_config *config, WORD32 aot); 93*15dc779aSAndroid Build Coastguard Worker 94*15dc779aSAndroid Build Coastguard Worker WORD32 ia_enhaacplus_enc_aac_enc_pers_size(WORD32 num_aac_chan, WORD32 aot); 95*15dc779aSAndroid Build Coastguard Worker WORD32 ia_enhaacplus_enc_aac_enc_scr_size(VOID); 96*15dc779aSAndroid Build Coastguard Worker 97*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_init_aac_tabs(ixheaace_aac_tables *pstr_aac_tabs); 98*15dc779aSAndroid Build Coastguard Worker 99*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ia_enhaacplus_enc_aac_enc_open(iexheaac_encoder_str **ppstr_exheaac_encoder, 100*15dc779aSAndroid Build Coastguard Worker const iaace_config config, 101*15dc779aSAndroid Build Coastguard Worker iaace_scratch *pstr_aac_scratch, 102*15dc779aSAndroid Build Coastguard Worker ixheaace_aac_tables *pstr_aac_tabs, WORD32 ele_type, 103*15dc779aSAndroid Build Coastguard Worker WORD32 element_instance_tag, WORD32 aot); 104*15dc779aSAndroid Build Coastguard Worker 105*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ia_enhaacplus_enc_aac_core_encode( 106*15dc779aSAndroid Build Coastguard Worker iexheaac_encoder_str **pstr_aac_enc, FLOAT32 *ptr_time_signal, UWORD32 time_sn_stride, 107*15dc779aSAndroid Build Coastguard Worker const UWORD8 *ptr_anc_bytes, UWORD8 *num_anc_bytes, UWORD8 *ptr_out_bytes, 108*15dc779aSAndroid Build Coastguard Worker WORD32 *num_out_bytes, ixheaace_aac_tables *pstr_aac_tables, VOID *ptr_bit_stream_handle, 109*15dc779aSAndroid Build Coastguard Worker VOID *ptr_bit_stream, FLAG flag_last_element, WORD32 *write_program_config_element, 110*15dc779aSAndroid Build Coastguard Worker WORD32 i_num_coup_channels, WORD32 i_channels_mask, WORD32 ele_idx, WORD32 *total_fill_bits, 111*15dc779aSAndroid Build Coastguard Worker WORD32 total_channels, WORD32 aot, WORD32 adts_flag, WORD32 num_bs_elements, 112*15dc779aSAndroid Build Coastguard Worker WORD32 *is_quant_spec_zero, WORD32 *is_gain_limited); 113*15dc779aSAndroid Build Coastguard Worker 114*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_set_shared_bufs(iaace_scratch *scr, WORD32 **shared_buf1, 115*15dc779aSAndroid Build Coastguard Worker WORD32 **shared_buf2, WORD32 **shared_buf3, 116*15dc779aSAndroid Build Coastguard Worker WORD8 **shared_buf5); 117