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_MAX_PAYLOAD_SIZE (256) 24*15dc779aSAndroid Build Coastguard Worker 25*15dc779aSAndroid Build Coastguard Worker enum { MONO = 1, STEREO = 2 }; 26*15dc779aSAndroid Build Coastguard Worker 27*15dc779aSAndroid Build Coastguard Worker typedef struct { 28*15dc779aSAndroid Build Coastguard Worker WORD32 bit_rate; 29*15dc779aSAndroid Build Coastguard Worker WORD32 num_channels; 30*15dc779aSAndroid Build Coastguard Worker WORD32 sample_freq; 31*15dc779aSAndroid Build Coastguard Worker WORD32 trans_fac; 32*15dc779aSAndroid Build Coastguard Worker WORD32 standard_bitrate; 33*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_codec_param; 34*15dc779aSAndroid Build Coastguard Worker 35*15dc779aSAndroid Build Coastguard Worker typedef struct ixheaace_str_sbr_cfg { 36*15dc779aSAndroid Build Coastguard Worker ixheaace_str_codec_param codec_settings; 37*15dc779aSAndroid Build Coastguard Worker WORD32 send_header_data_time; 38*15dc779aSAndroid Build Coastguard Worker WORD32 crc_sbr; 39*15dc779aSAndroid Build Coastguard Worker WORD32 detect_missing_harmonics; 40*15dc779aSAndroid Build Coastguard Worker WORD32 parametric_coding; 41*15dc779aSAndroid Build Coastguard Worker 42*15dc779aSAndroid Build Coastguard Worker WORD32 tran_thr; 43*15dc779aSAndroid Build Coastguard Worker WORD32 noise_floor_offset; 44*15dc779aSAndroid Build Coastguard Worker UWORD32 use_speech_config; 45*15dc779aSAndroid Build Coastguard Worker 46*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_data_extra; 47*15dc779aSAndroid Build Coastguard Worker WORD32 amp_res; 48*15dc779aSAndroid Build Coastguard Worker WORD32 ana_max_level; 49*15dc779aSAndroid Build Coastguard Worker WORD32 tran_fc; 50*15dc779aSAndroid Build Coastguard Worker WORD32 tran_det_mode; 51*15dc779aSAndroid Build Coastguard Worker WORD32 spread; 52*15dc779aSAndroid Build Coastguard Worker WORD32 stat; 53*15dc779aSAndroid Build Coastguard Worker WORD32 e; 54*15dc779aSAndroid Build Coastguard Worker ixheaace_sbr_stereo_mode stereo_mode; 55*15dc779aSAndroid Build Coastguard Worker WORD32 delta_t_across_frames; 56*15dc779aSAndroid Build Coastguard Worker FLOAT32 df_edge_1st_env; 57*15dc779aSAndroid Build Coastguard Worker FLOAT32 df_edge_incr; 58*15dc779aSAndroid Build Coastguard Worker 59*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_invf_mode; 60*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_xpos_mode; 61*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_xpos_ctrl; 62*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_xpos_lvl; 63*15dc779aSAndroid Build Coastguard Worker WORD32 start_freq; 64*15dc779aSAndroid Build Coastguard Worker WORD32 stop_freq; 65*15dc779aSAndroid Build Coastguard Worker 66*15dc779aSAndroid Build Coastguard Worker WORD32 use_ps; 67*15dc779aSAndroid Build Coastguard Worker WORD32 ps_mode; 68*15dc779aSAndroid Build Coastguard Worker 69*15dc779aSAndroid Build Coastguard Worker WORD32 freq_scale; 70*15dc779aSAndroid Build Coastguard Worker WORD32 alter_scale; 71*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_noise_bands; 72*15dc779aSAndroid Build Coastguard Worker 73*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_limiter_bands; 74*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_limiter_gains; 75*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_interpol_freq; 76*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_smoothing_length; 77*15dc779aSAndroid Build Coastguard Worker WORD32 frame_flag_480; 78*15dc779aSAndroid Build Coastguard Worker WORD32 frame_flag_960; 79*15dc779aSAndroid Build Coastguard Worker WORD32 is_ld_sbr; 80*15dc779aSAndroid Build Coastguard Worker WORD32 is_esbr; 81*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_pvc_rate; 82*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_ratio_idx; 83*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_pvc_active; 84*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_harmonic; 85*15dc779aSAndroid Build Coastguard Worker WORD32 hq_esbr; 86*15dc779aSAndroid Build Coastguard Worker ixheaace_sbr_codec_type sbr_codec; 87*15dc779aSAndroid Build Coastguard Worker WORD32 use_low_freq_res; 88*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_sbr_cfg, *ixheaace_pstr_sbr_cfg; 89*15dc779aSAndroid Build Coastguard Worker 90*15dc779aSAndroid Build Coastguard Worker typedef struct ixheaace_str_sbr_enc *ixheaace_pstr_sbr_enc; 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker UWORD32 93*15dc779aSAndroid Build Coastguard Worker ixheaace_is_sbr_setting_available(UWORD32 bitrate, UWORD32 num_output_channels, 94*15dc779aSAndroid Build Coastguard Worker UWORD32 sample_rate_input, UWORD32 *sample_rate_core, 95*15dc779aSAndroid Build Coastguard Worker ixheaace_str_qmf_tabs *ptr_qmf_tab, WORD32 aot); 96*15dc779aSAndroid Build Coastguard Worker 97*15dc779aSAndroid Build Coastguard Worker UWORD32 ixheaace_sbr_limit_bitrate(UWORD32 bit_rate, UWORD32 num_channels, 98*15dc779aSAndroid Build Coastguard Worker UWORD32 core_sample_rate, ixheaace_str_qmf_tabs *ptr_qmf_tab, 99*15dc779aSAndroid Build Coastguard Worker WORD32 aot); 100*15dc779aSAndroid Build Coastguard Worker 101*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_adjust_sbr_settings(const ixheaace_pstr_sbr_cfg pstr_config, UWORD32 bit_rate, 102*15dc779aSAndroid Build Coastguard Worker UWORD32 num_channels, UWORD32 fs_core, UWORD32 trans_fac, 103*15dc779aSAndroid Build Coastguard Worker UWORD32 standard_bitrate, ixheaace_str_qmf_tabs *ptr_qmf_tab, 104*15dc779aSAndroid Build Coastguard Worker WORD32 aot); 105*15dc779aSAndroid Build Coastguard Worker 106*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_initialize_sbr_defaults(ixheaace_pstr_sbr_cfg pstr_config); 107*15dc779aSAndroid Build Coastguard Worker 108*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE 109*15dc779aSAndroid Build Coastguard Worker ixheaace_env_open(ixheaace_pstr_sbr_enc *pstr_env_encoder, ixheaace_pstr_sbr_cfg params, 110*15dc779aSAndroid Build Coastguard Worker WORD32 *core_bandwidth, WORD8 *spectral_band_replication_scratch_ptr, 111*15dc779aSAndroid Build Coastguard Worker ixheaace_str_sbr_tabs *pstr_sbr_tab, ixheaace_pstr_sbr_hdr_data *sbr_config); 112*15dc779aSAndroid Build Coastguard Worker 113*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_env_close(ixheaace_pstr_sbr_enc pstr_env_encoder); 114*15dc779aSAndroid Build Coastguard Worker 115*15dc779aSAndroid Build Coastguard Worker WORD32 116*15dc779aSAndroid Build Coastguard Worker ixheaace_sbr_get_stop_freq_raw(ixheaace_pstr_sbr_enc ptr_env); 117*15dc779aSAndroid Build Coastguard Worker 118*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE 119*15dc779aSAndroid Build Coastguard Worker ixheaace_env_encode_frame(ixheaace_pstr_sbr_enc ptr_env_encoder, FLOAT32 *samples, 120*15dc779aSAndroid Build Coastguard Worker FLOAT32 *core_buffer, UWORD32 time_sn_stride, UWORD8 *num_anc_bytes, 121*15dc779aSAndroid Build Coastguard Worker UWORD8 *anc_data, ixheaace_str_sbr_tabs *pstr_sbr_tab, 122*15dc779aSAndroid Build Coastguard Worker ixheaace_comm_tables *common_tab, UWORD8 *mps_data, WORD32 mps_bits, 123*15dc779aSAndroid Build Coastguard Worker WORD32 flag_framelength_small, WORD32 *usac_stat_bits); 124*15dc779aSAndroid Build Coastguard Worker 125*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_sbr_set_scratch_ptr(ixheaace_pstr_sbr_enc h_env_enc, VOID *scr); 126*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaace_sbr_enc_pers_size(WORD32 num_chan, WORD32 use_ps, WORD32 harmonic_sbr); 127*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaace_sbr_enc_scr_size(VOID); 128*15dc779aSAndroid Build Coastguard Worker 129*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_set_usac_sbr_params(ixheaace_pstr_sbr_enc h_env_enc, WORD32 usac_indep_flag, 130*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_pre_proc, WORD32 sbr_pvc_active, WORD32 sbr_pvc_mode, 131*15dc779aSAndroid Build Coastguard Worker WORD32 inter_tes_active, WORD32 sbr_harmonic, 132*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_patching_mode); 133*15dc779aSAndroid Build Coastguard Worker 134*15dc779aSAndroid Build Coastguard Worker FLOAT32 *ixheaace_get_hbe_resample_buffer(ixheaace_pstr_sbr_enc h_env_enc); 135*15dc779aSAndroid Build Coastguard Worker 136*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_extract_sbr_envelope(FLOAT32 *ptr_in_time, FLOAT32 *ptr_core_buf, 137*15dc779aSAndroid Build Coastguard Worker UWORD32 time_sn_stride, 138*15dc779aSAndroid Build Coastguard Worker ixheaace_pstr_sbr_enc pstr_env_enc, 139*15dc779aSAndroid Build Coastguard Worker ixheaace_str_sbr_tabs *ptr_sbr_tab, 140*15dc779aSAndroid Build Coastguard Worker ixheaace_comm_tables *pstr_com_tab, 141*15dc779aSAndroid Build Coastguard Worker WORD32 flag_framelength_small); 142*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_init_sbr_tabs(ixheaace_str_sbr_tabs *pstr_sbr_tabs); 143*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_get_shared_bufs(VOID *scr, WORD32 **shared_buf1, WORD32 **shared_buf2, 144*15dc779aSAndroid Build Coastguard Worker WORD32 **shared_buf3, WORD8 **shared_buf4, 145*15dc779aSAndroid Build Coastguard Worker WORD32 aacenc_blocksize); 146*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_get_scratch_bufs(VOID *scr, FLOAT32 **shared_buf1_ring, 147*15dc779aSAndroid Build Coastguard Worker FLOAT32 **shared_buf2_ring);