Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
ESP32-audioI2S
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
ESP32-audioI2S
Commits
258c29bc
Unverified
Commit
258c29bc
authored
Nov 21, 2018
by
Wolle
Committed by
GitHub
Nov 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Delete mp3_decoder.h
parent
81b72871
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
1431 deletions
+0
-1431
audioI2S/mp3_decoder/mp3_decoder.h
audioI2S/mp3_decoder/mp3_decoder.h
+0
-1431
No files found.
audioI2S/mp3_decoder/mp3_decoder.h
deleted
100644 → 0
View file @
81b72871
// based om helix mp3 decoder
#pragma once
#pragma GCC optimize ("O3")
#include "Arduino.h"
#include <pgmspace.h>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wnarrowing"
#define STATNAME(func) func
#define DEF_NFRACBITS (DQ_FRACBITS_OUT - 2 - 2 - 15)
#define CSHIFT 12
/* coefficients have 12 leading sign bits for early-terminating mulitplies */
#define SIBYTES_MPEG1_MONO 17
#define SIBYTES_MPEG1_STEREO 32
#define SIBYTES_MPEG2_MONO 9
#define SIBYTES_MPEG2_STEREO 17
#define POW43_FRACBITS_LOW 22 // number of fraction bits for pow43Tab (see comments there) */
#define POW43_FRACBITS_HIGH 12
#define DQ_FRACBITS_OUT 25
/* number of fraction bits in output of dequant */
#define IMDCT_SCALE 2
/* additional scaling (by sqrt(2)) for fast IMDCT36 */
#define HUFF_PAIRTABS 32
#define BLOCK_SIZE 18
#define NBANDS 32
#define MAX_REORDER_SAMPS ((192-126)*3)
/* largest critical band for short blocks (see sfBandTable) */
#define VBUF_LENGTH (17 * 2 * NBANDS)
/* for double-sized vbuf FIFO */
#define MAX_SCFBD 4
/* max scalefactor bands per channel */
#define NGRANS_MPEG1 2
#define NGRANS_MPEG2 1
#define MAINBUF_SIZE 1940
#define MAX_NGRAN 2
/* max granules */
#define MAX_NCHAN 2
/* max channels */
#define MAX_NSAMP 576
/* max samples per channel, per granule */
#define STATCC1(x,y,z) STATCC2(x,y,z)
#define STATCC2(x,y,z) x##y##z
/* clip to range [-2^n, 2^n - 1] */
#define CLIP_2N(y, n) {int sign = (y) >> 31; if (sign != (y) >> (n)) {(y) = sign ^ ((1 << (n)) - 1);}}
#define ASSERT(x)
/* do nothing */
/* 12-bit syncword if MPEG 1,2 only are supported */
#define SYNCWORDH 0xff
#define SYNCWORDL 0xf0
#define COS0_0 0x4013c251
/* Q31 */
#define COS0_1 0x40b345bd
/* Q31 */
#define COS0_2 0x41fa2d6d
/* Q31 */
#define COS0_3 0x43f93421
/* Q31 */
#define COS0_4 0x46cc1bc4
/* Q31 */
#define COS0_5 0x4a9d9cf0
/* Q31 */
#define COS0_6 0x4fae3711
/* Q31 */
#define COS0_7 0x56601ea7
/* Q31 */
#define COS0_8 0x5f4cf6eb
/* Q31 */
#define COS0_9 0x6b6fcf26
/* Q31 */
#define COS0_10 0x7c7d1db3
/* Q31 */
#define COS0_11 0x4ad81a97
/* Q30 */
#define COS0_12 0x5efc8d96
/* Q30 */
#define COS0_13 0x41d95790
/* Q29 */
#define COS0_14 0x6d0b20cf
/* Q29 */
#define COS0_15 0x518522fb
/* Q27 */
#define COS1_0 0x404f4672
/* Q31 */
#define COS1_1 0x42e13c10
/* Q31 */
#define COS1_2 0x48919f44
/* Q31 */
#define COS1_3 0x52cb0e63
/* Q31 */
#define COS1_4 0x64e2402e
/* Q31 */
#define COS1_5 0x43e224a9
/* Q30 */
#define COS1_6 0x6e3c92c1
/* Q30 */
#define COS1_7 0x519e4e04
/* Q28 */
#define COS2_0 0x4140fb46
/* Q31 */
#define COS2_1 0x4cf8de88
/* Q31 */
#define COS2_2 0x73326bbf
/* Q31 */
#define COS2_3 0x52036742
/* Q29 */
#define COS3_0 0x4545e9ef
/* Q31 */
#define COS3_1 0x539eba45
/* Q30 */
#define COS4_0 0x5a82799a
/* Q31 */
static
const
int
dcttab
[
48
]
PROGMEM
=
{
// faster in ROM
/* first pass */
COS0_0
,
COS0_15
,
COS1_0
,
/* 31, 27, 31 */
COS0_1
,
COS0_14
,
COS1_1
,
/* 31, 29, 31 */
COS0_2
,
COS0_13
,
COS1_2
,
/* 31, 29, 31 */
COS0_3
,
COS0_12
,
COS1_3
,
/* 31, 30, 31 */
COS0_4
,
COS0_11
,
COS1_4
,
/* 31, 30, 31 */
COS0_5
,
COS0_10
,
COS1_5
,
/* 31, 31, 30 */
COS0_6
,
COS0_9
,
COS1_6
,
/* 31, 31, 30 */
COS0_7
,
COS0_8
,
COS1_7
,
/* 31, 31, 28 */
/* second pass */
COS2_0
,
COS2_3
,
COS3_0
,
/* 31, 29, 31 */
COS2_1
,
COS2_2
,
COS3_1
,
/* 31, 31, 30 */
-
COS2_0
,
-
COS2_3
,
COS3_0
,
/* 31, 29, 31 */
-
COS2_1
,
-
COS2_2
,
COS3_1
,
/* 31, 31, 30 */
COS2_0
,
COS2_3
,
COS3_0
,
/* 31, 29, 31 */
COS2_1
,
COS2_2
,
COS3_1
,
/* 31, 31, 30 */
-
COS2_0
,
-
COS2_3
,
COS3_0
,
/* 31, 29, 31 */
-
COS2_1
,
-
COS2_2
,
COS3_1
,
/* 31, 31, 30 */
};
#define D32FP(i, s0, s1, s2) { \
a0 = buf[i]; a3 = buf[31-i]; \
a1 = buf[15-i]; a2 = buf[16+i]; \
b0 = a0 + a3; b3 = MULSHIFT32(*cptr++, a0 - a3) << (s0); \
b1 = a1 + a2; b2 = MULSHIFT32(*cptr++, a1 - a2) << (s1); \
buf[i] = b0 + b1; buf[15-i] = MULSHIFT32(*cptr, b0 - b1) << (s2); \
buf[16+i] = b2 + b3; buf[31-i] = MULSHIFT32(*cptr++, b3 - b2) << (s2); \
}
#ifndef MAX
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
#ifndef MIN
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif
/* helper macros - see comments in hufftabs.c about the format of the huffman tables */
#define GetMaxbits(x) ((int)( (((unsigned short)(x)) >> 0) & 0x000f))
#define GetHLen(x) ((int)( (((unsigned short)(x)) >> 12) & 0x000f))
#define GetCWY(x) ((int)( (((unsigned short)(x)) >> 8) & 0x000f))
#define GetCWX(x) ((int)( (((unsigned short)(x)) >> 4) & 0x000f))
#define GetSignBits(x) ((int)( (((unsigned short)(x)) >> 0) & 0x000f))
#define GetHLenQ(x) ((int)( (((unsigned char)(x)) >> 4) & 0x0f))
#define GetCWVQ(x) ((int)( (((unsigned char)(x)) >> 3) & 0x01))
#define GetCWWQ(x) ((int)( (((unsigned char)(x)) >> 2) & 0x01))
#define GetCWXQ(x) ((int)( (((unsigned char)(x)) >> 1) & 0x01))
#define GetCWYQ(x) ((int)( (((unsigned char)(x)) >> 0) & 0x01))
/* apply sign of s to the positive number x (save in MSB, will do two's complement in dequant) */
#define ApplySign(x, s) { (x) |= ((s) & 0x80000000); }
enum
{
ERR_MP3_NONE
=
0
,
ERR_MP3_INDATA_UNDERFLOW
=
-
1
,
ERR_MP3_MAINDATA_UNDERFLOW
=
-
2
,
ERR_MP3_FREE_BITRATE_SYNC
=
-
3
,
ERR_MP3_OUT_OF_MEMORY
=
-
4
,
ERR_MP3_NULL_POINTER
=
-
5
,
ERR_MP3_INVALID_FRAMEHEADER
=
-
6
,
ERR_MP3_INVALID_SIDEINFO
=
-
7
,
ERR_MP3_INVALID_SCALEFACT
=
-
8
,
ERR_MP3_INVALID_HUFFCODES
=
-
9
,
ERR_MP3_INVALID_DEQUANTIZE
=
-
10
,
ERR_MP3_INVALID_IMDCT
=
-
11
,
ERR_MP3_INVALID_SUBBAND
=
-
12
,
ERR_UNKNOWN
=
-
9999
};
typedef
struct
_MP3FrameInfo
{
int
bitrate
;
int
nChans
;
int
samprate
;
int
bitsPerSample
;
int
outputSamps
;
int
layer
;
int
version
;
}
MP3FrameInfo
;
typedef
struct
_SFBandTable
{
int
/*short*/
l
[
23
];
int
/*short*/
s
[
14
];
}
SFBandTable
;
typedef
struct
_BitStreamInfo
{
unsigned
char
*
bytePtr
;
unsigned
int
iCache
;
int
cachedBits
;
int
nBytes
;
}
BitStreamInfo
;
typedef
enum
{
/* map these to the corresponding 2-bit values in the frame header */
Stereo
=
0x00
,
/* two independent channels, but L and R frames might have different # of bits */
Joint
=
0x01
,
/* coupled channels - layer III: mix of M-S and intensity, Layers I/II: intensity and direct coding only */
Dual
=
0x02
,
/* two independent channels, L and R always have exactly 1/2 the total bitrate */
Mono
=
0x03
/* one channel */
}
StereoMode
;
typedef
enum
{
/* map to 0,1,2 to make table indexing easier */
MPEG1
=
0
,
MPEG2
=
1
,
MPEG25
=
2
}
MPEGVersion
;
typedef
struct
_FrameHeader
{
MPEGVersion
ver
;
/* version ID */
int
layer
;
/* layer index (1, 2, or 3) */
int
crc
;
/* CRC flag: 0 = disabled, 1 = enabled */
int
brIdx
;
/* bitrate index (0 - 15) */
int
srIdx
;
/* sample rate index (0 - 2) */
int
paddingBit
;
/* padding flag: 0 = no padding, 1 = single pad byte */
int
privateBit
;
/* unused */
StereoMode
sMode
;
/* mono/stereo mode */
int
modeExt
;
/* used to decipher joint stereo mode */
int
copyFlag
;
/* copyright flag: 0 = no, 1 = yes */
int
origFlag
;
/* original flag: 0 = copy, 1 = original */
int
emphasis
;
/* deemphasis mode */
int
CRCWord
;
/* CRC word (16 bits, 0 if crc not enabled) */
const
SFBandTable
*
sfBand
;
}
FrameHeader
;
typedef
struct
_SideInfoSub
{
int
part23Length
;
/* number of bits in main data */
int
nBigvals
;
/* 2x this = first set of Huffman cw's (maximum amplitude can be > 1) */
int
globalGain
;
/* overall gain for dequantizer */
int
sfCompress
;
/* unpacked to figure out number of bits in scale factors */
int
winSwitchFlag
;
/* window switching flag */
int
blockType
;
/* block type */
int
mixedBlock
;
/* 0 = regular block (all short or long), 1 = mixed block */
int
tableSelect
[
3
];
/* index of Huffman tables for the big values regions */
int
subBlockGain
[
3
];
/* subblock gain offset, relative to global gain */
int
region0Count
;
/* 1+region0Count = num scale factor bands in first region of bigvals */
int
region1Count
;
/* 1+region1Count = num scale factor bands in second region of bigvals */
int
preFlag
;
/* for optional high frequency boost */
int
sfactScale
;
/* scaling of the scalefactors */
int
count1TableSelect
;
/* index of Huffman table for quad codewords */
}
SideInfoSub
;
typedef
struct
_SideInfo
{
int
mainDataBegin
;
int
privateBits
;
int
scfsi
[
MAX_NCHAN
][
MAX_SCFBD
];
/* 4 scalefactor bands per channel */
SideInfoSub
sis
[
MAX_NGRAN
][
MAX_NCHAN
];
}
SideInfo
;
typedef
struct
{
int
cbType
;
/* pure long = 0, pure short = 1, mixed = 2 */
int
cbEndS
[
3
];
/* number nonzero short cb's, per subbblock */
int
cbEndSMax
;
/* max of cbEndS[] */
int
cbEndL
;
/* number nonzero long cb's */
}
CriticalBandInfo
;
typedef
struct
_DequantInfo
{
int
workBuf
[
MAX_REORDER_SAMPS
];
/* workbuf for reordering short blocks */
CriticalBandInfo
cbi
[
MAX_NCHAN
];
/* filled in dequantizer, used in joint stereo reconstruction */
}
DequantInfo
;
typedef
struct
_HuffmanInfo
{
int
huffDecBuf
[
MAX_NCHAN
][
MAX_NSAMP
];
/* used both for decoded Huffman values and dequantized coefficients */
int
nonZeroBound
[
MAX_NCHAN
];
/* number of coeffs in huffDecBuf[ch] which can be > 0 */
int
gb
[
MAX_NCHAN
];
/* minimum number of guard bits in huffDecBuf[ch] */
}
HuffmanInfo
;
typedef
enum
_HuffTabType
{
noBits
,
oneShot
,
loopNoLinbits
,
loopLinbits
,
quadA
,
quadB
,
invalidTab
}
HuffTabType
;
typedef
struct
_HuffTabLookup
{
int
linBits
;
int
/*HuffTabType*/
tabType
;
}
HuffTabLookup
;
typedef
struct
_IMDCTInfo
{
int
outBuf
[
MAX_NCHAN
][
BLOCK_SIZE
][
NBANDS
];
/* output of IMDCT */
int
overBuf
[
MAX_NCHAN
][
MAX_NSAMP
/
2
];
/* overlap-add buffer (by symmetry, only need 1/2 size) */
int
numPrevIMDCT
[
MAX_NCHAN
];
/* how many IMDCT's calculated in this channel on prev. granule */
int
prevType
[
MAX_NCHAN
];
int
prevWinSwitch
[
MAX_NCHAN
];
int
gb
[
MAX_NCHAN
];
}
IMDCTInfo
;
typedef
struct
_BlockCount
{
int
nBlocksLong
;
int
nBlocksTotal
;
int
nBlocksPrev
;
int
prevType
;
int
prevWinSwitch
;
int
currWinSwitch
;
int
gbIn
;
int
gbOut
;
}
BlockCount
;
typedef
struct
_ScaleFactorInfoSub
{
/* max bits in scalefactors = 5, so use char's to save space */
char
l
[
23
];
/* [band] */
char
s
[
13
][
3
];
/* [band][window] */
}
ScaleFactorInfoSub
;
typedef
struct
_ScaleFactorJS
{
/* used in MPEG 2, 2.5 intensity (joint) stereo only */
int
intensityScale
;
int
slen
[
4
];
int
nr
[
4
];
}
ScaleFactorJS
;
typedef
struct
_ScaleFactorInfo
{
ScaleFactorInfoSub
sfis
[
MAX_NGRAN
][
MAX_NCHAN
];
ScaleFactorJS
sfjs
;
}
ScaleFactorInfo
;
/* NOTE - could get by with smaller vbuf if memory is more important than speed
* (in Subband, instead of replicating each block in FDCT32 you would do a memmove on the
* last 15 blocks to shift them down one, a hardware style FIFO)
*/
typedef
struct
_SubbandInfo
{
int
vbuf
[
MAX_NCHAN
*
VBUF_LENGTH
];
/* vbuf for fast DCT-based synthesis PQMF - double size for speed (no modulo indexing) */
int
vindex
;
/* internal index for tracking position in vbuf */
}
SubbandInfo
;
typedef
struct
_MP3DecInfo
{
/* pointers to platform-specific data structures */
void
*
FrameHeaderPS
;
void
*
SideInfoPS
;
void
*
ScaleFactorInfoPS
;
void
*
HuffmanInfoPS
;
void
*
DequantInfoPS
;
void
*
IMDCTInfoPS
;
void
*
SubbandInfoPS
;
/* buffer which must be large enough to hold largest possible main_data section */
unsigned
char
mainBuf
[
MAINBUF_SIZE
];
/* special info for "free" bitrate files */
int
freeBitrateFlag
;
int
freeBitrateSlots
;
/* user-accessible info */
int
bitrate
;
int
nChans
;
int
samprate
;
int
nGrans
;
/* granules per frame */
int
nGranSamps
;
/* samples per granule */
int
nSlots
;
int
layer
;
MPEGVersion
version
;
int
mainDataBegin
;
int
mainDataBytes
;
int
part23Length
[
MAX_NGRAN
][
MAX_NCHAN
];
}
MP3DecInfo
;
const
unsigned
short
huffTable
[]
PROGMEM
=
{
/* huffTable01[9] */
0xf003
,
0x3112
,
0x3101
,
0x2011
,
0x2011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
/* huffTable02[65] */
0xf006
,
0x6222
,
0x6201
,
0x5212
,
0x5212
,
0x5122
,
0x5122
,
0x5021
,
0x5021
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
/* huffTable03[65] */
0xf006
,
0x6222
,
0x6201
,
0x5212
,
0x5212
,
0x5122
,
0x5122
,
0x5021
,
0x5021
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2101
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
/* huffTable05[257] */
0xf008
,
0x8332
,
0x8322
,
0x7232
,
0x7232
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x7312
,
0x7312
,
0x7301
,
0x7301
,
0x7031
,
0x7031
,
0x7222
,
0x7222
,
0x6212
,
0x6212
,
0x6212
,
0x6212
,
0x6122
,
0x6122
,
0x6122
,
0x6122
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
/* huffTable06[129] */
0xf007
,
0x7332
,
0x7301
,
0x6322
,
0x6322
,
0x6232
,
0x6232
,
0x6031
,
0x6031
,
0x5312
,
0x5312
,
0x5312
,
0x5312
,
0x5132
,
0x5132
,
0x5132
,
0x5132
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
/* huffTable07[110] */
0xf006
,
0x0041
,
0x0052
,
0x005b
,
0x0060
,
0x0063
,
0x0068
,
0x006b
,
0x6212
,
0x5122
,
0x5122
,
0x6201
,
0x6021
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0xf004
,
0x4552
,
0x4542
,
0x4452
,
0x4352
,
0x3532
,
0x3532
,
0x3442
,
0x3442
,
0x3522
,
0x3522
,
0x3252
,
0x3252
,
0x2512
,
0x2512
,
0x2512
,
0x2512
,
0xf003
,
0x2152
,
0x2152
,
0x3501
,
0x3432
,
0x2051
,
0x2051
,
0x3342
,
0x3332
,
0xf002
,
0x2422
,
0x2242
,
0x1412
,
0x1412
,
0xf001
,
0x1142
,
0x1041
,
0xf002
,
0x2401
,
0x2322
,
0x2232
,
0x2301
,
0xf001
,
0x1312
,
0x1132
,
0xf001
,
0x1031
,
0x1222
,
/* huffTable08[280] */
0xf008
,
0x0101
,
0x010a
,
0x010f
,
0x8512
,
0x8152
,
0x0112
,
0x0115
,
0x8422
,
0x8242
,
0x8412
,
0x7142
,
0x7142
,
0x8401
,
0x8041
,
0x8322
,
0x8232
,
0x8312
,
0x8132
,
0x8301
,
0x8031
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x2112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0xf003
,
0x3552
,
0x3452
,
0x2542
,
0x2542
,
0x1352
,
0x1352
,
0x1352
,
0x1352
,
0xf002
,
0x2532
,
0x2442
,
0x1522
,
0x1522
,
0xf001
,
0x1252
,
0x1501
,
0xf001
,
0x1432
,
0x1342
,
0xf001
,
0x1051
,
0x1332
,
/* huffTable09[93] */
0xf006
,
0x0041
,
0x004a
,
0x004f
,
0x0052
,
0x0057
,
0x005a
,
0x6412
,
0x6142
,
0x6322
,
0x6232
,
0x5312
,
0x5312
,
0x5132
,
0x5132
,
0x6301
,
0x6031
,
0x5222
,
0x5222
,
0x5201
,
0x5201
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4021
,
0x4021
,
0x4021
,
0x4021
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0xf003
,
0x3552
,
0x3542
,
0x2532
,
0x2532
,
0x2352
,
0x2352
,
0x3452
,
0x3501
,
0xf002
,
0x2442
,
0x2522
,
0x2252
,
0x2512
,
0xf001
,
0x1152
,
0x1432
,
0xf002
,
0x1342
,
0x1342
,
0x2051
,
0x2401
,
0xf001
,
0x1422
,
0x1242
,
0xf001
,
0x1332
,
0x1041
,
/* huffTable10[320] */
0xf008
,
0x0101
,
0x010a
,
0x010f
,
0x0118
,
0x011b
,
0x0120
,
0x0125
,
0x8712
,
0x8172
,
0x012a
,
0x012d
,
0x0132
,
0x8612
,
0x8162
,
0x8061
,
0x0137
,
0x013a
,
0x013d
,
0x8412
,
0x8142
,
0x8041
,
0x8322
,
0x8232
,
0x8301
,
0x7312
,
0x7312
,
0x7132
,
0x7132
,
0x7031
,
0x7031
,
0x7222
,
0x7222
,
0x6212
,
0x6212
,
0x6212
,
0x6212
,
0x6122
,
0x6122
,
0x6122
,
0x6122
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0xf003
,
0x3772
,
0x3762
,
0x3672
,
0x3752
,
0x3572
,
0x3662
,
0x2742
,
0x2742
,
0xf002
,
0x2472
,
0x2652
,
0x2562
,
0x2732
,
0xf003
,
0x2372
,
0x2372
,
0x2642
,
0x2642
,
0x3552
,
0x3452
,
0x2362
,
0x2362
,
0xf001
,
0x1722
,
0x1272
,
0xf002
,
0x2462
,
0x2701
,
0x1071
,
0x1071
,
0xf002
,
0x1262
,
0x1262
,
0x2542
,
0x2532
,
0xf002
,
0x1601
,
0x1601
,
0x2352
,
0x2442
,
0xf001
,
0x1632
,
0x1622
,
0xf002
,
0x2522
,
0x2252
,
0x1512
,
0x1512
,
0xf002
,
0x1152
,
0x1152
,
0x2432
,
0x2342
,
0xf001
,
0x1501
,
0x1051
,
0xf001
,
0x1422
,
0x1242
,
0xf001
,
0x1332
,
0x1401
,
/* huffTable11[296] */
0xf008
,
0x0101
,
0x0106
,
0x010f
,
0x0114
,
0x0117
,
0x8722
,
0x8272
,
0x011c
,
0x7172
,
0x7172
,
0x8712
,
0x8071
,
0x8632
,
0x8362
,
0x8061
,
0x011f
,
0x0122
,
0x8512
,
0x7262
,
0x7262
,
0x8622
,
0x8601
,
0x7612
,
0x7612
,
0x7162
,
0x7162
,
0x8152
,
0x8432
,
0x8051
,
0x0125
,
0x8422
,
0x8242
,
0x8412
,
0x8142
,
0x8401
,
0x8041
,
0x7322
,
0x7322
,
0x7232
,
0x7232
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x7301
,
0x7301
,
0x7031
,
0x7031
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0x2000
,
0xf002
,
0x2772
,
0x2762
,
0x2672
,
0x2572
,
0xf003
,
0x2662
,
0x2662
,
0x2742
,
0x2742
,
0x2472
,
0x2472
,
0x3752
,
0x3552
,
0xf002
,
0x2652
,
0x2562
,
0x1732
,
0x1732
,
0xf001
,
0x1372
,
0x1642
,
0xf002
,
0x2542
,
0x2452
,
0x2532
,
0x2352
,
0xf001
,
0x1462
,
0x1701
,
0xf001
,
0x1442
,
0x1522
,
0xf001
,
0x1252
,
0x1501
,
0xf001
,
0x1342
,
0x1332
,
/* huffTable12[185] */
0xf007
,
0x0081
,
0x008a
,
0x008f
,
0x0092
,
0x0097
,
0x009a
,
0x009d
,
0x00a2
,
0x00a5
,
0x00a8
,
0x7622
,
0x7262
,
0x7162
,
0x00ad
,
0x00b0
,
0x00b3
,
0x7512
,
0x7152
,
0x7432
,
0x7342
,
0x00b6
,
0x7422
,
0x7242
,
0x7412
,
0x6332
,
0x6332
,
0x6142
,
0x6142
,
0x6322
,
0x6322
,
0x6232
,
0x6232
,
0x7041
,
0x7301
,
0x6031
,
0x6031
,
0x5312
,
0x5312
,
0x5312
,
0x5312
,
0x5132
,
0x5132
,
0x5132
,
0x5132
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4212
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x4122
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0xf003
,
0x3772
,
0x3762
,
0x2672
,
0x2672
,
0x2752
,
0x2752
,
0x2572
,
0x2572
,
0xf002
,
0x2662
,
0x2742
,
0x2472
,
0x2562
,
0xf001
,
0x1652
,
0x1732
,
0xf002
,
0x2372
,
0x2552
,
0x1722
,
0x1722
,
0xf001
,
0x1272
,
0x1642
,
0xf001
,
0x1462
,
0x1712
,
0xf002
,
0x1172
,
0x1172
,
0x2701
,
0x2071
,
0xf001
,
0x1632
,
0x1362
,
0xf001
,
0x1542
,
0x1452
,
0xf002
,
0x1442
,
0x1442
,
0x2601
,
0x2501
,
0xf001
,
0x1612
,
0x1061
,
0xf001
,
0x1532
,
0x1352
,
0xf001
,
0x1522
,
0x1252
,
0xf001
,
0x1051
,
0x1401
,
/* huffTable13[497] */
0xf006
,
0x0041
,
0x0082
,
0x00c3
,
0x00e4
,
0x0105
,
0x0116
,
0x011f
,
0x0130
,
0x0139
,
0x013e
,
0x0143
,
0x0146
,
0x6212
,
0x6122
,
0x6201
,
0x6021
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0xf006
,
0x0108
,
0x0111
,
0x011a
,
0x0123
,
0x012c
,
0x0131
,
0x0136
,
0x013f
,
0x0144
,
0x0147
,
0x014c
,
0x0151
,
0x0156
,
0x015b
,
0x6f12
,
0x61f2
,
0x60f1
,
0x0160
,
0x0163
,
0x0166
,
0x62e2
,
0x0169
,
0x6e12
,
0x61e2
,
0x016c
,
0x016f
,
0x0172
,
0x0175
,
0x0178
,
0x017b
,
0x66c2
,
0x6d32
,
0x017e
,
0x6d22
,
0x62d2
,
0x6d12
,
0x67b2
,
0x0181
,
0x0184
,
0x63c2
,
0x0187
,
0x6b42
,
0x51d2
,
0x51d2
,
0x6d01
,
0x60d1
,
0x6a82
,
0x68a2
,
0x6c42
,
0x64c2
,
0x6b62
,
0x66b2
,
0x5c32
,
0x5c32
,
0x5c22
,
0x5c22
,
0x52c2
,
0x52c2
,
0x5b52
,
0x5b52
,
0x65b2
,
0x6982
,
0x5c12
,
0x5c12
,
0xf006
,
0x51c2
,
0x51c2
,
0x6892
,
0x6c01
,
0x50c1
,
0x50c1
,
0x64b2
,
0x6a62
,
0x66a2
,
0x6972
,
0x5b32
,
0x5b32
,
0x53b2
,
0x53b2
,
0x6882
,
0x6a52
,
0x5b22
,
0x5b22
,
0x65a2
,
0x6962
,
0x54a2
,
0x54a2
,
0x6872
,
0x6782
,
0x5492
,
0x5492
,
0x6772
,
0x6672
,
0x42b2
,
0x42b2
,
0x42b2
,
0x42b2
,
0x4b12
,
0x4b12
,
0x4b12
,
0x4b12
,
0x41b2
,
0x41b2
,
0x41b2
,
0x41b2
,
0x5b01
,
0x5b01
,
0x50b1
,
0x50b1
,
0x5692
,
0x5692
,
0x5a42
,
0x5a42
,
0x5a32
,
0x5a32
,
0x53a2
,
0x53a2
,
0x5952
,
0x5952
,
0x5592
,
0x5592
,
0x4a22
,
0x4a22
,
0x4a22
,
0x4a22
,
0x42a2
,
0x42a2
,
0x42a2
,
0x42a2
,
0xf005
,
0x4a12
,
0x4a12
,
0x41a2
,
0x41a2
,
0x5a01
,
0x5862
,
0x40a1
,
0x40a1
,
0x5682
,
0x5942
,
0x4392
,
0x4392
,
0x5932
,
0x5852
,
0x5582
,
0x5762
,
0x4922
,
0x4922
,
0x4292
,
0x4292
,
0x5752
,
0x5572
,
0x4832
,
0x4832
,
0x4382
,
0x4382
,
0x5662
,
0x5742
,
0x5472
,
0x5652
,
0x5562
,
0x5372
,
0xf005
,
0x3912
,
0x3912
,
0x3912
,
0x3912
,
0x3192
,
0x3192
,
0x3192
,
0x3192
,
0x4901
,
0x4901
,
0x4091
,
0x4091
,
0x4842
,
0x4842
,
0x4482
,
0x4482
,
0x4272
,
0x4272
,
0x5642
,
0x5462
,
0x3822
,
0x3822
,
0x3822
,
0x3822
,
0x3282
,
0x3282
,
0x3282
,
0x3282
,
0x3812
,
0x3812
,
0x3812
,
0x3812
,
0xf004
,
0x4732
,
0x4722
,
0x3712
,
0x3712
,
0x3172
,
0x3172
,
0x4552
,
0x4701
,
0x4071
,
0x4632
,
0x4362
,
0x4542
,
0x4452
,
0x4622
,
0x4262
,
0x4532
,
0xf003
,
0x2182
,
0x2182
,
0x3801
,
0x3081
,
0x3612
,
0x3162
,
0x3601
,
0x3061
,
0xf004
,
0x4352
,
0x4442
,
0x3522
,
0x3522
,
0x3252
,
0x3252
,
0x3501
,
0x3501
,
0x2512
,
0x2512
,
0x2512
,
0x2512
,
0x2152
,
0x2152
,
0x2152
,
0x2152
,
0xf003
,
0x3432
,
0x3342
,
0x3051
,
0x3422
,
0x3242
,
0x3332
,
0x2412
,
0x2412
,
0xf002
,
0x1142
,
0x1142
,
0x2401
,
0x2041
,
0xf002
,
0x2322
,
0x2232
,
0x1312
,
0x1312
,
0xf001
,
0x1132
,
0x1301
,
0xf001
,
0x1031
,
0x1222
,
0xf003
,
0x0082
,
0x008b
,
0x008e
,
0x0091
,
0x0094
,
0x0097
,
0x3ce2
,
0x3dd2
,
0xf003
,
0x0093
,
0x3eb2
,
0x3be2
,
0x3f92
,
0x39f2
,
0x3ae2
,
0x3db2
,
0x3bd2
,
0xf003
,
0x3f82
,
0x38f2
,
0x3cc2
,
0x008d
,
0x3e82
,
0x0090
,
0x27f2
,
0x27f2
,
0xf003
,
0x2ad2
,
0x2ad2
,
0x3da2
,
0x3cb2
,
0x3bc2
,
0x36f2
,
0x2f62
,
0x2f62
,
0xf002
,
0x28e2
,
0x2f52
,
0x2d92
,
0x29d2
,
0xf002
,
0x25f2
,
0x27e2
,
0x2ca2
,
0x2bb2
,
0xf003
,
0x2f42
,
0x2f42
,
0x24f2
,
0x24f2
,
0x3ac2
,
0x36e2
,
0x23f2
,
0x23f2
,
0xf002
,
0x1f32
,
0x1f32
,
0x2d82
,
0x28d2
,
0xf001
,
0x1f22
,
0x12f2
,
0xf002
,
0x2e62
,
0x2c92
,
0x1f01
,
0x1f01
,
0xf002
,
0x29c2
,
0x2e52
,
0x1ba2
,
0x1ba2
,
0xf002
,
0x2d72
,
0x27d2
,
0x1e42
,
0x1e42
,
0xf002
,
0x28c2
,
0x26d2
,
0x1e32
,
0x1e32
,
0xf002
,
0x19b2
,
0x19b2
,
0x2b92
,
0x2aa2
,
0xf001
,
0x1ab2
,
0x15e2
,
0xf001
,
0x14e2
,
0x1c82
,
0xf001
,
0x1d62
,
0x13e2
,
0xf001
,
0x1e22
,
0x1e01
,
0xf001
,
0x10e1
,
0x1d52
,
0xf001
,
0x15d2
,
0x1c72
,
0xf001
,
0x17c2
,
0x1d42
,
0xf001
,
0x1b82
,
0x18b2
,
0xf001
,
0x14d2
,
0x1a92
,
0xf001
,
0x19a2
,
0x1c62
,
0xf001
,
0x13d2
,
0x1b72
,
0xf001
,
0x1c52
,
0x15c2
,
0xf001
,
0x1992
,
0x1a72
,
0xf001
,
0x17a2
,
0x1792
,
0xf003
,
0x0023
,
0x3df2
,
0x2de2
,
0x2de2
,
0x1ff2
,
0x1ff2
,
0x1ff2
,
0x1ff2
,
0xf001
,
0x1fe2
,
0x1fd2
,
0xf001
,
0x1ee2
,
0x1fc2
,
0xf001
,
0x1ed2
,
0x1fb2
,
0xf001
,
0x1bf2
,
0x1ec2
,
0xf002
,
0x1cd2
,
0x1cd2
,
0x2fa2
,
0x29e2
,
0xf001
,
0x1af2
,
0x1dc2
,
0xf001
,
0x1ea2
,
0x1e92
,
0xf001
,
0x1f72
,
0x1e72
,
0xf001
,
0x1ef2
,
0x1cf2
,
/* huffTable15[580] */
0xf008
,
0x0101
,
0x0122
,
0x0143
,
0x0154
,
0x0165
,
0x0176
,
0x017f
,
0x0188
,
0x0199
,
0x01a2
,
0x01ab
,
0x01b4
,
0x01bd
,
0x01c2
,
0x01cb
,
0x01d4
,
0x01d9
,
0x01de
,
0x01e3
,
0x01e8
,
0x01ed
,
0x01f2
,
0x01f7
,
0x01fc
,
0x0201
,
0x0204
,
0x0207
,
0x020a
,
0x020f
,
0x0212
,
0x0215
,
0x021a
,
0x021d
,
0x0220
,
0x8192
,
0x0223
,
0x0226
,
0x0229
,
0x022c
,
0x022f
,
0x8822
,
0x8282
,
0x8812
,
0x8182
,
0x0232
,
0x0235
,
0x0238
,
0x023b
,
0x8722
,
0x8272
,
0x8462
,
0x8712
,
0x8552
,
0x8172
,
0x023e
,
0x8632
,
0x8362
,
0x8542
,
0x8452
,
0x8622
,
0x8262
,
0x8612
,
0x0241
,
0x8532
,
0x7162
,
0x7162
,
0x8352
,
0x8442
,
0x7522
,
0x7522
,
0x7252
,
0x7252
,
0x7512
,
0x7512
,
0x7152
,
0x7152
,
0x8501
,
0x8051
,
0x7432
,
0x7432
,
0x7342
,
0x7342
,
0x7422
,
0x7422
,
0x7242
,
0x7242
,
0x7332
,
0x7332
,
0x6142
,
0x6142
,
0x6142
,
0x6142
,
0x7412
,
0x7412
,
0x7401
,
0x7401
,
0x6322
,
0x6322
,
0x6322
,
0x6322
,
0x6232
,
0x6232
,
0x6232
,
0x6232
,
0x7041
,
0x7041
,
0x7301
,
0x7301
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x6031
,
0x6031
,
0x6031
,
0x6031
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5222
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5201
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x5021
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x3112
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0x3000
,
0xf005
,
0x5ff2
,
0x5fe2
,
0x5ef2
,
0x5fd2
,
0x4ee2
,
0x4ee2
,
0x5df2
,
0x5fc2
,
0x5cf2
,
0x5ed2
,
0x5de2
,
0x5fb2
,
0x4bf2
,
0x4bf2
,
0x5ec2
,
0x5ce2
,
0x4dd2
,
0x4dd2
,
0x4fa2
,
0x4fa2
,
0x4af2
,
0x4af2
,
0x4eb2
,
0x4eb2
,
0x4be2
,
0x4be2
,
0x4dc2
,
0x4dc2
,
0x4cd2
,
0x4cd2
,
0x4f92
,
0x4f92
,
0xf005
,
0x49f2
,
0x49f2
,
0x4ae2
,
0x4ae2
,
0x4db2
,
0x4db2
,
0x4bd2
,
0x4bd2
,
0x4f82
,
0x4f82
,
0x48f2
,
0x48f2
,
0x4cc2
,
0x4cc2
,
0x4e92
,
0x4e92
,
0x49e2
,
0x49e2
,
0x4f72
,
0x4f72
,
0x47f2
,
0x47f2
,
0x4da2
,
0x4da2
,
0x4ad2
,
0x4ad2
,
0x4cb2
,
0x4cb2
,
0x4f62
,
0x4f62
,
0x5ea2
,
0x5f01
,
0xf004
,
0x3bc2
,
0x3bc2
,
0x36f2
,
0x36f2
,
0x4e82
,
0x48e2
,
0x4f52
,
0x4d92
,
0x35f2
,
0x35f2
,
0x3e72
,
0x3e72
,
0x37e2
,
0x37e2
,
0x3ca2
,
0x3ca2
,
0xf004
,
0x3ac2
,
0x3ac2
,
0x3bb2
,
0x3bb2
,
0x49d2
,
0x4d82
,
0x3f42
,
0x3f42
,
0x34f2
,
0x34f2
,
0x3f32
,
0x3f32
,
0x33f2
,
0x33f2
,
0x38d2
,
0x38d2
,
0xf004
,
0x36e2
,
0x36e2
,
0x3f22
,
0x3f22
,
0x32f2
,
0x32f2
,
0x4e62
,
0x40f1
,
0x3f12
,
0x3f12
,
0x31f2
,
0x31f2
,
0x3c92
,
0x3c92
,
0x39c2
,
0x39c2
,
0xf003
,
0x3e52
,
0x3ba2
,
0x3ab2
,
0x35e2
,
0x3d72
,
0x37d2
,
0x3e42
,
0x34e2
,
0xf003
,
0x3c82
,
0x38c2
,
0x3e32
,
0x3d62
,
0x36d2
,
0x33e2
,
0x3b92
,
0x39b2
,
0xf004
,
0x3e22
,
0x3e22
,
0x3aa2
,
0x3aa2
,
0x32e2
,
0x32e2
,
0x3e12
,
0x3e12
,
0x31e2
,
0x31e2
,
0x4e01
,
0x40e1
,
0x3d52
,
0x3d52
,
0x35d2
,
0x35d2
,
0xf003
,
0x3c72
,
0x37c2
,
0x3d42
,
0x3b82
,
0x24d2
,
0x24d2
,
0x38b2
,
0x3a92
,
0xf003
,
0x39a2
,
0x3c62
,
0x36c2
,
0x3d32
,
0x23d2
,
0x23d2
,
0x22d2
,
0x22d2
,
0xf003
,
0x3d22
,
0x3d01
,
0x2d12
,
0x2d12
,
0x2b72
,
0x2b72
,
0x27b2
,
0x27b2
,
0xf003
,
0x21d2
,
0x21d2
,
0x3c52
,
0x30d1
,
0x25c2
,
0x25c2
,
0x2a82
,
0x2a82
,
0xf002
,
0x28a2
,
0x2c42
,
0x24c2
,
0x2b62
,
0xf003
,
0x26b2
,
0x26b2
,
0x3992
,
0x3c01
,
0x2c32
,
0x2c32
,
0x23c2
,
0x23c2
,
0xf003
,
0x2a72
,
0x2a72
,
0x27a2
,
0x27a2
,
0x26a2
,
0x26a2
,
0x30c1
,
0x3b01
,
0xf002
,
0x12c2
,
0x12c2
,
0x2c22
,
0x2b52
,
0xf002
,
0x25b2
,
0x2c12
,
0x2982
,
0x2892
,
0xf002
,
0x21c2
,
0x2b42
,
0x24b2
,
0x2a62
,
0xf002
,
0x2b32
,
0x2972
,
0x13b2
,
0x13b2
,
0xf002
,
0x2792
,
0x2882
,
0x2b22
,
0x2a52
,
0xf002
,
0x12b2
,
0x12b2
,
0x25a2
,
0x2b12
,
0xf002
,
0x11b2
,
0x11b2
,
0x20b1
,
0x2962
,
0xf002
,
0x2692
,
0x2a42
,
0x24a2
,
0x2872
,
0xf002
,
0x2782
,
0x2a32
,
0x13a2
,
0x13a2
,
0xf001
,
0x1952
,
0x1592
,
0xf001
,
0x1a22
,
0x12a2
,
0xf001
,
0x1a12
,
0x11a2
,
0xf002
,
0x2a01
,
0x20a1
,
0x1862
,
0x1862
,
0xf001
,
0x1682
,
0x1942
,
0xf001
,
0x1492
,
0x1932
,
0xf002
,
0x1392
,
0x1392
,
0x2772
,
0x2901
,
0xf001
,
0x1852
,
0x1582
,
0xf001
,
0x1922
,
0x1762
,
0xf001
,
0x1672
,
0x1292
,
0xf001
,
0x1912
,
0x1091
,
0xf001
,
0x1842
,
0x1482
,
0xf001
,
0x1752
,
0x1572
,
0xf001
,
0x1832
,
0x1382
,
0xf001
,
0x1662
,
0x1742
,
0xf001
,
0x1472
,
0x1801
,
0xf001
,
0x1081
,
0x1652
,
0xf001
,
0x1562
,
0x1732
,
0xf001
,
0x1372
,
0x1642
,
0xf001
,
0x1701
,
0x1071
,
0xf001
,
0x1601
,
0x1061
,
/* huffTable16[651] */
0xf008
,
0x0101
,
0x010a
,
0x0113
,
0x8ff2
,
0x0118
,
0x011d
,
0x0120
,
0x82f2
,
0x0131
,
0x8f12
,
0x81f2
,
0x0134
,
0x0145
,
0x0156
,
0x0167
,
0x0178
,
0x0189
,
0x019a
,
0x01a3
,
0x01ac
,
0x01b5
,
0x01be
,
0x01c7
,
0x01d0
,
0x01d9
,
0x01de
,
0x01e3
,
0x01e6
,
0x01eb
,
0x01f0
,
0x8152
,
0x01f3
,
0x01f6
,
0x01f9
,
0x01fc
,
0x8412
,
0x8142
,
0x01ff
,
0x8322
,
0x8232
,
0x7312
,
0x7312
,
0x7132
,
0x7132
,
0x8301
,
0x8031
,
0x7222
,
0x7222
,
0x6212
,
0x6212
,
0x6212
,
0x6212
,
0x6122
,
0x6122
,
0x6122
,
0x6122
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x3011
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0x1000
,
0xf003
,
0x3fe2
,
0x3ef2
,
0x3fd2
,
0x3df2
,
0x3fc2
,
0x3cf2
,
0x3fb2
,
0x3bf2
,
0xf003
,
0x2fa2
,
0x2fa2
,
0x3af2
,
0x3f92
,
0x39f2
,
0x38f2
,
0x2f82
,
0x2f82
,
0xf002
,
0x2f72
,
0x27f2
,
0x2f62
,
0x26f2
,
0xf002
,
0x2f52
,
0x25f2
,
0x1f42
,
0x1f42
,
0xf001
,
0x14f2
,
0x13f2
,
0xf004
,
0x10f1
,
0x10f1
,
0x10f1
,
0x10f1
,
0x10f1
,
0x10f1
,
0x10f1
,
0x10f1
,
0x2f32
,
0x2f32
,
0x2f32
,
0x2f32
,
0x00e2
,
0x00f3
,
0x00fc
,
0x0105
,
0xf001
,
0x1f22
,
0x1f01
,
0xf004
,
0x00fa
,
0x00ff
,
0x0104
,
0x0109
,
0x010c
,
0x0111
,
0x0116
,
0x0119
,
0x011e
,
0x0123
,
0x0128
,
0x43e2
,
0x012d
,
0x0130
,
0x0133
,
0x0136
,
0xf004
,
0x0128
,
0x012b
,
0x012e
,
0x4d01
,
0x0131
,
0x0134
,
0x0137
,
0x4c32
,
0x013a
,
0x4c12
,
0x40c1
,
0x013d
,
0x32e2
,
0x32e2
,
0x4e22
,
0x4e12
,
0xf004
,
0x43d2
,
0x4d22
,
0x42d2
,
0x41d2
,
0x4b32
,
0x012f
,
0x3d12
,
0x3d12
,
0x44c2
,
0x4b62
,
0x43c2
,
0x47a2
,
0x3c22
,
0x3c22
,
0x42c2
,
0x45b2
,
0xf004
,
0x41c2
,
0x4c01
,
0x4b42
,
0x44b2
,
0x4a62
,
0x46a2
,
0x33b2
,
0x33b2
,
0x4a52
,
0x45a2
,
0x3b22
,
0x3b22
,
0x32b2
,
0x32b2
,
0x3b12
,
0x3b12
,
0xf004
,
0x31b2
,
0x31b2
,
0x4b01
,
0x40b1
,
0x4962
,
0x4692
,
0x4a42
,
0x44a2
,
0x4872
,
0x4782
,
0x33a2
,
0x33a2
,
0x4a32
,
0x4952
,
0x3a22
,
0x3a22
,
0xf004
,
0x4592
,
0x4862
,
0x31a2
,
0x31a2
,
0x4682
,
0x4772
,
0x3492
,
0x3492
,
0x4942
,
0x4752
,
0x3762
,
0x3762
,
0x22a2
,
0x22a2
,
0x22a2
,
0x22a2
,
0xf003
,
0x2a12
,
0x2a12
,
0x3a01
,
0x30a1
,
0x3932
,
0x3392
,
0x3852
,
0x3582
,
0xf003
,
0x2922
,
0x2922
,
0x2292
,
0x2292
,
0x3672
,
0x3901
,
0x2912
,
0x2912
,
0xf003
,
0x2192
,
0x2192
,
0x3091
,
0x3842
,
0x3482
,
0x3572
,
0x3832
,
0x3382
,
0xf003
,
0x3662
,
0x3822
,
0x2282
,
0x2282
,
0x3742
,
0x3472
,
0x2812
,
0x2812
,
0xf003
,
0x2182
,
0x2182
,
0x2081
,
0x2081
,
0x3801
,
0x3652
,
0x2732
,
0x2732
,
0xf003
,
0x2372
,
0x2372
,
0x3562
,
0x3642
,
0x2722
,
0x2722
,
0x2272
,
0x2272
,
0xf003
,
0x3462
,
0x3552
,
0x2701
,
0x2701
,
0x1712
,
0x1712
,
0x1712
,
0x1712
,
0xf002
,
0x1172
,
0x1172
,
0x2071
,
0x2632
,
0xf002
,
0x2362
,
0x2542
,
0x2452
,
0x2622
,
0xf001
,
0x1262
,
0x1612
,
0xf002
,
0x1162
,
0x1162
,
0x2601
,
0x2061
,
0xf002
,
0x1352
,
0x1352
,
0x2532
,
0x2442
,
0xf001
,
0x1522
,
0x1252
,
0xf001
,
0x1512
,
0x1501
,
0xf001
,
0x1432
,
0x1342
,
0xf001
,
0x1051
,
0x1422
,
0xf001
,
0x1242
,
0x1332
,
0xf001
,
0x1401
,
0x1041
,
0xf004
,
0x4ec2
,
0x0086
,
0x3ed2
,
0x3ed2
,
0x39e2
,
0x39e2
,
0x4ae2
,
0x49d2
,
0x2ee2
,
0x2ee2
,
0x2ee2
,
0x2ee2
,
0x3de2
,
0x3de2
,
0x3be2
,
0x3be2
,
0xf003
,
0x2eb2
,
0x2eb2
,
0x2dc2
,
0x2dc2
,
0x3cd2
,
0x3bd2
,
0x2ea2
,
0x2ea2
,
0xf003
,
0x2cc2
,
0x2cc2
,
0x3da2
,
0x3ad2
,
0x3e72
,
0x3ca2
,
0x2ac2
,
0x2ac2
,
0xf003
,
0x39c2
,
0x3d72
,
0x2e52
,
0x2e52
,
0x1db2
,
0x1db2
,
0x1db2
,
0x1db2
,
0xf002
,
0x1e92
,
0x1e92
,
0x2cb2
,
0x2bc2
,
0xf002
,
0x2e82
,
0x28e2
,
0x2d92
,
0x27e2
,
0xf002
,
0x2bb2
,
0x2d82
,
0x28d2
,
0x2e62
,
0xf001
,
0x16e2
,
0x1c92
,
0xf002
,
0x2ba2
,
0x2ab2
,
0x25e2
,
0x27d2
,
0xf002
,
0x1e42
,
0x1e42
,
0x24e2
,
0x2c82
,
0xf001
,
0x18c2
,
0x1e32
,
0xf002
,
0x1d62
,
0x1d62
,
0x26d2
,
0x2b92
,
0xf002
,
0x29b2
,
0x2aa2
,
0x11e2
,
0x11e2
,
0xf002
,
0x14d2
,
0x14d2
,
0x28b2
,
0x29a2
,
0xf002
,
0x1b72
,
0x1b72
,
0x27b2
,
0x20d1
,
0xf001
,
0x1e01
,
0x10e1
,
0xf001
,
0x1d52
,
0x15d2
,
0xf001
,
0x1c72
,
0x17c2
,
0xf001
,
0x1d42
,
0x1b82
,
0xf001
,
0x1a92
,
0x1c62
,
0xf001
,
0x16c2
,
0x1d32
,
0xf001
,
0x1c52
,
0x15c2
,
0xf001
,
0x1a82
,
0x18a2
,
0xf001
,
0x1992
,
0x1c42
,
0xf001
,
0x16b2
,
0x1a72
,
0xf001
,
0x1b52
,
0x1982
,
0xf001
,
0x1892
,
0x1972
,
0xf001
,
0x1792
,
0x1882
,
0xf001
,
0x1ce2
,
0x1dd2
,
/* huffTable24[705] */
0xf009
,
0x8fe2
,
0x8fe2
,
0x8ef2
,
0x8ef2
,
0x8fd2
,
0x8fd2
,
0x8df2
,
0x8df2
,
0x8fc2
,
0x8fc2
,
0x8cf2
,
0x8cf2
,
0x8fb2
,
0x8fb2
,
0x8bf2
,
0x8bf2
,
0x7af2
,
0x7af2
,
0x7af2
,
0x7af2
,
0x8fa2
,
0x8fa2
,
0x8f92
,
0x8f92
,
0x79f2
,
0x79f2
,
0x79f2
,
0x79f2
,
0x78f2
,
0x78f2
,
0x78f2
,
0x78f2
,
0x8f82
,
0x8f82
,
0x8f72
,
0x8f72
,
0x77f2
,
0x77f2
,
0x77f2
,
0x77f2
,
0x7f62
,
0x7f62
,
0x7f62
,
0x7f62
,
0x76f2
,
0x76f2
,
0x76f2
,
0x76f2
,
0x7f52
,
0x7f52
,
0x7f52
,
0x7f52
,
0x75f2
,
0x75f2
,
0x75f2
,
0x75f2
,
0x7f42
,
0x7f42
,
0x7f42
,
0x7f42
,
0x74f2
,
0x74f2
,
0x74f2
,
0x74f2
,
0x7f32
,
0x7f32
,
0x7f32
,
0x7f32
,
0x73f2
,
0x73f2
,
0x73f2
,
0x73f2
,
0x7f22
,
0x7f22
,
0x7f22
,
0x7f22
,
0x72f2
,
0x72f2
,
0x72f2
,
0x72f2
,
0x71f2
,
0x71f2
,
0x71f2
,
0x71f2
,
0x8f12
,
0x8f12
,
0x80f1
,
0x80f1
,
0x9f01
,
0x0201
,
0x0206
,
0x020b
,
0x0210
,
0x0215
,
0x021a
,
0x021f
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x4ff2
,
0x0224
,
0x0229
,
0x0232
,
0x0237
,
0x023a
,
0x023f
,
0x0242
,
0x0245
,
0x024a
,
0x024d
,
0x0250
,
0x0253
,
0x0256
,
0x0259
,
0x025c
,
0x025f
,
0x0262
,
0x0265
,
0x0268
,
0x026b
,
0x026e
,
0x0271
,
0x0274
,
0x0277
,
0x027a
,
0x027d
,
0x0280
,
0x0283
,
0x0288
,
0x028b
,
0x028e
,
0x0291
,
0x0294
,
0x0297
,
0x029a
,
0x029f
,
0x94b2
,
0x02a4
,
0x02a7
,
0x02aa
,
0x93b2
,
0x9882
,
0x02af
,
0x92b2
,
0x02b2
,
0x02b5
,
0x9692
,
0x94a2
,
0x02b8
,
0x9782
,
0x9a32
,
0x93a2
,
0x9952
,
0x9592
,
0x9a22
,
0x92a2
,
0x91a2
,
0x9862
,
0x9682
,
0x9772
,
0x9942
,
0x9492
,
0x9932
,
0x9392
,
0x9852
,
0x9582
,
0x9922
,
0x9762
,
0x9672
,
0x9292
,
0x9912
,
0x9192
,
0x9842
,
0x9482
,
0x9752
,
0x9572
,
0x9832
,
0x9382
,
0x9662
,
0x9822
,
0x9282
,
0x9812
,
0x9742
,
0x9472
,
0x9182
,
0x02bb
,
0x9652
,
0x9562
,
0x9712
,
0x02be
,
0x8372
,
0x8372
,
0x9732
,
0x9722
,
0x8272
,
0x8272
,
0x8642
,
0x8642
,
0x8462
,
0x8462
,
0x8552
,
0x8552
,
0x8172
,
0x8172
,
0x8632
,
0x8632
,
0x8362
,
0x8362
,
0x8542
,
0x8542
,
0x8452
,
0x8452
,
0x8622
,
0x8622
,
0x8262
,
0x8262
,
0x8612
,
0x8612
,
0x8162
,
0x8162
,
0x9601
,
0x9061
,
0x8532
,
0x8532
,
0x8352
,
0x8352
,
0x8442
,
0x8442
,
0x8522
,
0x8522
,
0x8252
,
0x8252
,
0x8512
,
0x8512
,
0x9501
,
0x9051
,
0x7152
,
0x7152
,
0x7152
,
0x7152
,
0x8432
,
0x8432
,
0x8342
,
0x8342
,
0x7422
,
0x7422
,
0x7422
,
0x7422
,
0x7242
,
0x7242
,
0x7242
,
0x7242
,
0x7332
,
0x7332
,
0x7332
,
0x7332
,
0x7412
,
0x7412
,
0x7412
,
0x7412
,
0x7142
,
0x7142
,
0x7142
,
0x7142
,
0x8401
,
0x8401
,
0x8041
,
0x8041
,
0x7322
,
0x7322
,
0x7322
,
0x7322
,
0x7232
,
0x7232
,
0x7232
,
0x7232
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6312
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x6132
,
0x7301
,
0x7301
,
0x7301
,
0x7301
,
0x7031
,
0x7031
,
0x7031
,
0x7031
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x6222
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5212
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x5122
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6201
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x6021
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4112
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4101
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4011
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0x4000
,
0xf002
,
0x2ee2
,
0x2ed2
,
0x2de2
,
0x2ec2
,
0xf002
,
0x2ce2
,
0x2dd2
,
0x2eb2
,
0x2be2
,
0xf002
,
0x2dc2
,
0x2cd2
,
0x2ea2
,
0x2ae2
,
0xf002
,
0x2db2
,
0x2bd2
,
0x2cc2
,
0x2e92
,
0xf002
,
0x29e2
,
0x2da2
,
0x2ad2
,
0x2cb2
,
0xf002
,
0x2bc2
,
0x2e82
,
0x28e2
,
0x2d92
,
0xf002
,
0x29d2
,
0x2e72
,
0x27e2
,
0x2ca2
,
0xf002
,
0x2ac2
,
0x2bb2
,
0x2d82
,
0x28d2
,
0xf003
,
0x3e01
,
0x30e1
,
0x2d01
,
0x2d01
,
0x16e2
,
0x16e2
,
0x16e2
,
0x16e2
,
0xf002
,
0x2e62
,
0x2c92
,
0x19c2
,
0x19c2
,
0xf001
,
0x1e52
,
0x1ab2
,
0xf002
,
0x15e2
,
0x15e2
,
0x2ba2
,
0x2d72
,
0xf001
,
0x17d2
,
0x14e2
,
0xf001
,
0x1c82
,
0x18c2
,
0xf002
,
0x2e42
,
0x2e22
,
0x1e32
,
0x1e32
,
0xf001
,
0x1d62
,
0x16d2
,
0xf001
,
0x13e2
,
0x1b92
,
0xf001
,
0x19b2
,
0x1aa2
,
0xf001
,
0x12e2
,
0x1e12
,
0xf001
,
0x11e2
,
0x1d52
,
0xf001
,
0x15d2
,
0x1c72
,
0xf001
,
0x17c2
,
0x1d42
,
0xf001
,
0x1b82
,
0x18b2
,
0xf001
,
0x14d2
,
0x1a92
,
0xf001
,
0x19a2
,
0x1c62
,
0xf001
,
0x16c2
,
0x1d32
,
0xf001
,
0x13d2
,
0x1d22
,
0xf001
,
0x12d2
,
0x1d12
,
0xf001
,
0x1b72
,
0x17b2
,
0xf001
,
0x11d2
,
0x1c52
,
0xf001
,
0x15c2
,
0x1a82
,
0xf001
,
0x18a2
,
0x1992
,
0xf001
,
0x1c42
,
0x14c2
,
0xf001
,
0x1b62
,
0x16b2
,
0xf002
,
0x20d1
,
0x2c01
,
0x1c32
,
0x1c32
,
0xf001
,
0x13c2
,
0x1a72
,
0xf001
,
0x17a2
,
0x1c22
,
0xf001
,
0x12c2
,
0x1b52
,
0xf001
,
0x15b2
,
0x1c12
,
0xf001
,
0x1982
,
0x1892
,
0xf001
,
0x11c2
,
0x1b42
,
0xf002
,
0x20c1
,
0x2b01
,
0x1b32
,
0x1b32
,
0xf002
,
0x20b1
,
0x2a01
,
0x1a12
,
0x1a12
,
0xf001
,
0x1a62
,
0x16a2
,
0xf001
,
0x1972
,
0x1792
,
0xf002
,
0x20a1
,
0x2901
,
0x1091
,
0x1091
,
0xf001
,
0x1b22
,
0x1a52
,
0xf001
,
0x15a2
,
0x1b12
,
0xf001
,
0x11b2
,
0x1962
,
0xf001
,
0x1a42
,
0x1872
,
0xf001
,
0x1801
,
0x1081
,
0xf001
,
0x1701
,
0x1071
,
};
typedef
int
ARRAY3
[
3
];
/* for short-block reordering */
/* optional pre-emphasis for high-frequency scale factor bands */
static
const
char
preTab
[
22
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
2
,
2
,
3
,
3
,
3
,
2
,
0
};
/* pow(2,-i/4) for i=0..3, Q31 format */
const
int
pow14
[
4
]
PROGMEM
=
{
0x7fffffff
,
0x6ba27e65
,
0x5a82799a
,
0x4c1bf829
};
/* pow(2,-i/4) * pow(j,4/3) for i=0..3 j=0..15, Q25 format */
const
int
pow43_14
[
4
][
16
]
PROGMEM
=
{
{
0x00000000
,
0x10000000
,
0x285145f3
,
0x453a5cdb
,
/* Q28 */
0x0cb2ff53
,
0x111989d6
,
0x15ce31c8
,
0x1ac7f203
,
0x20000000
,
0x257106b9
,
0x2b16b4a3
,
0x30ed74b4
,
0x36f23fa5
,
0x3d227bd3
,
0x437be656
,
0x49fc823c
,
},
{
0x00000000
,
0x0d744fcd
,
0x21e71f26
,
0x3a36abd9
,
0x0aadc084
,
0x0e610e6e
,
0x12560c1d
,
0x168523cf
,
0x1ae89f99
,
0x1f7c03a4
,
0x243bae49
,
0x29249c67
,
0x2e34420f
,
0x33686f85
,
0x38bf3dff
,
0x3e370182
,
},
{
0x00000000
,
0x0b504f33
,
0x1c823e07
,
0x30f39a55
,
0x08facd62
,
0x0c176319
,
0x0f6b3522
,
0x12efe2ad
,
0x16a09e66
,
0x1a79a317
,
0x1e77e301
,
0x2298d5b4
,
0x26da56fc
,
0x2b3a902a
,
0x2fb7e7e7
,
0x3450f650
,
},
{
0x00000000
,
0x09837f05
,
0x17f910d7
,
0x2929c7a9
,
0x078d0dfa
,
0x0a2ae661
,
0x0cf73154
,
0x0fec91cb
,
0x1306fe0a
,
0x16434a6c
,
0x199ee595
,
0x1d17ae3d
,
0x20abd76a
,
0x2459d551
,
0x28204fbb
,
0x2bfe1808
,
},
};
/* pow(j,4/3) for j=16..63, Q23 format */
const
int
pow43
[]
PROGMEM
=
{
0x1428a2fa
,
0x15db1bd6
,
0x1796302c
,
0x19598d85
,
0x1b24e8bb
,
0x1cf7fcfa
,
0x1ed28af2
,
0x20b4582a
,
0x229d2e6e
,
0x248cdb55
,
0x26832fda
,
0x28800000
,
0x2a832287
,
0x2c8c70a8
,
0x2e9bc5d8
,
0x30b0ff99
,
0x32cbfd4a
,
0x34eca001
,
0x3712ca62
,
0x393e6088
,
0x3b6f47e0
,
0x3da56717
,
0x3fe0a5fc
,
0x4220ed72
,
0x44662758
,
0x46b03e7c
,
0x48ff1e87
,
0x4b52b3f3
,
0x4daaebfd
,
0x5007b497
,
0x5268fc62
,
0x54ceb29c
,
0x5738c721
,
0x59a72a59
,
0x5c19cd35
,
0x5e90a129
,
0x610b9821
,
0x638aa47f
,
0x660db90f
,
0x6894c90b
,
0x6b1fc80c
,
0x6daeaa0d
,
0x70416360
,
0x72d7e8b0
,
0x75722ef9
,
0x78102b85
,
0x7ab1d3ec
,
0x7d571e09
,
};
/* sqrt(0.5) in Q31 format */
#define SQRTHALF 0x5a82799a
/*
* Minimax polynomial approximation to pow(x, 4/3), over the range
* poly43lo: x = [0.5, 0.7071]
* poly43hi: x = [0.7071, 1.0]
*
* Relative error < 1E-7
* Coefs are scaled by 4, 2, 1, 0.5, 0.25
*/
static
const
unsigned
int
poly43lo
[
5
]
PROGMEM
=
{
0x29a0bda9
,
0xb02e4828
,
0x5957aa1b
,
0x236c498d
,
0xff581859
};
static
const
unsigned
int
poly43hi
[
5
]
PROGMEM
=
{
0x10852163
,
0xd333f6a4
,
0x46e9408b
,
0x27c2cef0
,
0xfef577b4
};
/* pow(2, i*4/3) as exp and frac */
const
int
pow2exp
[
8
]
PROGMEM
=
{
14
,
13
,
11
,
10
,
9
,
7
,
6
,
5
};
const
int
pow2frac
[
8
]
PROGMEM
=
{
0x6597fa94
,
0x50a28be6
,
0x7fffffff
,
0x6597fa94
,
0x50a28be6
,
0x7fffffff
,
0x6597fa94
,
0x50a28be6
};
#define HUFF_OFFSET_01 0
#define HUFF_OFFSET_02 ( 9 + HUFF_OFFSET_01)
#define HUFF_OFFSET_03 ( 65 + HUFF_OFFSET_02)
#define HUFF_OFFSET_05 ( 65 + HUFF_OFFSET_03)
#define HUFF_OFFSET_06 (257 + HUFF_OFFSET_05)
#define HUFF_OFFSET_07 (129 + HUFF_OFFSET_06)
#define HUFF_OFFSET_08 (110 + HUFF_OFFSET_07)
#define HUFF_OFFSET_09 (280 + HUFF_OFFSET_08)
#define HUFF_OFFSET_10 ( 93 + HUFF_OFFSET_09)
#define HUFF_OFFSET_11 (320 + HUFF_OFFSET_10)
#define HUFF_OFFSET_12 (296 + HUFF_OFFSET_11)
#define HUFF_OFFSET_13 (185 + HUFF_OFFSET_12)
#define HUFF_OFFSET_15 (497 + HUFF_OFFSET_13)
#define HUFF_OFFSET_16 (580 + HUFF_OFFSET_15)
#define HUFF_OFFSET_24 (651 + HUFF_OFFSET_16)
const
int
huffTabOffset
[
HUFF_PAIRTABS
]
PROGMEM
=
{
0
,
HUFF_OFFSET_01
,
HUFF_OFFSET_02
,
HUFF_OFFSET_03
,
0
,
HUFF_OFFSET_05
,
HUFF_OFFSET_06
,
HUFF_OFFSET_07
,
HUFF_OFFSET_08
,
HUFF_OFFSET_09
,
HUFF_OFFSET_10
,
HUFF_OFFSET_11
,
HUFF_OFFSET_12
,
HUFF_OFFSET_13
,
0
,
HUFF_OFFSET_15
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_16
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
HUFF_OFFSET_24
,
};
const
HuffTabLookup
huffTabLookup
[
HUFF_PAIRTABS
]
PROGMEM
=
{
{
0
,
noBits
},
{
0
,
oneShot
},
{
0
,
oneShot
},
{
0
,
oneShot
},
{
0
,
invalidTab
},
{
0
,
oneShot
},
{
0
,
oneShot
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
loopNoLinbits
},
{
0
,
invalidTab
},
{
0
,
loopNoLinbits
},
{
1
,
loopLinbits
},
{
2
,
loopLinbits
},
{
3
,
loopLinbits
},
{
4
,
loopLinbits
},
{
6
,
loopLinbits
},
{
8
,
loopLinbits
},
{
10
,
loopLinbits
},
{
13
,
loopLinbits
},
{
4
,
loopLinbits
},
{
5
,
loopLinbits
},
{
6
,
loopLinbits
},
{
7
,
loopLinbits
},
{
8
,
loopLinbits
},
{
9
,
loopLinbits
},
{
11
,
loopLinbits
},
{
13
,
loopLinbits
},
};
/* tables for quadruples
* format 0xAB
* A = length of codeword
* B = codeword
*/
const
unsigned
char
quadTable
[
64
+
16
]
PROGMEM
=
{
/* table A */
0x6b
,
0x6f
,
0x6d
,
0x6e
,
0x67
,
0x65
,
0x59
,
0x59
,
0x56
,
0x56
,
0x53
,
0x53
,
0x5a
,
0x5a
,
0x5c
,
0x5c
,
0x42
,
0x42
,
0x42
,
0x42
,
0x41
,
0x41
,
0x41
,
0x41
,
0x44
,
0x44
,
0x44
,
0x44
,
0x48
,
0x48
,
0x48
,
0x48
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
0x10
,
/* table B */
0x4f
,
0x4e
,
0x4d
,
0x4c
,
0x4b
,
0x4a
,
0x49
,
0x48
,
0x47
,
0x46
,
0x45
,
0x44
,
0x43
,
0x42
,
0x41
,
0x40
,
};
const
int
quadTabOffset
[
2
]
PROGMEM
=
{
0
,
64
};
const
int
quadTabMaxBits
[
2
]
PROGMEM
=
{
6
,
4
};
/* indexing = [version][samplerate index]
* sample rate of frame (Hz)
*/
const
int
samplerateTab
[
3
][
3
]
PROGMEM
=
{
{
44100
,
48000
,
32000
},
/* MPEG-1 */
{
22050
,
24000
,
16000
},
/* MPEG-2 */
{
11025
,
12000
,
8000
},
/* MPEG-2.5 */
};
/* indexing = [version][layer][bitrate index]
* bitrate (kbps) of frame
* - bitrate index == 0 is "free" mode (bitrate determined on the fly by
* counting bits between successive sync words)
*/
const
int
/*short*/
bitrateTab
[
3
][
3
][
15
]
PROGMEM
=
{
{
/* MPEG-1 */
{
0
,
32
,
64
,
96
,
128
,
160
,
192
,
224
,
256
,
288
,
320
,
352
,
384
,
416
,
448
},
/* Layer 1 */
{
0
,
32
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
160
,
192
,
224
,
256
,
320
,
384
},
/* Layer 2 */
{
0
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
160
,
192
,
224
,
256
,
320
},
/* Layer 3 */
},
{
/* MPEG-2 */
{
0
,
32
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
,
176
,
192
,
224
,
256
},
/* Layer 1 */
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
},
/* Layer 2 */
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
},
/* Layer 3 */
},
{
/* MPEG-2.5 */
{
0
,
32
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
,
176
,
192
,
224
,
256
},
/* Layer 1 */
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
},
/* Layer 2 */
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
},
/* Layer 3 */
},
};
/* indexing = [version][layer]
* number of samples in one frame (per channel)
*/
const
int
/*short*/
samplesPerFrameTab
[
3
][
3
]
PROGMEM
=
{
{
384
,
1152
,
1152
},
/* MPEG1 */
{
384
,
1152
,
576
},
/* MPEG2 */
{
384
,
1152
,
576
},
/* MPEG2.5 */
};
/* layers 1, 2, 3 */
const
short
bitsPerSlotTab
[
3
]
=
{
32
,
8
,
8
};
/* indexing = [version][mono/stereo]
* number of bytes in side info section of bitstream
*/
const
int
/*short*/
sideBytesTab
[
3
][
2
]
PROGMEM
=
{
{
17
,
32
},
/* MPEG-1: mono, stereo */
{
9
,
17
},
/* MPEG-2: mono, stereo */
{
9
,
17
},
/* MPEG-2.5: mono, stereo */
};
/* indexing = [version][sampleRate][bitRate]
* for layer3, nSlots = floor(samps/frame * bitRate / sampleRate / 8)
* - add one pad slot if necessary
*/
const
int
/*short*/
slotTab
[
3
][
3
][
15
]
PROGMEM
=
{
{
/* MPEG-1 */
{
0
,
104
,
130
,
156
,
182
,
208
,
261
,
313
,
365
,
417
,
522
,
626
,
731
,
835
,
1044
},
/* 44 kHz */
{
0
,
96
,
120
,
144
,
168
,
192
,
240
,
288
,
336
,
384
,
480
,
576
,
672
,
768
,
960
},
/* 48 kHz */
{
0
,
144
,
180
,
216
,
252
,
288
,
360
,
432
,
504
,
576
,
720
,
864
,
1008
,
1152
,
1440
},
/* 32 kHz */
},
{
/* MPEG-2 */
{
0
,
26
,
52
,
78
,
104
,
130
,
156
,
182
,
208
,
261
,
313
,
365
,
417
,
470
,
522
},
/* 22 kHz */
{
0
,
24
,
48
,
72
,
96
,
120
,
144
,
168
,
192
,
240
,
288
,
336
,
384
,
432
,
480
},
/* 24 kHz */
{
0
,
36
,
72
,
108
,
144
,
180
,
216
,
252
,
288
,
360
,
432
,
504
,
576
,
648
,
720
},
/* 16 kHz */
},
{
/* MPEG-2.5 */
{
0
,
52
,
104
,
156
,
208
,
261
,
313
,
365
,
417
,
522
,
626
,
731
,
835
,
940
,
1044
},
/* 11 kHz */
{
0
,
48
,
96
,
144
,
192
,
240
,
288
,
336
,
384
,
480
,
576
,
672
,
768
,
864
,
960
},
/* 12 kHz */
{
0
,
72
,
144
,
216
,
288
,
360
,
432
,
504
,
576
,
720
,
864
,
1008
,
1152
,
1296
,
1440
},
/* 8 kHz */
},
};
/* indexing = [version][sampleRate][long (.l) or short (.s) block]
* sfBandTable[v][s].l[cb] = index of first bin in critical band cb (long blocks)
* sfBandTable[v][s].s[cb] = index of first bin in critical band cb (short blocks)
*/
const
SFBandTable
sfBandTable
[
3
][
3
]
PROGMEM
=
{
{
/* MPEG-1 (44, 48, 32 kHz) */
{
{
0
,
4
,
8
,
12
,
16
,
20
,
24
,
30
,
36
,
44
,
52
,
62
,
74
,
90
,
110
,
134
,
162
,
196
,
238
,
288
,
342
,
418
,
576
},
{
0
,
4
,
8
,
12
,
16
,
22
,
30
,
40
,
52
,
66
,
84
,
106
,
136
,
192
}
},
{
{
0
,
4
,
8
,
12
,
16
,
20
,
24
,
30
,
36
,
42
,
50
,
60
,
72
,
88
,
106
,
128
,
156
,
190
,
230
,
276
,
330
,
384
,
576
},
{
0
,
4
,
8
,
12
,
16
,
22
,
28
,
38
,
50
,
64
,
80
,
100
,
126
,
192
}
},
{
{
0
,
4
,
8
,
12
,
16
,
20
,
24
,
30
,
36
,
44
,
54
,
66
,
82
,
102
,
126
,
156
,
194
,
240
,
296
,
364
,
448
,
550
,
576
},
{
0
,
4
,
8
,
12
,
16
,
22
,
30
,
42
,
58
,
78
,
104
,
138
,
180
,
192
}
}
},
{
/* MPEG-2 (22, 24, 16 kHz) */
{
{
0
,
6
,
12
,
18
,
24
,
30
,
36
,
44
,
54
,
66
,
80
,
96
,
116
,
140
,
168
,
200
,
238
,
284
,
336
,
396
,
464
,
522
,
576
},
{
0
,
4
,
8
,
12
,
18
,
24
,
32
,
42
,
56
,
74
,
100
,
132
,
174
,
192
}
},
{
{
0
,
6
,
12
,
18
,
24
,
30
,
36
,
44
,
54
,
66
,
80
,
96
,
114
,
136
,
162
,
194
,
232
,
278
,
332
,
394
,
464
,
540
,
576
},
{
0
,
4
,
8
,
12
,
18
,
26
,
36
,
48
,
62
,
80
,
104
,
136
,
180
,
192
}
},
{
{
0
,
6
,
12
,
18
,
24
,
30
,
36
,
44
,
54
,
66
,
80
,
96
,
116
,
140
,
168
,
200
,
238
,
284
,
336
,
396
,
464
,
522
,
576
},
{
0
,
4
,
8
,
12
,
18
,
26
,
36
,
48
,
62
,
80
,
104
,
134
,
174
,
192
}
},
},
{
/* MPEG-2.5 (11, 12, 8 kHz) */
{
{
0
,
6
,
12
,
18
,
24
,
30
,
36
,
44
,
54
,
66
,
80
,
96
,
116
,
140
,
168
,
200
,
238
,
284
,
336
,
396
,
464
,
522
,
576
},
{
0
,
4
,
8
,
12
,
18
,
26
,
36
,
48
,
62
,
80
,
104
,
134
,
174
,
192
}
},
{
{
0
,
6
,
12
,
18
,
24
,
30
,
36
,
44
,
54
,
66
,
80
,
96
,
116
,
140
,
168
,
200
,
238
,
284
,
336
,
396
,
464
,
522
,
576
},
{
0
,
4
,
8
,
12
,
18
,
26
,
36
,
48
,
62
,
80
,
104
,
134
,
174
,
192
}
},
{
{
0
,
12
,
24
,
36
,
48
,
60
,
72
,
88
,
108
,
132
,
160
,
192
,
232
,
280
,
336
,
400
,
476
,
566
,
568
,
570
,
572
,
574
,
576
},
{
0
,
8
,
16
,
24
,
36
,
52
,
72
,
96
,
124
,
160
,
162
,
164
,
166
,
192
}
},
},
};
const
int
imdctWin
[
4
][
36
]
PROGMEM
=
{
{
0x02aace8b
,
0x07311c28
,
0x0a868fec
,
0x0c913b52
,
0x0d413ccd
,
0x0c913b52
,
0x0a868fec
,
0x07311c28
,
0x02aace8b
,
0xfd16d8dd
,
0xf6a09e66
,
0xef7a6275
,
0xe7dbc161
,
0xe0000000
,
0xd8243e9f
,
0xd0859d8b
,
0xc95f619a
,
0xc2e92723
,
0xbd553175
,
0xb8cee3d8
,
0xb5797014
,
0xb36ec4ae
,
0xb2bec333
,
0xb36ec4ae
,
0xb5797014
,
0xb8cee3d8
,
0xbd553175
,
0xc2e92723
,
0xc95f619a
,
0xd0859d8b
,
0xd8243e9f
,
0xe0000000
,
0xe7dbc161
,
0xef7a6275
,
0xf6a09e66
,
0xfd16d8dd
,
},
{
0x02aace8b
,
0x07311c28
,
0x0a868fec
,
0x0c913b52
,
0x0d413ccd
,
0x0c913b52
,
0x0a868fec
,
0x07311c28
,
0x02aace8b
,
0xfd16d8dd
,
0xf6a09e66
,
0xef7a6275
,
0xe7dbc161
,
0xe0000000
,
0xd8243e9f
,
0xd0859d8b
,
0xc95f619a
,
0xc2e92723
,
0xbd44ef14
,
0xb831a052
,
0xb3aa3837
,
0xafb789a4
,
0xac6145bb
,
0xa9adecdc
,
0xa864491f
,
0xad1868f0
,
0xb8431f49
,
0xc8f42236
,
0xdda8e6b1
,
0xf47755dc
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
},
{
0x07311c28
,
0x0d413ccd
,
0x07311c28
,
0xf6a09e66
,
0xe0000000
,
0xc95f619a
,
0xb8cee3d8
,
0xb2bec333
,
0xb8cee3d8
,
0xc95f619a
,
0xe0000000
,
0xf6a09e66
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
},
{
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x028e9709
,
0x04855ec0
,
0x026743a1
,
0xfcde2c10
,
0xf515dc82
,
0xec93e53b
,
0xe4c880f8
,
0xdd5d0b08
,
0xd63510b7
,
0xcf5e834a
,
0xc8e6b562
,
0xc2da4105
,
0xbd553175
,
0xb8cee3d8
,
0xb5797014
,
0xb36ec4ae
,
0xb2bec333
,
0xb36ec4ae
,
0xb5797014
,
0xb8cee3d8
,
0xbd553175
,
0xc2e92723
,
0xc95f619a
,
0xd0859d8b
,
0xd8243e9f
,
0xe0000000
,
0xe7dbc161
,
0xef7a6275
,
0xf6a09e66
,
0xfd16d8dd
,
},
};
const
int
ISFMpeg1
[
2
][
7
]
PROGMEM
=
{
{
0x00000000
,
0x0d8658ba
,
0x176cf5d0
,
0x20000000
,
0x28930a2f
,
0x3279a745
,
0x40000000
},
{
0x00000000
,
0x13207f5c
,
0x2120fb83
,
0x2d413ccc
,
0x39617e16
,
0x4761fa3d
,
0x5a827999
}
};
const
int
ISFMpeg2
[
2
][
2
][
16
]
PROGMEM
=
{
{
{
/* intensityScale off, mid-side off */
0x40000000
,
0x35d13f32
,
0x2d413ccc
,
0x260dfc14
,
0x1fffffff
,
0x1ae89f99
,
0x16a09e66
,
0x1306fe0a
,
0x0fffffff
,
0x0d744fcc
,
0x0b504f33
,
0x09837f05
,
0x07ffffff
,
0x06ba27e6
,
0x05a82799
,
0x04c1bf82
,
},
{
/* intensityScale off, mid-side on */
0x5a827999
,
0x4c1bf827
,
0x3fffffff
,
0x35d13f32
,
0x2d413ccc
,
0x260dfc13
,
0x1fffffff
,
0x1ae89f99
,
0x16a09e66
,
0x1306fe09
,
0x0fffffff
,
0x0d744fcc
,
0x0b504f33
,
0x09837f04
,
0x07ffffff
,
0x06ba27e6
,
},
},
{
{
/* intensityScale on, mid-side off */
0x40000000
,
0x2d413ccc
,
0x20000000
,
0x16a09e66
,
0x10000000
,
0x0b504f33
,
0x08000000
,
0x05a82799
,
0x04000000
,
0x02d413cc
,
0x02000000
,
0x016a09e6
,
0x01000000
,
0x00b504f3
,
0x00800000
,
0x005a8279
,
},
/* intensityScale on, mid-side on */
{
0x5a827999
,
0x3fffffff
,
0x2d413ccc
,
0x1fffffff
,
0x16a09e66
,
0x0fffffff
,
0x0b504f33
,
0x07ffffff
,
0x05a82799
,
0x03ffffff
,
0x02d413cc
,
0x01ffffff
,
0x016a09e6
,
0x00ffffff
,
0x00b504f3
,
0x007fffff
,
}
}
};
/* indexing = [intensity scale on/off][left/right]
* format = Q30, range = [0.0, 1.414]
*
* illegal intensity position scalefactors (see comments on ISFMpeg1)
*/
const
int
ISFIIP
[
2
][
2
]
PROGMEM
=
{
{
0x40000000
,
0x00000000
},
/* mid-side off */
{
0x40000000
,
0x40000000
},
/* mid-side on */
};
const
unsigned
char
uniqueIDTab
[
8
]
=
{
0x5f
,
0x4b
,
0x43
,
0x5f
,
0x5f
,
0x4a
,
0x52
,
0x5f
};
/* anti-alias coefficients - see spec Annex B, table 3-B.9
* csa[0][i] = CSi, csa[1][i] = CAi
* format = Q31
*/
const
int
csa
[
8
][
2
]
PROGMEM
=
{
{
0x6dc253f0
,
0xbe2500aa
},
{
0x70dcebe4
,
0xc39e4949
},
{
0x798d6e73
,
0xd7e33f4a
},
{
0x7ddd40a7
,
0xe8b71176
},
{
0x7f6d20b7
,
0xf3e4fe2f
},
{
0x7fe47e40
,
0xfac1a3c7
},
{
0x7ffcb263
,
0xfe2ebdc6
},
{
0x7fffc694
,
0xff86c25d
},
};
/* format = Q30, range = [0.0981, 1.9976]
*
* n = 16;
* k = 0;
* for(i=0; i<5; i++, n=n/2) {
* for(p=0; p<n; p++, k++) {
* t = (PI / (4*n)) * (2*p + 1);
* coef32[k] = 2.0 * cos(t);
* }
* }
* coef32[30] *= 0.5; / *** for initial back butterfly (i.e. two-point DCT) *** /
*/
const
int
coef32
[
31
]
PROGMEM
=
{
0x7fd8878d
,
0x7e9d55fc
,
0x7c29fbee
,
0x78848413
,
0x73b5ebd0
,
0x6dca0d14
,
0x66cf811f
,
0x5ed77c89
,
0x55f5a4d2
,
0x4c3fdff3
,
0x41ce1e64
,
0x36ba2013
,
0x2b1f34eb
,
0x1f19f97b
,
0x12c8106e
,
0x0647d97c
,
0x7f62368f
,
0x7a7d055b
,
0x70e2cbc6
,
0x62f201ac
,
0x5133cc94
,
0x3c56ba70
,
0x25280c5d
,
0x0c8bd35e
,
0x7d8a5f3f
,
0x6a6d98a4
,
0x471cece6
,
0x18f8b83c
,
0x7641af3c
,
0x30fbc54d
,
0x2d413ccc
,
};
/* format = Q30, right shifted by 12 (sign bits only in top 12 - undo this when rounding to short)
* this is to enable early-terminating multiplies on ARM
* range = [-1.144287109, 1.144989014]
* max gain of filter (per output sample) ~= 2.731
*
* new (properly sign-flipped) values
* - these actually are correct to 32 bits, (floating-pt coefficients in spec
* chosen such that only ~20 bits are required)
*
* Reordering - see table 3-B.3 in spec (appendix B)
*
* polyCoef[i] =
* D[ 0, 32, 64, ... 480], i = [ 0, 15]
* D[ 1, 33, 65, ... 481], i = [ 16, 31]
* D[ 2, 34, 66, ... 482], i = [ 32, 47]
* ...
* D[15, 47, 79, ... 495], i = [240,255]
*
* also exploits symmetry: D[i] = -D[512 - i], for i = [1, 255]
*
* polyCoef[256, 257, ... 263] are for special case of sample 16 (out of 0)
* see PolyphaseStereo() and PolyphaseMono()
*/
const
int
polyCoef
[
264
]
PROGMEM
=
{
/* shuffled vs. original from 0, 1, ... 15 to 0, 15, 2, 13, ... 14, 1 */
0x00000000
,
0x00000074
,
0x00000354
,
0x0000072c
,
0x00001fd4
,
0x00005084
,
0x000066b8
,
0x000249c4
,
0x00049478
,
0xfffdb63c
,
0x000066b8
,
0xffffaf7c
,
0x00001fd4
,
0xfffff8d4
,
0x00000354
,
0xffffff8c
,
0xfffffffc
,
0x00000068
,
0x00000368
,
0x00000644
,
0x00001f40
,
0x00004ad0
,
0x00005d1c
,
0x00022ce0
,
0x000493c0
,
0xfffd9960
,
0x00006f78
,
0xffffa9cc
,
0x0000203c
,
0xfffff7e4
,
0x00000340
,
0xffffff84
,
0xfffffffc
,
0x00000060
,
0x00000378
,
0x0000056c
,
0x00001e80
,
0x00004524
,
0x000052a0
,
0x00020ffc
,
0x000491a0
,
0xfffd7ca0
,
0x00007760
,
0xffffa424
,
0x00002080
,
0xfffff6ec
,
0x00000328
,
0xffffff74
,
0xfffffffc
,
0x00000054
,
0x00000384
,
0x00000498
,
0x00001d94
,
0x00003f7c
,
0x00004744
,
0x0001f32c
,
0x00048e18
,
0xfffd6008
,
0x00007e70
,
0xffff9e8c
,
0x0000209c
,
0xfffff5ec
,
0x00000310
,
0xffffff68
,
0xfffffffc
,
0x0000004c
,
0x0000038c
,
0x000003d0
,
0x00001c78
,
0x000039e4
,
0x00003b00
,
0x0001d680
,
0x00048924
,
0xfffd43ac
,
0x000084b0
,
0xffff990c
,
0x00002094
,
0xfffff4e4
,
0x000002f8
,
0xffffff5c
,
0xfffffffc
,
0x00000044
,
0x00000390
,
0x00000314
,
0x00001b2c
,
0x0000345c
,
0x00002ddc
,
0x0001ba04
,
0x000482d0
,
0xfffd279c
,
0x00008a20
,
0xffff93a4
,
0x0000206c
,
0xfffff3d4
,
0x000002dc
,
0xffffff4c
,
0xfffffffc
,
0x00000040
,
0x00000390
,
0x00000264
,
0x000019b0
,
0x00002ef0
,
0x00001fd4
,
0x00019dc8
,
0x00047b1c
,
0xfffd0be8
,
0x00008ecc
,
0xffff8e64
,
0x00002024
,
0xfffff2c0
,
0x000002c0
,
0xffffff3c
,
0xfffffff8
,
0x00000038
,
0x0000038c
,
0x000001bc
,
0x000017fc
,
0x0000299c
,
0x000010e8
,
0x000181d8
,
0x0004720c
,
0xfffcf09c
,
0x000092b4
,
0xffff894c
,
0x00001fc0
,
0xfffff1a4
,
0x000002a4
,
0xffffff2c
,
0xfffffff8
,
0x00000034
,
0x00000380
,
0x00000120
,
0x00001618
,
0x00002468
,
0x00000118
,
0x00016644
,
0x000467a4
,
0xfffcd5cc
,
0x000095e0
,
0xffff8468
,
0x00001f44
,
0xfffff084
,
0x00000284
,
0xffffff18
,
0xfffffff8
,
0x0000002c
,
0x00000374
,
0x00000090
,
0x00001400
,
0x00001f58
,
0xfffff068
,
0x00014b14
,
0x00045bf0
,
0xfffcbb88
,
0x00009858
,
0xffff7fbc
,
0x00001ea8
,
0xffffef60
,
0x00000268
,
0xffffff04
,
0xfffffff8
,
0x00000028
,
0x0000035c
,
0x00000008
,
0x000011ac
,
0x00001a70
,
0xffffded8
,
0x00013058
,
0x00044ef8
,
0xfffca1d8
,
0x00009a1c
,
0xffff7b54
,
0x00001dfc
,
0xffffee3c
,
0x0000024c
,
0xfffffef0
,
0xfffffff4
,
0x00000024
,
0x00000340
,
0xffffff8c
,
0x00000f28
,
0x000015b0
,
0xffffcc70
,
0x0001161c
,
0x000440bc
,
0xfffc88d8
,
0x00009b3c
,
0xffff7734
,
0x00001d38
,
0xffffed18
,
0x0000022c
,
0xfffffedc
,
0xfffffff4
,
0x00000020
,
0x00000320
,
0xffffff1c
,
0x00000c68
,
0x0000111c
,
0xffffb92c
,
0x0000fc6c
,
0x00043150
,
0xfffc708c
,
0x00009bb8
,
0xffff7368
,
0x00001c64
,
0xffffebf4
,
0x00000210
,
0xfffffec4
,
0xfffffff0
,
0x0000001c
,
0x000002f4
,
0xfffffeb4
,
0x00000974
,
0x00000cb8
,
0xffffa518
,
0x0000e350
,
0x000420b4
,
0xfffc5908
,
0x00009b9c
,
0xffff6ff4
,
0x00001b7c
,
0xffffead0
,
0x000001f4
,
0xfffffeac
,
0xfffffff0
,
0x0000001c
,
0x000002c4
,
0xfffffe58
,
0x00000648
,
0x00000884
,
0xffff9038
,
0x0000cad0
,
0x00040ef8
,
0xfffc425c
,
0x00009af0
,
0xffff6ce0
,
0x00001a88
,
0xffffe9b0
,
0x000001d4
,
0xfffffe94
,
0xffffffec
,
0x00000018
,
0x0000028c
,
0xfffffe04
,
0x000002e4
,
0x00000480
,
0xffff7a90
,
0x0000b2fc
,
0x0003fc28
,
0xfffc2c90
,
0x000099b8
,
0xffff6a3c
,
0x00001988
,
0xffffe898
,
0x000001bc
,
0xfffffe7c
,
0x000001a0
,
0x0000187c
,
0x000097fc
,
0x0003e84c
,
0xffff6424
,
0xffffff4c
,
0x00000248
,
0xffffffec
,
};
static
inline
uint64_t
xSAR64
(
uint64_t
x
,
int
n
){
return
x
>>
n
;}
static
inline
int
FASTABS
(
int
x
){
int
sign
;
sign
=
x
>>
(
sizeof
(
int
)
*
8
-
1
);
x
^=
sign
;
x
-=
sign
;
return
x
;
}
static
inline
int
CLZ
(
int
x
){
int
numZeros
;
if
(
!
x
)
return
(
sizeof
(
int
)
*
8
);
numZeros
=
0
;
while
(
!
(
x
&
0x80000000
)){
numZeros
++
;
x
<<=
1
;}
return
numZeros
;
}
/* returns 64-bit value in [edx:eax] */
static
__inline
uint64_t
MADD64
(
uint64_t
sum64
,
int
x
,
int
y
)
{
sum64
+=
(
uint64_t
)
x
*
(
uint64_t
)
y
;
return
sum64
;
}
static
__inline__
int
MULSHIFT32
(
int
x
,
int
y
)
{
int
z
;
z
=
(
uint64_t
)
x
*
(
uint64_t
)
y
>>
32
;
return
z
;
}
static
__inline
uint64_t
SAR64
(
uint64_t
x
,
int
n
)
{
return
x
>>
n
;
}
#ifdef __cplusplus
extern
"C"
{
#endif
/* polyphase.c (or asmpoly.s)
* some platforms require a C++ compile of all source files,
* so if we're compiling C as C++ and using native assembly
* for these functions we need to prevent C++ name mangling.*/
void
PolyphaseMono
(
short
*
pcm
,
int
*
vbuf
,
const
int
*
coefBase
);
void
PolyphaseStereo
(
short
*
pcm
,
int
*
vbuf
,
const
int
*
coefBase
);
typedef
void
*
HMP3Decoder
;
HMP3Decoder
MP3InitDecoder
(
void
);
void
MP3FreeDecoder
(
HMP3Decoder
hMP3Decoder
);
int
MP3Decode
(
HMP3Decoder
hMP3Decoder
,
unsigned
char
*
inbuf
,
int
*
bytesLeft
,
short
*
outbuf
,
int
useSize
);
void
MP3GetLastFrameInfo
(
HMP3Decoder
hMP3Decoder
,
MP3FrameInfo
*
mp3FrameInfo
);
int
MP3GetNextFrameInfo
(
HMP3Decoder
hMP3Decoder
,
MP3FrameInfo
*
mp3FrameInfo
,
unsigned
char
*
buf
);
int
MP3FindSyncWord
(
unsigned
char
*
buf
,
int
nBytes
);
#ifdef __cplusplus
}
#endif
// prototypes
void
SetBitstreamPointer
(
BitStreamInfo
*
bsi
,
int
nBytes
,
unsigned
char
*
buf
);
unsigned
int
GetBits
(
BitStreamInfo
*
bsi
,
int
nBits
);
int
CalcBitsUsed
(
BitStreamInfo
*
bsi
,
unsigned
char
*
startBuf
,
int
startOffset
);
int
DequantChannel
(
int
*
sampleBuf
,
int
*
workBuf
,
int
*
nonZeroBound
,
FrameHeader
*
fh
,
SideInfoSub
*
sis
,
ScaleFactorInfoSub
*
sfis
,
CriticalBandInfo
*
cbi
);
void
MidSideProc
(
int
x
[
MAX_NCHAN
][
MAX_NSAMP
],
int
nSamps
,
int
mOut
[
2
]);
void
IntensityProcMPEG1
(
int
x
[
MAX_NCHAN
][
MAX_NSAMP
],
int
nSamps
,
FrameHeader
*
fh
,
ScaleFactorInfoSub
*
sfis
,
CriticalBandInfo
*
cbi
,
int
midSideFlag
,
int
mixFlag
,
int
mOut
[
2
]);
void
IntensityProcMPEG2
(
int
x
[
MAX_NCHAN
][
MAX_NSAMP
],
int
nSamps
,
FrameHeader
*
fh
,
ScaleFactorInfoSub
*
sfis
,
CriticalBandInfo
*
cbi
,
ScaleFactorJS
*
sfjs
,
int
midSideFlag
,
int
mixFlag
,
int
mOut
[
2
]);
void
FDCT32
(
int
*
x
,
int
*
d
,
int
offset
,
int
oddBlock
,
int
gb
);
// __attribute__ ((section (".data")));
MP3DecInfo
*
AllocateBuffers
(
void
);
void
FreeBuffers
(
MP3DecInfo
*
mp3DecInfo
);
int
CheckPadBit
(
MP3DecInfo
*
mp3DecInfo
);
int
UnpackFrameHeader
(
MP3DecInfo
*
mp3DecInfo
,
unsigned
char
*
buf
);
int
UnpackSideInfo
(
MP3DecInfo
*
mp3DecInfo
,
unsigned
char
*
buf
);
int
DecodeHuffman
(
MP3DecInfo
*
mp3DecInfo
,
unsigned
char
*
buf
,
int
*
bitOffset
,
int
huffBlockBits
,
int
gr
,
int
ch
);
int
Dequantize
(
MP3DecInfo
*
mp3DecInfo
,
int
gr
);
int
IMDCT
(
MP3DecInfo
*
mp3DecInfo
,
int
gr
,
int
ch
);
int
UnpackScaleFactors
(
MP3DecInfo
*
mp3DecInfo
,
unsigned
char
*
buf
,
int
*
bitOffset
,
int
bitsAvail
,
int
gr
,
int
ch
);
int
Subband
(
MP3DecInfo
*
mp3DecInfo
,
short
*
pcmBuf
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment