1 /* tables taken directly from AC3 spec */
3 /* possible bitrates */
4 static const UINT16 bitratetab[19] = {
5 32, 40, 48, 56, 64, 80, 96, 112, 128,
6 160, 192, 224, 256, 320, 384, 448, 512, 576, 640
12 static const INT16 ac3_window[256]= {
13 4, 7, 12, 16, 21, 28, 34, 42,
14 51, 61, 72, 84, 97, 111, 127, 145,
15 164, 184, 207, 231, 257, 285, 315, 347,
16 382, 419, 458, 500, 544, 591, 641, 694,
17 750, 810, 872, 937, 1007, 1079, 1155, 1235,
18 1318, 1406, 1497, 1593, 1692, 1796, 1903, 2016,
19 2132, 2253, 2379, 2509, 2644, 2783, 2927, 3076,
20 3230, 3389, 3552, 3721, 3894, 4072, 4255, 4444,
21 4637, 4835, 5038, 5246, 5459, 5677, 5899, 6127,
22 6359, 6596, 6837, 7083, 7334, 7589, 7848, 8112,
23 8380, 8652, 8927, 9207, 9491, 9778,10069,10363,
24 10660,10960,11264,11570,11879,12190,12504,12820,
25 13138,13458,13780,14103,14427,14753,15079,15407,
26 15735,16063,16392,16720,17049,17377,17705,18032,
27 18358,18683,19007,19330,19651,19970,20287,20602,
28 20914,21225,21532,21837,22139,22438,22733,23025,
29 23314,23599,23880,24157,24430,24699,24964,25225,
30 25481,25732,25979,26221,26459,26691,26919,27142,
31 27359,27572,27780,27983,28180,28373,28560,28742,
32 28919,29091,29258,29420,29577,29729,29876,30018,
33 30155,30288,30415,30538,30657,30771,30880,30985,
34 31086,31182,31274,31363,31447,31528,31605,31678,
35 31747,31814,31877,31936,31993,32046,32097,32145,
36 32190,32232,32272,32310,32345,32378,32409,32438,
37 32465,32490,32513,32535,32556,32574,32592,32608,
38 32623,32636,32649,32661,32671,32681,32690,32698,
39 32705,32712,32718,32724,32729,32733,32737,32741,
40 32744,32747,32750,32752,32754,32756,32757,32759,
41 32760,32761,32762,32763,32764,32764,32765,32765,
42 32766,32766,32766,32766,32767,32767,32767,32767,
43 32767,32767,32767,32767,32767,32767,32767,32767,
44 32767,32767,32767,32767,32767,32767,32767,32767,
47 static UINT8 masktab[253];
49 static const UINT8 latab[260]= {
50 0x0040,0x003f,0x003e,0x003d,0x003c,0x003b,0x003a,0x0039,0x0038,0x0037,
51 0x0036,0x0035,0x0034,0x0034,0x0033,0x0032,0x0031,0x0030,0x002f,0x002f,
52 0x002e,0x002d,0x002c,0x002c,0x002b,0x002a,0x0029,0x0029,0x0028,0x0027,
53 0x0026,0x0026,0x0025,0x0024,0x0024,0x0023,0x0023,0x0022,0x0021,0x0021,
54 0x0020,0x0020,0x001f,0x001e,0x001e,0x001d,0x001d,0x001c,0x001c,0x001b,
55 0x001b,0x001a,0x001a,0x0019,0x0019,0x0018,0x0018,0x0017,0x0017,0x0016,
56 0x0016,0x0015,0x0015,0x0015,0x0014,0x0014,0x0013,0x0013,0x0013,0x0012,
57 0x0012,0x0012,0x0011,0x0011,0x0011,0x0010,0x0010,0x0010,0x000f,0x000f,
58 0x000f,0x000e,0x000e,0x000e,0x000d,0x000d,0x000d,0x000d,0x000c,0x000c,
59 0x000c,0x000c,0x000b,0x000b,0x000b,0x000b,0x000a,0x000a,0x000a,0x000a,
60 0x000a,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,0x0008,0x0008,
61 0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0006,0x0006,
62 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,
63 0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
64 0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0003,
65 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,
66 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
67 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,
68 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
69 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
70 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
71 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
72 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
73 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
74 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
75 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
78 static const UINT16 hth[50][3]= {
79 { 0x04d0,0x04f0,0x0580 },
80 { 0x04d0,0x04f0,0x0580 },
81 { 0x0440,0x0460,0x04b0 },
82 { 0x0400,0x0410,0x0450 },
83 { 0x03e0,0x03e0,0x0420 },
84 { 0x03c0,0x03d0,0x03f0 },
85 { 0x03b0,0x03c0,0x03e0 },
86 { 0x03b0,0x03b0,0x03d0 },
87 { 0x03a0,0x03b0,0x03c0 },
88 { 0x03a0,0x03a0,0x03b0 },
89 { 0x03a0,0x03a0,0x03b0 },
90 { 0x03a0,0x03a0,0x03b0 },
91 { 0x03a0,0x03a0,0x03a0 },
92 { 0x0390,0x03a0,0x03a0 },
93 { 0x0390,0x0390,0x03a0 },
94 { 0x0390,0x0390,0x03a0 },
95 { 0x0380,0x0390,0x03a0 },
96 { 0x0380,0x0380,0x03a0 },
97 { 0x0370,0x0380,0x03a0 },
98 { 0x0370,0x0380,0x03a0 },
99 { 0x0360,0x0370,0x0390 },
100 { 0x0360,0x0370,0x0390 },
101 { 0x0350,0x0360,0x0390 },
102 { 0x0350,0x0360,0x0390 },
103 { 0x0340,0x0350,0x0380 },
104 { 0x0340,0x0350,0x0380 },
105 { 0x0330,0x0340,0x0380 },
106 { 0x0320,0x0340,0x0370 },
107 { 0x0310,0x0320,0x0360 },
108 { 0x0300,0x0310,0x0350 },
109 { 0x02f0,0x0300,0x0340 },
110 { 0x02f0,0x02f0,0x0330 },
111 { 0x02f0,0x02f0,0x0320 },
112 { 0x02f0,0x02f0,0x0310 },
113 { 0x0300,0x02f0,0x0300 },
114 { 0x0310,0x0300,0x02f0 },
115 { 0x0340,0x0320,0x02f0 },
116 { 0x0390,0x0350,0x02f0 },
117 { 0x03e0,0x0390,0x0300 },
118 { 0x0420,0x03e0,0x0310 },
119 { 0x0460,0x0420,0x0330 },
120 { 0x0490,0x0450,0x0350 },
121 { 0x04a0,0x04a0,0x03c0 },
122 { 0x0460,0x0490,0x0410 },
123 { 0x0440,0x0460,0x0470 },
124 { 0x0440,0x0440,0x04a0 },
125 { 0x0520,0x0480,0x0460 },
126 { 0x0800,0x0630,0x0440 },
127 { 0x0840,0x0840,0x0450 },
128 { 0x0840,0x0840,0x04e0 },
131 static const UINT8 baptab[64]= {
132 0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
133 3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
134 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
135 9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
136 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
137 14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
141 static const UINT8 sdecaytab[4]={
142 0x0f, 0x11, 0x13, 0x15,
145 static const UINT8 fdecaytab[4]={
146 0x3f, 0x53, 0x67, 0x7b,
149 static const UINT16 sgaintab[4]= {
150 0x540, 0x4d8, 0x478, 0x410,
153 static const UINT16 dbkneetab[4]= {
154 0x000, 0x700, 0x900, 0xb00,
157 static const UINT16 floortab[8]= {
158 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
161 static const UINT16 fgaintab[8]= {
162 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
165 static const UINT8 bndsz[50]={
166 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
167 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
168 3, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 24, 24, 24, 24, 24
171 static UINT8 bndtab[51];
173 /* fft & mdct sin cos tables */
174 static INT16 costab[64];
175 static INT16 sintab[64];
176 static INT16 fft_rev[512];
177 static INT16 xcos1[128];
178 static INT16 xsin1[128];
180 static UINT16 crc_table[256];