| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | 
							- /* ***** BEGIN LICENSE BLOCK *****  
 
-  * Source last modified: $Id: aaccommon.h,v 1.1 2005/02/26 01:47:34 jrecker Exp $ 
 
-  *   
 
-  * Portions Copyright (c) 1995-2005 RealNetworks, Inc. All Rights Reserved.  
 
-  *       
 
-  * The contents of this file, and the files included with this file, 
 
-  * are subject to the current version of the RealNetworks Public 
 
-  * Source License (the "RPSL") available at 
 
-  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
 
-  * the file under the current version of the RealNetworks Community 
 
-  * Source License (the "RCSL") available at 
 
-  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL 
 
-  * will apply. You may also obtain the license terms directly from 
 
-  * RealNetworks.  You may not use this file except in compliance with 
 
-  * the RPSL or, if you have a valid RCSL with RealNetworks applicable 
 
-  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for 
 
-  * the rights, obligations and limitations governing use of the 
 
-  * contents of the file. 
 
-  *   
 
-  * This file is part of the Helix DNA Technology. RealNetworks is the 
 
-  * developer of the Original Code and owns the copyrights in the 
 
-  * portions it created. 
 
-  *   
 
-  * This file, and the files included with this file, is distributed 
 
-  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY 
 
-  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS 
 
-  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES 
 
-  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET 
 
-  * ENJOYMENT OR NON-INFRINGEMENT. 
 
-  *  
 
-  * Technology Compatibility Kit Test Suite(s) Location:  
 
-  *    http://www.helixcommunity.org/content/tck  
 
-  *  
 
-  * Contributor(s):  
 
-  *   
 
-  * ***** END LICENSE BLOCK ***** */  
 
- /**************************************************************************************
 
-  * Fixed-point HE-AAC decoder
 
-  * Jon Recker (jrecker@real.com)
 
-  * February 2005
 
-  *
 
-  * aaccommon.h - implementation-independent API's, datatypes, and definitions
 
-  **************************************************************************************/
 
- #ifndef _AACCOMMON_H
 
- #define _AACCOMMON_H
 
- #ifdef ESP8266
 
- #  include "pgmspace.h"
 
- #elif defined(ESP_PLATFORM) && __has_include(<pgm_space.h>)
 
- #  include <pgm_space.h>
 
- #else
 
- #  define PROGMEM
 
- #  define pgm_read_byte(addr) (*(const unsigned char *)(addr))
 
- #  define pgm_read_word(addr) (*(const unsigned short *)(addr))
 
- #endif
 
- // Can't fit in ESP8266 RAM
 
- #ifndef ESP8266
 
-   #define AAC_ENABLE_SBR 1 
 
- #endif
 
- #pragma GCC optimize ("O3")
 
- #include "aacdec.h"
 
- #include "statname.h"
 
- /* 12-bit syncword */
 
- #define	SYNCWORDH			0xff
 
- #define	SYNCWORDL			0xf0
 
- #define MAX_NCHANS_ELEM		2	/* max number of channels in any single bitstream element (SCE,CPE,CCE,LFE) */
 
- #define ADTS_HEADER_BYTES	7
 
- #define NUM_SAMPLE_RATES	12
 
- #define NUM_DEF_CHAN_MAPS	8
 
- #define NUM_ELEMENTS		8
 
- #define MAX_NUM_PCE_ADIF	16
 
- #define MAX_WIN_GROUPS		8
 
- #define MAX_SFB_SHORT		15
 
- #define MAX_SF_BANDS		(MAX_SFB_SHORT*MAX_WIN_GROUPS)	/* worst case = 15 sfb's * 8 windows for short block */
 
- #define MAX_MS_MASK_BYTES	((MAX_SF_BANDS + 7) >> 3)
 
- #define MAX_PRED_SFB		41
 
- #define MAX_TNS_FILTERS		8
 
- #define MAX_TNS_COEFS		60
 
- #define MAX_TNS_ORDER		20
 
- #define MAX_PULSES			4
 
- #define MAX_GAIN_BANDS		3
 
- #define MAX_GAIN_WIN		8
 
- #define MAX_GAIN_ADJUST		7
 
- #define NSAMPS_LONG			1024
 
- #define NSAMPS_SHORT		128
 
- #define NUM_SYN_ID_BITS		3
 
- #define NUM_INST_TAG_BITS	4
 
- #define EXT_SBR_DATA		0x0d
 
- #define EXT_SBR_DATA_CRC	0x0e
 
- #define IS_ADIF(p)		((p)[0] == 'A' && (p)[1] == 'D' && (p)[2] == 'I' && (p)[3] == 'F')
 
- #define GET_ELE_ID(p)	((AACElementID)(*(p) >> (8-NUM_SYN_ID_BITS)))
 
- /* AAC file format */
 
- enum {
 
- 	AAC_FF_Unknown = 0,		/* should be 0 on init */
 
- 	AAC_FF_ADTS = 1,
 
- 	AAC_FF_ADIF = 2,
 
- 	AAC_FF_RAW =  3
 
- };
 
- /* syntactic element type */
 
- enum {
 
- 	AAC_ID_INVALID = -1,
 
- 	AAC_ID_SCE =  0,
 
- 	AAC_ID_CPE =  1,
 
- 	AAC_ID_CCE =  2,
 
- 	AAC_ID_LFE =  3,
 
- 	AAC_ID_DSE =  4,
 
- 	AAC_ID_PCE =  5,
 
- 	AAC_ID_FIL =  6,
 
- 	AAC_ID_END =  7
 
- };
 
