5 const UINT8 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
16 const UINT8 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,
27 const unsigned char vlc_dc_table[256] = {
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,
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,
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,
50 const UINT16 vlc_dc_lum_code[12] = {
51 0x4, 0x0, 0x1, 0x5, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x1ff,
53 const unsigned char vlc_dc_lum_bits[12] = {
54 3, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 9,
57 const UINT16 vlc_dc_chroma_code[12] = {
58 0x0, 0x1, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x3fe, 0x3ff,
60 const unsigned char vlc_dc_chroma_bits[12] = {
61 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10,
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 */
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 */
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,
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,
164 static RLTable rl_mpeg1 = {
172 static RLTable rl_mpeg2 = {
180 static const UINT8 mbAddrIncrTable[35][2] = {
214 {0x8, 11}, /* escape */
215 {0xf, 11}, /* stuffing */
218 static const UINT8 mbPatTable[63][2] = {
284 #define MB_INTRA 0x01
288 #define MB_QUANT 0x10
290 static const UINT8 table_mb_ptype[32][2] = {
291 [ MB_FOR|MB_PAT ] { 1, 1 },
294 [ MB_INTRA ] { 3, 5 },
295 [ MB_QUANT|MB_FOR|MB_PAT ] { 2, 5 },
296 [ MB_QUANT|MB_PAT ] { 1, 5 },
297 [ MB_QUANT|MB_INTRA ] { 1, 6 },
300 static const UINT8 table_mb_btype[32][2] = {
301 [ MB_FOR|MB_BACK ] { 2, 2 },
302 [ MB_FOR|MB_BACK|MB_PAT ] { 3, 2 },
303 [ MB_BACK ] { 2, 3 },
304 [ MB_BACK|MB_PAT ] { 3, 3 },
306 [ MB_FOR|MB_PAT ] { 3, 4 },
307 [ MB_INTRA ] { 3, 5 },
308 [ MB_QUANT|MB_FOR|MB_BACK|MB_PAT ] { 2, 5 },
309 [ MB_QUANT|MB_FOR|MB_PAT ] { 3, 6 },
310 [ MB_QUANT|MB_BACK|MB_PAT ] { 2, 6 },
311 [ MB_QUANT|MB_INTRA ] { 1, 6 },
314 static const UINT8 mbMotionVectorTable[17][2] = {
335 UINT8 zigzag_direct[64] = {
336 0, 1, 8, 16, 9, 2, 3, 10,
337 17, 24, 32, 25, 18, 11, 4, 5,
338 12, 19, 26, 33, 40, 48, 41, 34,
339 27, 20, 13, 6, 7, 14, 21, 28,
340 35, 42, 49, 56, 57, 50, 43, 36,
341 29, 22, 15, 23, 30, 37, 44, 51,
342 58, 59, 52, 45, 38, 31, 39, 46,
343 53, 60, 61, 54, 47, 55, 62, 63
346 static const int frame_rate_tab[9] = {
348 (int)(23.976 * FRAME_RATE_BASE),
349 (int)(24 * FRAME_RATE_BASE),
350 (int)(25 * FRAME_RATE_BASE),
351 (int)(29.97 * FRAME_RATE_BASE),
352 (int)(30 * FRAME_RATE_BASE),
353 (int)(50 * FRAME_RATE_BASE),
354 (int)(59.94 * FRAME_RATE_BASE),
355 (int)(60 * FRAME_RATE_BASE),
358 static const UINT8 non_linear_qscale[32] = {
359 0, 1, 2, 3, 4, 5, 6, 7,
360 8,10,12,14,16,18,20,22,
361 24,28,32,36,40,44,48,52,
362 56,64,72,80,88,96,104,112,