xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_env_extr.h (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2018 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 #ifndef IXHEAACD_ENV_EXTR_H
21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_ENV_EXTR_H
22*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_error_standards.h"
23*15dc779aSAndroid Build Coastguard Worker #define ENV_EXP_FRACT 0
24*15dc779aSAndroid Build Coastguard Worker 
25*15dc779aSAndroid Build Coastguard Worker #define EXP_BITS 6
26*15dc779aSAndroid Build Coastguard Worker 
27*15dc779aSAndroid Build Coastguard Worker #define MASK_M (((1 << (SHORT_BITS - EXP_BITS)) - 1) << EXP_BITS)
28*15dc779aSAndroid Build Coastguard Worker #define MASK_FOR_EXP ((1 << EXP_BITS) - 1)
29*15dc779aSAndroid Build Coastguard Worker 
30*15dc779aSAndroid Build Coastguard Worker #define SIGN_EXT (((WORD8)-1) ^ MASK_FOR_EXP)
31*15dc779aSAndroid Build Coastguard Worker #define ROUNDING (1 << (EXP_BITS - 1))
32*15dc779aSAndroid Build Coastguard Worker #define NRG_EXP_OFFSET 16
33*15dc779aSAndroid Build Coastguard Worker #define NOISE_EXP_OFFSET 38
34*15dc779aSAndroid Build Coastguard Worker #define MAX_QMF_SUB_BANDS 64
35*15dc779aSAndroid Build Coastguard Worker 
36*15dc779aSAndroid Build Coastguard Worker typedef const UWORD16 *ia_huffman_data_type;
37*15dc779aSAndroid Build Coastguard Worker 
38*15dc779aSAndroid Build Coastguard Worker #define COUPLING_OFF 0
39*15dc779aSAndroid Build Coastguard Worker #define COUPLING_LEVEL 1
40*15dc779aSAndroid Build Coastguard Worker #define COUPLING_BAL 2
41*15dc779aSAndroid Build Coastguard Worker 
42*15dc779aSAndroid Build Coastguard Worker #define MAX_INVF_BANDS MAX_NOISE_COEFFS
43*15dc779aSAndroid Build Coastguard Worker 
44*15dc779aSAndroid Build Coastguard Worker typedef struct {
45*15dc779aSAndroid Build Coastguard Worker   WORD16 sfb_nrg_prev[MAX_FREQ_COEFFS];
46*15dc779aSAndroid Build Coastguard Worker   WORD16 prev_noise_level[MAX_NOISE_COEFFS];
47*15dc779aSAndroid Build Coastguard Worker   WORD16 amp_res;
48*15dc779aSAndroid Build Coastguard Worker   WORD16 end_position;
49*15dc779aSAndroid Build Coastguard Worker   WORD32 max_qmf_subband_aac;
50*15dc779aSAndroid Build Coastguard Worker   WORD32 coupling_mode;
51*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES];
52*15dc779aSAndroid Build Coastguard Worker } ia_sbr_prev_frame_data_struct;
53*15dc779aSAndroid Build Coastguard Worker 
54*15dc779aSAndroid Build Coastguard Worker typedef struct {
55*15dc779aSAndroid Build Coastguard Worker   WORD16 num_env_sfac;
56*15dc779aSAndroid Build Coastguard Worker   ia_frame_info_struct str_frame_info_details;
57*15dc779aSAndroid Build Coastguard Worker   WORD16 del_cod_dir_arr[MAX_ENVELOPES];
58*15dc779aSAndroid Build Coastguard Worker   WORD16 del_cod_dir_noise_arr[MAX_NOISE_ENVELOPES];
59*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_invf_mode[MAX_NUM_NOISE_VALUES];
60*15dc779aSAndroid Build Coastguard Worker   WORD32 coupling_mode;
61*15dc779aSAndroid Build Coastguard Worker   WORD16 amp_res;
62*15dc779aSAndroid Build Coastguard Worker   WORD32 max_qmf_subband_aac;
63*15dc779aSAndroid Build Coastguard Worker   FLAG add_harmonics[MAX_FREQ_COEFFS];
64*15dc779aSAndroid Build Coastguard Worker   WORD16 int_env_sf_arr[MAX_NUM_ENVELOPE_VALUES];
65*15dc779aSAndroid Build Coastguard Worker   WORD16 int_noise_floor[MAX_NUM_NOISE_VALUES];
66*15dc779aSAndroid Build Coastguard Worker   WORD32 num_noise_sfac;
67*15dc779aSAndroid Build Coastguard Worker   ia_frame_info_struct str_pvc_frame_info;
68*15dc779aSAndroid Build Coastguard Worker   WORD32 env_short_flag_prev;
69*15dc779aSAndroid Build Coastguard Worker   ia_sbr_header_data_struct *pstr_sbr_header;
70*15dc779aSAndroid Build Coastguard Worker   WORD32 num_time_slots;
71*15dc779aSAndroid Build Coastguard Worker   WORD32 rate;
72*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_patching_mode;
73*15dc779aSAndroid Build Coastguard Worker   WORD32 prev_sbr_patching_mode;
74*15dc779aSAndroid Build Coastguard Worker   WORD32 over_sampling_flag;
75*15dc779aSAndroid Build Coastguard Worker   WORD32 pitch_in_bins;
76*15dc779aSAndroid Build Coastguard Worker   WORD32 pvc_mode;
77*15dc779aSAndroid Build Coastguard Worker   WORD32 cov_count;
78*15dc779aSAndroid Build Coastguard Worker   WORD32 sbr_invf_mode_prev[MAX_NUM_NOISE_VALUES];
79*15dc779aSAndroid Build Coastguard Worker   FLOAT32 flt_env_sf_arr[MAX_NUM_ENVELOPE_VALUES];
80*15dc779aSAndroid Build Coastguard Worker   FLOAT32 flt_noise_floor[MAX_NUM_NOISE_VALUES];
81*15dc779aSAndroid Build Coastguard Worker   FLOAT32 sfb_nrg_prev[MAX_FREQ_COEFFS];
82*15dc779aSAndroid Build Coastguard Worker   FLOAT32 prev_noise_level[MAX_NUM_NOISE_VALUES];
83*15dc779aSAndroid Build Coastguard Worker   WORD32 inter_temp_shape_mode[MAX_ENVELOPES];
84*15dc779aSAndroid Build Coastguard Worker   WORD32 var_len;
85*15dc779aSAndroid Build Coastguard Worker   WORD32 bs_sin_pos_present;
86*15dc779aSAndroid Build Coastguard Worker   WORD32 sine_position;
87*15dc779aSAndroid Build Coastguard Worker   WORD32 sin_start_for_next_top;
88*15dc779aSAndroid Build Coastguard Worker   WORD32 sin_len_for_next_top;
89*15dc779aSAndroid Build Coastguard Worker   WORD32 sin_start_for_cur_top;
90*15dc779aSAndroid Build Coastguard Worker   WORD32 sin_len_for_cur_top;
91*15dc779aSAndroid Build Coastguard Worker   WORD32 var_len_id_prev;
92*15dc779aSAndroid Build Coastguard Worker   ia_frame_info_struct str_frame_info_prev;
93*15dc779aSAndroid Build Coastguard Worker   FLOAT32 bw_array_prev[MAX_NUM_PATCHES];
94*15dc779aSAndroid Build Coastguard Worker   struct ixheaacd_lpp_trans_patch patch_param;
95*15dc779aSAndroid Build Coastguard Worker   WORD32 harm_index;
96*15dc779aSAndroid Build Coastguard Worker   WORD32 phase_index;
97*15dc779aSAndroid Build Coastguard Worker   WORD8 harm_flag_prev[64];
98*15dc779aSAndroid Build Coastguard Worker   FLOAT32 e_gain[5][64];
99*15dc779aSAndroid Build Coastguard Worker   FLOAT32 noise_buf[5][64];
100*15dc779aSAndroid Build Coastguard Worker   WORD32 lim_table[4][12 + 1];
101*15dc779aSAndroid Build Coastguard Worker   WORD32 gate_mode[4];
102*15dc779aSAndroid Build Coastguard Worker   WORD8 harm_flag_varlen_prev[64];
103*15dc779aSAndroid Build Coastguard Worker   WORD8 harm_flag_varlen[64];
104*15dc779aSAndroid Build Coastguard Worker   FLOAT32 qmapped_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
105*15dc779aSAndroid Build Coastguard Worker   FLOAT32 env_tmp[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
106*15dc779aSAndroid Build Coastguard Worker   FLOAT32 noise_level_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
107*15dc779aSAndroid Build Coastguard Worker   FLOAT32 nrg_est_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
108*15dc779aSAndroid Build Coastguard Worker   FLOAT32 nrg_ref_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
109*15dc779aSAndroid Build Coastguard Worker   FLOAT32 nrg_gain_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
110*15dc779aSAndroid Build Coastguard Worker   FLOAT32 nrg_tone_pvc[MAX_QMF_SUB_BANDS][MAX_FREQ_COEFFS_SBR];
111*15dc779aSAndroid Build Coastguard Worker   WORD32 stereo_config_idx;
112*15dc779aSAndroid Build Coastguard Worker   FLAG reset_flag;
113*15dc779aSAndroid Build Coastguard Worker   FLAG mps_sbr_flag;
114*15dc779aSAndroid Build Coastguard Worker   FLAG usac_independency_flag;
115*15dc779aSAndroid Build Coastguard Worker   FLAG inter_tes_flag;
116*15dc779aSAndroid Build Coastguard Worker   FLAG sbr_mode;
117*15dc779aSAndroid Build Coastguard Worker   FLAG prev_sbr_mode;
118*15dc779aSAndroid Build Coastguard Worker   WORD32 eld_sbr_flag;
119*15dc779aSAndroid Build Coastguard Worker 
120*15dc779aSAndroid Build Coastguard Worker } ia_sbr_frame_info_data_struct;
121*15dc779aSAndroid Build Coastguard Worker 
122*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_sbr_read_sce(ia_sbr_header_data_struct *ptr_header_data,
123*15dc779aSAndroid Build Coastguard Worker                                    ia_sbr_frame_info_data_struct *ptr_frame_data,
124*15dc779aSAndroid Build Coastguard Worker                                    ia_ps_dec_struct *ptr_ps_dec, ia_bit_buf_struct *it_bit_buff,
125*15dc779aSAndroid Build Coastguard Worker                                    ia_sbr_tables_struct *ptr_sbr_tables, WORD audio_object_type,
126*15dc779aSAndroid Build Coastguard Worker                                    WORD32 ec_flag);
127*15dc779aSAndroid Build Coastguard Worker 
128*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_sbr_read_cpe(
129*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data,
130*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct **ptr_frame_data,
131*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *itt_bit_buf, ia_sbr_tables_struct *ptr_sbr_tables,
132*15dc779aSAndroid Build Coastguard Worker     WORD audio_object_type);
133*15dc779aSAndroid Build Coastguard Worker 
134*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_sbr_read_header_data(
135*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_sbr_header, ia_bit_buf_struct *it_bit_buf,
136*15dc779aSAndroid Build Coastguard Worker     FLAG stereo_flag, ia_sbr_header_data_struct *ptr_sbr_dflt_header);
137*15dc779aSAndroid Build Coastguard Worker 
138*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_ssc_huff_dec(ia_huffman_data_type h,
139*15dc779aSAndroid Build Coastguard Worker                              ia_bit_buf_struct *it_bit_buff);
140*15dc779aSAndroid Build Coastguard Worker 
141*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_extract_frame_info_ld(
142*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
143*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *h_frame_data);
144*15dc779aSAndroid Build Coastguard Worker 
145*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_pvc_time_freq_grid_info(
146*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
147*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *ptr_frame_data);
148*15dc779aSAndroid Build Coastguard Worker 
149*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_sbr_time_freq_grid_info(
150*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
151*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *ptr_frame_data,
152*15dc779aSAndroid Build Coastguard Worker     ia_env_extr_tables_struct *env_extr_tables_ptr, WORD16 number_of_timeslots);
153*15dc779aSAndroid Build Coastguard Worker 
154*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_read_sbr_env_data(
155*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data,
156*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *ptr_frame_data,
157*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
158*15dc779aSAndroid Build Coastguard Worker     ia_env_extr_tables_struct *env_extr_tables_ptr, WORD audio_object_type);
159*15dc779aSAndroid Build Coastguard Worker 
160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_sbr_env_dtdf_data(ia_sbr_frame_info_data_struct *ptr_frame_data,
161*15dc779aSAndroid Build Coastguard Worker                                 ia_bit_buf_struct *it_bit_buff,
162*15dc779aSAndroid Build Coastguard Worker                                 WORD32 usac_flag);
163*15dc779aSAndroid Build Coastguard Worker 
164*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_read_sbr_noise_floor_data(
165*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data,
166*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *ptr_frame_data,
167*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
168*15dc779aSAndroid Build Coastguard Worker     ia_env_extr_tables_struct *env_extr_tables_ptr);
169*15dc779aSAndroid Build Coastguard Worker 
170*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *h_index, WORD16 *len,
171*15dc779aSAndroid Build Coastguard Worker                              const UWORD16 *input_table,
172*15dc779aSAndroid Build Coastguard Worker                              const UWORD32 *idx_table);
173*15dc779aSAndroid Build Coastguard Worker 
174*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_createlimiterbands(WORD32 lim_table[4][12 + 1], WORD32 gate_mode[4],
175*15dc779aSAndroid Build Coastguard Worker                                          WORD16 *freq_band_tbl, WORD32 ixheaacd_num_bands,
176*15dc779aSAndroid Build Coastguard Worker                                          WORD32 x_over_qmf[MAX_NUM_PATCHES],
177*15dc779aSAndroid Build Coastguard Worker                                          WORD32 b_patching_mode, WORD32 upsamp_4_flag,
178*15dc779aSAndroid Build Coastguard Worker                                          struct ixheaacd_lpp_trans_patch *patch_param,
179*15dc779aSAndroid Build Coastguard Worker                                          WORD32 ec_flag);
180*15dc779aSAndroid Build Coastguard Worker 
181*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_apply_inter_tes(FLOAT32 *qmf_real1, FLOAT32 *qmf_imag1,
182*15dc779aSAndroid Build Coastguard Worker                               FLOAT32 *qmf_real, FLOAT32 *qmf_imag,
183*15dc779aSAndroid Build Coastguard Worker                               WORD32 num_sample, WORD32 sub_band_start,
184*15dc779aSAndroid Build Coastguard Worker                               WORD32 num_subband, WORD32 gamma_idx);
185*15dc779aSAndroid Build Coastguard Worker 
186*15dc779aSAndroid Build Coastguard Worker #endif
187