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_ESBR_TES_ENERGY_MAX_THR (1.0e6f) 24*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_TIMESLOT_BUFFER_SIZE (78) 25*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_ENVELOPES (8) 26*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NOISE_ENVELOPES (2) 27*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NOISE_COEFFS (5) 28*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_NOISE_VALUES (IXHEAACE_MAX_NOISE_ENVELOPES * IXHEAACE_MAX_NOISE_COEFFS) 29*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_FREQ_COEFFS (56) 30*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_PATCHES (6) 31*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_NUM_LIMITERS (12) 32*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAXDEG (3) 33*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_HF_RELAXATION_PARAM (0.999999f) 34*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ESBR_NUM_GAMMA_IDXS (4) 35*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_ESBR_HBE_DELAY_OFFSET (32) 36*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_HF_ADJ_OFFSET (2) 37*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_TES_SHAPE_BITS (1) 38*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SBR_TES_SHAPE_MODE_BITS (2) 39*15dc779aSAndroid Build Coastguard Worker 40*15dc779aSAndroid Build Coastguard Worker typedef struct { 41*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_0_1_real; 42*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_0_1_imag; 43*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_0_2_real; 44*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_0_2_imag; 45*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_1_1; 46*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_1_2_real; 47*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_1_2_imag; 48*15dc779aSAndroid Build Coastguard Worker FLOAT32 phi_2_2; 49*15dc779aSAndroid Build Coastguard Worker FLOAT32 det; 50*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_auto_corr_ele; 51*15dc779aSAndroid Build Coastguard Worker 52*15dc779aSAndroid Build Coastguard Worker typedef struct { 53*15dc779aSAndroid Build Coastguard Worker WORD16 num_sf_bands[2]; 54*15dc779aSAndroid Build Coastguard Worker WORD16 num_nf_bands; 55*15dc779aSAndroid Build Coastguard Worker WORD16 num_mf_bands; 56*15dc779aSAndroid Build Coastguard Worker WORD16 sub_band_start; 57*15dc779aSAndroid Build Coastguard Worker WORD16 sub_band_end; 58*15dc779aSAndroid Build Coastguard Worker WORD16 freq_band_tbl_lim[IXHEAACE_MAX_NUM_LIMITERS + 1]; 59*15dc779aSAndroid Build Coastguard Worker WORD16 num_lf_bands; 60*15dc779aSAndroid Build Coastguard Worker WORD16 num_if_bands; 61*15dc779aSAndroid Build Coastguard Worker WORD16 *ptr_freq_band_tab[2]; 62*15dc779aSAndroid Build Coastguard Worker WORD16 freq_band_tbl_lo[IXHEAACE_MAX_FREQ_COEFFS / 2 + 1]; 63*15dc779aSAndroid Build Coastguard Worker WORD16 freq_band_tbl_hi[IXHEAACE_MAX_FREQ_COEFFS + 1]; 64*15dc779aSAndroid Build Coastguard Worker WORD16 freq_band_tbl_noise[IXHEAACE_MAX_NOISE_COEFFS + 1]; 65*15dc779aSAndroid Build Coastguard Worker WORD16 f_master_tbl[IXHEAACE_MAX_FREQ_COEFFS + 1]; 66*15dc779aSAndroid Build Coastguard Worker WORD16 qmf_sb_prev; 67*15dc779aSAndroid Build Coastguard Worker } ia_str_freq_band_data; 68*15dc779aSAndroid Build Coastguard Worker 69*15dc779aSAndroid Build Coastguard Worker typedef struct { 70*15dc779aSAndroid Build Coastguard Worker WORD16 frame_class; 71*15dc779aSAndroid Build Coastguard Worker WORD16 num_env; 72*15dc779aSAndroid Build Coastguard Worker WORD16 transient_env; 73*15dc779aSAndroid Build Coastguard Worker WORD16 num_noise_env; 74*15dc779aSAndroid Build Coastguard Worker WORD16 border_vec[IXHEAACE_MAX_ENVELOPES + 1]; 75*15dc779aSAndroid Build Coastguard Worker WORD16 freq_res[IXHEAACE_MAX_ENVELOPES]; 76*15dc779aSAndroid Build Coastguard Worker WORD16 noise_border_vec[IXHEAACE_MAX_NOISE_ENVELOPES + 1]; 77*15dc779aSAndroid Build Coastguard Worker } ia_str_frame_info; 78*15dc779aSAndroid Build Coastguard Worker 79*15dc779aSAndroid Build Coastguard Worker typedef struct { 80*15dc779aSAndroid Build Coastguard Worker WORD32 num_if_bands; 81*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_start; 82*15dc779aSAndroid Build Coastguard Worker WORD32 sub_band_end; 83*15dc779aSAndroid Build Coastguard Worker WORD32 num_mf_bands; 84*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_patching_mode; 85*15dc779aSAndroid Build Coastguard Worker WORD32 pre_proc_flag; 86*15dc779aSAndroid Build Coastguard Worker WORD32 is_usf_4; 87*15dc779aSAndroid Build Coastguard Worker WORD32 hbe_flag; 88*15dc779aSAndroid Build Coastguard Worker WORD32 out_fs; 89*15dc779aSAndroid Build Coastguard Worker WORD32 num_env; 90*15dc779aSAndroid Build Coastguard Worker WORD32 op_delay; 91*15dc779aSAndroid Build Coastguard Worker WORD32 codec_delay; 92*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_ratio_index; 93*15dc779aSAndroid Build Coastguard Worker WORD16 invf_band_tbl[MAXIMUM_NUM_NOISE_VALUES + 1]; 94*15dc779aSAndroid Build Coastguard Worker WORD16 f_master_tbl[MAXIMUM_FREQ_COEFFS + 1]; 95*15dc779aSAndroid Build Coastguard Worker WORD32 inv_filt_mode[MAXIMUM_NUM_NOISE_VALUES]; 96*15dc779aSAndroid Build Coastguard Worker WORD32 inv_filt_mode_prev[IXHEAACE_MAX_NUM_NOISE_VALUES]; 97*15dc779aSAndroid Build Coastguard Worker FLOAT32 bw_array_prev[IXHEAACE_MAX_NUM_PATCHES]; 98*15dc779aSAndroid Build Coastguard Worker WORD16 border_vec[IXHEAACE_MAX_ENV + 1]; 99*15dc779aSAndroid Build Coastguard Worker WORD32 bs_tes_shape[IXHEAACE_MAX_ENV + 1]; 100*15dc779aSAndroid Build Coastguard Worker WORD32 bs_tes_shape_mode[IXHEAACE_MAX_ENV + 1]; 101*15dc779aSAndroid Build Coastguard Worker FLOAT32 qmf_buf_real[IXHEAACE_TIMESLOT_BUFFER_SIZE + 2 * IXHEAACE_ESBR_HBE_DELAY_OFFSET] 102*15dc779aSAndroid Build Coastguard Worker [IXHEAACE_QMF_CHANNELS]; 103*15dc779aSAndroid Build Coastguard Worker FLOAT32 qmf_buf_imag[IXHEAACE_TIMESLOT_BUFFER_SIZE + 2 * IXHEAACE_ESBR_HBE_DELAY_OFFSET] 104*15dc779aSAndroid Build Coastguard Worker [IXHEAACE_QMF_CHANNELS]; 105*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_inter_tes_params; 106*15dc779aSAndroid Build Coastguard Worker 107*15dc779aSAndroid Build Coastguard Worker typedef struct { 108*15dc779aSAndroid Build Coastguard Worker FLOAT32 dst_qmf_r[IXHEAACE_TIMESLOT_BUFFER_SIZE][IXHEAACE_QMF_CHANNELS]; 109*15dc779aSAndroid Build Coastguard Worker FLOAT32 dst_qmf_i[IXHEAACE_TIMESLOT_BUFFER_SIZE][IXHEAACE_QMF_CHANNELS]; 110*15dc779aSAndroid Build Coastguard Worker } ixheaace_str_inter_tes_scr; 111*15dc779aSAndroid Build Coastguard Worker 112*15dc779aSAndroid Build Coastguard Worker VOID ixheaace_init_esbr_inter_tes(ixheaace_str_inter_tes_params *pstr_tes_enc, 113*15dc779aSAndroid Build Coastguard Worker WORD32 sbr_ratio_index); 114*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaace_process_inter_tes(ixheaace_str_inter_tes_params *pstr_tes_enc, 115*15dc779aSAndroid Build Coastguard Worker WORD8 *ptr_scr); 116