xref: /aosp_15_r20/external/libxaac/decoder/x86/ixheaacd_function_selector_x86.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1 /******************************************************************************
2  *                                                                            *
3  * Copyright (C) 2018 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 #include <stdio.h>
21 #include <string.h>
22 #include "ixheaacd_sbr_common.h"
23 #include "ixheaac_type_def.h"
24 
25 #include "ixheaac_constants.h"
26 #include "ixheaac_basic_ops32.h"
27 #include "ixheaac_basic_ops16.h"
28 #include "ixheaac_basic_ops40.h"
29 #include "ixheaac_basic_ops.h"
30 
31 #include "ixheaac_basic_op.h"
32 #include "ixheaacd_intrinsics.h"
33 #include "ixheaacd_common_rom.h"
34 #include "ixheaacd_sbrdecsettings.h"
35 #include "ixheaacd_bitbuffer.h"
36 #include "ixheaacd_defines.h"
37 
38 #include "ixheaacd_pns.h"
39 
40 #include "ixheaacd_aac_rom.h"
41 #include "ixheaacd_aac_imdct.h"
42 #include "ixheaacd_pulsedata.h"
43 
44 #include "ixheaacd_drc_data_struct.h"
45 
46 #include "ixheaacd_lt_predict.h"
47 
48 #include "ixheaacd_cnst.h"
49 #include "ixheaacd_ec_defines.h"
50 #include "ixheaacd_ec_struct_def.h"
51 
52 #include "ixheaacd_channelinfo.h"
53 #include "ixheaacd_drc_dec.h"
54 
55 #include "ixheaacd_sbrdecoder.h"
56 #include "ixheaacd_tns.h"
57 #include "ixheaacd_sbr_scale.h"
58 #include "ixheaacd_lpp_tran.h"
59 #include "ixheaacd_env_extr_part.h"
60 #include "ixheaacd_sbr_rom.h"
61 #include "ixheaacd_block.h"
62 #include "ixheaacd_hybrid.h"
63 #include "ixheaacd_ps_dec.h"
64 #include "ixheaacd_env_extr.h"
65 #include "ixheaacd_basic_funcs.h"
66 #include "ixheaacd_env_calc.h"
67 #include "ixheaacd_interface.h"
68 #include "ixheaacd_dsp_fft32x32s.h"
69 
70 WORD32 (*ixheaacd_fix_div)(WORD32, WORD32) = &ixheaacd_fix_div_dec;
71 
72 VOID(*ixheaacd_covariance_matrix_calc)
73 (WORD32 *, ia_lpp_trans_cov_matrix *,
74  WORD32, WORD32) = &ixheaacd_covariance_matrix_calc_dec;
75 
76 VOID(*ixheaacd_covariance_matrix_calc_2)
77 (ia_lpp_trans_cov_matrix *, WORD32 *, WORD32,
78  WORD16) = &ixheaacd_covariance_matrix_calc_2_dec;
79 
80 VOID(*ixheaacd_over_lap_add1)
81 (WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
82  WORD16) = &ixheaacd_over_lap_add1_dec;
83 
84 VOID(*ixheaacd_over_lap_add2)
85 (WORD32 *, WORD32 *, WORD32 *, const WORD16 *, WORD16, WORD16,
86  WORD16) = &ixheaacd_over_lap_add2_dec;
87 
88 VOID(*ixheaacd_decorr_filter2)
89 (ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_buf_left_real, WORD32 *p_buf_left_imag,
90  WORD32 *p_buf_right_real, WORD32 *p_buf_right_imag,
91  ia_ps_tables_struct *ps_tables_ptr,
92  WORD16 *transient_ratio) = &ixheaacd_decorr_filter2_dec;
93 
94 VOID(*ixheaacd_decorr_filter1)
95 (ia_ps_dec_struct *ptr_ps_dec, ia_ps_tables_struct *ps_tables_ptr,
96  WORD16 *transient_ratio) = &ixheaacd_decorr_filter1_dec;
97 
98 WORD32(*ixheaacd_divide16_pos)
99 (WORD32 op1, WORD32 op2) = &ixheaacd_divide16_pos_dec;
100 
101 VOID(*ixheaacd_decorrelation)
102 (ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_buf_left_real, WORD32 *p_buf_left_imag,
103  WORD32 *p_buf_right_real, WORD32 *p_buf_right_imag,
104  ia_ps_tables_struct *ps_tables_ptr) = &ixheaacd_decorrelation_dec;
105 
106 VOID(*ixheaacd_apply_rot)
107 (ia_ps_dec_struct *ptr_ps_dec, WORD32 *p_qmf_left_re, WORD32 *p_qmf_left_im,
108  WORD32 *p_qmf_right_re, WORD32 *p_qmf_right_im,
109  ia_sbr_tables_struct *sbr_tables_ptr,
110  const WORD16 *ptr_res) = &ixheaacd_apply_rot_dec;
111 
112 VOID(*ixheaacd_conv_ergtoamplitudelp)
113 (WORD32 bands, WORD16 noise_e, WORD16 *nrg_sine, WORD16 *nrg_gain,
114  WORD16 *noise_level_mant,
115  WORD16 *sqrt_table) = &ixheaacd_conv_ergtoamplitudelp_dec;
116 
117 VOID(*ixheaacd_conv_ergtoamplitude)
118 (WORD32 bands, WORD16 noise_e, WORD16 *nrg_sine, WORD16 *nrg_gain,
119  WORD16 *noise_level_mant,
120  WORD16 *sqrt_table) = &ixheaacd_conv_ergtoamplitude_dec;
121 
122 VOID(*ixheaacd_adjust_scale)
123 (WORD32 **re, WORD32 **im, WORD32 sub_band_start, WORD32 sub_band_end,
124  WORD32 start_pos, WORD32 next_pos, WORD32 shift,
125  FLAG low_pow_flag) = &ixheaacd_adjust_scale_dec;
126 
127 WORD16(*ixheaacd_ixheaacd_expsubbandsamples)
128 (WORD32 **re, WORD32 **im, WORD32 sub_band_start, WORD32 sub_band_end,
129  WORD32 start_pos, WORD32 next_pos,
130  FLAG low_pow_flag) = &ixheaacd_expsubbandsamples_dec;
131 
132 VOID(*ixheaacd_enery_calc_per_subband)
133 (WORD32 start_pos, WORD32 next_pos, WORD32 sub_band_start, WORD32 sub_band_end,
134  WORD32 frame_exp, WORD16 *nrg_est_mant, FLAG low_pow_flag,
135  ia_sbr_tables_struct *ptr_sbr_tables,
136  WORD32 *ptr_qmf_matrix) = &ixheaacd_enery_calc_per_subband_dec;
137 
138 VOID(*ixheaacd_harm_idx_zerotwolp)
139 (WORD32 *ptr_real_buf, WORD16 *ptr_gain_buf, WORD32 scale_change,
140  WORD16 *ptr_sine_level_buf, const WORD32 *ptr_rand_ph,
141  WORD16 *noise_level_mant, WORD32 num_sub_bands, FLAG noise_absc_flag,
142  WORD32 harm_index) = &ixheaacd_harm_idx_zerotwolp_dec;
143 
144 VOID(*ixheaacd_tns_ar_filter_fixed)
145 (WORD32 *spectrum, WORD32 size, WORD32 inc, WORD32 *lpc, WORD32 order,
146  WORD32 shift_value, WORD scale_spec) = &ixheaacd_tns_ar_filter_fixed_dec;
147 
148 VOID(*ixheaacd_tns_ar_filter)
149 (WORD32 *spectrum, WORD32 size, WORD32 inc, WORD16 *lpc, WORD32 order,
150  WORD32 shift_value, WORD scale_spec,
151  WORD32 *ptr_filter_state) = &ixheaacd_tns_ar_filter_dec;
152 
153 VOID(*ixheaacd_tns_parcor_lpc_convert)
154 (WORD16 *parcor, WORD16 *lpc, WORD16 *scale,
155  WORD order) = &ixheaacd_tns_parcor_lpc_convert_dec;
156 
157 WORD32(*ixheaacd_calc_max_spectral_line)
158 (WORD32 *ptr_tmp, WORD32 size) = &ixheaacd_calc_max_spectral_line_dec;
159 
160 VOID(*ixheaacd_post_twiddle)
161 (WORD32 out_ptr[], WORD32 spec_data[],
162  ia_aac_dec_imdct_tables_struct *ptr_imdct_tables,
163  WORD npoints) = &ixheaacd_post_twiddle_dec;
164 
165 VOID(*ixheaacd_post_twid_overlap_add)
166 (WORD32 pcm_out[], WORD32 spec_data[],
167  ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints,
168  WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window,
169  WORD16 ch_fac) = &ixheaacd_post_twid_overlap_add_dec;
170 
171 VOID(*ixheaacd_neg_shift_spec)
172 (WORD32 *coef, WORD32 *out, WORD16 q_shift,
173  WORD16 ch_fac) = &ixheaacd_neg_shift_spec_dec;
174 
175 VOID(*ixheaacd_spec_to_overlapbuf)
176 (WORD32 *ptr_overlap_buf, WORD32 *ptr_spec_coeff, WORD32 q_shift,
177  WORD32 size) = &ixheaacd_spec_to_overlapbuf_dec;
178 
179 VOID(*ixheaacd_overlap_buf_out)
180 (WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 size,
181  const WORD16 ch_fac) = &ixheaacd_overlap_buf_out_dec;
182 
183 VOID(*ixheaacd_overlap_out_copy)
184 (WORD32 *out_samples, WORD32 *ptr_overlap_buf, WORD32 *ptr_overlap_buf1,
185  const WORD16 ch_fac, WORD16 size_01) = &ixheaacd_overlap_out_copy_dec;
186 
187 VOID(*ixheaacd_pretwiddle_compute)
188 (WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr,
189  ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4,
190  WORD32 neg_expo) = &ixheaacd_pretwiddle_compute_dec;
191 
192 VOID(*ixheaacd_imdct_using_fft)
193 (ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints,
194  WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_imdct_using_fft_dec;
195 
196 VOID(*ixheaacd_complex_fft_p2)
197 (WORD32 *xr, WORD32 *xi, WORD32 nlength, WORD32 fft_mode,
198  WORD32 *preshift) = &ixheaacd_complex_fft_p2_dec;
199 
200 VOID(*ixheaacd_calc_pre_twid)
201 (WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
202  const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_pre_twid_dec;
203 
204 VOID(*ixheaacd_calc_post_twid)
205 (WORD32 *ptr_x, WORD32 *r_ptr, WORD32 *i_ptr, WORD32 nlength,
206  const WORD32 *cos_ptr, const WORD32 *sin_ptr) = &ixheaacd_calc_post_twid_dec;
207 
208 VOID(*ixheaacd_mps_synt_out_calc)
209 (WORD32 resolution, FLOAT32 *out, FLOAT32 *state,
210  const FLOAT32 *filter_coeff) = &ixheaacd_mps_synt_out_calc_dec;
211 
212 VOID(*ixheaacd_fft_15_ld)
213 (WORD32 *inp, WORD32 *op, WORD32 *fft3out,
214  UWORD8 *re_arr_tab_sml_240_ptr) = &ixheaacd_fft_15_ld_dec;
215 
216 VOID(*ixheaacd_aac_ld_dec_rearrange)
217 (WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
218  UWORD8 *re_arr_tab) = &ixheaacd_rearrange_dec;
219 
220 VOID(*ixheaacd_fft32x32_ld)
221 (ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
222  WORD32 *ptr_x, WORD32 *ptr_y) = ixheaacd_fft32x32_ld_dec;
223 
224 VOID(*ixheaacd_fft32x32_ld2)
225 (ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints,
226  WORD32 *ptr_x, WORD32 *ptr_y) = &ixheaacd_fft32x32_ld_dec;
227 
228 WORD16 (*ixheaacd_neg_expo_inc)(WORD16 neg_expo) = &ixheaacd_neg_expo_inc_dec;
229 
230 VOID(*ixheaacd_inv_dit_fft_8pt)
231 (WORD32 *x, WORD32 *real, WORD32 *imag) = &ixheaacd_inv_dit_fft_8pt_dec;
232 
233 VOID(*ixheaacd_scale_factor_process)
234 (WORD32 *x_invquant, WORD16 *scale_fact, WORD no_band, WORD8 *width,
235  WORD32 *scale_tables_ptr, WORD32 total_channels, WORD32 object_type,
236  WORD32 aac_sf_data_resil_flag) = &ixheaacd_scale_factor_process_dec;
237 
238 VOID(*ixheaacd_covariance_matrix_calc_960)
239 (WORD32 *, ia_lpp_trans_cov_matrix *,
240  WORD32, WORD32) = &ixheaacd_covariance_matrix_calc_dec_960;
241 
242 VOID(*ixheaacd_aac_ld_dec_rearrange_960)
243 (WORD32 *ip, WORD32 *op, WORD32 mdct_len_2,
244  WORD16 *re_arr_tab) = &ixheaacd_dec_rearrange_short;
245 
246 VOID(*ixheaacd_pretwiddle_compute_960)
247 (WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr,
248  ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4,
249  WORD32 neg_expo) = &ixheaacd_pretwiddle_compute_960_dec;
250