Patch to generate the ac3 window, based on code by Justin Ruggles.
[ffmpeg.git] / libavcodec / ac3tab.h
1 /**
2  * @file ac3tab.h
3  * tables taken directly from AC3 spec.
4  */
5
6 /* possible frequencies */
7 static const uint16_t ac3_freqs[3] = { 48000, 44100, 32000 };
8
9 /* possible bitrates */
10 static const uint16_t ac3_bitratetab[19] = {
11     32, 40, 48, 56, 64, 80, 96, 112, 128,
12     160, 192, 224, 256, 320, 384, 448, 512, 576, 640
13 };
14
15 static uint8_t masktab[253];
16
17 static const uint8_t latab[260]= {
18 0x0040,0x003f,0x003e,0x003d,0x003c,0x003b,0x003a,0x0039,0x0038,0x0037,
19 0x0036,0x0035,0x0034,0x0034,0x0033,0x0032,0x0031,0x0030,0x002f,0x002f,
20 0x002e,0x002d,0x002c,0x002c,0x002b,0x002a,0x0029,0x0029,0x0028,0x0027,
21 0x0026,0x0026,0x0025,0x0024,0x0024,0x0023,0x0023,0x0022,0x0021,0x0021,
22 0x0020,0x0020,0x001f,0x001e,0x001e,0x001d,0x001d,0x001c,0x001c,0x001b,
23 0x001b,0x001a,0x001a,0x0019,0x0019,0x0018,0x0018,0x0017,0x0017,0x0016,
24 0x0016,0x0015,0x0015,0x0015,0x0014,0x0014,0x0013,0x0013,0x0013,0x0012,
25 0x0012,0x0012,0x0011,0x0011,0x0011,0x0010,0x0010,0x0010,0x000f,0x000f,
26 0x000f,0x000e,0x000e,0x000e,0x000d,0x000d,0x000d,0x000d,0x000c,0x000c,
27 0x000c,0x000c,0x000b,0x000b,0x000b,0x000b,0x000a,0x000a,0x000a,0x000a,
28 0x000a,0x0009,0x0009,0x0009,0x0009,0x0009,0x0008,0x0008,0x0008,0x0008,
29 0x0008,0x0008,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0006,0x0006,
30 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0005,0x0005,0x0005,0x0005,
31 0x0005,0x0005,0x0005,0x0005,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,
32 0x0004,0x0004,0x0004,0x0004,0x0004,0x0003,0x0003,0x0003,0x0003,0x0003,
33 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0002,
34 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,
35 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0001,0x0001,
36 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
37 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
38 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,
39 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
40 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
41 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
42 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
43 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
44 };
45
46 static const uint16_t hth[50][3]= {
47 { 0x04d0,0x04f0,0x0580 },
48 { 0x04d0,0x04f0,0x0580 },
49 { 0x0440,0x0460,0x04b0 },
50 { 0x0400,0x0410,0x0450 },
51 { 0x03e0,0x03e0,0x0420 },
52 { 0x03c0,0x03d0,0x03f0 },
53 { 0x03b0,0x03c0,0x03e0 },
54 { 0x03b0,0x03b0,0x03d0 },
55 { 0x03a0,0x03b0,0x03c0 },
56 { 0x03a0,0x03a0,0x03b0 },
57 { 0x03a0,0x03a0,0x03b0 },
58 { 0x03a0,0x03a0,0x03b0 },
59 { 0x03a0,0x03a0,0x03a0 },
60 { 0x0390,0x03a0,0x03a0 },
61 { 0x0390,0x0390,0x03a0 },
62 { 0x0390,0x0390,0x03a0 },
63 { 0x0380,0x0390,0x03a0 },
64 { 0x0380,0x0380,0x03a0 },
65 { 0x0370,0x0380,0x03a0 },
66 { 0x0370,0x0380,0x03a0 },
67 { 0x0360,0x0370,0x0390 },
68 { 0x0360,0x0370,0x0390 },
69 { 0x0350,0x0360,0x0390 },
70 { 0x0350,0x0360,0x0390 },
71 { 0x0340,0x0350,0x0380 },
72 { 0x0340,0x0350,0x0380 },
73 { 0x0330,0x0340,0x0380 },
74 { 0x0320,0x0340,0x0370 },
75 { 0x0310,0x0320,0x0360 },
76 { 0x0300,0x0310,0x0350 },
77 { 0x02f0,0x0300,0x0340 },
78 { 0x02f0,0x02f0,0x0330 },
79 { 0x02f0,0x02f0,0x0320 },
80 { 0x02f0,0x02f0,0x0310 },
81 { 0x0300,0x02f0,0x0300 },
82 { 0x0310,0x0300,0x02f0 },
83 { 0x0340,0x0320,0x02f0 },
84 { 0x0390,0x0350,0x02f0 },
85 { 0x03e0,0x0390,0x0300 },
86 { 0x0420,0x03e0,0x0310 },
87 { 0x0460,0x0420,0x0330 },
88 { 0x0490,0x0450,0x0350 },
89 { 0x04a0,0x04a0,0x03c0 },
90 { 0x0460,0x0490,0x0410 },
91 { 0x0440,0x0460,0x0470 },
92 { 0x0440,0x0440,0x04a0 },
93 { 0x0520,0x0480,0x0460 },
94 { 0x0800,0x0630,0x0440 },
95 { 0x0840,0x0840,0x0450 },
96 { 0x0840,0x0840,0x04e0 },
97 };
98
99 static const uint8_t baptab[64]= {
100     0, 1, 1, 1, 1, 1, 2, 2, 3, 3,
101     3, 4, 4, 5, 5, 6, 6, 6, 6, 7,
102     7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
103     9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
104     12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
105     14, 14, 14, 14, 14, 15, 15, 15, 15, 15,
106     15, 15, 15, 15,
107 };
108
109 static const uint8_t sdecaytab[4]={
110     0x0f, 0x11, 0x13, 0x15,
111 };
112
113 static const uint8_t fdecaytab[4]={
114     0x3f, 0x53, 0x67, 0x7b,
115 };
116
117 static const uint16_t sgaintab[4]= {
118     0x540, 0x4d8, 0x478, 0x410,
119 };
120
121 static const uint16_t dbkneetab[4]= {
122     0x000, 0x700, 0x900, 0xb00,
123 };
124
125 static const uint16_t floortab[8]= {
126     0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800,
127 };
128
129 static const uint16_t fgaintab[8]= {
130     0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400,
131 };
132
133 static const uint8_t bndsz[50]={
134     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
135     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
136     3, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 24, 24, 24, 24, 24
137 };
138
139 static uint8_t bndtab[51];
140
141 /* AC3 MDCT window */
142 static int16_t ac3_window[256];
143
144 /* fft & mdct sin cos tables */
145 static int16_t costab[64];
146 static int16_t sintab[64];
147 static int16_t fft_rev[512];
148 static int16_t xcos1[128];
149 static int16_t xsin1[128];