xref: /aosp_15_r20/external/libxaac/encoder/ixheaace_sbr_def.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 #pragma once
21*15dc779aSAndroid Build Coastguard Worker 
22*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_CH_IN_BS_ELE (2)
23*15dc779aSAndroid Build Coastguard Worker 
24*15dc779aSAndroid Build Coastguard Worker #define INPUT_LEN_DOWNSAMPLE (2048)
25*15dc779aSAndroid Build Coastguard Worker #define UPSAMPLE_FAC (3)
26*15dc779aSAndroid Build Coastguard Worker #define DOWNSAMPLE_FAC_2_1 (2)
27*15dc779aSAndroid Build Coastguard Worker #define DOWNSAMPLE_FAC_4_1 (4)
28*15dc779aSAndroid Build Coastguard Worker 
29*15dc779aSAndroid Build Coastguard Worker /* Constants */
30*15dc779aSAndroid Build Coastguard Worker #define MAX_FLT_VAL (3.402823466e+38F)
31*15dc779aSAndroid Build Coastguard Worker #define MIN_FLT_VAL (1.175494351e-38F)
32*15dc779aSAndroid Build Coastguard Worker 
33*15dc779aSAndroid Build Coastguard Worker #define EPS (1e-18)
34*15dc779aSAndroid Build Coastguard Worker #define LOG2 (0.69314718056f)
35*15dc779aSAndroid Build Coastguard Worker #define RELAXATION (1e-6f)
36*15dc779aSAndroid Build Coastguard Worker 
37*15dc779aSAndroid Build Coastguard Worker #define SBR_NOISE_FLOOR_OFFSET (6)
38*15dc779aSAndroid Build Coastguard Worker #define SBR_INV_LOG_2 (1.442695041f)
39*15dc779aSAndroid Build Coastguard Worker #define SBR_EPS (1e-18)
40*15dc779aSAndroid Build Coastguard Worker 
41*15dc779aSAndroid Build Coastguard Worker #define SBR_DECAY_GUIDE_DIFF (0.5f)
42*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_DIFF_GUIDE (1.26f)
43*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_DIFF (25.0f)
44*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_TONE (15.0f)
45*15dc779aSAndroid Build Coastguard Worker #define SBR_INV_THR_TONE (1.0f / 15.0f)
46*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_TONE_GUIDE (1.26f)
47*15dc779aSAndroid Build Coastguard Worker #define SBR_DECAY_GUIDE_ORIG (0.3f)
48*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_SFM_SBR (0.3f)
49*15dc779aSAndroid Build Coastguard Worker #define SBR_THR_SFM_ORG (0.1f)
50*15dc779aSAndroid Build Coastguard Worker #define SBR_MAX_COMP (2)
51*15dc779aSAndroid Build Coastguard Worker #define SBR_TONALITY_QUOTA (0.1f)
52*15dc779aSAndroid Build Coastguard Worker #define SBR_DIFF_QUOTA (0.75f)
53*15dc779aSAndroid Build Coastguard Worker #define SBR_TON_MEAN_P0009 (0.000976562f)
54*15dc779aSAndroid Build Coastguard Worker #define SBR_TON_MEAN_101P59 (101.5936673f)
55*15dc779aSAndroid Build Coastguard Worker 
56*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NOISE_ENVELOPES (2)
57*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_NOISE_COEFFS (5)
58*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_NOISE_VALUES (MAXIMUM_NOISE_ENVELOPES * MAXIMUM_NUM_NOISE_COEFFS)
59*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_ENVELOPES_HEAAC (5)
60*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS_HEAAC (48)
61*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS_LE32KHZ (48)
62*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS_EQ44KHZ (35)
63*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS_GE48KHZ (32)
64*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_ENV_VALUES_HEAAC (MAXIMUM_FREQ_COEFFS_HEAAC * MAXIMUM_ENVELOPES_HEAAC)
65*15dc779aSAndroid Build Coastguard Worker 
66*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_QMF_CHANNELS (64)
67*15dc779aSAndroid Build Coastguard Worker #define QMF_FILTER_LENGTH (640)
68*15dc779aSAndroid Build Coastguard Worker #define CLD_FILTER_LENGTH (640)
69*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_QMF_TIME_SLOTS (32)
70*15dc779aSAndroid Build Coastguard Worker 
71*15dc779aSAndroid Build Coastguard Worker #define NO_OF_ESTIMATES (4)
72*15dc779aSAndroid Build Coastguard Worker #define NO_OF_ESTIMATES_ELD (3)
73*15dc779aSAndroid Build Coastguard Worker 
74*15dc779aSAndroid Build Coastguard Worker #define QMF_TIME_SLOTS_USAC_4_1 (64)
75*15dc779aSAndroid Build Coastguard Worker #define MAX_QMF_TIME_SLOTS (64)
76*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS_USAC (56)
77*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_ENVELOPES_USAC (8)
78*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_ENV_VALUES_USAC (MAXIMUM_FREQ_COEFFS_USAC * MAXIMUM_ENVELOPES_USAC)
79*15dc779aSAndroid Build Coastguard Worker 
80*15dc779aSAndroid Build Coastguard Worker #if MAXIMUM_FREQ_COEFFS_HEAAC > MAXIMUM_FREQ_COEFFS_USAC
81*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS (MAXIMUM_FREQ_COEFFS_HEAAC)
82*15dc779aSAndroid Build Coastguard Worker #else
83*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_FREQ_COEFFS (MAXIMUM_FREQ_COEFFS_USAC)
84*15dc779aSAndroid Build Coastguard Worker #endif
85*15dc779aSAndroid Build Coastguard Worker #if MAXIMUM_ENVELOPES_HEAAC > MAXIMUM_ENVELOPES_USAC
86*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_ENV (MAXIMUM_ENVELOPES_HEAAC)
87*15dc779aSAndroid Build Coastguard Worker #else
88*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MAX_ENV (MAXIMUM_ENVELOPES_USAC)
89*15dc779aSAndroid Build Coastguard Worker #endif
90*15dc779aSAndroid Build Coastguard Worker 
91*15dc779aSAndroid Build Coastguard Worker #if MAXIMUM_NUM_ENV_VALUES_HEAAC > MAXIMUM_NUM_ENV_VALUES_HEAAC
92*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_ENVELOPE_VALUES (MAXIMUM_NUM_ENV_VALUES_HEAAC)
93*15dc779aSAndroid Build Coastguard Worker #else
94*15dc779aSAndroid Build Coastguard Worker #define MAXIMUM_NUM_ENVELOPE_VALUES (MAXIMUM_NUM_ENV_VALUES_USAC)
95*15dc779aSAndroid Build Coastguard Worker #endif
96*15dc779aSAndroid Build Coastguard Worker 
97*15dc779aSAndroid Build Coastguard Worker #define LOW_RES (0)
98*15dc779aSAndroid Build Coastguard Worker #define HIGH_RES (1)
99*15dc779aSAndroid Build Coastguard Worker 
100*15dc779aSAndroid Build Coastguard Worker #define LO (0)
101*15dc779aSAndroid Build Coastguard Worker #define HI (1)
102*15dc779aSAndroid Build Coastguard Worker 
103*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_PROTOCOL_VERSION_ID (0)
104*15dc779aSAndroid Build Coastguard Worker 
105*15dc779aSAndroid Build Coastguard Worker #define SBR_XPOS_CTRL_DEFAULT (2)
106*15dc779aSAndroid Build Coastguard Worker 
107*15dc779aSAndroid Build Coastguard Worker #define SBR_FREQ_SCALE_DEFAULT (2)
108*15dc779aSAndroid Build Coastguard Worker #define SBR_ALTER_SCALE_DEFAULT (1)
109*15dc779aSAndroid Build Coastguard Worker #define SBR_NOISE_BANDS_DEFAULT (2)
110*15dc779aSAndroid Build Coastguard Worker 
111*15dc779aSAndroid Build Coastguard Worker #define SBR_LIMITER_BANDS_DEFAULT (2)
112*15dc779aSAndroid Build Coastguard Worker #define SBR_LIMITER_GAINS_DEFAULT (2)
113*15dc779aSAndroid Build Coastguard Worker #define SBR_INTERPOL_FREQ_DEFAULT (1)
114*15dc779aSAndroid Build Coastguard Worker #define SBR_SMOOTHING_LENGTH_DEFAULT (0)
115*15dc779aSAndroid Build Coastguard Worker 
116*15dc779aSAndroid Build Coastguard Worker /* ESBR resampler Size*/
117*15dc779aSAndroid Build Coastguard Worker #define ESBR_RESAMP_SAMPLES (4096)
118*15dc779aSAndroid Build Coastguard Worker 
119*15dc779aSAndroid Build Coastguard Worker /* spectral_band_replication_header */
120*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_AMP_RES_BITS (1)
121*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_COUPLING_BITS (1)
122*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_FREQ_BITS (4)
123*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_STOP_FREQ_BITS (4)
124*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_XOVER_BAND_BITS (3)
125*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_RESERVED_BITS (2)
126*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_HEADER_EXTRA_1_BITS (1)
127*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_HEADER_EXTRA_2_BITS (1)
128*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_FREQ_SCALE_BITS (2)
129*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_ALTER_SCALE_BITS (1)
130*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_NOISE_BANDS_BITS (2)
131*15dc779aSAndroid Build Coastguard Worker 
132*15dc779aSAndroid Build Coastguard Worker #define SBR_START_FREQ_OFFSET_TBL_LEN (1 << SI_SBR_START_FREQ_BITS)
133*15dc779aSAndroid Build Coastguard Worker #define SBR_STOP_FREQ_OFFSET_TBL_LEN (14)
134*15dc779aSAndroid Build Coastguard Worker 
135*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_LIMITER_BANDS_BITS (2)
136*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_LIMITER_GAINS_BITS (2)
137*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_INTERPOL_FREQ_BITS (1)
138*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_SMOOTHING_LENGTH_BITS (1)
139*15dc779aSAndroid Build Coastguard Worker 
140*15dc779aSAndroid Build Coastguard Worker /* spectral_band_replication_grid */
141*15dc779aSAndroid Build Coastguard Worker #define SBR_CLA_BITS (2)
142*15dc779aSAndroid Build Coastguard Worker #define SBR_ENV_BITS (2)
143*15dc779aSAndroid Build Coastguard Worker #define SBR_PVC_NOISE_POSITION_BITS (4)
144*15dc779aSAndroid Build Coastguard Worker #define SBR_PVC_VAR_LEN_HF_BITS (1)
145*15dc779aSAndroid Build Coastguard Worker 
146*15dc779aSAndroid Build Coastguard Worker #define SBR_ABS_BITS (2)
147*15dc779aSAndroid Build Coastguard Worker #define SBR_NUM_BITS (2)
148*15dc779aSAndroid Build Coastguard Worker #define SBR_REL_BITS (2)
149*15dc779aSAndroid Build Coastguard Worker #define SBR_RES_BITS (1)
150*15dc779aSAndroid Build Coastguard Worker #define SBR_DIR_BITS (1)
151*15dc779aSAndroid Build Coastguard Worker #define LDSBR_CLA_BITS (1)
152*15dc779aSAndroid Build Coastguard Worker 
153*15dc779aSAndroid Build Coastguard Worker /* spectral_band_replication_data */
154*15dc779aSAndroid Build Coastguard Worker 
155*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_INVF_MODE_BITS (2)
156*15dc779aSAndroid Build Coastguard Worker 
157*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_ENV_BITS_AMP_RES_3_0 (6)
158*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_3_0 (5)
159*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_NOISE_BITS_AMP_RES_3_0 (5)
160*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_NOISE_BITS_BALANCE_AMP_RES_3_0 (5)
161*15dc779aSAndroid Build Coastguard Worker 
162*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_ENV_BITS_AMP_RES_1_5 (7)
163*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_START_ENV_BITS_BALANCE_AMP_RES_1_5 (6)
164*15dc779aSAndroid Build Coastguard Worker 
165*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_EXTENDED_DATA_BITS (1)
166*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_EXTENSION_SIZE_BITS (4)
167*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_EXTENSION_ESC_COUNT_BITS (8)
168*15dc779aSAndroid Build Coastguard Worker #define SI_SBR_EXTENSION_ID_BITS (2)
169*15dc779aSAndroid Build Coastguard Worker 
170*15dc779aSAndroid Build Coastguard Worker #define SBR_EXTENDED_DATA_MAX_CNT (15 + 255)
171*15dc779aSAndroid Build Coastguard Worker 
172*15dc779aSAndroid Build Coastguard Worker #define EXTENSION_ID_PS_CODING (2)
173*15dc779aSAndroid Build Coastguard Worker #define EXTENSION_ID_ESBR_CODING (3)
174*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_MPS_EXT_LDSAC_DATA (0x09)
175*15dc779aSAndroid Build Coastguard Worker /* Envelope coding constants */
176*15dc779aSAndroid Build Coastguard Worker #define FREQ (0)
177*15dc779aSAndroid Build Coastguard Worker #define TIME (1)
178*15dc779aSAndroid Build Coastguard Worker 
179*15dc779aSAndroid Build Coastguard Worker /* huffman tables */
180*15dc779aSAndroid Build Coastguard Worker #define CODE_BCK_SCF_LAV10 (60)
181*15dc779aSAndroid Build Coastguard Worker #define CODE_BCK_SCF_LAV11 (31)
182*15dc779aSAndroid Build Coastguard Worker #define CODE_BCK_SCF_LAV_BALANCE11 (12)
183*15dc779aSAndroid Build Coastguard Worker #define CODE_BCK_SCF_LAV_BALANCE10 (24)
184*15dc779aSAndroid Build Coastguard Worker 
185*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_RATIO_NO_SBR (0)
186*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_RATIO_INDEX_2_1 (3)
187*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_RATIO_INDEX_8_3 (2)
188*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_RATIO_INDEX_4_1 (1)
189*15dc779aSAndroid Build Coastguard Worker 
190*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_DOWNSAMPLE_RATIO_2_1 (2)
191*15dc779aSAndroid Build Coastguard Worker #define USAC_SBR_DOWNSAMPLE_RATIO_4_1 (4)
192*15dc779aSAndroid Build Coastguard Worker 
193*15dc779aSAndroid Build Coastguard Worker #define IXHEAACE_DISTANCE_CEIL_VALUE (5000000)
194*15dc779aSAndroid Build Coastguard Worker 
195*15dc779aSAndroid Build Coastguard Worker typedef enum {
196*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_XPOS_MDCT,
197*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_XPOS_MDCT_CROSS,
198*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_XPOS_LC,
199*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_XPOS_RESERVED,
200*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_XPOS_SWITCHED
201*15dc779aSAndroid Build Coastguard Worker } ixheaace_sbr_xpos_mode;
202*15dc779aSAndroid Build Coastguard Worker 
203*15dc779aSAndroid Build Coastguard Worker typedef enum { FREQ_RES_LOW, FREQ_RES_HIGH } ixheaace_freq_res;
204*15dc779aSAndroid Build Coastguard Worker 
205*15dc779aSAndroid Build Coastguard Worker typedef enum {
206*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_SBR_MODE_MONO,
207*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_SBR_MODE_LEFT_RIGHT,
208*15dc779aSAndroid Build Coastguard Worker   SBR_COUPLING,
209*15dc779aSAndroid Build Coastguard Worker   IXHEAACE_SBR_MODE_SWITCH_LRC
210*15dc779aSAndroid Build Coastguard Worker } ixheaace_sbr_stereo_mode;
211*15dc779aSAndroid Build Coastguard Worker 
212*15dc779aSAndroid Build Coastguard Worker typedef enum { HEAAC_SBR, ELD_SBR, USAC_SBR } ixheaace_sbr_codec_type;
213