xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_aac_constants.h (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
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)