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