1 /* tables taken directly from AC3 spec */
3 /* possible frequencies */
4 const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 };
6 /* possible bitrates */
7 const uint16_t 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_t 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_t masktab[253];
52 static const uint8_t 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_t 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_t 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_t sdecaytab[4]={
145 0x0f, 0x11, 0x13, 0x15,
148 const uint8_t fdecaytab[4]={
149 0x3f, 0x53, 0x67, 0x7b,
152 const uint16_t sgaintab[4]= {
153 0x540, 0x4d8, 0x478, 0x410,
156 const uint16_t dbkneetab[4]= {
157 0x000, 0x700, 0x900, 0xb00,
160 const uint16_t floortab[8]= {
161 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
164 const uint16_t fgaintab[8]= {
165 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
168 static const uint8_t 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_t bndtab[51];
176 /* fft & mdct sin cos tables */
177 static int16_t costab[64];
178 static int16_t sintab[64];
179 static int16_t fft_rev[512];
180 static int16_t xcos1[128];
181 static int16_t xsin1[128];
183 static uint16_t crc_table[256];