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 INVALID_BITCOUNT_LC (SHRT_MAX) 23*15dc779aSAndroid Build Coastguard Worker #define INVALID_BITCOUNT_LD (SHRT_MAX / 4) 24*15dc779aSAndroid Build Coastguard Worker 25*15dc779aSAndroid Build Coastguard Worker #define abs32(a) (a > 0 ? a : -a) 26*15dc779aSAndroid Build Coastguard Worker #define HI_LTAB(a) (a >> 8) 27*15dc779aSAndroid Build Coastguard Worker #define LO_LTAB(a) (a & 0xff) 28*15dc779aSAndroid Build Coastguard Worker 29*15dc779aSAndroid Build Coastguard Worker #define HI_EXPLTAB(a) (a >> 16) 30*15dc779aSAndroid Build Coastguard Worker #define LO_EXPLTAB(a) (a & 0xffff) 31*15dc779aSAndroid Build Coastguard Worker #define EXPAND(a) ((((WORD32)(a & 0xff00)) << 8) | (WORD32)(a & 0xff)) 32*15dc779aSAndroid Build Coastguard Worker 33*15dc779aSAndroid Build Coastguard Worker /* code book number table */ 34*15dc779aSAndroid Build Coastguard Worker enum codeBookNo { 35*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ZERO_NO = 0, 36*15dc779aSAndroid Build Coastguard Worker CODE_BCK_1_NO = 1, 37*15dc779aSAndroid Build Coastguard Worker CODE_BCK_2_NO = 2, 38*15dc779aSAndroid Build Coastguard Worker CODE_BCK_3_NO = 3, 39*15dc779aSAndroid Build Coastguard Worker CODE_BCK_4_NO = 4, 40*15dc779aSAndroid Build Coastguard Worker CODE_BCK_5_NO = 5, 41*15dc779aSAndroid Build Coastguard Worker CODE_BCK_6_NO = 6, 42*15dc779aSAndroid Build Coastguard Worker CODE_BCK_7_NO = 7, 43*15dc779aSAndroid Build Coastguard Worker CODE_BCK_8_NO = 8, 44*15dc779aSAndroid Build Coastguard Worker CODE_BCK_9_NO = 9, 45*15dc779aSAndroid Build Coastguard Worker CODE_BCK_10_NO = 10, 46*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ESC_NO = 11, 47*15dc779aSAndroid Build Coastguard Worker CODE_BCK_RES_NO = 12, 48*15dc779aSAndroid Build Coastguard Worker CODE_BCK_PNS_NO = 13 49*15dc779aSAndroid Build Coastguard Worker }; 50*15dc779aSAndroid Build Coastguard Worker 51*15dc779aSAndroid Build Coastguard Worker /* code book index table */ 52*15dc779aSAndroid Build Coastguard Worker enum codeBookNdx { 53*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ZERO_NDX, 54*15dc779aSAndroid Build Coastguard Worker CODE_BCK_1_NDX, 55*15dc779aSAndroid Build Coastguard Worker CODE_BCK_2_NDX, 56*15dc779aSAndroid Build Coastguard Worker CODE_BCK_3_NDX, 57*15dc779aSAndroid Build Coastguard Worker CODE_BCK_4_NDX, 58*15dc779aSAndroid Build Coastguard Worker CODE_BCK_5_NDX, 59*15dc779aSAndroid Build Coastguard Worker CODE_BCK_6_NDX, 60*15dc779aSAndroid Build Coastguard Worker CODE_BCK_7_NDX, 61*15dc779aSAndroid Build Coastguard Worker CODE_BCK_8_NDX, 62*15dc779aSAndroid Build Coastguard Worker CODE_BCK_9_NDX, 63*15dc779aSAndroid Build Coastguard Worker CODE_BCK_10_NDX, 64*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ESC_NDX, 65*15dc779aSAndroid Build Coastguard Worker CODE_BCK_RES_NDX, 66*15dc779aSAndroid Build Coastguard Worker CODE_BCK_PNS_NDX, 67*15dc779aSAndroid Build Coastguard Worker NUMBER_OF_CODE_BOOKS 68*15dc779aSAndroid Build Coastguard Worker }; 69*15dc779aSAndroid Build Coastguard Worker 70*15dc779aSAndroid Build Coastguard Worker /* code book lav table */ 71*15dc779aSAndroid Build Coastguard Worker enum codeBookLav { 72*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ZERO_LAV = 0, 73*15dc779aSAndroid Build Coastguard Worker CODE_BCK_1_LAV = 1, 74*15dc779aSAndroid Build Coastguard Worker CODE_BCK_2_LAV = 1, 75*15dc779aSAndroid Build Coastguard Worker CODE_BCK_3_LAV = 2, 76*15dc779aSAndroid Build Coastguard Worker CODE_BCK_4_LAV = 2, 77*15dc779aSAndroid Build Coastguard Worker CODE_BCK_5_LAV = 4, 78*15dc779aSAndroid Build Coastguard Worker CODE_BCK_6_LAV = 4, 79*15dc779aSAndroid Build Coastguard Worker CODE_BCK_7_LAV = 7, 80*15dc779aSAndroid Build Coastguard Worker CODE_BCK_8_LAV = 7, 81*15dc779aSAndroid Build Coastguard Worker CODE_BCK_9_LAV = 12, 82*15dc779aSAndroid Build Coastguard Worker CODE_BCK_10_LAV = 12, 83*15dc779aSAndroid Build Coastguard Worker CODE_BCK_ESC_LAV = 16, 84*15dc779aSAndroid Build Coastguard Worker CODE_BCK_SCF_LAV = 60, 85*15dc779aSAndroid Build Coastguard Worker CODE_BCK_PNS_LAV = 60 86*15dc779aSAndroid Build Coastguard Worker }; 87*15dc779aSAndroid Build Coastguard Worker 88*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_bitcount(const WORD16 *ptr_values, const WORD32 width, WORD32 max_val, 89*15dc779aSAndroid Build Coastguard Worker WORD32 *bit_cnt, ixheaace_huffman_tables *pstr_huffman_tbl, 90*15dc779aSAndroid Build Coastguard Worker WORD32 aot); 91*15dc779aSAndroid Build Coastguard Worker 92*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_code_values(WORD16 *ptr_values, WORD32 width, WORD32 code_book, 93*15dc779aSAndroid Build Coastguard Worker ixheaace_bit_buf_handle pstr_bitstream, 94*15dc779aSAndroid Build Coastguard Worker ixheaace_huffman_tables *pstr_huffman_tbl); 95*15dc779aSAndroid Build Coastguard Worker 96*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_code_scale_factor_delta(WORD32 scalefactor, 97*15dc779aSAndroid Build Coastguard Worker ixheaace_bit_buf_handle h_bitstream, 98*15dc779aSAndroid Build Coastguard Worker ixheaace_huffman_tables *pstr_huffman_tbl); 99*15dc779aSAndroid Build Coastguard Worker 100*15dc779aSAndroid Build Coastguard Worker VOID ia_enhaacplus_enc_count1_2_3_4_5_6_7_8_9_10_11(const WORD16 *values, const WORD32 width, 101*15dc779aSAndroid Build Coastguard Worker WORD32 *bitcnt, 102*15dc779aSAndroid Build Coastguard Worker ixheaace_huffman_tables *pstr_huffman_tbl, 103*15dc779aSAndroid Build Coastguard Worker WORD32 invalid_bitcnt); 104