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_AAC_IMDCT_H 21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_AAC_IMDCT_H 22*15dc779aSAndroid Build Coastguard Worker 23*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_inverse_transform( 24*15dc779aSAndroid Build Coastguard Worker WORD32 spec_data[], WORD32 scratch[], 25*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 expo, 26*15dc779aSAndroid Build Coastguard Worker WORD32 npoints); 27*15dc779aSAndroid Build Coastguard Worker 28*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_inverse_transform_960( 29*15dc779aSAndroid Build Coastguard Worker WORD32 spec_data[], WORD32 scratch[], 30*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 expo, 31*15dc779aSAndroid Build Coastguard Worker WORD32 *imdct_scale); 32*15dc779aSAndroid Build Coastguard Worker 33*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_dec(WORD32 out_ptr[], WORD32 spec_data[], 34*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, 35*15dc779aSAndroid Build Coastguard Worker WORD32 npoints); 36*15dc779aSAndroid Build Coastguard Worker 37*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_armv7( 38*15dc779aSAndroid Build Coastguard Worker WORD32 out_ptr[], WORD32 spec_data[], 39*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints); 40*15dc779aSAndroid Build Coastguard Worker 41*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_armv8( 42*15dc779aSAndroid Build Coastguard Worker WORD32 out_ptr[], WORD32 spec_data[], 43*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints); 44*15dc779aSAndroid Build Coastguard Worker 45*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twid_overlap_add_dec( 46*15dc779aSAndroid Build Coastguard Worker WORD32 pcm_out[], WORD32 spec_data[], 47*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints, 48*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window, 49*15dc779aSAndroid Build Coastguard Worker WORD16 ch_fac); 50*15dc779aSAndroid Build Coastguard Worker 51*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twid_overlap_add_armv7( 52*15dc779aSAndroid Build Coastguard Worker WORD32 pcm_out[], WORD32 spec_data[], 53*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints, 54*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window, 55*15dc779aSAndroid Build Coastguard Worker WORD16 ch_fac); 56*15dc779aSAndroid Build Coastguard Worker 57*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twid_overlap_add_armv8( 58*15dc779aSAndroid Build Coastguard Worker WORD32 pcm_out[], WORD32 spec_data[], 59*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints, 60*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_overlap_buf, WORD16 q_shift, const WORD16 *window, 61*15dc779aSAndroid Build Coastguard Worker WORD16 ch_fac); 62*15dc779aSAndroid Build Coastguard Worker 63*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_dec( 64*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr, 65*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4, 66*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo); 67*15dc779aSAndroid Build Coastguard Worker 68*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_960_dec( 69*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr, 70*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4, 71*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo); 72*15dc779aSAndroid Build Coastguard Worker 73*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_armv7( 74*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr, 75*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4, 76*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo); 77*15dc779aSAndroid Build Coastguard Worker 78*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pretwiddle_compute_armv8( 79*15dc779aSAndroid Build Coastguard Worker WORD32 *spec_data1, WORD32 *spec_data2, WORD32 *out_ptr, 80*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD npoints4, 81*15dc779aSAndroid Build Coastguard Worker WORD32 neg_expo); 82*15dc779aSAndroid Build Coastguard Worker 83*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_imdct_using_fft_dec( 84*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints, 85*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y); 86*15dc779aSAndroid Build Coastguard Worker 87*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_imdct_using_fft_armv7( 88*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints, 89*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y); 90*15dc779aSAndroid Build Coastguard Worker 91*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_imdct_using_fft_armv8( 92*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *ptr_imdct_tables, WORD32 npoints, 93*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y); 94*15dc779aSAndroid Build Coastguard Worker 95*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_480_ld(WORD32 *inp, WORD32 *op, 96*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr); 97*15dc779aSAndroid Build Coastguard Worker 98*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_5(WORD32 *inp, WORD32 *op); 99*15dc779aSAndroid Build Coastguard Worker 100*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_3(WORD32 *inp, WORD32 *op); 101*15dc779aSAndroid Build Coastguard Worker 102*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_960_15(WORD32 *inp, WORD32 *op, 103*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr); 104*15dc779aSAndroid Build Coastguard Worker 105*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_960(WORD32 *inp, WORD32 *op, 106*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr); 107*15dc779aSAndroid Build Coastguard Worker 108*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_120(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, 109*15dc779aSAndroid Build Coastguard Worker WORD32 npoints, WORD32* ptr_x, WORD32* ptr_y); 110*15dc779aSAndroid Build Coastguard Worker 111*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_32_points(WORD16 *ptr_w, WORD32 npoints, 112*15dc779aSAndroid Build Coastguard Worker WORD32* ptr_x, WORD32* ptr_y); 113*15dc779aSAndroid Build Coastguard Worker 114*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_ld_dec_fft_15_opt(WORD32 *inp, WORD32 *op, WORD32 *fft3out, 115*15dc779aSAndroid Build Coastguard Worker WORD16 *re_arr_tab_sml_240_ptr); 116*15dc779aSAndroid Build Coastguard Worker 117*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_dec_rearrange_short(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2, 118*15dc779aSAndroid Build Coastguard Worker WORD16 *re_arr_tab); 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle(WORD32 *xptr, WORD32 *data, WORD32 n, 121*15dc779aSAndroid Build Coastguard Worker WORD32 *cos_array_ptr, WORD32 neg_expo); 122*15dc779aSAndroid Build Coastguard Worker 123*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle_960(WORD32 *xptr, WORD32 *data, WORD32 n, 124*15dc779aSAndroid Build Coastguard Worker WORD32 *cos_array_ptr, WORD32 neg_expo); 125*15dc779aSAndroid Build Coastguard Worker 126*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_pre_twiddle_120(WORD32 *xptr, WORD32 *data, WORD32 n, 127*15dc779aSAndroid Build Coastguard Worker WORD16 *cos_array_ptr, WORD32 neg_expo); 128*15dc779aSAndroid Build Coastguard Worker 129*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_ld(WORD32 out[], WORD32 x[], 130*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m); 131*15dc779aSAndroid Build Coastguard Worker 132*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_960(WORD32 out[], WORD32 x[], 133*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m); 134*15dc779aSAndroid Build Coastguard Worker 135*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_120(WORD32 out[], WORD32 x[], 136*15dc779aSAndroid Build Coastguard Worker const WORD16 *cos_sin_ptr, WORD m); 137*15dc779aSAndroid Build Coastguard Worker 138*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_post_twiddle_eld(WORD32 out[], WORD32 x[], 139*15dc779aSAndroid Build Coastguard Worker const WORD32 *cos_sin_ptr, WORD m); 140*15dc779aSAndroid Build Coastguard Worker 141*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft32x32_ld_dec(ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, 142*15dc779aSAndroid Build Coastguard Worker WORD32 npoints, WORD32 *ptr_x, WORD32 *ptr_y); 143*15dc779aSAndroid Build Coastguard Worker 144*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft32x32_ld2_armv7( 145*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints, 146*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y); 147*15dc779aSAndroid Build Coastguard Worker 148*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft32x32_ld2_armv8( 149*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 npoints, 150*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_x, WORD32 *ptr_y); 151*15dc779aSAndroid Build Coastguard Worker 152*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_neg_expo_inc_dec(WORD16 neg_expo); 153*15dc779aSAndroid Build Coastguard Worker 154*15dc779aSAndroid Build Coastguard Worker WORD16 ixheaacd_neg_expo_inc_arm(WORD16 neg_expo); 155*15dc779aSAndroid Build Coastguard Worker 156*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_rearrange_dec(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2, 157*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab); 158*15dc779aSAndroid Build Coastguard Worker 159*15dc779aSAndroid Build Coastguard Worker VOID ia_aac_ld_dec_rearrange_armv7(WORD32 *ip, WORD32 *op, WORD32 mdct_len_2, 160*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab); 161*15dc779aSAndroid Build Coastguard Worker 162*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_15_ld_dec(WORD32 *inp, WORD32 *op, WORD32 *fft3out, 163*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab_sml_240_ptr); 164*15dc779aSAndroid Build Coastguard Worker 165*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_fft_15_ld_armv7(WORD32 *inp, WORD32 *op, WORD32 *fft3out, 166*15dc779aSAndroid Build Coastguard Worker UWORD8 *re_arr_tab_sml_240_ptr); 167*15dc779aSAndroid Build Coastguard Worker 168*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_inverse_transform_512( 169*15dc779aSAndroid Build Coastguard Worker WORD32 data[], WORD32 temp[], WORD32 *imdct_scale, WORD32 *cos_sin_ptr, 170*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, WORD32 object_type); 171*15dc779aSAndroid Build Coastguard Worker 172*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mdct_960(WORD32 *inp, WORD32 *scratch, WORD32 *mdct_scale, 173*15dc779aSAndroid Build Coastguard Worker WORD32 mdct_flag, 174*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr); 175*15dc779aSAndroid Build Coastguard Worker 176*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_mdct_480_ld(WORD32 *inp, WORD32 *scratch, WORD32 *mdct_scale, 177*15dc779aSAndroid Build Coastguard Worker WORD32 mdct_flag, 178*15dc779aSAndroid Build Coastguard Worker ia_aac_dec_imdct_tables_struct *imdct_tables_ptr, 179*15dc779aSAndroid Build Coastguard Worker WORD32 object_type); 180*15dc779aSAndroid Build Coastguard Worker #endif 181