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