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 // FLOAT values 23*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_PI_BY_4 (0.70709228515625f) // 0.7071067812f 24*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_PI_BY_8 (0.92388916015625f) // 0.923879532511287f 25*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SIN_PI_BY_8 (0.3826904296875f) // 0.382683432365090f 26*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_PI_BY_16 (0.98077392578125f) // 0.980785280403230f 27*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SIN_PI_BY_16 (0.195098876953125f) // 0.195090322016128f 28*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_3_PI_BY_16 (0.83148193359375f) // 0.831469612302545f 29*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SIN_3_PI_BY_16 (0.555572509765625f) // 0.555570233019602f 30*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_INV_SQRT2 (7.071067811865475e-1f) 31*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_PI_DIV8 (0.923879532511287f) 32*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_COS_3PI_DIV8 (3.826834323650898e-1f) 33*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SQRT2PLUS1 (2.414213562373095f) 34*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_SQRT2MINUS1 (4.142135623730952e-1f) 35*15dc779aSAndroid Build Coastguard Worker 36*15dc779aSAndroid Build Coastguard Worker #define INV_SQRT_2_FLOAT 0x3F3504F3 // 1/sqrt(2) in float 37*15dc779aSAndroid Build Coastguard Worker 38*15dc779aSAndroid Build Coastguard Worker #define Q_POWER2_TABLE 30 39*15dc779aSAndroid Build Coastguard Worker 40*15dc779aSAndroid Build Coastguard Worker #define DIV_FAC_24_BIT_PCM (256.0f) 41*15dc779aSAndroid Build Coastguard Worker #define DIV_FAC_32_BIT_PCM (65536.0f) 42*15dc779aSAndroid Build Coastguard Worker 43*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_AAC_LC_L5 (0x2B) 44*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_HEAAC_L5 (0x2F) 45*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_HEAAC_V2_L5 (0x33) 46*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_AAC_LD_L4 (0x19) 47*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_AAC_ELD_L1 (0x4C) 48*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_AAC_ELD_L2 (0x4D) 49*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_AAC_ELD_L4 (0x4F) 50*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_USAC_L2 (0x45) 51*15dc779aSAndroid Build Coastguard Worker #define AUDIO_PROFILE_NOT_SPECIFIED (0xFE) 52*15dc779aSAndroid Build Coastguard Worker 53*15dc779aSAndroid Build Coastguard Worker #define CLIP_SAVE_LO_LONG (0.2f) 54*15dc779aSAndroid Build Coastguard Worker #define CLIP_SAVE_HI_LONG (0.95f) 55*15dc779aSAndroid Build Coastguard Worker #define MIN_BITS_SAVE_LONG (-0.05f) 56*15dc779aSAndroid Build Coastguard Worker #define MAX_BITS_SAVE_LONG (0.3f) 57*15dc779aSAndroid Build Coastguard Worker #define CLIP_SPEND_LO_LONG (0.2f) 58*15dc779aSAndroid Build Coastguard Worker #define CLIP_SPEND_HI_LONG (0.95f) 59*15dc779aSAndroid Build Coastguard Worker #define MIN_BITS_SPEND_LONG (-0.10f) 60*15dc779aSAndroid Build Coastguard Worker #define MAX_BITS_SPEND_LONG (0.4f) 61*15dc779aSAndroid Build Coastguard Worker #define CLIP_SAVE_LO_SHORT (0.2f) 62*15dc779aSAndroid Build Coastguard Worker #define CLIP_SAVE_HI_SHORT (0.75f) 63*15dc779aSAndroid Build Coastguard Worker #define MIN_BITS_SAVE_SHORT (0.0f) 64*15dc779aSAndroid Build Coastguard Worker #define MAX_BITS_SAVE_SHORT (0.2f) 65*15dc779aSAndroid Build Coastguard Worker #define CLIP_SPEND_LO_SHORT (0.2f) 66*15dc779aSAndroid Build Coastguard Worker #define CLIP_SPEND_HI_SHORT (0.75f) 67*15dc779aSAndroid Build Coastguard Worker #define MIN_BITS_SPEND_SHORT (-0.05f) 68*15dc779aSAndroid Build Coastguard Worker #define MAX_BITS_SPEND_SHORT (0.5f) 69*15dc779aSAndroid Build Coastguard Worker typedef struct { 70*15dc779aSAndroid Build Coastguard Worker FLOAT32 re; 71*15dc779aSAndroid Build Coastguard Worker FLOAT32 im; 72*15dc779aSAndroid Build Coastguard Worker } complex; 73*15dc779aSAndroid Build Coastguard Worker 74*15dc779aSAndroid Build Coastguard Worker typedef struct { 75*15dc779aSAndroid Build Coastguard Worker UWORD8 *data; /* data bits */ 76*15dc779aSAndroid Build Coastguard Worker WORD32 num_bit; /* number of bits in buffer */ 77*15dc779aSAndroid Build Coastguard Worker WORD32 size; /* buffer size in bytes */ 78*15dc779aSAndroid Build Coastguard Worker WORD32 current_bit; /* current bit position in bit stream */ 79*15dc779aSAndroid Build Coastguard Worker } ixheaace_bitstream_params; 80*15dc779aSAndroid Build Coastguard Worker 81*15dc779aSAndroid Build Coastguard Worker /* bits in byte (char) */ 82*15dc779aSAndroid Build Coastguard Worker #define BYTE_NUMBIT 8 83*15dc779aSAndroid Build Coastguard Worker #define EIGHT_BYTE_SIZE (8) 84*15dc779aSAndroid Build Coastguard Worker 85*15dc779aSAndroid Build Coastguard Worker /* here we distinguish between stereo and the mono only encoder */ 86*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_CH_IN_BS_ELE (2) 87*15dc779aSAndroid Build Coastguard Worker 88*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_BS_ELE \ 89*15dc779aSAndroid Build Coastguard Worker 8 /* 1 <SCE> 2 <CPE> 3<CPE> 4<CPE> 5<LFE> 6<SCE> - 8.1 channel + 2 cc channels*/ 90*15dc779aSAndroid Build Coastguard Worker 91*15dc779aSAndroid Build Coastguard Worker #define FRAME_LEN_1024 1024 92*15dc779aSAndroid Build Coastguard Worker #define FRAME_LEN_512 512 93*15dc779aSAndroid Build Coastguard Worker #define FRAME_LEN_480 480 94*15dc779aSAndroid Build Coastguard Worker #define FRAME_LEN_960 960 95*15dc779aSAndroid Build Coastguard Worker 96*15dc779aSAndroid Build Coastguard Worker #define AACENC_TRANS_FAC 8 /* encoder WORD16 long ratio */ 97*15dc779aSAndroid Build Coastguard Worker #define AACENC_PCM_LEVEL 1.0 /* encoder pcm 0db refernence */ 98*15dc779aSAndroid Build Coastguard Worker 99*15dc779aSAndroid Build Coastguard Worker #define MAX_INPUT_CHAN (IXHEAACE_MAX_CH_IN_BS_ELE) 100*15dc779aSAndroid Build Coastguard Worker 101*15dc779aSAndroid Build Coastguard Worker #define MAX_FRAME_LEN (1024) 102*15dc779aSAndroid Build Coastguard Worker 103*15dc779aSAndroid Build Coastguard Worker /* channel masking*/ 104*15dc779aSAndroid Build Coastguard Worker #define CH_MASK_CENTER_FRONT (0x4) 105*15dc779aSAndroid Build Coastguard Worker #define CH_MASK_LEFT_RIGHT_FRONT (0x3) 106*15dc779aSAndroid Build Coastguard Worker #define CH_MASK_REAR_CENTER (0x100) 107*15dc779aSAndroid Build Coastguard Worker #define CH_MASK_LEFT_RIGHT_BACK (0X30) 108*15dc779aSAndroid Build Coastguard Worker #define CH_MASK_LFE (0x08) 109*15dc779aSAndroid Build Coastguard Worker 110*15dc779aSAndroid Build Coastguard Worker // Change to accommodate 4:1 resampler - input = 4096 samples per channel 111*15dc779aSAndroid Build Coastguard Worker #define MAX_INPUT_SAMPLES (MAX_FRAME_LEN * MAX_INPUT_CHAN * 4) 112*15dc779aSAndroid Build Coastguard Worker 113*15dc779aSAndroid Build Coastguard Worker #define NUM_CHANS_MONO (1) 114*15dc779aSAndroid Build Coastguard Worker #define NUM_CHANS_STEREO (2) 115*15dc779aSAndroid Build Coastguard Worker #define MAX_NUM_CORE_CODER_CHANNELS (6) 116*15dc779aSAndroid Build Coastguard Worker #define MIN_NUM_CORE_CODER_CHANNELS (1) 117*15dc779aSAndroid Build Coastguard Worker /*-------------------------- defines --------------------------------------*/ 118*15dc779aSAndroid Build Coastguard Worker 119*15dc779aSAndroid Build Coastguard Worker #define BUFFERSIZE 1024 /* anc data */ 120*15dc779aSAndroid Build Coastguard Worker #define MAX_GAIN_INDEX (128)