f7d29a5cbb996e0ea31a7070ab53dbf5a549cefb
[ffmpeg.git] / libavcodec / mpeg12data.h
1 /*
2  * MPEG1/2 tables
3  */
4
5 INT16 default_intra_matrix[64] = {
6         8, 16, 19, 22, 26, 27, 29, 34,
7         16, 16, 22, 24, 27, 29, 34, 37,
8         19, 22, 26, 27, 29, 34, 34, 38,
9         22, 22, 26, 27, 29, 34, 37, 40,
10         22, 26, 27, 29, 32, 35, 40, 48,
11         26, 27, 29, 32, 35, 40, 48, 58,
12         26, 27, 29, 34, 38, 46, 56, 69,
13         27, 29, 35, 38, 46, 56, 69, 83
14 };
15
16 INT16 default_non_intra_matrix[64] = {
17     16, 16, 16, 16, 16, 16, 16, 16,
18     16, 16, 16, 16, 16, 16, 16, 16,
19     16, 16, 16, 16, 16, 16, 16, 16,
20     16, 16, 16, 16, 16, 16, 16, 16,
21     16, 16, 16, 16, 16, 16, 16, 16,
22     16, 16, 16, 16, 16, 16, 16, 16,
23     16, 16, 16, 16, 16, 16, 16, 16,
24     16, 16, 16, 16, 16, 16, 16, 16,
25 };
26
27 const unsigned char vlc_dc_table[256] = {
28     0, 1, 2, 2,
29     3, 3, 3, 3,
30     4, 4, 4, 4, 4, 4, 4, 4,
31     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
32     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
33     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
34
35     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
36     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
37     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
38     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
39
40     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
41     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
42     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
43     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
44     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
45     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
46     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
47     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
48 };
49
50 const UINT16 vlc_dc_lum_code[12] = {
51     0x4, 0x0, 0x1, 0x5, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x1ff,
52 };
53 const unsigned char vlc_dc_lum_bits[12] = {
54     3, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 9,
55 };
56
57 const UINT16 vlc_dc_chroma_code[12] = {
58     0x0, 0x1, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x3fe, 0x3ff,
59 };
60 const unsigned char vlc_dc_chroma_bits[12] = {
61     2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10,
62 };
63
64 static const UINT16 mpeg1_vlc[113][2] = {
65  { 0x3, 2 }, { 0x4, 4 }, { 0x5, 5 }, { 0x6, 7 },
66  { 0x26, 8 }, { 0x21, 8 }, { 0xa, 10 }, { 0x1d, 12 },
67  { 0x18, 12 }, { 0x13, 12 }, { 0x10, 12 }, { 0x1a, 13 },
68  { 0x19, 13 }, { 0x18, 13 }, { 0x17, 13 }, { 0x1f, 14 },
69  { 0x1e, 14 }, { 0x1d, 14 }, { 0x1c, 14 }, { 0x1b, 14 },
70  { 0x1a, 14 }, { 0x19, 14 }, { 0x18, 14 }, { 0x17, 14 },
71  { 0x16, 14 }, { 0x15, 14 }, { 0x14, 14 }, { 0x13, 14 },
72  { 0x12, 14 }, { 0x11, 14 }, { 0x10, 14 }, { 0x18, 15 },
73  { 0x17, 15 }, { 0x16, 15 }, { 0x15, 15 }, { 0x14, 15 },
74  { 0x13, 15 }, { 0x12, 15 }, { 0x11, 15 }, { 0x10, 15 },
75  { 0x3, 3 }, { 0x6, 6 }, { 0x25, 8 }, { 0xc, 10 },
76  { 0x1b, 12 }, { 0x16, 13 }, { 0x15, 13 }, { 0x1f, 15 },
77  { 0x1e, 15 }, { 0x1d, 15 }, { 0x1c, 15 }, { 0x1b, 15 },
78  { 0x1a, 15 }, { 0x19, 15 }, { 0x13, 16 }, { 0x12, 16 },
79  { 0x11, 16 }, { 0x10, 16 }, { 0x5, 4 }, { 0x4, 7 },
80  { 0xb, 10 }, { 0x14, 12 }, { 0x14, 13 }, { 0x7, 5 },
81  { 0x24, 8 }, { 0x1c, 12 }, { 0x13, 13 }, { 0x6, 5 },
82  { 0xf, 10 }, { 0x12, 12 }, { 0x7, 6 }, { 0x9, 10 },
83  { 0x12, 13 }, { 0x5, 6 }, { 0x1e, 12 }, { 0x14, 16 },
84  { 0x4, 6 }, { 0x15, 12 }, { 0x7, 7 }, { 0x11, 12 },
85  { 0x5, 7 }, { 0x11, 13 }, { 0x27, 8 }, { 0x10, 13 },
86  { 0x23, 8 }, { 0x1a, 16 }, { 0x22, 8 }, { 0x19, 16 },
87  { 0x20, 8 }, { 0x18, 16 }, { 0xe, 10 }, { 0x17, 16 },
88  { 0xd, 10 }, { 0x16, 16 }, { 0x8, 10 }, { 0x15, 16 },
89  { 0x1f, 12 }, { 0x1a, 12 }, { 0x19, 12 }, { 0x17, 12 },
90  { 0x16, 12 }, { 0x1f, 13 }, { 0x1e, 13 }, { 0x1d, 13 },
91  { 0x1c, 13 }, { 0x1b, 13 }, { 0x1f, 16 }, { 0x1e, 16 },
92  { 0x1d, 16 }, { 0x1c, 16 }, { 0x1b, 16 },
93  { 0x1, 6 }, /* escape */
94  { 0x2, 2 }, /* EOB */
95 };
96
97 static const UINT16 mpeg2_vlc[113][2] = {
98   {0x02, 2}, {0x06, 3}, {0x07, 4}, {0x1c, 5},
99   {0x1d, 5}, {0x05, 6}, {0x04, 6}, {0x7b, 7},
100   {0x7c, 7}, {0x23, 8}, {0x22, 8}, {0xfa, 8},
101   {0xfb, 8}, {0xfe, 8}, {0xff, 8}, {0x1f,14},
102   {0x1e,14}, {0x1d,14}, {0x1c,14}, {0x1b,14},
103   {0x1a,14}, {0x19,14}, {0x18,14}, {0x17,14},
104   {0x16,14}, {0x15,14}, {0x14,14}, {0x13,14},
105   {0x12,14}, {0x11,14}, {0x10,14}, {0x18,15},
106   {0x17,15}, {0x16,15}, {0x15,15}, {0x14,15},
107   {0x13,15}, {0x12,15}, {0x11,15}, {0x10,15},
108   {0x02, 3}, {0x06, 5}, {0x79, 7}, {0x27, 8},
109   {0x20, 8}, {0x16,13}, {0x15,13}, {0x1f,15},
110   {0x1e,15}, {0x1d,15}, {0x1c,15}, {0x1b,15},
111   {0x1a,15}, {0x19,15}, {0x13,16}, {0x12,16},
112   {0x11,16}, {0x10,16}, {0x05, 5}, {0x07, 7}, 
113   {0xfc, 8}, {0x0c,10}, {0x14,13}, {0x07, 5}, 
114   {0x26, 8}, {0x1c,12}, {0x13,13}, {0x06, 6}, 
115   {0xfd, 8}, {0x12,12}, {0x07, 6}, {0x04, 9}, 
116   {0x12,13}, {0x06, 7}, {0x1e,12}, {0x14,16}, 
117   {0x04, 7}, {0x15,12}, {0x05, 7}, {0x11,12}, 
118   {0x78, 7}, {0x11,13}, {0x7a, 7}, {0x10,13}, 
119   {0x21, 8}, {0x1a,16}, {0x25, 8}, {0x19,16}, 
120   {0x24, 8}, {0x18,16}, {0x05, 9}, {0x17,16}, 
121   {0x07, 9}, {0x16,16}, {0x0d,10}, {0x15,16}, 
122   {0x1f,12}, {0x1a,12}, {0x19,12}, {0x17,12}, 
123   {0x16,12}, {0x1f,13}, {0x1e,13}, {0x1d,13}, 
124   {0x1c,13}, {0x1b,13}, {0x1f,16}, {0x1e,16}, 
125   {0x1d,16}, {0x1c,16}, {0x1b,16}, 
126   {0x01,6}, /* escape */
127   {0x06,4}, /* EOB */
128 };
129
130 static const INT8 mpeg1_level[111] = {
131   1,  2,  3,  4,  5,  6,  7,  8,
132   9, 10, 11, 12, 13, 14, 15, 16,
133  17, 18, 19, 20, 21, 22, 23, 24,
134  25, 26, 27, 28, 29, 30, 31, 32,
135  33, 34, 35, 36, 37, 38, 39, 40,
136   1,  2,  3,  4,  5,  6,  7,  8,
137   9, 10, 11, 12, 13, 14, 15, 16,
138  17, 18,  1,  2,  3,  4,  5,  1,
139   2,  3,  4,  1,  2,  3,  1,  2,
140   3,  1,  2,  3,  1,  2,  1,  2,
141   1,  2,  1,  2,  1,  2,  1,  2,
142   1,  2,  1,  2,  1,  2,  1,  2,
143   1,  1,  1,  1,  1,  1,  1,  1,
144   1,  1,  1,  1,  1,  1,  1,
145 };
146
147 static const INT8 mpeg1_run[111] = {
148   0,  0,  0,  0,  0,  0,  0,  0,
149   0,  0,  0,  0,  0,  0,  0,  0,
150   0,  0,  0,  0,  0,  0,  0,  0,
151   0,  0,  0,  0,  0,  0,  0,  0,
152   0,  0,  0,  0,  0,  0,  0,  0,
153   1,  1,  1,  1,  1,  1,  1,  1,
154   1,  1,  1,  1,  1,  1,  1,  1,
155   1,  1,  2,  2,  2,  2,  2,  3,
156   3,  3,  3,  4,  4,  4,  5,  5,
157   5,  6,  6,  6,  7,  7,  8,  8,
158   9,  9, 10, 10, 11, 11, 12, 12,
159  13, 13, 14, 14, 15, 15, 16, 16,
160  17, 18, 19, 20, 21, 22, 23, 24,
161  25, 26, 27, 28, 29, 30, 31,
162 };
163
164 static RLTable rl_mpeg1 = {
165     111,
166     111,
167     mpeg1_vlc,
168     mpeg1_run,
169     mpeg1_level,
170 };
171
172 static RLTable rl_mpeg2 = {
173     111,
174     111,
175     mpeg2_vlc,
176     mpeg1_run,
177     mpeg1_level,
178 };
179
180 static const UINT8 mbAddrIncrTable[35][2] = {
181     {0x1, 1},
182     {0x3, 3},
183     {0x2, 3},
184     {0x3, 4},
185     {0x2, 4},
186     {0x3, 5},
187     {0x2, 5},
188     {0x7, 7},
189     {0x6, 7},
190     {0xb, 8},
191     {0xa, 8},
192     {0x9, 8},
193     {0x8, 8},
194     {0x7, 8},
195     {0x6, 8},
196     {0x17, 10},
197     {0x16, 10},
198     {0x15, 10},
199     {0x14, 10},
200     {0x13, 10},
201     {0x12, 10},
202     {0x23, 11},
203     {0x22, 11},
204     {0x21, 11},
205     {0x20, 11},
206     {0x1f, 11},
207     {0x1e, 11},
208     {0x1d, 11},
209     {0x1c, 11},
210     {0x1b, 11},
211     {0x1a, 11},
212     {0x19, 11},
213     {0x18, 11},
214     {0x8, 11}, /* escape */
215     {0xf, 11}, /* stuffing */
216 };
217
218 static const UINT8 mbPatTable[63][2] = {
219     {0xb, 5},
220     {0x9, 5},
221     {0xd, 6},
222     {0xd, 4},
223     {0x17, 7},
224     {0x13, 7},
225     {0x1f, 8},
226     {0xc, 4},
227     {0x16, 7},
228     {0x12, 7},
229     {0x1e, 8},
230     {0x13, 5},
231     {0x1b, 8},
232     {0x17, 8},
233     {0x13, 8},
234     {0xb, 4},
235     {0x15, 7},
236     {0x11, 7},
237     {0x1d, 8},
238     {0x11, 5},
239     {0x19, 8},
240     {0x15, 8},
241     {0x11, 8},
242     {0xf, 6},
243     {0xf, 8},
244     {0xd, 8},
245     {0x3, 9},
246     {0xf, 5},
247     {0xb, 8},
248     {0x7, 8},
249     {0x7, 9},
250     {0xa, 4},
251     {0x14, 7},
252     {0x10, 7},
253     {0x1c, 8},
254     {0xe, 6},
255     {0xe, 8},
256     {0xc, 8},
257     {0x2, 9},
258     {0x10, 5},
259     {0x18, 8},
260     {0x14, 8},
261     {0x10, 8},
262     {0xe, 5},
263     {0xa, 8},
264     {0x6, 8},
265     {0x6, 9},
266     {0x12, 5},
267     {0x1a, 8},
268     {0x16, 8},
269     {0x12, 8},
270     {0xd, 5},
271     {0x9, 8},
272     {0x5, 8},
273     {0x5, 9},
274     {0xc, 5},
275     {0x8, 8},
276     {0x4, 8},
277     {0x4, 9},
278     {0x7, 3},
279     {0xa, 5},
280     {0x8, 5},
281     {0xc, 6}
282 };
283
284 #define MB_INTRA 0x01
285 #define MB_PAT   0x02
286 #define MB_BACK  0x04
287 #define MB_FOR   0x08
288 #define MB_QUANT 0x10  
289
290 static const UINT8 table_mb_ptype[32][2] = {
291     { 0, 0 }, // 0x00
292     { 3, 5 }, // 0x01 MB_INTRA
293     { 1, 2 }, // 0x02 MB_PAT
294     { 0, 0 }, // 0x03
295     { 0, 0 }, // 0x04
296     { 0, 0 }, // 0x05
297     { 0, 0 }, // 0x06
298     { 0, 0 }, // 0x07
299     { 1, 3 }, // 0x08 MB_FOR
300     { 0, 0 }, // 0x09
301     { 1, 1 }, // 0x0A MB_FOR|MB_PAT
302     { 0, 0 }, // 0x0B
303     { 0, 0 }, // 0x0C
304     { 0, 0 }, // 0x0D
305     { 0, 0 }, // 0x0E
306     { 0, 0 }, // 0x0F
307     { 0, 0 }, // 0x10
308     { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
309     { 1, 5 }, // 0x12 MB_QUANT|MB_PAT
310     { 0, 0 }, // 0x13
311     { 0, 0 }, // 0x14
312     { 0, 0 }, // 0x15
313     { 0, 0 }, // 0x16
314     { 0, 0 }, // 0x17
315     { 0, 0 }, // 0x18
316     { 0, 0 }, // 0x19
317     { 2, 5 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
318     { 0, 0 }, // 0x1B
319     { 0, 0 }, // 0x1C
320     { 0, 0 }, // 0x1D
321     { 0, 0 }, // 0x1E
322     { 0, 0 }, // 0x1F
323 };
324
325 static const UINT8 table_mb_btype[32][2] = {
326     { 0, 0 }, // 0x00
327     { 3, 5 }, // 0x01 MB_INTRA
328     { 0, 0 }, // 0x02
329     { 0, 0 }, // 0x03
330     { 2, 3 }, // 0x04 MB_BACK
331     { 0, 0 }, // 0x05
332     { 3, 3 }, // 0x06 MB_BACK|MB_PAT
333     { 0, 0 }, // 0x07
334     { 2, 4 }, // 0x08 MB_FOR
335     { 0, 0 }, // 0x09
336     { 3, 4 }, // 0x0A MB_FOR|MB_PAT
337     { 0, 0 }, // 0x0B
338     { 2, 2 }, // 0x0C MB_FOR|MB_BACK
339     { 0, 0 }, // 0x0D
340     { 3, 2 }, // 0x0E MB_FOR|MB_BACK|MB_PAT
341     { 0, 0 }, // 0x0F
342     { 0, 0 }, // 0x10
343     { 1, 6 }, // 0x11 MB_QUANT|MB_INTRA
344     { 0, 0 }, // 0x12
345     { 0, 0 }, // 0x13
346     { 0, 0 }, // 0x14
347     { 0, 0 }, // 0x15
348     { 2, 6 }, // 0x16 MB_QUANT|MB_BACK|MB_PAT
349     { 0, 0 }, // 0x17
350     { 0, 0 }, // 0x18
351     { 0, 0 }, // 0x19
352     { 3, 6 }, // 0x1A MB_QUANT|MB_FOR|MB_PAT
353     { 0, 0 }, // 0x1B
354     { 0, 0 }, // 0x1C
355     { 0, 0 }, // 0x1D
356     { 2, 5 }, // 0x1E MB_QUANT|MB_FOR|MB_BACK|MB_PAT
357     { 0, 0 }, // 0x1F
358 };
359
360 static const UINT8 mbMotionVectorTable[17][2] = {
361 { 0x1, 1 },
362 { 0x1, 2 },
363 { 0x1, 3 },
364 { 0x1, 4 },
365 { 0x3, 6 },
366 { 0x5, 7 },
367 { 0x4, 7 },
368 { 0x3, 7 },
369 { 0xb, 9 },
370 { 0xa, 9 },
371 { 0x9, 9 },
372 { 0x11, 10 },
373 { 0x10, 10 },
374 { 0xf, 10 },
375 { 0xe, 10 },
376 { 0xd, 10 },
377 { 0xc, 10 },
378 };
379
380 static const int frame_rate_tab[9] = {
381     0, 
382     (int)(23.976 * FRAME_RATE_BASE), 
383     (int)(24 * FRAME_RATE_BASE), 
384     (int)(25 * FRAME_RATE_BASE), 
385     (int)(29.97 * FRAME_RATE_BASE), 
386     (int)(30 * FRAME_RATE_BASE), 
387     (int)(50 * FRAME_RATE_BASE), 
388     (int)(59.94 * FRAME_RATE_BASE), 
389     (int)(60 * FRAME_RATE_BASE), 
390 };
391
392 static const UINT8 non_linear_qscale[32] = {
393     0, 1, 2, 3, 4, 5, 6, 7,
394     8,10,12,14,16,18,20,22,
395     24,28,32,36,40,44,48,52,
396     56,64,72,80,88,96,104,112,
397 };