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
72c18b37
Unverified
Commit
72c18b37
authored
Jan 15, 2019
by
Wolle
Committed by
GitHub
Jan 15, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Delete mp3_decoder.h
parent
0ee7136b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
1184 deletions
+0
-1184
src/audioI2S/mp3_decoder/mp3_decoder.h
src/audioI2S/mp3_decoder/mp3_decoder.h
+0
-1184
No files found.
src/audioI2S/mp3_decoder/mp3_decoder.h
deleted
100644 → 0
View file @
0ee7136b
// based om helix mp3 decoder
#pragma once
//#pragma GCC optimize ("O3")
#include "Arduino.h"
class
HMP3Decoder
{
public:
HMP3Decoder
()
{
m_sMode
=
Stereo
;
m_MPEGVersion
=
MPEG1
;}
~
HMP3Decoder
(){;}
private:
const
unsigned
short
huffTable
[
4242
]
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
,
};
/* pow(2,-i/4) * pow(j,4/3) for i=0..3 j=0..15, Q25 format */
const
int
pow43_14
[
4
][
16
]
PROGMEM
=
{
/* Q28 */
{
0x00000000
,
0x10000000
,
0x285145f3
,
0x453a5cdb
,
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
[
48
]
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
,
};
const
uint32_t
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
,
};
/* 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
,
};
/* let c(j) = cos(M_PI/36 * ((j)+0.5)), s(j) = sin(M_PI/36 * ((j)+0.5))
* then fastWin[2*j+0] = c(j)*(s(j) + c(j)), j = [0, 8]
* fastWin[2*j+1] = c(j)*(s(j) - c(j))
* format = Q30
*/
const
uint32_t
fastWin36
[
18
]
PROGMEM
=
{
0x42aace8b
,
0xc2e92724
,
0x47311c28
,
0xc95f619a
,
0x4a868feb
,
0xd0859d8c
,
0x4c913b51
,
0xd8243ea0
,
0x4d413ccc
,
0xe0000000
,
0x4c913b51
,
0xe7dbc161
,
0x4a868feb
,
0xef7a6275
,
0x47311c28
,
0xf6a09e67
,
0x42aace8b
,
0xfd16d8dd
};
/* 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
,
};
/* 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][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 */
},
};
const
uint32_t
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
}
}
};
const
uint32_t
m_COS0_0
=
0x4013c251
;
/* Q31 */
const
uint32_t
m_COS0_1
=
0x40b345bd
;
/* Q31 */
const
uint32_t
m_COS0_2
=
0x41fa2d6d
;
/* Q31 */
const
uint32_t
m_COS0_3
=
0x43f93421
;
/* Q31 */
const
uint32_t
m_COS0_4
=
0x46cc1bc4
;
/* Q31 */
const
uint32_t
m_COS0_5
=
0x4a9d9cf0
;
/* Q31 */
const
uint32_t
m_COS0_6
=
0x4fae3711
;
/* Q31 */
const
uint32_t
m_COS0_7
=
0x56601ea7
;
/* Q31 */
const
uint32_t
m_COS0_8
=
0x5f4cf6eb
;
/* Q31 */
const
uint32_t
m_COS0_9
=
0x6b6fcf26
;
/* Q31 */
const
uint32_t
m_COS0_10
=
0x7c7d1db3
;
/* Q31 */
const
uint32_t
m_COS0_11
=
0x4ad81a97
;
/* Q30 */
const
uint32_t
m_COS0_12
=
0x5efc8d96
;
/* Q30 */
const
uint32_t
m_COS0_13
=
0x41d95790
;
/* Q29 */
const
uint32_t
m_COS0_14
=
0x6d0b20cf
;
/* Q29 */
const
uint32_t
m_COS0_15
=
0x518522fb
;
/* Q27 */
const
uint32_t
m_COS1_0
=
0x404f4672
;
/* Q31 */
const
uint32_t
m_COS1_1
=
0x42e13c10
;
/* Q31 */
const
uint32_t
m_COS1_2
=
0x48919f44
;
/* Q31 */
const
uint32_t
m_COS1_3
=
0x52cb0e63
;
/* Q31 */
const
uint32_t
m_COS1_4
=
0x64e2402e
;
/* Q31 */
const
uint32_t
m_COS1_5
=
0x43e224a9
;
/* Q30 */
const
uint32_t
m_COS1_6
=
0x6e3c92c1
;
/* Q30 */
const
uint32_t
m_COS1_7
=
0x519e4e04
;
/* Q28 */
const
uint32_t
m_COS2_0
=
0x4140fb46
;
/* Q31 */
const
uint32_t
m_COS2_1
=
0x4cf8de88
;
/* Q31 */
const
uint32_t
m_COS2_2
=
0x73326bbf
;
/* Q31 */
const
uint32_t
m_COS2_3
=
0x52036742
;
/* Q29 */
const
uint32_t
m_COS3_0
=
0x4545e9ef
;
/* Q31 */
const
uint32_t
m_COS3_1
=
0x539eba45
;
/* Q30 */
const
uint32_t
m_COS4_0
=
0x5a82799a
;
/* Q31 */
const
uint32_t
m_dcttab
[
48
]
PROGMEM
=
{
// faster in ROM
/* first pass */
m_COS0_0
,
m_COS0_15
,
m_COS1_0
,
/* 31, 27, 31 */
m_COS0_1
,
m_COS0_14
,
m_COS1_1
,
/* 31, 29, 31 */
m_COS0_2
,
m_COS0_13
,
m_COS1_2
,
/* 31, 29, 31 */
m_COS0_3
,
m_COS0_12
,
m_COS1_3
,
/* 31, 30, 31 */
m_COS0_4
,
m_COS0_11
,
m_COS1_4
,
/* 31, 30, 31 */
m_COS0_5
,
m_COS0_10
,
m_COS1_5
,
/* 31, 31, 30 */
m_COS0_6
,
m_COS0_9
,
m_COS1_6
,
/* 31, 31, 30 */
m_COS0_7
,
m_COS0_8
,
m_COS1_7
,
/* 31, 31, 28 */
/* second pass */
m_COS2_0
,
m_COS2_3
,
m_COS3_0
,
/* 31, 29, 31 */
m_COS2_1
,
m_COS2_2
,
m_COS3_1
,
/* 31, 31, 30 */
-
m_COS2_0
,
-
m_COS2_3
,
m_COS3_0
,
/* 31, 29, 31 */
-
m_COS2_1
,
-
m_COS2_2
,
m_COS3_1
,
/* 31, 31, 30 */
m_COS2_0
,
m_COS2_3
,
m_COS3_0
,
/* 31, 29, 31 */
m_COS2_1
,
m_COS2_2
,
m_COS3_1
,
/* 31, 31, 30 */
-
m_COS2_0
,
-
m_COS2_3
,
m_COS3_0
,
/* 31, 29, 31 */
-
m_COS2_1
,
-
m_COS2_2
,
m_COS3_1
,
/* 31, 31, 30 */
};
const
uint8_t
m_SYNCWORDH
=
0xff
;
const
uint8_t
m_SYNCWORDL
=
0xf0
;
const
uint8_t
m_DQ_FRACBITS_OUT
=
25
;
// number of fraction bits in output of dequant
const
uint8_t
m_CSHIFT
=
12
;
// coefficients have 12 leading sign bits for early-terminating mulitplies
static
const
uint8_t
m_HUFF_PAIRTABS
=
32
;
const
uint8_t
m_SIBYTES_MPEG1_MONO
=
17
;
const
uint8_t
m_SIBYTES_MPEG1_STEREO
=
32
;
const
uint8_t
m_SIBYTES_MPEG2_MONO
=
9
;
const
uint8_t
m_SIBYTES_MPEG2_STEREO
=
17
;
const
uint8_t
m_IMDCT_SCALE
=
2
;
// additional scaling (by sqrt(2)) for fast IMDCT36
static
const
uint8_t
m_BLOCK_SIZE
=
18
;
static
const
uint8_t
m_NBANDS
=
32
;
static
const
uint8_t
m_MAX_REORDER_SAMPS
=
(
192
-
126
)
*
3
;
// largest critical band for short blocks (see sfBandTable)
static
const
uint16_t
m_VBUF_LENGTH
=
17
*
2
*
m_NBANDS
;
// for double-sized vbuf FIFO
static
const
uint8_t
m_MAX_SCFBD
=
4
;
// max scalefactor bands per channel
const
uint8_t
m_NGRANS_MPEG1
=
2
;
const
uint8_t
m_NGRANS_MPEG2
=
1
;
static
const
uint16_t
m_MAINBUF_SIZE
=
1940
;
static
const
uint8_t
m_MAX_NGRAN
=
2
;
// max granules
static
const
uint8_t
m_MAX_NCHAN
=
2
;
// max channels
static
const
uint16_t
m_MAX_NSAMP
=
576
;
// max samples per channel, per granule
const
uint32_t
m_SQRTHALF
=
0x5a82799a
;
// sqrt(0.5) in Q31 format
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_t
;
typedef
struct
SFBandTable
{
int
/*short*/
l
[
23
];
int
/*short*/
s
[
14
];
}
SFBandTable_t
;
typedef
struct
BitStreamInfo
{
unsigned
char
*
bytePtr
;
unsigned
int
iCache
;
int
cachedBits
;
int
nBytes
;
}
BitStreamInfo_t
;
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_t
;
typedef
enum
{
/* map to 0,1,2 to make table indexing easier */
MPEG1
=
0
,
MPEG2
=
1
,
MPEG25
=
2
}
MPEGVersion_t
;
typedef
struct
FrameHeader
{
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 */
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) */
}
FrameHeader_t
;
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_t
;
typedef
struct
SideInfo
{
int
mainDataBegin
;
int
privateBits
;
int
scfsi
[
m_MAX_NCHAN
][
m_MAX_SCFBD
];
/* 4 scalefactor bands per channel */
}
SideInfo_t
;
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_t
;
typedef
struct
DequantInfo
{
int
workBuf
[
m_MAX_REORDER_SAMPS
];
/* workbuf for reordering short blocks */
}
DequantInfo_t
;
typedef
struct
HuffmanInfo
{
int
huffDecBuf
[
m_MAX_NCHAN
][
m_MAX_NSAMP
];
/* used both for decoded Huffman values and dequantized coefficients */
int
nonZeroBound
[
m_MAX_NCHAN
];
/* number of coeffs in huffDecBuf[ch] which can be > 0 */
int
gb
[
m_MAX_NCHAN
];
/* minimum number of guard bits in huffDecBuf[ch] */
}
HuffmanInfo_t
;
typedef
enum
HuffTabType
{
noBits
,
oneShot
,
loopNoLinbits
,
loopLinbits
,
quadA
,
quadB
,
invalidTab
}
HuffTabType_t
;
typedef
struct
HuffTabLookup
{
int
linBits
;
int
tabType
;
/*HuffTabType*/
}
HuffTabLookup_t
;
typedef
struct
IMDCTInfo
{
int
outBuf
[
m_MAX_NCHAN
][
m_BLOCK_SIZE
][
m_NBANDS
];
/* output of IMDCT */
int
overBuf
[
m_MAX_NCHAN
][
m_MAX_NSAMP
/
2
];
/* overlap-add buffer (by symmetry, only need 1/2 size) */
int
numPrevIMDCT
[
m_MAX_NCHAN
];
/* how many IMDCT's calculated in this channel on prev. granule */
int
prevType
[
m_MAX_NCHAN
];
int
prevWinSwitch
[
m_MAX_NCHAN
];
int
gb
[
m_MAX_NCHAN
];
}
IMDCTInfo_t
;
typedef
struct
BlockCount
{
int
nBlocksLong
;
int
nBlocksTotal
;
int
nBlocksPrev
;
int
prevType
;
int
prevWinSwitch
;
int
currWinSwitch
;
int
gbIn
;
int
gbOut
;
}
BlockCount_t
;
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_t
;
typedef
struct
ScaleFactorJS
{
/* used in MPEG 2, 2.5 intensity (joint) stereo only */
int
intensityScale
;
int
slen
[
4
];
int
nr
[
4
];
}
ScaleFactorJS_t
;
/* 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
[
m_MAX_NCHAN
*
m_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_t
;
typedef
struct
MP3DecInfo
{
/* buffer which must be large enough to hold largest possible main_data section */
unsigned
char
mainBuf
[
m_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
;
int
mainDataBegin
;
int
mainDataBytes
;
int
part23Length
[
m_MAX_NGRAN
][
m_MAX_NCHAN
];
}
MP3DecInfo_t
;
MP3FrameInfo_t
m_MP3FrameInfo
;
SFBandTable_t
m_SFBandTable
;
StereoMode_t
m_sMode
;
/* mono/stereo mode */
MPEGVersion_t
m_MPEGVersion
;
/* version ID */
FrameHeader_t
m_FrameHeader
;
SideInfoSub_t
m_SideInfoSub
[
m_MAX_NGRAN
][
m_MAX_NCHAN
];
SideInfo_t
m_SideInfo
;
CriticalBandInfo_t
m_CriticalBandInfo
[
m_MAX_NCHAN
];
/* filled in dequantizer, used in joint stereo reconstruction */
DequantInfo_t
m_DequantInfo
;
HuffmanInfo_t
m_HuffmanInfo
;
IMDCTInfo_t
m_IMDCTInfo
;
ScaleFactorInfoSub_t
m_ScaleFactorInfoSub
[
m_MAX_NGRAN
][
m_MAX_NCHAN
];
ScaleFactorJS_t
m_ScaleFactorJS
;
SubbandInfo_t
m_SubbandInfo
;
MP3DecInfo_t
m_MP3DecInfo
;
/* format = Q31
* #define M_PI 3.14159265358979323846
* double u = 2.0 * M_PI / 9.0;
* float c0 = sqrt(3.0) / 2.0;
* float c1 = cos(u);
* float c2 = cos(2*u);
* float c3 = sin(u);
* float c4 = sin(2*u);
*/
const
int
c9_0
=
0x6ed9eba1
;
const
int
c9_1
=
0x620dbe8b
;
const
int
c9_2
=
0x163a1a7e
;
const
int
c9_3
=
0x5246dd49
;
const
int
c9_4
=
0x7e0e2e32
;
const
int
c3_0
=
0x6ed9eba1
;
/* format = Q31, cos(pi/6) */
const
int
c6
[
3
]
=
{
0x7ba3751d
,
0x5a82799a
,
0x2120fb83
};
/* format = Q31, cos(((0:2) + 0.5) * (pi/6)) */
/* format = Q31
* cos(((0:8) + 0.5) * (pi/18))
*/
const
uint32_t
c18
[
9
]
=
{
0x7f834ed0
,
0x7ba3751d
,
0x7401e4c1
,
0x68d9f964
,
0x5a82799a
,
0x496af3e2
,
0x36185aee
,
0x2120fb83
,
0x0b27eb5c
};
/* scale factor lengths (num bits) */
const
char
m_SFLenTab
[
16
][
2
]
=
{
{
0
,
0
},
{
0
,
1
},
{
0
,
2
},
{
0
,
3
},
{
3
,
0
},
{
1
,
1
},
{
1
,
2
},
{
1
,
3
},
{
2
,
1
},
{
2
,
2
},
{
2
,
3
},
{
3
,
1
},
{
3
,
2
},
{
3
,
3
},
{
4
,
2
},
{
4
,
3
}};
/* NRTab[size + 3*is_right][block type][partition]
* block type index: 0 = (bt0,bt1,bt3), 1 = bt2 non-mixed, 2 = bt2 mixed
* partition: scale factor groups (sfb1 through sfb4)
* for block type = 2 (mixed or non-mixed) / by 3 is rolled into this table
* (for 3 short blocks per long block)
* see 2.4.3.2 in MPEG 2 (low sample rate) spec
* stuff rolled into this table:
* NRTab[x][1][y] --> (NRTab[x][1][y]) / 3
* NRTab[x][2][>=1] --> (NRTab[x][2][>=1]) / 3 (first partition is long block)
*/
const
char
NRTab
[
6
][
3
][
4
]
=
{
{{
6
,
5
,
5
,
5
},
{
3
,
3
,
3
,
3
},
{
6
,
3
,
3
,
3
}},
{{
6
,
5
,
7
,
3
},
{
3
,
3
,
4
,
2
},
{
6
,
3
,
4
,
2
}},
{{
11
,
10
,
0
,
0
},
{
6
,
6
,
0
,
0
},
{
6
,
3
,
6
,
0
}},
{{
7
,
7
,
7
,
0
},
{
4
,
4
,
4
,
0
},
{
6
,
5
,
4
,
0
}},
{{
6
,
6
,
6
,
3
},
{
4
,
3
,
3
,
2
},
{
6
,
4
,
3
,
2
}},
{{
8
,
8
,
5
,
0
},
{
5
,
4
,
3
,
0
},
{
6
,
6
,
3
,
0
}}
};
/* optional pre-emphasis for high-frequency scale factor bands */
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
};
/*
* 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
*/
const
unsigned
int
poly43lo
[
5
]
PROGMEM
=
{
0x29a0bda9
,
0xb02e4828
,
0x5957aa1b
,
0x236c498d
,
0xff581859
};
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
};
const
uint16_t
m_HUFF_OFFSET_01
=
0
;
const
uint16_t
m_HUFF_OFFSET_02
=
9
+
m_HUFF_OFFSET_01
;
const
uint16_t
m_HUFF_OFFSET_03
=
65
+
m_HUFF_OFFSET_02
;
const
uint16_t
m_HUFF_OFFSET_05
=
65
+
m_HUFF_OFFSET_03
;
const
uint16_t
m_HUFF_OFFSET_06
=
257
+
m_HUFF_OFFSET_05
;
const
uint16_t
m_HUFF_OFFSET_07
=
129
+
m_HUFF_OFFSET_06
;
const
uint16_t
m_HUFF_OFFSET_08
=
110
+
m_HUFF_OFFSET_07
;
const
uint16_t
m_HUFF_OFFSET_09
=
280
+
m_HUFF_OFFSET_08
;
const
uint16_t
m_HUFF_OFFSET_10
=
93
+
m_HUFF_OFFSET_09
;
const
uint16_t
m_HUFF_OFFSET_11
=
320
+
m_HUFF_OFFSET_10
;
const
uint16_t
m_HUFF_OFFSET_12
=
296
+
m_HUFF_OFFSET_11
;
const
uint16_t
m_HUFF_OFFSET_13
=
185
+
m_HUFF_OFFSET_12
;
const
uint16_t
m_HUFF_OFFSET_15
=
497
+
m_HUFF_OFFSET_13
;
const
uint16_t
m_HUFF_OFFSET_16
=
580
+
m_HUFF_OFFSET_15
;
const
uint16_t
m_HUFF_OFFSET_24
=
651
+
m_HUFF_OFFSET_16
;
const
int
huffTabOffset
[
m_HUFF_PAIRTABS
]
PROGMEM
=
{
0
,
m_HUFF_OFFSET_01
,
m_HUFF_OFFSET_02
,
m_HUFF_OFFSET_03
,
0
,
m_HUFF_OFFSET_05
,
m_HUFF_OFFSET_06
,
m_HUFF_OFFSET_07
,
m_HUFF_OFFSET_08
,
m_HUFF_OFFSET_09
,
m_HUFF_OFFSET_10
,
m_HUFF_OFFSET_11
,
m_HUFF_OFFSET_12
,
m_HUFF_OFFSET_13
,
0
,
m_HUFF_OFFSET_15
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_16
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,
m_HUFF_OFFSET_24
,};
const
HuffTabLookup_t
huffTabLookup
[
m_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
},
};
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]
* 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][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_t
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
}
},
},
};
/* 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
uint32_t
csa
[
8
][
2
]
PROGMEM
=
{
{
0x6dc253f0
,
0xbe2500aa
},
{
0x70dcebe4
,
0xc39e4949
},
{
0x798d6e73
,
0xd7e33f4a
},
{
0x7ddd40a7
,
0xe8b71176
},
{
0x7f6d20b7
,
0xf3e4fe2f
},
{
0x7fe47e40
,
0xfac1a3c7
},
{
0x7ffcb263
,
0xfe2ebdc6
},
{
0x7fffc694
,
0xff86c25d
},
};
/* 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()
*/
public
:
// prototypes
void
EraseBuffers
(
void
);
int
MP3Decode
(
unsigned
char
*
inbuf
,
int
*
bytesLeft
,
short
*
outbuf
,
int
useSize
);
void
MP3GetLastFrameInfo
();
int
MP3GetNextFrameInfo
(
unsigned
char
*
buf
);
int
MP3FindSyncWord
(
unsigned
char
*
buf
,
int
nBytes
);
int
MP3GetSampRate
();
int
MP3GetChannels
();
int
MP3GetBitsPerSample
();
int
MP3GetBitrate
();
int
MP3GetOutputSamps
();
private
:
//internally used
void
PolyphaseMono
(
short
*
pcm
,
int
*
vbuf
,
const
uint32_t
*
coefBase
);
void
PolyphaseStereo
(
short
*
pcm
,
int
*
vbuf
,
const
uint32_t
*
coefBase
);
void
SetBitstreamPointer
(
BitStreamInfo_t
*
bsi
,
int
nBytes
,
unsigned
char
*
buf
);
unsigned
int
GetBits
(
BitStreamInfo_t
*
bsi
,
int
nBits
);
int
CalcBitsUsed
(
BitStreamInfo_t
*
bsi
,
unsigned
char
*
startBuf
,
int
startOffset
);
int
DequantChannel
(
int
*
sampleBuf
,
int
*
workBuf
,
int
*
nonZeroBound
,
SideInfoSub_t
*
sis
,
ScaleFactorInfoSub_t
*
sfis
,
CriticalBandInfo_t
*
cbi
);
void
MidSideProc
(
int
x
[
m_MAX_NCHAN
][
m_MAX_NSAMP
],
int
nSamps
,
int
mOut
[
2
]);
void
IntensityProcMPEG1
(
int
x
[
m_MAX_NCHAN
][
m_MAX_NSAMP
],
int
nSamps
,
ScaleFactorInfoSub_t
*
sfis
,
CriticalBandInfo_t
*
cbi
,
int
midSideFlag
,
int
mixFlag
,
int
mOut
[
2
]);
void
IntensityProcMPEG2
(
int
x
[
m_MAX_NCHAN
][
m_MAX_NSAMP
],
int
nSamps
,
ScaleFactorInfoSub_t
*
sfis
,
CriticalBandInfo_t
*
cbi
,
ScaleFactorJS_t
*
sfjs
,
int
midSideFlag
,
int
mixFlag
,
int
mOut
[
2
]);
void
FDCT32
(
int
*
x
,
int
*
d
,
int
offset
,
int
oddBlock
,
int
gb
);
// __attribute__ ((section (".data")));
void
FreeBuffers
();
int
CheckPadBit
();
int
UnpackFrameHeader
(
unsigned
char
*
buf
);
int
UnpackSideInfo
(
unsigned
char
*
buf
);
int
DecodeHuffman
(
unsigned
char
*
buf
,
int
*
bitOffset
,
int
huffBlockBits
,
int
gr
,
int
ch
);
int
Dequantize
(
int
gr
);
int
IMDCT
(
int
gr
,
int
ch
);
int
UnpackScaleFactors
(
unsigned
char
*
buf
,
int
*
bitOffset
,
int
bitsAvail
,
int
gr
,
int
ch
);
int
Subband
(
short
*
pcmBuf
);
short
ClipToShort
(
int
x
,
int
fracBits
);
void
RefillBitstreamCache
(
BitStreamInfo_t
*
bsi
);
void
UnpackSFMPEG1
(
BitStreamInfo_t
*
bsi
,
SideInfoSub_t
*
sis
,
ScaleFactorInfoSub_t
*
sfis
,
int
*
scfsi
,
int
gr
,
ScaleFactorInfoSub_t
*
sfisGr0
);
void
UnpackSFMPEG2
(
BitStreamInfo_t
*
bsi
,
SideInfoSub_t
*
sis
,
ScaleFactorInfoSub_t
*
sfis
,
int
gr
,
int
ch
,
int
modeExt
,
ScaleFactorJS_t
*
sfjs
);
int
MP3FindFreeSync
(
unsigned
char
*
buf
,
unsigned
char
firstFH
[
4
],
int
nBytes
);
void
MP3ClearBadFrame
(
short
*
outbuf
);
int
DecodeHuffmanPairs
(
int
*
xy
,
int
nVals
,
int
tabIdx
,
int
bitsLeft
,
unsigned
char
*
buf
,
int
bitOffset
);
int
DecodeHuffmanQuads
(
int
*
vwxy
,
int
nVals
,
int
tabIdx
,
int
bitsLeft
,
unsigned
char
*
buf
,
int
bitOffset
);
int
DequantBlock
(
int
*
inbuf
,
int
*
outbuf
,
int
num
,
int
scale
);
void
AntiAlias
(
int
*
x
,
int
nBfly
);
void
WinPrevious
(
int
*
xPrev
,
int
*
xPrevWin
,
int
btPrev
);
int
FreqInvertRescale
(
int
*
y
,
int
*
xPrev
,
int
blockIdx
,
int
es
);
void
idct9
(
int
*
x
);
int
IMDCT36
(
int
*
xCurr
,
int
*
xPrev
,
int
*
y
,
int
btCurr
,
int
btPrev
,
int
blockIdx
,
int
gb
);
void
imdct12
(
int
*
x
,
int
*
out
);
int
IMDCT12x3
(
int
*
xCurr
,
int
*
xPrev
,
int
*
y
,
int
btPrev
,
int
blockIdx
,
int
gb
);
int
HybridTransform
(
int
*
xCurr
,
int
*
xPrev
,
int
y
[
m_BLOCK_SIZE
][
m_NBANDS
],
SideInfoSub_t
*
sis
,
BlockCount_t
*
bc
);
inline
uint64_t
SAR64
(
uint64_t
x
,
int
n
)
{
return
x
>>
n
;}
inline
int
MULSHIFT32
(
int
x
,
int
y
)
{
int
z
;
z
=
(
uint64_t
)
x
*
(
uint64_t
)
y
>>
32
;
return
z
;}
inline
uint64_t
MADD64
(
uint64_t
sum64
,
int
x
,
int
y
)
{
sum64
+=
(
uint64_t
)
x
*
(
uint64_t
)
y
;
return
sum64
;}
/* returns 64-bit value in [edx:eax] */
inline
int
CLZ
(
int
x
){
int
numZeros
;
if
(
!
x
)
return
(
sizeof
(
int
)
*
8
);
numZeros
=
0
;
while
(
!
(
x
&
0x80000000
)){
numZeros
++
;
x
<<=
1
;}
return
numZeros
;}
inline
uint64_t
xSAR64
(
uint64_t
x
,
int
n
){
return
x
>>
n
;}
inline
int
FASTABS
(
int
x
){
int
sign
;
sign
=
x
>>
(
sizeof
(
int
)
*
8
-
1
);
x
^=
sign
;
x
-=
sign
;
return
x
;}
}
;
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