- typedef struct _AACDecInfo {
 
- 	/* pointers to platform-specific state information */
 
- 	void *psInfoBase;	/* baseline MPEG-4 LC decoding */
 
- 	void *psInfoSBR;	/* MPEG-4 SBR decoding */
 
- 	
 
- 	/* raw decoded data, before rounding to 16-bit PCM (for postprocessing such as SBR) */
 
- 	void *rawSampleBuf[AAC_MAX_NCHANS];
 
- 	int rawSampleBytes;
 
- 	int rawSampleFBits;
 
- 	/* fill data (can be used for processing SBR or other extensions) */
 
- 	unsigned char *fillBuf;
 
- 	int fillCount;
 
- 	int fillExtType;
 
- 	/* block information */
 
- 	int prevBlockID;
 
- 	int currBlockID;
 
- 	int currInstTag;
 
- 	int sbDeinterleaveReqd[MAX_NCHANS_ELEM];
 
- 	int adtsBlocksLeft;
 
- 	/* user-accessible info */
 
- 	int bitRate;
 
- 	int nChans;
 
- 	int sampRate;
 
- 	int profile;
 
- 	int format;
 
- 	int sbrEnabled;
 
- 	int tnsUsed;
 
- 	int pnsUsed;
 
- 	int frameCount;
 
- } AACDecInfo;
 
- /* decoder functions which must be implemented for each platform */
 
- AACDecInfo *AllocateBuffers(void);
 
- AACDecInfo *AllocateBuffersPre(void **space, int *len);
 
- void FreeBuffers(AACDecInfo *aacDecInfo);
 
- void ClearBuffer(void *buf, int nBytes);
 
- int UnpackADTSHeader(AACDecInfo *aacDecInfo, unsigned char **buf, int *bitOffset, int *bitsAvail);
 
- int GetADTSChannelMapping(AACDecInfo *aacDecInfo, unsigned char *buf, int bitOffset, int bitsAvail);
 
- int UnpackADIFHeader(AACDecInfo *aacDecInfo, unsigned char **buf, int *bitOffset, int *bitsAvail);
 
- int SetRawBlockParams(AACDecInfo *aacDecInfo, int copyLast, int nChans, int sampRate, int profile);
 
- int PrepareRawBlock(AACDecInfo *aacDecInfo);
 
- int FlushCodec(AACDecInfo *aacDecInfo);
 
- int DecodeNextElement(AACDecInfo *aacDecInfo, unsigned char **buf, int *bitOffset, int *bitsAvail);
 
- int DecodeNoiselessData(AACDecInfo *aacDecInfo, unsigned char **buf, int *bitOffset, int *bitsAvail, int ch);
 
- int Dequantize(AACDecInfo *aacDecInfo, int ch);
 
- int StereoProcess(AACDecInfo *aacDecInfo);
 
- int DeinterleaveShortBlocks(AACDecInfo *aacDecInfo, int ch);
 
- int PNS(AACDecInfo *aacDecInfo, int ch);
 
- int TNSFilter(AACDecInfo *aacDecInfo, int ch);
 
- int IMDCT(AACDecInfo *aacDecInfo, int ch, int chBase, short *outbuf);
 
- /* SBR specific functions */
 
- int InitSBR(AACDecInfo *aacDecInfo);
 
- int InitSBRPre(AACDecInfo *aacDecInfo, void **ptr, int *sz);
 
- void FreeSBR(AACDecInfo *aacDecInfo);
 
- int DecodeSBRBitstream(AACDecInfo *aacDecInfo, int chBase);
 
- int DecodeSBRData(AACDecInfo *aacDecInfo, int chBase, short *outbuf);
 
- int FlushCodecSBR(AACDecInfo *aacDecInfo);
 
- /* aactabs.c - global ROM tables */
 
- extern const int sampRateTab[NUM_SAMPLE_RATES];
 
- extern const int predSFBMax[NUM_SAMPLE_RATES];
 
- extern const int channelMapTab[NUM_DEF_CHAN_MAPS];
 
- extern const int elementNumChans[NUM_ELEMENTS];
 
- extern const unsigned /*char*/ int sfBandTotalShort[NUM_SAMPLE_RATES];
 
- extern const unsigned /*char*/ int sfBandTotalLong[NUM_SAMPLE_RATES];
 
- extern const int sfBandTabShortOffset[NUM_SAMPLE_RATES];
 
- extern const /*short*/ int sfBandTabShort[76];
 
- extern const int sfBandTabLongOffset[NUM_SAMPLE_RATES];
 
- extern const /*short*/ int sfBandTabLong[325];
 
- extern const int tnsMaxBandsShortOffset[AAC_NUM_PROFILES];
 
- extern const unsigned /*char*/ int tnsMaxBandsShort[2*NUM_SAMPLE_RATES];
 
- extern const unsigned /*char*/ int tnsMaxOrderShort[AAC_NUM_PROFILES];
 
- extern const int tnsMaxBandsLongOffset[AAC_NUM_PROFILES];
 
- extern const unsigned /*char*/ int tnsMaxBandsLong[2*NUM_SAMPLE_RATES];
 
- extern const unsigned /*char*/ int tnsMaxOrderLong[AAC_NUM_PROFILES];
 
- #endif	/* _AACCOMMON_H */
 
 
  |