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