xref: /aosp_15_r20/external/libxaac/decoder/ixheaacd_block.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_BLOCK_H
21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_BLOCK_H
22*15dc779aSAndroid Build Coastguard Worker 
23*15dc779aSAndroid Build Coastguard Worker #define IQ_TABLE_SIZE_HALF 128
24*15dc779aSAndroid Build Coastguard Worker 
25*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_inverse_quantize(WORD32 *x_invquant, WORD no_band,
26*15dc779aSAndroid Build Coastguard Worker                                WORD32 *ixheaacd_pow_table_Q13,
27*15dc779aSAndroid Build Coastguard Worker                                WORD8 *scratch_in);
28*15dc779aSAndroid Build Coastguard Worker 
29*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_factor_process_dec(WORD32 *x_invquant, WORD16 *scale_fact,
30*15dc779aSAndroid Build Coastguard Worker                                        WORD no_band, WORD8 *width,
31*15dc779aSAndroid Build Coastguard Worker                                        WORD32 *scale_tables_ptr,
32*15dc779aSAndroid Build Coastguard Worker                                        WORD32 total_channels,
33*15dc779aSAndroid Build Coastguard Worker                                        WORD32 object_type,
34*15dc779aSAndroid Build Coastguard Worker                                        WORD32 aac_sf_data_resil_flag);
35*15dc779aSAndroid Build Coastguard Worker 
36*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_factor_process_armv7(WORD32 *x_invquant, WORD16 *scale_fact,
37*15dc779aSAndroid Build Coastguard Worker                                          WORD no_band, WORD8 *width,
38*15dc779aSAndroid Build Coastguard Worker                                          WORD32 *scale_tables_ptr,
39*15dc779aSAndroid Build Coastguard Worker                                          WORD32 total_channels,
40*15dc779aSAndroid Build Coastguard Worker                                          WORD32 object_type,
41*15dc779aSAndroid Build Coastguard Worker                                          WORD32 aac_sf_data_resil_flag);
42*15dc779aSAndroid Build Coastguard Worker 
43*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_scale_factor_process_armv8(WORD32 *x_invquant, WORD16 *scale_fact,
44*15dc779aSAndroid Build Coastguard Worker                                          WORD no_band, WORD8 *width,
45*15dc779aSAndroid Build Coastguard Worker                                          WORD32 *scale_tables_ptr,
46*15dc779aSAndroid Build Coastguard Worker                                          WORD32 total_channels,
47*15dc779aSAndroid Build Coastguard Worker                                          WORD32 object_type,
48*15dc779aSAndroid Build Coastguard Worker                                          WORD32 aac_sf_data_resil_flag);
49*15dc779aSAndroid Build Coastguard Worker 
50*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_right_shift_block(WORD32 *p_spectrum, WORD length,
51*15dc779aSAndroid Build Coastguard Worker                                 WORD shift_val);
52*15dc779aSAndroid Build Coastguard Worker 
53*15dc779aSAndroid Build Coastguard Worker WORD ixheaacd_decode_huffman(ia_bit_buf_struct *it_bit_buff, WORD32 cb_no,
54*15dc779aSAndroid Build Coastguard Worker                              WORD32 *spec_coef, WORD16 *sfb_offset, WORD start,
55*15dc779aSAndroid Build Coastguard Worker                              WORD sfb, WORD group_len,
56*15dc779aSAndroid Build Coastguard Worker                              ia_aac_dec_tables_struct *ptr_aac_tables,
57*15dc779aSAndroid Build Coastguard Worker                              WORD32 maximum_bins_short);
58*15dc779aSAndroid Build Coastguard Worker 
59*15dc779aSAndroid Build Coastguard Worker WORD ixheaacd_huffman_dec_word2(ia_bit_buf_struct *it_bit_buff, WORD32 cb_no,
60*15dc779aSAndroid Build Coastguard Worker                                 WORD32 width,
61*15dc779aSAndroid Build Coastguard Worker                                 ia_aac_dec_tables_struct *ptr_aac_tables,
62*15dc779aSAndroid Build Coastguard Worker                                 WORD32 *x_invquant, WORD8 *scratch_ptr);
63*15dc779aSAndroid Build Coastguard Worker 
64*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_read_scale_factor_data(
65*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
66*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info,
67*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_tables_struct *ptr_aac_tables, WORD32 object_type);
68*15dc779aSAndroid Build Coastguard Worker 
69*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_read_spectral_data(
70*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
71*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info,
72*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_tables_struct *ptr_aac_tables, WORD32 total_channels,
73*15dc779aSAndroid Build Coastguard Worker     WORD32 frame_size, WORD32 object_type, WORD32 aac_spect_data_resil_flag,
74*15dc779aSAndroid Build Coastguard Worker     WORD32 aac_sf_data_resil_flag);
75*15dc779aSAndroid Build Coastguard Worker 
76*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ixheaacd_read_section_data(
77*15dc779aSAndroid Build Coastguard Worker     ia_bit_buf_struct *it_bit_buff,
78*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info,
79*15dc779aSAndroid Build Coastguard Worker     WORD32 aac_spect_data_resil_flag, WORD32 aac_sect_data_resil_flag,
80*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_tables_struct *ptr_aac_tables);
81*15dc779aSAndroid Build Coastguard Worker 
82*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add1_dec(WORD32 *coef, WORD32 *prev, WORD32 *out,
83*15dc779aSAndroid Build Coastguard Worker                                 const WORD16 *window, WORD16 q_shift,
84*15dc779aSAndroid Build Coastguard Worker                                 WORD16 size, WORD16 ch_fac);
85*15dc779aSAndroid Build Coastguard Worker 
86*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add1_armv7(WORD32 *coef, WORD32 *prev, WORD32 *out,
87*15dc779aSAndroid Build Coastguard Worker                                   const WORD16 *window, WORD16 q_shift,
88*15dc779aSAndroid Build Coastguard Worker                                   WORD16 size, WORD16 ch_fac);
89*15dc779aSAndroid Build Coastguard Worker 
90*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add1_armv8(WORD32 *coef, WORD32 *prev, WORD32 *out,
91*15dc779aSAndroid Build Coastguard Worker                                   const WORD16 *window, WORD16 q_shift,
92*15dc779aSAndroid Build Coastguard Worker                                   WORD16 size, WORD16 ch_fac);
93*15dc779aSAndroid Build Coastguard Worker 
94*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add2_dec(WORD32 *coef, WORD32 *prev, WORD32 *out,
95*15dc779aSAndroid Build Coastguard Worker                                 const WORD16 *window, WORD16 q_shift,
96*15dc779aSAndroid Build Coastguard Worker                                 WORD16 size, WORD16 ch_fac);
97*15dc779aSAndroid Build Coastguard Worker 
98*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add2_armv7(WORD32 *coef, WORD32 *prev, WORD32 *out,
99*15dc779aSAndroid Build Coastguard Worker                                   const WORD16 *window, WORD16 q_shift,
100*15dc779aSAndroid Build Coastguard Worker                                   WORD16 size, WORD16 ch_fac);
101*15dc779aSAndroid Build Coastguard Worker 
102*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_over_lap_add2_armv8(WORD32 *coef, WORD32 *prev, WORD32 *out,
103*15dc779aSAndroid Build Coastguard Worker                                   const WORD16 *window, WORD16 q_shift,
104*15dc779aSAndroid Build Coastguard Worker                                   WORD16 size, WORD16 ch_fac);
105*15dc779aSAndroid Build Coastguard Worker 
106*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_set_corr_info(
107*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info, WORD16 pns_band);
108*15dc779aSAndroid Build Coastguard Worker 
109*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_gen_rand_vec(WORD32 scale, WORD shift, WORD32 *spec,
110*15dc779aSAndroid Build Coastguard Worker                            WORD32 sfb_width, WORD32 *random_vec);
111*15dc779aSAndroid Build Coastguard Worker 
112*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pns_process(
113*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_channel_info_struct *ptr_aac_dec_channel_info[], WORD32 channel,
114*15dc779aSAndroid Build Coastguard Worker     ia_aac_dec_tables_struct *ptr_aac_tables);
115*15dc779aSAndroid Build Coastguard Worker 
116*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_spec_to_overlapbuf_dec(WORD32 *ptr_overlap_buf,
117*15dc779aSAndroid Build Coastguard Worker                                      WORD32 *ptr_spec_coeff, WORD32 q_shift,
118*15dc779aSAndroid Build Coastguard Worker                                      WORD32 size);
119*15dc779aSAndroid Build Coastguard Worker 
120*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_spec_to_overlapbuf_armv7(WORD32 *ptr_overlap_buf,
121*15dc779aSAndroid Build Coastguard Worker                                        WORD32 *ptr_spec_coeff, WORD32 q_shift,
122*15dc779aSAndroid Build Coastguard Worker                                        WORD32 size);
123*15dc779aSAndroid Build Coastguard Worker 
124*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_overlap_buf_out_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
125*15dc779aSAndroid Build Coastguard Worker                                   WORD32 size, const WORD16 ch_fac);
126*15dc779aSAndroid Build Coastguard Worker 
127*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_overlap_buf_out_armv7(WORD32 *out_samples,
128*15dc779aSAndroid Build Coastguard Worker                                     WORD32 *ptr_overlap_buf, WORD32 size,
129*15dc779aSAndroid Build Coastguard Worker                                     const WORD16 ch_fac);
130*15dc779aSAndroid Build Coastguard Worker 
131*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_inv_quant(WORD32 *x_quant, WORD32 *ixheaacd_pow_table_Q13);
132*15dc779aSAndroid Build Coastguard Worker 
133*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_imdct_process(ia_aac_dec_overlap_info *ptr_aac_dec_overlap_info,
134*15dc779aSAndroid Build Coastguard Worker                             WORD32 *ptr_spec_coeff,
135*15dc779aSAndroid Build Coastguard Worker                             ia_ics_info_struct *ptr_ics_info, VOID *out_samples,
136*15dc779aSAndroid Build Coastguard Worker                             const WORD16 ch_fac, WORD32 *scratch,
137*15dc779aSAndroid Build Coastguard Worker                             ia_aac_dec_tables_struct *ptr_aac_tables,
138*15dc779aSAndroid Build Coastguard Worker                             WORD32 object_type, WORD32 ld_mps_present,
139*15dc779aSAndroid Build Coastguard Worker                             WORD slot_element);
140*15dc779aSAndroid Build Coastguard Worker 
141*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_neg_shift_spec_dec(WORD32 *coef, WORD32 *out, WORD16 q_shift,
142*15dc779aSAndroid Build Coastguard Worker                                  WORD16 ch_fac);
143*15dc779aSAndroid Build Coastguard Worker 
144*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_nolap_dec(WORD32 *coef, WORD32 *out, WORD16 q_shift,
145*15dc779aSAndroid Build Coastguard Worker                         WORD16 ch_fac, WORD16 size_01);
146*15dc779aSAndroid Build Coastguard Worker 
147*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_neg_shift_spec_armv7(WORD32 *coef, WORD32 *out, WORD16 q_shift,
148*15dc779aSAndroid Build Coastguard Worker                                    WORD16 ch_fac);
149*15dc779aSAndroid Build Coastguard Worker 
150*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_neg_shift_spec_armv8(WORD32 *coef, WORD32 *out, WORD16 q_shift,
151*15dc779aSAndroid Build Coastguard Worker                                    WORD16 ch_fac);
152*15dc779aSAndroid Build Coastguard Worker 
153*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_nolap1_32(WORD32 *coef, WORD32 *out, WORD16 cu_scale,
154*15dc779aSAndroid Build Coastguard Worker                         WORD16 stride, WORD16 size_01);
155*15dc779aSAndroid Build Coastguard Worker 
156*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_overlap_out_copy_dec(WORD32 *out_samples, WORD32 *ptr_overlap_buf,
157*15dc779aSAndroid Build Coastguard Worker                                    WORD32 *ptr_overlap_buf1,
158*15dc779aSAndroid Build Coastguard Worker                                    const WORD16 ch_fac, WORD16 size_01);
159*15dc779aSAndroid Build Coastguard Worker 
160*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_overlap_out_copy_armv7(WORD32 *out_samples,
161*15dc779aSAndroid Build Coastguard Worker                                      WORD32 *ptr_overlap_buf,
162*15dc779aSAndroid Build Coastguard Worker                                      WORD32 *ptr_overlap_buf1,
163*15dc779aSAndroid Build Coastguard Worker                                      const WORD16 ch_fac);
164*15dc779aSAndroid Build Coastguard Worker 
165*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_long_short_win_seq(WORD32 *current, WORD32 *prev, WORD32 *out,
166*15dc779aSAndroid Build Coastguard Worker                                  const WORD16 *short_window,
167*15dc779aSAndroid Build Coastguard Worker                                  const WORD16 *short_window_prev,
168*15dc779aSAndroid Build Coastguard Worker                                  const WORD16 *long_window_prev, WORD16 q_shift,
169*15dc779aSAndroid Build Coastguard Worker                                  WORD16 ch_fac, WORD16 size_01);
170*15dc779aSAndroid Build Coastguard Worker 
171*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_cnt_leading_ones(WORD32 a);
172*15dc779aSAndroid Build Coastguard Worker 
173*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_huffman_decode(WORD32 it_bit_buff, WORD16 *huff_index,
174*15dc779aSAndroid Build Coastguard Worker                              WORD16 *len, const UWORD16 *input_table,
175*15dc779aSAndroid Build Coastguard Worker                              const UWORD32 *idx_table);
176*15dc779aSAndroid Build Coastguard Worker 
177*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_eld_dec_windowing(WORD32 *ptr_spect_coeff, const WORD16 *ptr_win,
178*15dc779aSAndroid Build Coastguard Worker                                 WORD32 framesize, WORD16 q_shift,
179*15dc779aSAndroid Build Coastguard Worker                                 WORD32 *ptr_overlap_buf, const WORD16 stride,
180*15dc779aSAndroid Build Coastguard Worker                                 VOID *out_samples, WORD slot_element);
181*15dc779aSAndroid Build Coastguard Worker 
182*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_eld_dec_windowing_32bit(WORD32 *ptr_spect_coeff,
183*15dc779aSAndroid Build Coastguard Worker                                       const WORD16 *ptr_win, WORD32 framesize,
184*15dc779aSAndroid Build Coastguard Worker                                       WORD16 q_shift, WORD32 *ptr_overlap_buf,
185*15dc779aSAndroid Build Coastguard Worker                                       const WORD16 stride, WORD32 *out_samples);
186*15dc779aSAndroid Build Coastguard Worker 
187*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_process_single_scf(WORD32 scale_factor, WORD32 *x_invquant,
188*15dc779aSAndroid Build Coastguard Worker                                  WORD32 width, WORD32 *ptr_scale_table,
189*15dc779aSAndroid Build Coastguard Worker                                  WORD32 total_channels, WORD32 object_type,
190*15dc779aSAndroid Build Coastguard Worker                                  WORD32 aac_sf_data_resil_flag);
191*15dc779aSAndroid Build Coastguard Worker 
192*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_lap1_512_480(WORD32 *coef, WORD32 *prev, VOID *out_tmp,
193*15dc779aSAndroid Build Coastguard Worker                            const WORD16 *window, WORD16 q_shift, WORD16 size,
194*15dc779aSAndroid Build Coastguard Worker                            WORD16 stride, WORD slot_element);
195*15dc779aSAndroid Build Coastguard Worker 
196*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_dec_copy_outsample(WORD32 *out_samples, WORD32 *p_overlap_buffer,
197*15dc779aSAndroid Build Coastguard Worker                                  WORD32 size, WORD16 stride);
198*15dc779aSAndroid Build Coastguard Worker 
199*15dc779aSAndroid Build Coastguard Worker #endif /* #ifndef IXHEAACD_BLOCK_H */
200