9
#define BIN_ONLY_SHAPE 2
12
#define SIMPLE_VO_TYPE 1
13
#define CORE_VO_TYPE 3
14
#define MAIN_VO_TYPE 4
15
#define NBIT_VO_TYPE 5
16
#define ARTS_VO_TYPE 10
17
#define ACE_VO_TYPE 12
18
#define ADV_SIMPLE_VO_TYPE 17
21
#define EXTENDED_PAR 15
23
//vol_sprite_usage / sprite_enable
24
#define STATIC_SPRITE 1
27
#define MOTION_MARKER 0x1F001
28
#define DC_MARKER 0x6B001
30
static const int mb_type_b_map[4]= {
31
MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
32
MB_TYPE_L0L1 | MB_TYPE_16x16,
33
MB_TYPE_L1 | MB_TYPE_16x16,
34
MB_TYPE_L0 | MB_TYPE_16x16,
37
#define VOS_STARTCODE 0x1B0
38
#define USER_DATA_STARTCODE 0x1B2
39
#define GOP_STARTCODE 0x1B3
40
#define VISUAL_OBJ_STARTCODE 0x1B5
41
#define VOP_STARTCODE 0x1B6
43
/* dc encoding for mpeg4 */
44
const uint8_t DCtab_lum[13][2] =
46
{3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
47
{1,8}, {1,9}, {1,10}, {1,11},
50
const uint8_t DCtab_chrom[13][2] =
52
{3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8},
53
{1,9}, {1,10}, {1,11}, {1,12},
56
const uint16_t intra_vlc[103][2] = {
58
{ 0x6, 3 },{ 0xf, 4 },{ 0xd, 5 },{ 0xc, 5 },
59
{ 0x15, 6 },{ 0x13, 6 },{ 0x12, 6 },{ 0x17, 7 },
60
{ 0x1f, 8 },{ 0x1e, 8 },{ 0x1d, 8 },{ 0x25, 9 },
61
{ 0x24, 9 },{ 0x23, 9 },{ 0x21, 9 },{ 0x21, 10 },
62
{ 0x20, 10 },{ 0xf, 10 },{ 0xe, 10 },{ 0x7, 11 },
63
{ 0x6, 11 },{ 0x20, 11 },{ 0x21, 11 },{ 0x50, 12 },
64
{ 0x51, 12 },{ 0x52, 12 },{ 0xe, 4 },{ 0x14, 6 },
65
{ 0x16, 7 },{ 0x1c, 8 },{ 0x20, 9 },{ 0x1f, 9 },
66
{ 0xd, 10 },{ 0x22, 11 },{ 0x53, 12 },{ 0x55, 12 },
67
{ 0xb, 5 },{ 0x15, 7 },{ 0x1e, 9 },{ 0xc, 10 },
68
{ 0x56, 12 },{ 0x11, 6 },{ 0x1b, 8 },{ 0x1d, 9 },
69
{ 0xb, 10 },{ 0x10, 6 },{ 0x22, 9 },{ 0xa, 10 },
70
{ 0xd, 6 },{ 0x1c, 9 },{ 0x8, 10 },{ 0x12, 7 },
71
{ 0x1b, 9 },{ 0x54, 12 },{ 0x14, 7 },{ 0x1a, 9 },
72
{ 0x57, 12 },{ 0x19, 8 },{ 0x9, 10 },{ 0x18, 8 },
73
{ 0x23, 11 },{ 0x17, 8 },{ 0x19, 9 },{ 0x18, 9 },
74
{ 0x7, 10 },{ 0x58, 12 },{ 0x7, 4 },{ 0xc, 6 },
75
{ 0x16, 8 },{ 0x17, 9 },{ 0x6, 10 },{ 0x5, 11 },
76
{ 0x4, 11 },{ 0x59, 12 },{ 0xf, 6 },{ 0x16, 9 },
77
{ 0x5, 10 },{ 0xe, 6 },{ 0x4, 10 },{ 0x11, 7 },
78
{ 0x24, 11 },{ 0x10, 7 },{ 0x25, 11 },{ 0x13, 7 },
79
{ 0x5a, 12 },{ 0x15, 8 },{ 0x5b, 12 },{ 0x14, 8 },
80
{ 0x13, 8 },{ 0x1a, 8 },{ 0x15, 9 },{ 0x14, 9 },
81
{ 0x13, 9 },{ 0x12, 9 },{ 0x11, 9 },{ 0x26, 11 },
82
{ 0x27, 11 },{ 0x5c, 12 },{ 0x5d, 12 },{ 0x5e, 12 },
83
{ 0x5f, 12 },{ 0x3, 7 },
86
const int8_t intra_level[102] = {
87
1, 2, 3, 4, 5, 6, 7, 8,
88
9, 10, 11, 12, 13, 14, 15, 16,
89
17, 18, 19, 20, 21, 22, 23, 24,
90
25, 26, 27, 1, 2, 3, 4, 5,
91
6, 7, 8, 9, 10, 1, 2, 3,
92
4, 5, 1, 2, 3, 4, 1, 2,
93
3, 1, 2, 3, 1, 2, 3, 1,
94
2, 3, 1, 2, 1, 2, 1, 1,
95
1, 1, 1, 1, 2, 3, 4, 5,
96
6, 7, 8, 1, 2, 3, 1, 2,
97
1, 2, 1, 2, 1, 2, 1, 2,
98
1, 1, 1, 1, 1, 1, 1, 1,
102
const int8_t intra_run[102] = {
103
0, 0, 0, 0, 0, 0, 0, 0,
104
0, 0, 0, 0, 0, 0, 0, 0,
105
0, 0, 0, 0, 0, 0, 0, 0,
106
0, 0, 0, 1, 1, 1, 1, 1,
107
1, 1, 1, 1, 1, 2, 2, 2,
108
2, 2, 3, 3, 3, 3, 4, 4,
109
4, 5, 5, 5, 6, 6, 6, 7,
110
7, 7, 8, 8, 9, 9, 10, 11,
111
12, 13, 14, 0, 0, 0, 0, 0,
112
0, 0, 0, 1, 1, 1, 2, 2,
113
3, 3, 4, 4, 5, 5, 6, 6,
114
7, 8, 9, 10, 11, 12, 13, 14,
115
15, 16, 17, 18, 19, 20,
118
static RLTable rl_intra = {
126
static const uint16_t inter_rvlc[170][2]={ //note this is identical to the intra rvlc except that its reordered
127
{0x0006, 3},{0x0001, 4},{0x0004, 5},{0x001C, 7},
128
{0x003C, 8},{0x003D, 8},{0x007C, 9},{0x00FC, 10},
129
{0x00FD, 10},{0x01FC, 11},{0x01FD, 11},{0x03FC, 12},
130
{0x07FC, 13},{0x07FD, 13},{0x0BFC, 13},{0x0BFD, 13},
131
{0x0FFC, 14},{0x0FFD, 14},{0x1FFC, 15},{0x0007, 3},
132
{0x000C, 6},{0x005C, 8},{0x007D, 9},{0x017C, 10},
133
{0x02FC, 11},{0x03FD, 12},{0x0DFC, 13},{0x17FC, 14},
134
{0x17FD, 14},{0x000A, 4},{0x001D, 7},{0x00BC, 9},
135
{0x02FD, 11},{0x05FC, 12},{0x1BFC, 14},{0x1BFD, 14},
136
{0x0005, 5},{0x005D, 8},{0x017D, 10},{0x05FD, 12},
137
{0x0DFD, 13},{0x1DFC, 14},{0x1FFD, 15},{0x0008, 5},
138
{0x006C, 8},{0x037C, 11},{0x0EFC, 13},{0x2FFC, 15},
139
{0x0009, 5},{0x00BD, 9},{0x037D, 11},{0x0EFD, 13},
140
{0x000D, 6},{0x01BC, 10},{0x06FC, 12},{0x1DFD, 14},
141
{0x0014, 6},{0x01BD, 10},{0x06FD, 12},{0x2FFD, 15},
142
{0x0015, 6},{0x01DC, 10},{0x0F7C, 13},{0x002C, 7},
143
{0x01DD, 10},{0x1EFC, 14},{0x002D, 7},{0x03BC, 11},
144
{0x0034, 7},{0x077C, 12},{0x006D, 8},{0x0F7D, 13},
145
{0x0074, 8},{0x1EFD, 14},{0x0075, 8},{0x1F7C, 14},
146
{0x00DC, 9},{0x1F7D, 14},{0x00DD, 9},{0x1FBC, 14},
147
{0x00EC, 9},{0x37FC, 15},{0x01EC, 10},{0x01ED, 10},
148
{0x01F4, 10},{0x03BD, 11},{0x03DC, 11},{0x03DD, 11},
149
{0x03EC, 11},{0x03ED, 11},{0x03F4, 11},{0x077D, 12},
150
{0x07BC, 12},{0x07BD, 12},{0x0FBC, 13},{0x0FBD, 13},
151
{0x0FDC, 13},{0x0FDD, 13},{0x1FBD, 14},{0x1FDC, 14},
152
{0x1FDD, 14},{0x37FD, 15},{0x3BFC, 15},
153
{0x000B, 4},{0x0078, 8},{0x03F5, 11},{0x0FEC, 13},
154
{0x1FEC, 14},{0x0012, 5},{0x00ED, 9},{0x07DC, 12},
155
{0x1FED, 14},{0x3BFD, 15},{0x0013, 5},{0x03F8, 11},
156
{0x3DFC, 15},{0x0018, 6},{0x07DD, 12},{0x0019, 6},
157
{0x07EC, 12},{0x0022, 6},{0x0FED, 13},{0x0023, 6},
158
{0x0FF4, 13},{0x0035, 7},{0x0FF5, 13},{0x0038, 7},
159
{0x0FF8, 13},{0x0039, 7},{0x0FF9, 13},{0x0042, 7},
160
{0x1FF4, 14},{0x0043, 7},{0x1FF5, 14},{0x0079, 8},
161
{0x1FF8, 14},{0x0082, 8},{0x3DFD, 15},{0x0083, 8},
162
{0x00F4, 9},{0x00F5, 9},{0x00F8, 9},{0x00F9, 9},
163
{0x0102, 9},{0x0103, 9},{0x01F5, 10},{0x01F8, 10},
164
{0x01F9, 10},{0x0202, 10},{0x0203, 10},{0x03F9, 11},
165
{0x0402, 11},{0x0403, 11},{0x07ED, 12},{0x07F4, 12},
166
{0x07F5, 12},{0x07F8, 12},{0x07F9, 12},{0x0802, 12},
167
{0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
168
{0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
169
{0x3F7C, 15},{0x3F7D, 15},{0x0000, 4}
172
static const uint8_t inter_rvlc_run[169]={
173
0, 0, 0, 0, 0, 0, 0, 0,
174
0, 0, 0, 0, 0, 0, 0, 0,
175
0, 0, 0, 1, 1, 1, 1, 1,
176
1, 1, 1, 1, 1, 2, 2, 2,
177
2, 2, 2, 2, 3, 3, 3, 3,
178
3, 3, 3, 4, 4, 4, 4, 4,
179
5, 5, 5, 5, 6, 6, 6, 6,
180
7, 7, 7, 7, 8, 8, 8, 9,
181
9, 9, 10, 10, 11, 11, 12, 12,
182
13, 13, 14, 14, 15, 15, 16, 16,
183
17, 17, 18, 19, 20, 21, 22, 23,
184
24, 25, 26, 27, 28, 29, 30, 31,
185
32, 33, 34, 35, 36, 37, 38,
186
0, 0, 0, 0, 0, 1, 1, 1,
187
1, 1, 2, 2, 2, 3, 3, 4,
188
4, 5, 5, 6, 6, 7, 7, 8,
189
8, 9, 9, 10, 10, 11, 11, 12,
190
12, 13, 13, 14, 15, 16, 17, 18,
191
19, 20, 21, 22, 23, 24, 25, 26,
192
27, 28, 29, 30, 31, 32, 33, 34,
193
35, 36, 37, 38, 39, 40, 41, 42,
197
static const uint8_t inter_rvlc_level[169]={
198
1, 2, 3, 4, 5, 6, 7, 8,
199
9, 10, 11, 12, 13, 14, 15, 16,
200
17, 18, 19, 1, 2, 3, 4, 5,
201
6, 7, 8, 9, 10, 1, 2, 3,
202
4, 5, 6, 7, 1, 2, 3, 4,
203
5, 6, 7, 1, 2, 3, 4, 5,
204
1, 2, 3, 4, 1, 2, 3, 4,
205
1, 2, 3, 4, 1, 2, 3, 1,
206
2, 3, 1, 2, 1, 2, 1, 2,
207
1, 2, 1, 2, 1, 2, 1, 2,
208
1, 2, 1, 1, 1, 1, 1, 1,
209
1, 1, 1, 1, 1, 1, 1, 1,
211
1, 2, 3, 4, 5, 1, 2, 3,
212
4, 5, 1, 2, 3, 1, 2, 1,
213
2, 1, 2, 1, 2, 1, 2, 1,
214
2, 1, 2, 1, 2, 1, 2, 1,
215
2, 1, 2, 1, 1, 1, 1, 1,
216
1, 1, 1, 1, 1, 1, 1, 1,
217
1, 1, 1, 1, 1, 1, 1, 1,
218
1, 1, 1, 1, 1, 1, 1, 1,
222
static RLTable rvlc_rl_inter = {
230
static const uint16_t intra_rvlc[170][2]={
231
{0x0006, 3},{0x0007, 3},{0x000A, 4},{0x0009, 5},
232
{0x0014, 6},{0x0015, 6},{0x0034, 7},{0x0074, 8},
233
{0x0075, 8},{0x00DD, 9},{0x00EC, 9},{0x01EC, 10},
234
{0x01ED, 10},{0x01F4, 10},{0x03EC, 11},{0x03ED, 11},
235
{0x03F4, 11},{0x077D, 12},{0x07BC, 12},{0x0FBD, 13},
236
{0x0FDC, 13},{0x07BD, 12},{0x0FDD, 13},{0x1FBD, 14},
237
{0x1FDC, 14},{0x1FDD, 14},{0x1FFC, 15},{0x0001, 4},
238
{0x0008, 5},{0x002D, 7},{0x006C, 8},{0x006D, 8},
239
{0x00DC, 9},{0x01DD, 10},{0x03DC, 11},{0x03DD, 11},
240
{0x077C, 12},{0x0FBC, 13},{0x1F7D, 14},{0x1FBC, 14},
241
{0x0004, 5},{0x002C, 7},{0x00BC, 9},{0x01DC, 10},
242
{0x03BC, 11},{0x03BD, 11},{0x0EFD, 13},{0x0F7C, 13},
243
{0x0F7D, 13},{0x1EFD, 14},{0x1F7C, 14},{0x0005, 5},
244
{0x005C, 8},{0x00BD, 9},{0x037D, 11},{0x06FC, 12},
245
{0x0EFC, 13},{0x1DFD, 14},{0x1EFC, 14},{0x1FFD, 15},
246
{0x000C, 6},{0x005D, 8},{0x01BD, 10},{0x03FD, 12},
247
{0x06FD, 12},{0x1BFD, 14},{0x000D, 6},{0x007D, 9},
248
{0x02FC, 11},{0x05FC, 12},{0x1BFC, 14},{0x1DFC, 14},
249
{0x001C, 7},{0x017C, 10},{0x02FD, 11},{0x05FD, 12},
250
{0x2FFC, 15},{0x001D, 7},{0x017D, 10},{0x037C, 11},
251
{0x0DFD, 13},{0x2FFD, 15},{0x003C, 8},{0x01BC, 10},
252
{0x0BFD, 13},{0x17FD, 14},{0x003D, 8},{0x01FD, 11},
253
{0x0DFC, 13},{0x37FC, 15},{0x007C, 9},{0x03FC, 12},
254
{0x00FC, 10},{0x0BFC, 13},{0x00FD, 10},{0x37FD, 15},
255
{0x01FC, 11},{0x07FC, 13},{0x07FD, 13},{0x0FFC, 14},
256
{0x0FFD, 14},{0x17FC, 14},{0x3BFC, 15},
257
{0x000B, 4},{0x0078, 8},{0x03F5, 11},{0x0FEC, 13},
258
{0x1FEC, 14},{0x0012, 5},{0x00ED, 9},{0x07DC, 12},
259
{0x1FED, 14},{0x3BFD, 15},{0x0013, 5},{0x03F8, 11},
260
{0x3DFC, 15},{0x0018, 6},{0x07DD, 12},{0x0019, 6},
261
{0x07EC, 12},{0x0022, 6},{0x0FED, 13},{0x0023, 6},
262
{0x0FF4, 13},{0x0035, 7},{0x0FF5, 13},{0x0038, 7},
263
{0x0FF8, 13},{0x0039, 7},{0x0FF9, 13},{0x0042, 7},
264
{0x1FF4, 14},{0x0043, 7},{0x1FF5, 14},{0x0079, 8},
265
{0x1FF8, 14},{0x0082, 8},{0x3DFD, 15},{0x0083, 8},
266
{0x00F4, 9},{0x00F5, 9},{0x00F8, 9},{0x00F9, 9},
267
{0x0102, 9},{0x0103, 9},{0x01F5, 10},{0x01F8, 10},
268
{0x01F9, 10},{0x0202, 10},{0x0203, 10},{0x03F9, 11},
269
{0x0402, 11},{0x0403, 11},{0x07ED, 12},{0x07F4, 12},
270
{0x07F5, 12},{0x07F8, 12},{0x07F9, 12},{0x0802, 12},
271
{0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
272
{0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
273
{0x3F7C, 15},{0x3F7D, 15},{0x0000, 4}
276
static const uint8_t intra_rvlc_run[169]={
277
0, 0, 0, 0, 0, 0, 0, 0,
278
0, 0, 0, 0, 0, 0, 0, 0,
279
0, 0, 0, 0, 0, 0, 0, 0,
280
0, 0, 0, 1, 1, 1, 1, 1,
281
1, 1, 1, 1, 1, 1, 1, 1,
282
2, 2, 2, 2, 2, 2, 2, 2,
283
2, 2, 2, 3, 3, 3, 3, 3,
284
3, 3, 3, 3, 4, 4, 4, 4,
285
4, 4, 5, 5, 5, 5, 5, 5,
286
6, 6, 6, 6, 6, 7, 7, 7,
287
7, 7, 8, 8, 8, 8, 9, 9,
288
9, 9, 10, 10, 11, 11, 12, 12,
289
13, 14, 15, 16, 17, 18, 19,
290
0, 0, 0, 0, 0, 1, 1, 1,
291
1, 1, 2, 2, 2, 3, 3, 4,
292
4, 5, 5, 6, 6, 7, 7, 8,
293
8, 9, 9, 10, 10, 11, 11, 12,
294
12, 13, 13, 14, 15, 16, 17, 18,
295
19, 20, 21, 22, 23, 24, 25, 26,
296
27, 28, 29, 30, 31, 32, 33, 34,
297
35, 36, 37, 38, 39, 40, 41, 42,
301
static const uint8_t intra_rvlc_level[169]={
302
1, 2, 3, 4, 5, 6, 7, 8,
303
9, 10, 11, 12, 13, 14, 15, 16,
304
17, 18, 19, 20, 21, 22, 23, 24,
305
25, 26, 27, 1, 2, 3, 4, 5,
306
6, 7, 8, 9, 10, 11, 12, 13,
307
1, 2, 3, 4, 5, 6, 7, 8,
308
9, 10, 11, 1, 2, 3, 4, 5,
309
6, 7, 8, 9, 1, 2, 3, 4,
310
5, 6, 1, 2, 3, 4, 5, 6,
311
1, 2, 3, 4, 5, 1, 2, 3,
312
4, 5, 1, 2, 3, 4, 1, 2,
313
3, 4, 1, 2, 1, 2, 1, 2,
315
1, 2, 3, 4, 5, 1, 2, 3,
316
4, 5, 1, 2, 3, 1, 2, 1,
317
2, 1, 2, 1, 2, 1, 2, 1,
318
2, 1, 2, 1, 2, 1, 2, 1,
319
2, 1, 2, 1, 1, 1, 1, 1,
320
1, 1, 1, 1, 1, 1, 1, 1,
321
1, 1, 1, 1, 1, 1, 1, 1,
322
1, 1, 1, 1, 1, 1, 1, 1,
326
static RLTable rvlc_rl_intra = {
334
static const uint16_t sprite_trajectory_tab[15][2] = {
335
{0x00, 2}, {0x02, 3}, {0x03, 3}, {0x04, 3}, {0x05, 3}, {0x06, 3},
336
{0x0E, 4}, {0x1E, 5}, {0x3E, 6}, {0x7E, 7}, {0xFE, 8},
337
{0x1FE, 9},{0x3FE, 10},{0x7FE, 11},{0xFFE, 12},
340
static const uint8_t mb_type_b_tab[4][2] = {
341
{1, 1}, {1, 2}, {1, 3}, {1, 4},
344
static const AVRational pixel_aspect[16]={
363
/* these matrixes will be permuted for the idct */
364
const int16_t ff_mpeg4_default_intra_matrix[64] = {
365
8, 17, 18, 19, 21, 23, 25, 27,
366
17, 18, 19, 21, 23, 25, 27, 28,
367
20, 21, 22, 23, 24, 26, 28, 30,
368
21, 22, 23, 24, 26, 28, 30, 32,
369
22, 23, 24, 26, 28, 30, 32, 35,
370
23, 24, 26, 28, 30, 32, 35, 38,
371
25, 26, 28, 30, 32, 35, 38, 41,
372
27, 28, 30, 32, 35, 38, 41, 45,
375
const int16_t ff_mpeg4_default_non_intra_matrix[64] = {
376
16, 17, 18, 19, 20, 21, 22, 23,
377
17, 18, 19, 20, 21, 22, 23, 24,
378
18, 19, 20, 21, 22, 23, 24, 25,
379
19, 20, 21, 22, 23, 24, 26, 27,
380
20, 21, 22, 23, 25, 26, 27, 28,
381
21, 22, 23, 24, 26, 27, 28, 30,
382
22, 23, 24, 26, 27, 28, 30, 31,
383
23, 24, 25, 27, 28, 30, 31, 33,
386
const uint8_t ff_mpeg4_y_dc_scale_table[32]={
387
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
388
0, 8, 8, 8, 8,10,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,38,40,42,44,46
390
const uint8_t ff_mpeg4_c_dc_scale_table[32]={
391
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
392
0, 8, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,20,21,22,23,24,25
395
const uint16_t ff_mpeg4_resync_prefix[8]={
396
0x7F00, 0x7E00, 0x7C00, 0x7800, 0x7000, 0x6000, 0x4000, 0x0000
399
static const uint8_t mpeg4_dc_threshold[8]={
400
99, 13, 15, 17, 19, 21, 23, 0