xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_env_calc.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_CALC_H
21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_ENV_CALC_H
22*15dc779aSAndroid Build Coastguard Worker 
23*15dc779aSAndroid Build Coastguard Worker typedef struct {
24*15dc779aSAndroid Build Coastguard Worker   WORD16 *filt_buf_me;
25*15dc779aSAndroid Build Coastguard Worker   WORD16 *filt_buf_noise_m;
26*15dc779aSAndroid Build Coastguard Worker   WORD32 filt_buf_noise_e;
27*15dc779aSAndroid Build Coastguard Worker   FLAG start_up;
28*15dc779aSAndroid Build Coastguard Worker   WORD16 ph_index;
29*15dc779aSAndroid Build Coastguard Worker   WORD16 tansient_env_prev;
30*15dc779aSAndroid Build Coastguard Worker   WORD8 harm_flags_prev[MAX_FREQ_COEFFS];
31*15dc779aSAndroid Build Coastguard Worker   WORD16 harm_index;
32*15dc779aSAndroid Build Coastguard Worker } ia_sbr_calc_env_struct;
33*15dc779aSAndroid Build Coastguard Worker 
34*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_calc_sbrenvelope(
35*15dc779aSAndroid Build Coastguard Worker     ia_sbr_scale_fact_struct *sbr_scale_factor,
36*15dc779aSAndroid Build Coastguard Worker     ia_sbr_calc_env_struct *ptr_sbr_calc_env,
37*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data,
38*15dc779aSAndroid Build Coastguard Worker     ia_sbr_frame_info_data_struct *ptr_frame_data,
39*15dc779aSAndroid Build Coastguard Worker     ia_sbr_prev_frame_data_struct *ptr_prev_frame_data,
40*15dc779aSAndroid Build Coastguard Worker     WORD32 **anal_buf_real_mant, WORD32 **anal_buf_imag_mant,
41*15dc779aSAndroid Build Coastguard Worker     WORD16 *degree_alias, FLAG low_pow_flag,
42*15dc779aSAndroid Build Coastguard Worker     ia_sbr_tables_struct *ptr_sbr_tables,
43*15dc779aSAndroid Build Coastguard Worker     ixheaacd_misc_tables *pstr_common_tables, WORD32 *ptr_qmf_matrix,
44*15dc779aSAndroid Build Coastguard Worker     WORD32 audio_object_type);
45*15dc779aSAndroid Build Coastguard Worker 
46*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_reset_sbrenvelope_calc(ia_sbr_calc_env_struct *ptr_calc_env);
47*15dc779aSAndroid Build Coastguard Worker 
48*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_derive_lim_band_tbl(
49*15dc779aSAndroid Build Coastguard Worker     ia_sbr_header_data_struct *ptr_header_data,
50*15dc779aSAndroid Build Coastguard Worker     const ia_patch_param_struct *p_str_patch_param, WORD16 num_patches,
51*15dc779aSAndroid Build Coastguard Worker     ixheaacd_misc_tables *pstr_common_tables);
52*15dc779aSAndroid Build Coastguard Worker 
53*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_filt_buf_update(WORD16 *filt_buf_mant,
54*15dc779aSAndroid Build Coastguard Worker                               WORD16 *ptr_filt_buf_noise,
55*15dc779aSAndroid Build Coastguard Worker                               WORD16 *nrg_gain_mant,
56*15dc779aSAndroid Build Coastguard Worker                               WORD16 *noise_level_mant,
57*15dc779aSAndroid Build Coastguard Worker                               WORD32 num_sub_bands);
58*15dc779aSAndroid Build Coastguard Worker 
59*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_noise_level_rescaling(WORD16 *noise_level_mant, WORD32 diff,
60*15dc779aSAndroid Build Coastguard Worker                                     WORD32 num_sub_bands,
61*15dc779aSAndroid Build Coastguard Worker                                     WORD32 ixheaacd_drc_offset);
62*15dc779aSAndroid Build Coastguard Worker 
63*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_persfb(WORD32 **anal_buf_real, WORD32 **anal_buf_imag,
64*15dc779aSAndroid Build Coastguard Worker                                 WORD32 num_sf_bands, WORD16 *freq_band_table,
65*15dc779aSAndroid Build Coastguard Worker                                 WORD32 start_pos, WORD32 next_pos,
66*15dc779aSAndroid Build Coastguard Worker                                 WORD32 max_qmf_subband_aac, WORD32 frame_exp,
67*15dc779aSAndroid Build Coastguard Worker                                 WORD16 *nrg_est_m, FLAG low_pow_flag,
68*15dc779aSAndroid Build Coastguard Worker                                 ia_sbr_tables_struct *ptr_sbr_tables);
69*15dc779aSAndroid Build Coastguard Worker 
70*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_avggain_calc(WORD16 *ptr_enrg_orig, WORD16 *nrg_est,
71*15dc779aSAndroid Build Coastguard Worker                            WORD32 sub_band_start, WORD32 sub_band_end,
72*15dc779aSAndroid Build Coastguard Worker                            WORD16 *sum_orig_mant, WORD16 *sum_orig_exp,
73*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_avg_gain_mant, WORD16 *ptr_avg_gain_exp,
74*15dc779aSAndroid Build Coastguard Worker                            ixheaacd_misc_tables *pstr_common_tables,
75*15dc779aSAndroid Build Coastguard Worker                            WORD32 flag);
76*15dc779aSAndroid Build Coastguard Worker 
77*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adj_timeslot(WORD32 *ptr_buf_real, WORD32 *ptr_buf_imag,
78*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_filt_buf, WORD16 *ptr_filt_buf_noise,
79*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_gain_buf, WORD16 *ptr_noise_floor,
80*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_sine_lvl_buf, WORD16 noise_floor_exp,
81*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_harm_index, WORD16 sub_band_start,
82*15dc779aSAndroid Build Coastguard Worker                            WORD16 num_sub_bands, WORD16 scale_change,
83*15dc779aSAndroid Build Coastguard Worker                            WORD16 smooth_ratio, FLAG num_noise_flg,
84*15dc779aSAndroid Build Coastguard Worker                            WORD16 *ptr_phase_index,
85*15dc779aSAndroid Build Coastguard Worker                            ia_sbr_tables_struct *ptr_sbr_tables);
86*15dc779aSAndroid Build Coastguard Worker 
87*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_map_sineflags(WORD16 *freq_band_table, WORD16 num_sf_bands,
88*15dc779aSAndroid Build Coastguard Worker                             FLAG *add_harmonics, WORD8 *harm_flags_prev,
89*15dc779aSAndroid Build Coastguard Worker                             WORD16 transient_env, WORD8 *sine_mapped_matrix);
90*15dc779aSAndroid Build Coastguard Worker 
91*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adjust_scale_dec(WORD32 **re, WORD32 **im, WORD sub_band_start,
92*15dc779aSAndroid Build Coastguard Worker                                WORD num_sub_bands, WORD start_pos,
93*15dc779aSAndroid Build Coastguard Worker                                WORD next_pos, WORD shift, FLAG low_pow_flag);
94*15dc779aSAndroid Build Coastguard Worker 
95*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_adjust_scale_armv7(WORD32 **re, WORD32 **im, WORD sub_band_start,
96*15dc779aSAndroid Build Coastguard Worker                                  WORD num_sub_bands, WORD start_pos,
97*15dc779aSAndroid Build Coastguard Worker                                  WORD next_pos, WORD shift, FLAG low_pow_flag);
98*15dc779aSAndroid Build Coastguard Worker 
99*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_expsubbandsamples_dec(WORD32 **anal_buf_real_mant,
100*15dc779aSAndroid Build Coastguard Worker                                       WORD32 **anal_buf_imag_mant,
101*15dc779aSAndroid Build Coastguard Worker                                       WORD sub_band_start, WORD sub_band_end,
102*15dc779aSAndroid Build Coastguard Worker                                       WORD start_pos, WORD end_pos,
103*15dc779aSAndroid Build Coastguard Worker                                       FLAG low_pow_flag);
104*15dc779aSAndroid Build Coastguard Worker 
105*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_expsubbandsamples_armv7(WORD32 **anal_buf_real_mant,
106*15dc779aSAndroid Build Coastguard Worker                                         WORD32 **anal_buf_imag_mant,
107*15dc779aSAndroid Build Coastguard Worker                                         WORD sub_band_start, WORD sub_band_end,
108*15dc779aSAndroid Build Coastguard Worker                                         WORD start_pos, WORD end_pos,
109*15dc779aSAndroid Build Coastguard Worker                                         FLAG low_pow_flag);
110*15dc779aSAndroid Build Coastguard Worker 
111*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_per_subband_dec(WORD32 start_pos, WORD32 next_pos,
112*15dc779aSAndroid Build Coastguard Worker                                          WORD32 sub_band_start,
113*15dc779aSAndroid Build Coastguard Worker                                          WORD32 sub_band_end, WORD32 frame_exp,
114*15dc779aSAndroid Build Coastguard Worker                                          WORD16 *nrg_est_mant,
115*15dc779aSAndroid Build Coastguard Worker                                          FLAG low_pow_flag,
116*15dc779aSAndroid Build Coastguard Worker                                          ia_sbr_tables_struct *ptr_sbr_tables,
117*15dc779aSAndroid Build Coastguard Worker                                          WORD32 *ptr_qmf_matrix);
118*15dc779aSAndroid Build Coastguard Worker 
119*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_enery_calc_per_subband_armv7(
120*15dc779aSAndroid Build Coastguard Worker     WORD32 start_pos, WORD32 next_pos, WORD32 sub_band_start,
121*15dc779aSAndroid Build Coastguard Worker     WORD32 sub_band_end, WORD32 frame_exp, WORD16 *nrg_est_mant,
122*15dc779aSAndroid Build Coastguard Worker     FLAG low_pow_flag, ia_sbr_tables_struct *ptr_sbr_tables,
123*15dc779aSAndroid Build Coastguard Worker     WORD32 *ptr_qmf_matrix);
124*15dc779aSAndroid Build Coastguard Worker 
125*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_reset_hf_generator(ia_sbr_hf_generator_struct *hf_generator,
126*15dc779aSAndroid Build Coastguard Worker                                    ia_sbr_header_data_struct *ptr_header_data,
127*15dc779aSAndroid Build Coastguard Worker                                    WORD audio_obj_type);
128*15dc779aSAndroid Build Coastguard Worker 
129*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_zerotwolp_dec(WORD32 *ptr_real_buf, WORD16 *ptr_gain_buf,
130*15dc779aSAndroid Build Coastguard Worker                                      WORD scale_change,
131*15dc779aSAndroid Build Coastguard Worker                                      WORD16 *ptr_sine_level_buf,
132*15dc779aSAndroid Build Coastguard Worker                                      const WORD32 *ptr_rand_ph,
133*15dc779aSAndroid Build Coastguard Worker                                      WORD16 *noise_lvl_me, WORD num_sub_bands,
134*15dc779aSAndroid Build Coastguard Worker                                      FLAG noise_absc_flag, WORD32 harm_index);
135*15dc779aSAndroid Build Coastguard Worker 
136*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_zerotwolp_armv7(WORD32 *ptr_real_buf,
137*15dc779aSAndroid Build Coastguard Worker                                        WORD16 *ptr_gain_buf, WORD scale_change,
138*15dc779aSAndroid Build Coastguard Worker                                        WORD16 *ptr_sine_level_buf,
139*15dc779aSAndroid Build Coastguard Worker                                        const WORD32 *ptr_rand_ph,
140*15dc779aSAndroid Build Coastguard Worker                                        WORD16 *noise_lvl_me, WORD num_sub_bands,
141*15dc779aSAndroid Build Coastguard Worker                                        FLAG noise_absc_flag, WORD32 harm_index);
142*15dc779aSAndroid Build Coastguard Worker 
143*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_harm_idx_onethreelp(WORD32 *ptr_real_buf, WORD16 *ptr_gain_buf,
144*15dc779aSAndroid Build Coastguard Worker                                   WORD scale_change, WORD16 *ptr_sine_level_buf,
145*15dc779aSAndroid Build Coastguard Worker                                   const WORD32 *ptr_rand_ph,
146*15dc779aSAndroid Build Coastguard Worker                                   WORD16 *noise_lvl_me, WORD num_sub_bands,
147*15dc779aSAndroid Build Coastguard Worker                                   FLAG noise_absc_flag, WORD freq_inv_flag,
148*15dc779aSAndroid Build Coastguard Worker                                   WORD noise_e, WORD sub_band_start);
149*15dc779aSAndroid Build Coastguard Worker 
150*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitudelp_dec(WORD32 bands, WORD16 noise_e,
151*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *nrg_sine, WORD16 *nrg_gain,
152*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *noise_level_mant,
153*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *sqrt_table);
154*15dc779aSAndroid Build Coastguard Worker 
155*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitudelp_armv7(WORD32 bands, WORD16 noise_e,
156*15dc779aSAndroid Build Coastguard Worker                                           WORD16 *nrg_sine, WORD16 *nrg_gain,
157*15dc779aSAndroid Build Coastguard Worker                                           WORD16 *noise_level_mant,
158*15dc779aSAndroid Build Coastguard Worker                                           WORD16 *sqrt_table);
159*15dc779aSAndroid Build Coastguard Worker 
160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitude_dec(WORD32 bands, WORD16 noise_e,
161*15dc779aSAndroid Build Coastguard Worker                                       WORD16 *nrg_sine, WORD16 *nrg_gain,
162*15dc779aSAndroid Build Coastguard Worker                                       WORD16 *noise_level_mant,
163*15dc779aSAndroid Build Coastguard Worker                                       WORD16 *sqrt_table);
164*15dc779aSAndroid Build Coastguard Worker 
165*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_conv_ergtoamplitude_armv7(WORD32 bands, WORD16 noise_e,
166*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *nrg_sine, WORD16 *nrg_gain,
167*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *noise_level_mant,
168*15dc779aSAndroid Build Coastguard Worker                                         WORD16 *sqrt_table);
169*15dc779aSAndroid Build Coastguard Worker 
170*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_subbandgain_calc(WORD16 e_orig_mant_matrix, WORD16 tmp_noise_mant,
171*15dc779aSAndroid Build Coastguard Worker                                WORD16 nrg_est_mant, WORD16 nrg_est_exp,
172*15dc779aSAndroid Build Coastguard Worker                                WORD16 tmp_noise_exp, WORD16 nrg_ref_exp,
173*15dc779aSAndroid Build Coastguard Worker                                FLAG sine_present_flag, FLAG sine_mapped_matrix,
174*15dc779aSAndroid Build Coastguard Worker                                FLAG noise_absc_flag, WORD16 *ptr_nrg_gain_mant,
175*15dc779aSAndroid Build Coastguard Worker                                WORD16 *ptr_noise_floor_mant,
176*15dc779aSAndroid Build Coastguard Worker                                WORD16 *ptr_nrg_sine_m,
177*15dc779aSAndroid Build Coastguard Worker                                ixheaacd_misc_tables *pstr_common_tables);
178*15dc779aSAndroid Build Coastguard Worker 
179*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_equalize_filt_buff_exp(WORD16 *ptr_filt_buf,
180*15dc779aSAndroid Build Coastguard Worker                                                      WORD16 *nrg_gain,
181*15dc779aSAndroid Build Coastguard Worker                                                      WORD32 subbands);
182*15dc779aSAndroid Build Coastguard Worker 
183*15dc779aSAndroid Build Coastguard Worker #endif
184