1*15dc779aSAndroid Build Coastguard Worker /****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker * * 3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2023 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 21*15dc779aSAndroid Build Coastguard Worker #pragma once 22*15dc779aSAndroid Build Coastguard Worker #define AACENC_MAX_CHANNELS 2 /* encoder max channels */ 23*15dc779aSAndroid Build Coastguard Worker #define AACENC_TRANS_FAC 8 /* encoder WORD16 long ratio */ 24*15dc779aSAndroid Build Coastguard Worker #define AACENC_PCM_LEVEL 1.0 /* encoder pcm 0db refernence */ 25*15dc779aSAndroid Build Coastguard Worker 26*15dc779aSAndroid Build Coastguard Worker #define LD_FFT_TWIDDLE_TABLE_SIZE 9 27*15dc779aSAndroid Build Coastguard Worker #define FFT_TWIDDLE_TABLE_SIZE (1 << LD_FFT_TWIDDLE_TABLE_SIZE) 28*15dc779aSAndroid Build Coastguard Worker 29*15dc779aSAndroid Build Coastguard Worker /*MDCT Tables*/ 30*15dc779aSAndroid Build Coastguard Worker typedef struct { 31*15dc779aSAndroid Build Coastguard Worker UWORD8 re_arr_tab_16[240]; 32*15dc779aSAndroid Build Coastguard Worker UWORD8 re_arr_tab_sml_240[240]; 33*15dc779aSAndroid Build Coastguard Worker const FLOAT32 cosine_array_960[480]; 34*15dc779aSAndroid Build Coastguard Worker WORD32 dig_rev_tab_16[2]; 35*15dc779aSAndroid Build Coastguard Worker WORD16 w_16[24]; 36*15dc779aSAndroid Build Coastguard Worker const FLOAT32 cosine_array_1024[512]; 37*15dc779aSAndroid Build Coastguard Worker const WORD16 w_256[512]; 38*15dc779aSAndroid Build Coastguard Worker const WORD32 dig_rev_table_512[32]; 39*15dc779aSAndroid Build Coastguard Worker const FLOAT32 win_512_ld[1920]; 40*15dc779aSAndroid Build Coastguard Worker const FLOAT32 win_480_ld[1800]; 41*15dc779aSAndroid Build Coastguard Worker } ixheaace_mdct_tables; 42*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_mdct_tables ixheaace_enc_mdct_tab; 43*15dc779aSAndroid Build Coastguard Worker 44*15dc779aSAndroid Build Coastguard Worker /*Huffman Tables*/ 45*15dc779aSAndroid Build Coastguard Worker typedef struct { 46*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab1_2[3][3][3][3]; 47*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab3_4[3][3][3][3]; 48*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab5_6[9][27]; 49*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab7_8[8][27]; 50*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab9_10[13][27]; 51*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltab11[17][27]; 52*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ltabscf[121]; 53*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab1[3][3][3][3]; 54*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab2[3][3][3][3]; 55*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab3[3][3][3][3]; 56*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab4[3][3][3][3]; 57*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab5[9][9]; 58*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab6[9][9]; 59*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab7[8][8]; 60*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab8[8][8]; 61*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab9[13][13]; 62*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab10[13][13]; 63*15dc779aSAndroid Build Coastguard Worker const UWORD16 huff_ctab11[17][17]; 64*15dc779aSAndroid Build Coastguard Worker const UWORD32 huff_ctabscf[121]; 65*15dc779aSAndroid Build Coastguard Worker } ixheaace_huffman_tables; 66*15dc779aSAndroid Build Coastguard Worker 67*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_huffman_tables ixheaace_enc_huff_tab; 68*15dc779aSAndroid Build Coastguard Worker 69*15dc779aSAndroid Build Coastguard Worker typedef struct { 70*15dc779aSAndroid Build Coastguard Worker WORD32 sample_rate; 71*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_long[MAXIMUM_SCALE_FACTOR_BAND_LONG]; 72*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_short[MAXIMUM_SCALE_FACTOR_BAND_SHORT]; 73*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_long_960[MAXIMUM_SCALE_FACTOR_BAND_LONG]; 74*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_short_120[1 + MAXIMUM_SCALE_FACTOR_BAND_SHORT]; 75*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_long_512_ld[MAXIMUM_SCALE_FACTOR_BAND_LONG]; 76*15dc779aSAndroid Build Coastguard Worker const UWORD8 param_long_480_ld[MAXIMUM_SCALE_FACTOR_BAND_LONG]; 77*15dc779aSAndroid Build Coastguard Worker } ixheaace_sfb_info_tab; 78*15dc779aSAndroid Build Coastguard Worker 79*15dc779aSAndroid Build Coastguard Worker /*Psychoacostics Tables*/ 80*15dc779aSAndroid Build Coastguard Worker typedef struct { 81*15dc779aSAndroid Build Coastguard Worker const FLOAT32 ixheaace_bark_quiet_thr_val[25]; 82*15dc779aSAndroid Build Coastguard Worker const WORD32 pow_point_25_Q23[128]; 83*15dc779aSAndroid Build Coastguard Worker const WORD32 q_mod_4_inv_pow_point_25_Q32[4]; 84*15dc779aSAndroid Build Coastguard Worker const ixheaace_sfb_info_tab sfb_info_tab[12]; 85*15dc779aSAndroid Build Coastguard Worker } ixheaace_psycho_tables; 86*15dc779aSAndroid Build Coastguard Worker 87*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_psycho_tables ixheaace_enc_psycho_tab; 88*15dc779aSAndroid Build Coastguard Worker 89*15dc779aSAndroid Build Coastguard Worker /*Quantizer tables*/ 90*15dc779aSAndroid Build Coastguard Worker typedef struct { 91*15dc779aSAndroid Build Coastguard Worker const WORD q_quant_table_E_fix[17]; 92*15dc779aSAndroid Build Coastguard Worker const WORD q_inv_quant_table_E_fix[17]; 93*15dc779aSAndroid Build Coastguard Worker const WORD32 quant_table_q_Q30[16]; 94*15dc779aSAndroid Build Coastguard Worker const WORD32 inv_quant_table_q_Q27[16]; 95*15dc779aSAndroid Build Coastguard Worker const WORD32 power_3_by_4_tab[512]; 96*15dc779aSAndroid Build Coastguard Worker const WORD32 power_4_by_3_tab_fix[64]; 97*15dc779aSAndroid Build Coastguard Worker const WORD16 power_2_n_4_by_3_tab[10]; 98*15dc779aSAndroid Build Coastguard Worker } ixheaace_quant_tables; 99*15dc779aSAndroid Build Coastguard Worker 100*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_quant_tables ixheaace_enc_quant_tab; 101*15dc779aSAndroid Build Coastguard Worker typedef struct { 102*15dc779aSAndroid Build Coastguard Worker const ixheaace_temporal_noise_shaping_max_table tns_max_bands_table[12]; 103*15dc779aSAndroid Build Coastguard Worker const ixheaace_temporal_noise_shaping_info_tab tns_info_tab[5]; 104*15dc779aSAndroid Build Coastguard Worker const FLOAT32 tns_coeff_3[8]; 105*15dc779aSAndroid Build Coastguard Worker const FLOAT32 tns_coeff_3_borders[8]; 106*15dc779aSAndroid Build Coastguard Worker const FLOAT32 tns_coeff_4[16]; 107*15dc779aSAndroid Build Coastguard Worker const FLOAT32 tns_coeff_4_borders[16]; 108*15dc779aSAndroid Build Coastguard Worker } ixheaace_temporal_noise_shaping_tables; 109*15dc779aSAndroid Build Coastguard Worker 110*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_temporal_noise_shaping_tables ixheaace_enhaacplus_enc_tns_tab; 111*15dc779aSAndroid Build Coastguard Worker 112*15dc779aSAndroid Build Coastguard Worker typedef struct { 113*15dc779aSAndroid Build Coastguard Worker ixheaace_mdct_tables *pstr_mdct_tab; 114*15dc779aSAndroid Build Coastguard Worker ixheaace_huffman_tables *pstr_huff_tab; 115*15dc779aSAndroid Build Coastguard Worker ixheaace_psycho_tables *pstr_psycho_tab; 116*15dc779aSAndroid Build Coastguard Worker ixheaace_quant_tables *pstr_quant_tab; 117*15dc779aSAndroid Build Coastguard Worker ixheaace_temporal_noise_shaping_tables *pstr_tns_tab; 118*15dc779aSAndroid Build Coastguard Worker } ixheaace_aac_tables; 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker extern ixheaace_aac_tables ixheaace_enc_aac_tab; 121*15dc779aSAndroid Build Coastguard Worker 122*15dc779aSAndroid Build Coastguard Worker /***************/ 123*15dc779aSAndroid Build Coastguard Worker /* 124*15dc779aSAndroid Build Coastguard Worker input buffer (1ch) 125*15dc779aSAndroid Build Coastguard Worker 126*15dc779aSAndroid Build Coastguard Worker |------- 288 --------|--------------- 2048 -------------| 127*15dc779aSAndroid Build Coastguard Worker spectral_band_replication_2core delay Read, SBR, downmix and ds area 128*15dc779aSAndroid Build Coastguard Worker (downsampled) 129*15dc779aSAndroid Build Coastguard Worker */ 130*15dc779aSAndroid Build Coastguard Worker #define CORE_DELAY_LC (1600) 131*15dc779aSAndroid Build Coastguard Worker // LC Delay = (Core-delay LC) * 2 + SBR Decoder Delay - SBR Encoder Delay + Magic 132*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_LC ((CORE_DELAY_LC)*2 + 6 * 64 - 2048 + 1) 133*15dc779aSAndroid Build Coastguard Worker #define CORE_DELAY_LD_512 (512) 134*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_LD_512 ((CORE_DELAY_LD_512)*2 - 1024 + 1) 135*15dc779aSAndroid Build Coastguard Worker // ELD Delay = (Core-delay LD) * 2 + SBR Decoder Delay - SBR Encoder Delay 136*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELD_512 ((CORE_DELAY_LD_512)*2 + 0 - (16 * 64)) 137*15dc779aSAndroid Build Coastguard Worker // Original ELD delay value retained for multichannel files with MPS 138*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELD_512_MPS ((CORE_DELAY_LD_512)*2 + 1) 139*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELDV2_512 ((CORE_DELAY_LD_512 * 2) + 128 + 1) 140*15dc779aSAndroid Build Coastguard Worker 141*15dc779aSAndroid Build Coastguard Worker #define CORE_DELAY_LD_480 (480) 142*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_LD_480 ((CORE_DELAY_LD_480)*2 - 1024 + 1) 143*15dc779aSAndroid Build Coastguard Worker // ELD Delay = (Core-delay LD / 2) * 2 + SBR Decoder Delay - SBR Encoder Delay 144*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELD_480 ((CORE_DELAY_LD_480 / 2) * 2 + 0 - (15 * 64) + 576) 145*15dc779aSAndroid Build Coastguard Worker // Original ELD delay value retained for multichannel files with MPS 146*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELD_480_MPS (CORE_DELAY_LD_480 * 2 + 1) 147*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY_ELDV2_480 ((CORE_DELAY_LD_480 * 2) + 128 + 1) 148*15dc779aSAndroid Build Coastguard Worker #define CORE_DELAY (1600) 149*15dc779aSAndroid Build Coastguard Worker 150*15dc779aSAndroid Build Coastguard Worker /* ((1600 (core codec)*2 (multi rate) + 6 *(spectral_band_replication_ dec delay) - 151*15dc779aSAndroid Build Coastguard Worker * (spectral_band_replication_ enc delay) + magic*/ 152*15dc779aSAndroid Build Coastguard Worker #define INPUT_DELAY ((CORE_DELAY)*2 + 6 * 64 - 2048 + 1) 153*15dc779aSAndroid Build Coastguard Worker 154*15dc779aSAndroid Build Coastguard Worker /* For 2:1 resampler -> max phase delay * resamp_fac */ 155*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_DS_2_1_FILTER_DELAY (16) 156*15dc779aSAndroid Build Coastguard Worker 157*15dc779aSAndroid Build Coastguard Worker /* For 4:1 resampler -> max phase delay * resamp_fac */ 158*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_DS_4_1_FILTER_DELAY (64) 159*15dc779aSAndroid Build Coastguard Worker 160*15dc779aSAndroid Build Coastguard Worker /* For 8:1 resampler -> max phase delay * resamp_fac */ 161*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_DS_8_1_FILTER_DELAY (248) 162*15dc779aSAndroid Build Coastguard Worker 163*15dc779aSAndroid Build Coastguard Worker /* For 1:3 resampler -> max phase delay * resamp_fac */ 164*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_DS_1_3_FILTER_DELAY (36) 165*15dc779aSAndroid Build Coastguard Worker 166*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fd_quant_table[257]; 167*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fd_inv_quant_table[257]; 168*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_pow_4_3_table[64]; 169*15dc779aSAndroid Build Coastguard Worker extern const WORD32 ixheaace_huffman_code_table[121][2]; 170*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 long_window_KBD[1024]; 171*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 long_window_sine_960[960]; 172*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 fft_twiddle_tab[FFT_TWIDDLE_TABLE_SIZE + 1]; 173*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 long_window_sine[1024]; 174*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 long_window_sine_ld[512]; 175*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 long_window_sine_ld_480[480]; 176*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 short_window_sine[FRAME_LEN_SHORT_128]; 177*15dc779aSAndroid Build Coastguard Worker 178*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 short_window_sine_120[FRAME_LEN_SHORT_120]; 179*15dc779aSAndroid Build Coastguard Worker 180*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 iaace_iir_hipass_coeffs[2]; 181*15dc779aSAndroid Build Coastguard Worker 182*15dc779aSAndroid Build Coastguard Worker extern const WORD32 iaace_suggested_grouping_table[TRANS_FAC][MAXIMUM_NO_OF_GROUPS]; 183*15dc779aSAndroid Build Coastguard Worker 184*15dc779aSAndroid Build Coastguard Worker extern const WORD32 iaace_synchronized_block_types[4][4]; 185*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_mix_rad_twid_tbl[TRANS_FAC]; 186*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_mix_rad_twid_tbl_h[TRANS_FAC]; 187*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 cos_sin_table_flt[960]; 188*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fft_mix_rad_twid_tbl_32[(FFT16 - 1) * (FFT2 - 1)]; 189*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fft_mix_rad_twid_tbl_h_32[(FFT16 - 1) * (FFT2 - 1)]; 190*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fft_mix_rad_twid_tbl_480[(FFT15 - 1) * (FFT32 - 1)]; 191*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_fft_mix_rad_twid_h_tbl_480[(FFT15 - 1) * (FFT32 - 1)]; 192*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 ixheaace_cosine_array_240[120]; 193*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_5[16]; 194*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_3[16]; 195*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_sml[16]; 196*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_4[60]; 197*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_120[60]; 198*15dc779aSAndroid Build Coastguard Worker extern const WORD16 re_arr_tab_15_4[60]; 199*15dc779aSAndroid Build Coastguard Worker extern const FLOAT32 low_delay_window_eld[2048]; 200*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_lc[9]; 201*15dc779aSAndroid Build Coastguard Worker 202*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_ld_22050[11]; 203*15dc779aSAndroid Build Coastguard Worker 204*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_ld_24000[11]; 205*15dc779aSAndroid Build Coastguard Worker 206*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_ld_32000[11]; 207*15dc779aSAndroid Build Coastguard Worker 208*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_ld_44100[11]; 209*15dc779aSAndroid Build Coastguard Worker 210*15dc779aSAndroid Build Coastguard Worker extern const ixheaace_bandwidth_table bandwidth_table_ld_48000[11]; 211