123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
-
- #ifndef _SBR_H
- #define _SBR_H
- #include "aaccommon.h"
- #include "bitstream.h"
- #ifndef ASSERT
- #if defined(_WIN32) && defined(_M_IX86) && (defined (_DEBUG) || defined (REL_ENABLE_ASSERTS))
- #define ASSERT(x) if (!(x)) __asm int 3;
- #else
- #define ASSERT(x)
- #endif
- #endif
- #ifndef MAX
- #define MAX(a,b) ((a) > (b) ? (a) : (b))
- #endif
- #ifndef MIN
- #define MIN(a,b) ((a) < (b) ? (a) : (b))
- #endif
- #define NUM_TIME_SLOTS 16
- #define SAMPLES_PER_SLOT 2
- #define NUM_SAMPLE_RATES_SBR 9
- #define MAX_NUM_ENV 5
- #define MAX_NUM_NOISE_FLOORS 2
- #define MAX_NUM_NOISE_FLOOR_BANDS 5
- #define MAX_NUM_PATCHES 5
- #define MAX_NUM_SMOOTH_COEFS 5
- #define HF_GEN 8
- #define HF_ADJ 2
- #define MAX_QMF_BANDS 48
- #define FBITS_IN_QMFA 14
- #define FBITS_LOST_QMFA (1 + 2 + 3 + 2 + 1)
- #define FBITS_OUT_QMFA (FBITS_IN_QMFA - FBITS_LOST_QMFA)
- #define MIN_GBITS_IN_QMFS 2
- #define FBITS_IN_QMFS FBITS_OUT_QMFA
- #define FBITS_LOST_DCT4_64 (2 + 3 + 2)
- #define FBITS_OUT_DQ_ENV 29
- #define FBITS_OUT_DQ_NOISE 24
- #define NOISE_FLOOR_OFFSET 6
- #define FBITS_GLIM_BOOST 24
- #define FBITS_QLIM_BOOST 14
- #define MAX_HUFF_BITS 20
- #define NUM_QMF_DELAY_BUFS 10
- #define DELAY_SAMPS_QMFA (NUM_QMF_DELAY_BUFS * 32)
- #define DELAY_SAMPS_QMFS (NUM_QMF_DELAY_BUFS * 128)
- #define FFT32C STATNAME(FFT32C)
- #define CalcFreqTables STATNAME(CalcFreqTables)
- #define AdjustHighFreq STATNAME(AdjustHighFreq)
- #define GenerateHighFreq STATNAME(GenerateHighFreq)
- #define DecodeSBREnvelope STATNAME(DecodeSBREnvelope)
- #define DecodeSBRNoise STATNAME(DecodeSBRNoise)
- #define UncoupleSBREnvelope STATNAME(UncoupleSBREnvelope)
- #define UncoupleSBRNoise STATNAME(UncoupleSBRNoise)
- #define InvRNormalized STATNAME(InvRNormalized)
- #define RatioPowInv STATNAME(RatioPowInv)
- #define SqrtFix STATNAME(SqrtFix)
- #define QMFAnalysis STATNAME(QMFAnalysis)
- #define QMFSynthesis STATNAME(QMFSynthesis)
- #define GetSampRateIdx STATNAME(GetSampRateIdx)
- #define UnpackSBRHeader STATNAME(UnpackSBRHeader)
- #define UnpackSBRSingleChannel STATNAME(UnpackSBRSingleChannel)
- #define UnpackSBRChannelPair STATNAME(UnpackSBRChannelPair)
- #define CVKernel1 STATNAME(CVKernel1)
- #define CVKernel2 STATNAME(CVKernel2)
- #define QMFAnalysisConv STATNAME(QMFAnalysisConv)
- #define QMFSynthesisConv STATNAME(QMFSynthesisConv)
- #define k0Tab STATNAME(k0Tab)
- #define k2Tab STATNAME(k2Tab)
- #define goalSBTab STATNAME(goalSBTab)
- #define huffTabSBR STATNAME(huffTabSBR)
- #define huffTabSBRInfo STATNAME(huffTabSBRInfo)
- #define log2Tab STATNAME(log2Tab)
- #define noiseTab STATNAME(noiseTab)
- #define cTabA STATNAME(cTabA)
- #define cTabS STATNAME(cTabS)
- #define CLIP_2N_SHIFT30(y, n) { \
- int sign = (y) >> 31; \
- if (sign != (y) >> (30 - (n))) { \
- (y) = sign ^ (0x3fffffff); \
- } else { \
- (y) = (y) << (n); \
- } \
- }
- enum {
- SBR_GRID_FIXFIX = 0,
- SBR_GRID_FIXVAR = 1,
- SBR_GRID_VARFIX = 2,
- SBR_GRID_VARVAR = 3
- };
- enum {
- HuffTabSBR_tEnv15 = 0,
- HuffTabSBR_fEnv15 = 1,
- HuffTabSBR_tEnv15b = 2,
- HuffTabSBR_fEnv15b = 3,
- HuffTabSBR_tEnv30 = 4,
- HuffTabSBR_fEnv30 = 5,
- HuffTabSBR_tEnv30b = 6,
- HuffTabSBR_fEnv30b = 7,
- HuffTabSBR_tNoise30 = 8,
- HuffTabSBR_fNoise30 = 5,
- HuffTabSBR_tNoise30b = 9,
- HuffTabSBR_fNoise30b = 7
- };
- typedef struct _HuffInfo {
- int maxBits;
- unsigned int count[MAX_HUFF_BITS];
- int offset;
- } HuffInfo;
- typedef struct _SBRHeader {
- int count;
- unsigned char ampRes;
- unsigned char startFreq;
- unsigned char stopFreq;
- unsigned char crossOverBand;
- unsigned char resBitsHdr;
- unsigned char hdrExtra1;
- unsigned char hdrExtra2;
- unsigned char freqScale;
- unsigned char alterScale;
- unsigned char noiseBands;
-
- unsigned char limiterBands;
- unsigned char limiterGains;
- unsigned char interpFreq;
- unsigned char smoothMode;
- } SBRHeader;
- typedef struct _SBRGrid {
- unsigned char frameClass;
- unsigned char ampResFrame;
- unsigned char pointer;
- unsigned char numEnv;
- unsigned char envTimeBorder[MAX_NUM_ENV+1];
- unsigned char freqRes[MAX_NUM_ENV];
- unsigned char numNoiseFloors;
- unsigned char noiseTimeBorder[MAX_NUM_NOISE_FLOORS+1];
- unsigned char numEnvPrev;
- unsigned char numNoiseFloorsPrev;
- unsigned char freqResPrev;
- } SBRGrid;
- typedef struct _SBRFreq {
- int kStart;
- int nMaster;
- int nHigh;
- int nLow;
- int nLimiter;
- int numQMFBands;
- int numNoiseFloorBands;
- int kStartPrev;
- int numQMFBandsPrev;
- unsigned char freqMaster[MAX_QMF_BANDS + 1];
- unsigned char freqHigh[MAX_QMF_BANDS + 1];
- unsigned char freqLow[MAX_QMF_BANDS / 2 + 1];
- unsigned char freqNoise[MAX_NUM_NOISE_FLOOR_BANDS+1];
- unsigned char freqLimiter[MAX_QMF_BANDS / 2 + MAX_NUM_PATCHES];
- unsigned char numPatches;
- unsigned char patchNumSubbands[MAX_NUM_PATCHES + 1];
- unsigned char patchStartSubband[MAX_NUM_PATCHES + 1];
- } SBRFreq;
- typedef struct _SBRChan {
- int reset;
- unsigned char deltaFlagEnv[MAX_NUM_ENV];
- unsigned char deltaFlagNoise[MAX_NUM_NOISE_FLOORS];
- signed char envDataQuant[MAX_NUM_ENV][MAX_QMF_BANDS];
- signed char noiseDataQuant[MAX_NUM_NOISE_FLOORS][MAX_NUM_NOISE_FLOOR_BANDS];
- unsigned char invfMode[2][MAX_NUM_NOISE_FLOOR_BANDS];
- int chirpFact[MAX_NUM_NOISE_FLOOR_BANDS];
- unsigned char addHarmonicFlag[2];
- unsigned char addHarmonic[2][64];
-
- int gbMask[2];
- signed char laPrev;
- int noiseTabIndex;
- int sinIndex;
- int gainNoiseIndex;
- int gTemp[MAX_NUM_SMOOTH_COEFS][MAX_QMF_BANDS];
- int qTemp[MAX_NUM_SMOOTH_COEFS][MAX_QMF_BANDS];
- } SBRChan;
- typedef struct _PSInfoSBR {
-
- int frameCount;
- int sampRateIdx;
-
- SBRHeader sbrHdr[AAC_MAX_NCHANS];
- SBRGrid sbrGrid[AAC_MAX_NCHANS];
- SBRFreq sbrFreq[AAC_MAX_NCHANS];
- SBRChan sbrChan[AAC_MAX_NCHANS];
-
- unsigned char dataExtra;
- unsigned char resBitsData;
- unsigned char extendedDataPresent;
- int extendedDataSize;
- signed char envDataDequantScale[MAX_NCHANS_ELEM][MAX_NUM_ENV];
- int envDataDequant[MAX_NCHANS_ELEM][MAX_NUM_ENV][MAX_QMF_BANDS];
- int noiseDataDequant[MAX_NCHANS_ELEM][MAX_NUM_NOISE_FLOORS][MAX_NUM_NOISE_FLOOR_BANDS];
- int eCurr[MAX_QMF_BANDS];
- unsigned char eCurrExp[MAX_QMF_BANDS];
- unsigned char eCurrExpMax;
- signed char la;
- int crcCheckWord;
- int couplingFlag;
- int envBand;
- int eOMGainMax;
- int gainMax;
- int gainMaxFBits;
- int noiseFloorBand;
- int qp1Inv;
- int qqp1Inv;
- int sMapped;
- int sBand;
- int highBand;
- int sumEOrigMapped;
- int sumECurrGLim;
- int sumSM;
- int sumQM;
- int gLimBoost[MAX_QMF_BANDS];
- int qmLimBoost[MAX_QMF_BANDS];
- int smBoost[MAX_QMF_BANDS];
- int smBuf[MAX_QMF_BANDS];
- int qmLimBuf[MAX_QMF_BANDS];
- int gLimBuf[MAX_QMF_BANDS];
- int gLimFbits[MAX_QMF_BANDS];
- int gFiltLast[MAX_QMF_BANDS];
- int qFiltLast[MAX_QMF_BANDS];
-
- int delayIdxQMFA[AAC_MAX_NCHANS];
- int delayQMFA[AAC_MAX_NCHANS][DELAY_SAMPS_QMFA];
- int delayIdxQMFS[AAC_MAX_NCHANS];
- int delayQMFS[AAC_MAX_NCHANS][DELAY_SAMPS_QMFS];
- int XBufDelay[AAC_MAX_NCHANS][HF_GEN][64][2];
- int XBuf[32+8][64][2];
- } PSInfoSBR;
- void FFT32C(int *x);
- int CalcFreqTables(SBRHeader *sbrHdr, SBRFreq *sbrFreq, int sampRateIdx);
- void AdjustHighFreq(PSInfoSBR *psi, SBRHeader *sbrHdr, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChan, int ch);
- void GenerateHighFreq(PSInfoSBR *psi, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChan, int ch);
- void DecodeSBREnvelope(BitStreamInfo *bsi, PSInfoSBR *psi, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChan, int ch);
- void DecodeSBRNoise(BitStreamInfo *bsi, PSInfoSBR *psi, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChan, int ch);
- void UncoupleSBREnvelope(PSInfoSBR *psi, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChanR);
- void UncoupleSBRNoise(PSInfoSBR *psi, SBRGrid *sbrGrid, SBRFreq *sbrFreq, SBRChan *sbrChanR);
- int InvRNormalized(int r);
- int RatioPowInv(int a, int b, int c);
- int SqrtFix(int x, int fBitsIn, int *fBitsOut);
- int QMFAnalysis(int *inbuf, int *delay, int *XBuf, int fBitsIn, int *delayIdx, int qmfaBands);
- void QMFSynthesis(int *inbuf, int *delay, int *delayIdx, int qmfsBands, short *outbuf, int nChans);
- int GetSampRateIdx(int sampRate);
- int UnpackSBRHeader(BitStreamInfo *bsi, SBRHeader *sbrHdr);
- void UnpackSBRSingleChannel(BitStreamInfo *bsi, PSInfoSBR *psi, int chOut);
- void UnpackSBRChannelPair(BitStreamInfo *bsi, PSInfoSBR *psi, int chOut);
- extern const unsigned char k0Tab[NUM_SAMPLE_RATES_SBR][16];
- extern const unsigned char k2Tab[NUM_SAMPLE_RATES_SBR][14];
- extern const unsigned char goalSBTab[NUM_SAMPLE_RATES_SBR];
- extern const HuffInfo huffTabSBRInfo[10];
- extern const signed int huffTabSBR[604];
- extern const int log2Tab[65];
- extern const int noiseTab[512*2];
- extern const int cTabA[165];
- extern const int cTabS[640];
- #endif
|