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_BITBUFFER_H 21*15dc779aSAndroid Build Coastguard Worker #define IXHEAACD_BITBUFFER_H 22*15dc779aSAndroid Build Coastguard Worker 23*15dc779aSAndroid Build Coastguard Worker #include <setjmp.h> 24*15dc779aSAndroid Build Coastguard Worker 25*15dc779aSAndroid Build Coastguard Worker #define CRC_ADTS_HEADER_LEN 56 26*15dc779aSAndroid Build Coastguard Worker #define CRC_ADTS_RAW_DATA_BLK_LEN 192 27*15dc779aSAndroid Build Coastguard Worker #define CRC_ADTS_RAW_IIND_ICS 128 28*15dc779aSAndroid Build Coastguard Worker #define CRC_ADTS_LEN_ALL -1 29*15dc779aSAndroid Build Coastguard Worker 30*15dc779aSAndroid Build Coastguard Worker #define MAX_REG_SIZE 192 31*15dc779aSAndroid Build Coastguard Worker #define MAX_CRC_REGS 7 32*15dc779aSAndroid Build Coastguard Worker 33*15dc779aSAndroid Build Coastguard Worker struct ia_crc_bit_buf_struct { 34*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_base; 35*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_end; 36*15dc779aSAndroid Build Coastguard Worker 37*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_read_next; 38*15dc779aSAndroid Build Coastguard Worker WORD16 bit_pos; 39*15dc779aSAndroid Build Coastguard Worker WORD32 cnt_bits; 40*15dc779aSAndroid Build Coastguard Worker 41*15dc779aSAndroid Build Coastguard Worker WORD32 size; 42*15dc779aSAndroid Build Coastguard Worker }; 43*15dc779aSAndroid Build Coastguard Worker 44*15dc779aSAndroid Build Coastguard Worker typedef struct { 45*15dc779aSAndroid Build Coastguard Worker UWORD8 active; 46*15dc779aSAndroid Build Coastguard Worker WORD32 buf_size; 47*15dc779aSAndroid Build Coastguard Worker WORD32 max_bits; 48*15dc779aSAndroid Build Coastguard Worker UWORD32 bit_cnt; 49*15dc779aSAndroid Build Coastguard Worker WORD32 bit_buf_cnt; 50*15dc779aSAndroid Build Coastguard Worker struct ia_crc_bit_buf_struct str_bit_buf; 51*15dc779aSAndroid Build Coastguard Worker } ia_crc_reg_data_struct; 52*15dc779aSAndroid Build Coastguard Worker 53*15dc779aSAndroid Build Coastguard Worker typedef struct { 54*15dc779aSAndroid Build Coastguard Worker UWORD8 crc_active; 55*15dc779aSAndroid Build Coastguard Worker UWORD16 no_reg; 56*15dc779aSAndroid Build Coastguard Worker UWORD16 file_value; 57*15dc779aSAndroid Build Coastguard Worker UWORD16 crc_lookup[256]; 58*15dc779aSAndroid Build Coastguard Worker ia_crc_reg_data_struct str_crc_reg_data[MAX_CRC_REGS]; 59*15dc779aSAndroid Build Coastguard Worker } ia_adts_crc_info_struct; 60*15dc779aSAndroid Build Coastguard Worker 61*15dc779aSAndroid Build Coastguard Worker typedef struct ia_bit_buf_struct { 62*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_base; 63*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_end; 64*15dc779aSAndroid Build Coastguard Worker 65*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_read_next; 66*15dc779aSAndroid Build Coastguard Worker 67*15dc779aSAndroid Build Coastguard Worker WORD32 bit_pos; 68*15dc779aSAndroid Build Coastguard Worker WORD32 cnt_bits; 69*15dc779aSAndroid Build Coastguard Worker 70*15dc779aSAndroid Build Coastguard Worker WORD32 size; 71*15dc779aSAndroid Build Coastguard Worker 72*15dc779aSAndroid Build Coastguard Worker WORD32 adts_header_present; 73*15dc779aSAndroid Build Coastguard Worker WORD32 crc_check; 74*15dc779aSAndroid Build Coastguard Worker WORD8 protection_absent; 75*15dc779aSAndroid Build Coastguard Worker WORD8 no_raw_data_blocks; 76*15dc779aSAndroid Build Coastguard Worker ia_adts_crc_info_struct str_adts_crc_info; 77*15dc779aSAndroid Build Coastguard Worker ia_adts_crc_info_struct *pstr_adts_crc_info; 78*15dc779aSAndroid Build Coastguard Worker 79*15dc779aSAndroid Build Coastguard Worker WORD32 initial_cnt_bits; 80*15dc779aSAndroid Build Coastguard Worker WORD32 audio_mux_align; 81*15dc779aSAndroid Build Coastguard Worker WORD32 bit_count; 82*15dc779aSAndroid Build Coastguard Worker WORD32 valid_bits; 83*15dc779aSAndroid Build Coastguard Worker UWORD8 byte; 84*15dc779aSAndroid Build Coastguard Worker UWORD8 *byte_ptr; 85*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_start; 86*15dc779aSAndroid Build Coastguard Worker WORD32 write_bit_count; 87*15dc779aSAndroid Build Coastguard Worker WORD32 max_size; 88*15dc779aSAndroid Build Coastguard Worker jmp_buf *xaac_jmp_buf; 89*15dc779aSAndroid Build Coastguard Worker 90*15dc779aSAndroid Build Coastguard Worker } ia_bit_buf_struct; 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker typedef struct ia_crc_bit_buf_struct *ia_crc_bit_buf_struct_handle; 93*15dc779aSAndroid Build Coastguard Worker 94*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_byte_align(ia_bit_buf_struct *it_bit_buff, 95*15dc779aSAndroid Build Coastguard Worker WORD32 *ptr_byte_align_bits); 96*15dc779aSAndroid Build Coastguard Worker 97*15dc779aSAndroid Build Coastguard Worker ia_bit_buf_struct *ixheaacd_create_bit_buf(ia_bit_buf_struct *it_bit_buff, 98*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_base, 99*15dc779aSAndroid Build Coastguard Worker WORD32 bit_buf_size); 100*15dc779aSAndroid Build Coastguard Worker 101*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_create_init_bit_buf(ia_bit_buf_struct *it_bit_buff, 102*15dc779aSAndroid Build Coastguard Worker UWORD8 *ptr_bit_buf_base, 103*15dc779aSAndroid Build Coastguard Worker WORD32 bit_buf_size); 104*15dc779aSAndroid Build Coastguard Worker 105*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_read_bits_buf(ia_bit_buf_struct *it_bit_buff, WORD no_of_bits); 106*15dc779aSAndroid Build Coastguard Worker 107*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_skip_bits_buf(ia_bit_buf_struct *it_bit_buff, WORD no_of_bits); 108*15dc779aSAndroid Build Coastguard Worker 109*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_show_bits_buf(ia_bit_buf_struct *it_bit_buff, WORD no_of_bits); 110*15dc779aSAndroid Build Coastguard Worker 111*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_read_bidirection(ia_bit_buf_struct *it_bit_buff, 112*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_drc_offset); 113*15dc779aSAndroid Build Coastguard Worker 114*15dc779aSAndroid Build Coastguard Worker UWORD32 ixheaacd_aac_showbits_32(UWORD8 *ptr_read_next, WORD32 cnt_bits, 115*15dc779aSAndroid Build Coastguard Worker WORD32 *increment); 116*15dc779aSAndroid Build Coastguard Worker 117*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_aac_read_byte(UWORD8 **ptr_read_next, WORD32 *bit_pos, 118*15dc779aSAndroid Build Coastguard Worker WORD32 *readword); 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_aac_read_byte_corr(UWORD8 **ptr_read_next, WORD32 *ptr_bit_pos, 121*15dc779aSAndroid Build Coastguard Worker WORD32 *readword, UWORD8 *p_bit_buf_end); 122*15dc779aSAndroid Build Coastguard Worker 123*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_aac_read_byte_corr1(UWORD8 **ptr_read_next, WORD32 *ptr_bit_pos, 124*15dc779aSAndroid Build Coastguard Worker WORD32 *readword, UWORD8 *p_bit_buf_end); 125*15dc779aSAndroid Build Coastguard Worker 126*15dc779aSAndroid Build Coastguard Worker #define get_no_bits_available(it_bit_buff) ((it_bit_buff)->cnt_bits) 127*15dc779aSAndroid Build Coastguard Worker #define ixheaacd_no_bits_read(it_bit_buff) \ 128*15dc779aSAndroid Build Coastguard Worker ((it_bit_buff)->size - (it_bit_buff)->cnt_bits) 129*15dc779aSAndroid Build Coastguard Worker 130*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_aac_read_bit_rev(ia_bit_buf_struct *it_bit_buff); 131*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_aac_read_bit(ia_bit_buf_struct *it_bit_buff); 132*15dc779aSAndroid Build Coastguard Worker 133*15dc779aSAndroid Build Coastguard Worker VOID ixheaacd_write_bit(ia_bit_buf_struct *it_bit_buff, WORD32 value, 134*15dc779aSAndroid Build Coastguard Worker WORD32 no_of_bits); 135*15dc779aSAndroid Build Coastguard Worker 136*15dc779aSAndroid Build Coastguard Worker WORD32 ixheaacd_read_bit(ia_bit_buf_struct *data, WORD32 no_of_bits); 137*15dc779aSAndroid Build Coastguard Worker 138*15dc779aSAndroid Build Coastguard Worker #endif /* IXHEAACD_BITBUFFER_H */ 139