123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
-
- #ifndef _CODER_H
- #define _CODER_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 NWINDOWS_LONG 1
- #define NWINDOWS_SHORT 8
- #define DATA_BUF_SIZE 510
- #define FILL_BUF_SIZE 269
- #define ADIF_COPYID_SIZE 9
- #define MAX_COMMENT_BYTES 255
- #define MAX_NUM_FCE 15
- #define MAX_NUM_SCE 15
- #define MAX_NUM_BCE 15
- #define MAX_NUM_LCE 3
- #define MAX_NUM_ADE 7
- #define MAX_NUM_CCE 15
- #define CHAN_ELEM_IS_CPE(x) (((x) & 0x10) >> 4)
- #define CHAN_ELEM_GET_TAG(x) (((x) & 0x0f) >> 0)
- #define CHAN_ELEM_SET_CPE(x) (((x) & 0x01) << 4)
- #define CHAN_ELEM_SET_TAG(x) (((x) & 0x0f) << 0)
- #define MAX_HUFF_BITS 20
- #define HUFFTAB_SPEC_OFFSET 1
-
- #define SF_DQ_OFFSET 15
- #define FBITS_OUT_DQ 20
- #define FBITS_OUT_DQ_OFF (FBITS_OUT_DQ - SF_DQ_OFFSET)
- #define FBITS_IN_IMDCT FBITS_OUT_DQ_OFF
- #define GBITS_IN_DCT4 4
- #define FBITS_LOST_DCT4 1
- #define FBITS_LOST_WND 1
- #define FBITS_LOST_IMDCT (FBITS_LOST_DCT4 + FBITS_LOST_WND)
- #define FBITS_OUT_IMDCT (FBITS_IN_IMDCT - FBITS_LOST_IMDCT)
- #define NUM_IMDCT_SIZES 2
- #define DecodeProgramConfigElement STATNAME(DecodeProgramConfigElement)
- #define DecodeHuffmanScalar STATNAME(DecodeHuffmanScalar)
- #define DecodeSpectrumLong STATNAME(DecodeSpectrumLong)
- #define DecodeSpectrumShort STATNAME(DecodeSpectrumShort)
- #define DecodeICSInfo STATNAME(DecodeICSInfo)
- #define DCT4 STATNAME(DCT4)
- #define R4FFT STATNAME(R4FFT)
- #define DecWindowOverlapNoClip STATNAME(DecWindowOverlapNoClip)
- #define DecWindowOverlapLongStartNoClip STATNAME(DecWindowOverlapLongStartNoClip)
- #define DecWindowOverlapLongStopNoClip STATNAME(DecWindowOverlapLongStopNoClip)
- #define DecWindowOverlapShortNoClip STATNAME(DecWindowOverlapShortNoClip)
- #define huffTabSpecInfo STATNAME(huffTabSpecInfo)
- #define huffTabSpec STATNAME(huffTabSpec)
- #define huffTabScaleFactInfo STATNAME(huffTabScaleFactInfo)
- #define huffTabScaleFact STATNAME(huffTabScaleFact)
- #define cos4sin4tab STATNAME(cos4sin4tab)
- #define cos4sin4tabOffset STATNAME(cos4sin4tabOffset)
- #define cos1sin1tab STATNAME(cos1sin1tab)
- #define sinWindow STATNAME(sinWindow)
- #define sinWindowOffset STATNAME(sinWindowOffset)
- #define kbdWindow STATNAME(kbdWindow)
- #define kbdWindowOffset STATNAME(kbdWindowOffset)
- #define bitrevtab STATNAME(bitrevtab)
- #define bitrevtabOffset STATNAME(bitrevtabOffset)
- #define uniqueIDTab STATNAME(uniqueIDTab)
- #define twidTabEven STATNAME(twidTabEven)
- #define twidTabOdd STATNAME(twidTabOdd)
- typedef struct _HuffInfo {
- int maxBits;
- unsigned int count[MAX_HUFF_BITS];
- int offset;
- } HuffInfo;
- typedef struct _PulseInfo {
- unsigned char pulseDataPresent;
- unsigned char numPulse;
- unsigned char startSFB;
- unsigned char offset[MAX_PULSES];
- unsigned char amp[MAX_PULSES];
- } PulseInfo;
- typedef struct _TNSInfo {
- unsigned char tnsDataPresent;
- unsigned char numFilt[MAX_TNS_FILTERS];
- unsigned char coefRes[MAX_TNS_FILTERS];
- unsigned char length[MAX_TNS_FILTERS];
- unsigned char order[MAX_TNS_FILTERS];
- unsigned char dir[MAX_TNS_FILTERS];
- signed char coef[MAX_TNS_COEFS];
- } TNSInfo;
- typedef struct _GainControlInfo {
- unsigned char gainControlDataPresent;
- unsigned char maxBand;
- unsigned char adjNum[MAX_GAIN_BANDS][MAX_GAIN_WIN];
- unsigned char alevCode[MAX_GAIN_BANDS][MAX_GAIN_WIN][MAX_GAIN_ADJUST];
- unsigned char alocCode[MAX_GAIN_BANDS][MAX_GAIN_WIN][MAX_GAIN_ADJUST];
- } GainControlInfo;
- typedef struct _ICSInfo {
- unsigned char icsResBit;
- unsigned char winSequence;
- unsigned char winShape;
- unsigned char maxSFB;
- unsigned char sfGroup;
- unsigned char predictorDataPresent;
- unsigned char predictorReset;
- unsigned char predictorResetGroupNum;
- unsigned char predictionUsed[MAX_PRED_SFB];
- unsigned char numWinGroup;
- unsigned char winGroupLen[MAX_WIN_GROUPS];
- } ICSInfo;
- typedef struct _ADTSHeader {
-
- unsigned char id;
- unsigned char layer;
- unsigned char protectBit;
- unsigned char profile;
- unsigned char sampRateIdx;
- unsigned char privateBit;
- unsigned char channelConfig;
- unsigned char origCopy;
- unsigned char home;
-
- unsigned char copyBit;
- unsigned char copyStart;
- int frameLength;
- int bufferFull;
- unsigned char numRawDataBlocks;
-
- int crcCheckWord;
- } ADTSHeader;
- typedef struct _ADIFHeader {
- unsigned char copyBit;
- unsigned char origCopy;
- unsigned char home;
- unsigned char bsType;
- int bitRate;
- unsigned char numPCE;
- int bufferFull;
- unsigned char copyID[ADIF_COPYID_SIZE];
- } ADIFHeader;
- typedef struct _ProgConfigElement {
- unsigned char elemInstTag;
- unsigned char profile;
- unsigned char sampRateIdx;
- unsigned char numFCE;
- unsigned char numSCE;
- unsigned char numBCE;
- unsigned char numLCE;
- unsigned char numADE;
- unsigned char numCCE;
- unsigned char monoMixdown;
- unsigned char stereoMixdown;
- unsigned char matrixMixdown;
- unsigned char fce[MAX_NUM_FCE];
- unsigned char sce[MAX_NUM_SCE];
- unsigned char bce[MAX_NUM_BCE];
- unsigned char lce[MAX_NUM_LCE];
- unsigned char ade[MAX_NUM_ADE];
- unsigned char cce[MAX_NUM_BCE];
- #ifdef KEEP_PCE_COMMENTS
-
- unsigned char commentBytes;
- unsigned char commentField[MAX_COMMENT_BYTES];
- #endif
- } ProgConfigElement;
- typedef struct _PSInfoBase {
-
- ADTSHeader fhADTS;
- ADIFHeader fhADIF;
- ProgConfigElement pce[MAX_NUM_PCE_ADIF];
- int dataCount;
- unsigned char dataBuf[DATA_BUF_SIZE];
- int fillCount;
- unsigned char fillBuf[FILL_BUF_SIZE];
-
- int nChans;
- int useImpChanMap;
- int sampRateIdx;
-
- ICSInfo icsInfo[MAX_NCHANS_ELEM];
- int commonWin;
- short scaleFactors[MAX_NCHANS_ELEM][MAX_SF_BANDS];
- unsigned char sfbCodeBook[MAX_NCHANS_ELEM][MAX_SF_BANDS];
- int msMaskPresent;
- unsigned char msMaskBits[MAX_MS_MASK_BYTES];
- int pnsUsed[MAX_NCHANS_ELEM];
- int pnsLastVal;
- int intensityUsed[MAX_NCHANS_ELEM];
- PulseInfo pulseInfo[MAX_NCHANS_ELEM];
- TNSInfo tnsInfo[MAX_NCHANS_ELEM];
- int tnsLPCBuf[MAX_TNS_ORDER];
- int tnsWorkBuf[MAX_TNS_ORDER];
- GainControlInfo gainControlInfo[MAX_NCHANS_ELEM];
- int gbCurrent[MAX_NCHANS_ELEM];
- int coef[MAX_NCHANS_ELEM][AAC_MAX_NSAMPS];
- #ifdef AAC_ENABLE_SBR
- int sbrWorkBuf[MAX_NCHANS_ELEM][AAC_MAX_NSAMPS];
- #endif
-
- int overlap[AAC_MAX_NCHANS][AAC_MAX_NSAMPS];
- int prevWinShape[AAC_MAX_NCHANS];
- } PSInfoBase;
- int DecodeProgramConfigElement(ProgConfigElement *pce, BitStreamInfo *bsi);
- int DecodeHuffmanScalar(const signed short *huffTab, const HuffInfo *huffTabInfo, unsigned int bitBuf, signed int *val);
- void DecodeSpectrumLong(PSInfoBase *psi, BitStreamInfo *bsi, int ch);
- void DecodeSpectrumShort(PSInfoBase *psi, BitStreamInfo *bsi, int ch);
- void DecodeICSInfo(BitStreamInfo *bsi, ICSInfo *icsInfo, int sampRateIdx);
- void DCT4(int tabidx, int *coef, int gb);
- void R4FFT(int tabidx, int *x);
- void DecWindowOverlapNoClip(int *buf0, int *over0, int *out0, int winTypeCurr, int winTypePrev);
- void DecWindowOverlapLongStartNoClip(int *buf0, int *over0, int *out0, int winTypeCurr, int winTypePrev);
- void DecWindowOverlapLongStopNoClip(int *buf0, int *over0, int *out0, int winTypeCurr, int winTypePrev);
- void DecWindowOverlapShortNoClip(int *buf0, int *over0, int *out0, int winTypeCurr, int winTypePrev);
- extern const HuffInfo huffTabSpecInfo[11];
- extern const signed short huffTabSpec[1241];
- extern const HuffInfo huffTabScaleFactInfo;
- extern const signed short huffTabScaleFact[121];
- extern const int cos4sin4tabOffset[NUM_IMDCT_SIZES];
- extern const int sinWindowOffset[NUM_IMDCT_SIZES];
- extern const int kbdWindowOffset[NUM_IMDCT_SIZES];
- extern const unsigned char bitrevtab[17 + 129];
- extern const int bitrevtabOffset[NUM_IMDCT_SIZES];
- #ifdef HELIX_CONFIG_AAC_GENERATE_TRIGTABS_FLOAT
- extern int cos4sin4tab[128 + 1024];
- extern int cos1sin1tab[514];
- extern int sinWindow[128 + 1024];
- extern int kbdWindow[128 + 1024];
- extern int twidTabEven[4*6 + 16*6 + 64*6];
- extern int twidTabOdd[8*6 + 32*6 + 128*6];
- #else
- extern const int cos4sin4tab[128 + 1024];
- extern const int cos1sin1tab[514];
- extern const int sinWindow[128 + 1024];
- extern const int kbdWindow[128 + 1024];
- extern const int twidTabEven[4*6 + 16*6 + 64*6];
- extern const int twidTabOdd[8*6 + 32*6 + 128*6];
- #endif
- #endif
|