comparison mpeg4data.h @ 10803:4605bd2fdb7f libavcodec

Split the mpeg4 encoder and decoder off h263.c
author michael
date Thu, 07 Jan 2010 23:53:49 +0000
parents e9d9d946f213
children 9abebeca7d1b
comparison
equal deleted inserted replaced
10802:4f614b69b4e5 10803:4605bd2fdb7f
28 #ifndef AVCODEC_MPEG4DATA_H 28 #ifndef AVCODEC_MPEG4DATA_H
29 #define AVCODEC_MPEG4DATA_H 29 #define AVCODEC_MPEG4DATA_H
30 30
31 #include <stdint.h> 31 #include <stdint.h>
32 #include "mpegvideo.h" 32 #include "mpegvideo.h"
33
34 // shapes
35 #define RECT_SHAPE 0
36 #define BIN_SHAPE 1
37 #define BIN_ONLY_SHAPE 2
38 #define GRAY_SHAPE 3
39
40 #define SIMPLE_VO_TYPE 1
41 #define CORE_VO_TYPE 3
42 #define MAIN_VO_TYPE 4
43 #define NBIT_VO_TYPE 5
44 #define ARTS_VO_TYPE 10
45 #define ACE_VO_TYPE 12
46 #define ADV_SIMPLE_VO_TYPE 17
47
48 // aspect_ratio_info
49 #define EXTENDED_PAR 15
50
51 //vol_sprite_usage / sprite_enable
52 #define STATIC_SPRITE 1
53 #define GMC_SPRITE 2
54
55 #define MOTION_MARKER 0x1F001
56 #define DC_MARKER 0x6B001
57
58 static const int mb_type_b_map[4]= {
59 MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
60 MB_TYPE_L0L1 | MB_TYPE_16x16,
61 MB_TYPE_L1 | MB_TYPE_16x16,
62 MB_TYPE_L0 | MB_TYPE_16x16,
63 };
64
65 #define VOS_STARTCODE 0x1B0
66 #define USER_DATA_STARTCODE 0x1B2
67 #define GOP_STARTCODE 0x1B3
68 #define VISUAL_OBJ_STARTCODE 0x1B5
69 #define VOP_STARTCODE 0x1B6
70 33
71 /* dc encoding for mpeg4 */ 34 /* dc encoding for mpeg4 */
72 const uint8_t DCtab_lum[13][2] = 35 const uint8_t DCtab_lum[13][2] =
73 { 36 {
74 {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, 37 {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
141 3, 3, 4, 4, 5, 5, 6, 6, 104 3, 3, 4, 4, 5, 5, 6, 6,
142 7, 8, 9, 10, 11, 12, 13, 14, 105 7, 8, 9, 10, 11, 12, 13, 14,
143 15, 16, 17, 18, 19, 20, 106 15, 16, 17, 18, 19, 20,
144 }; 107 };
145 108
146 static RLTable rl_intra = { 109 RLTable rl_intra = {
147 102, 110 102,
148 67, 111 67,
149 intra_vlc, 112 intra_vlc,
150 intra_run, 113 intra_run,
151 intra_level, 114 intra_level,
152 }; 115 };
153 116
154 /* Note this is identical to the intra rvlc except that it is reordered. */ 117 /* Note this is identical to the intra rvlc except that it is reordered. */
155 static const uint16_t inter_rvlc[170][2]={ 118 const uint16_t inter_rvlc[170][2]={
156 {0x0006, 3},{0x0001, 4},{0x0004, 5},{0x001C, 7}, 119 {0x0006, 3},{0x0001, 4},{0x0004, 5},{0x001C, 7},
157 {0x003C, 8},{0x003D, 8},{0x007C, 9},{0x00FC, 10}, 120 {0x003C, 8},{0x003D, 8},{0x007C, 9},{0x00FC, 10},
158 {0x00FD, 10},{0x01FC, 11},{0x01FD, 11},{0x03FC, 12}, 121 {0x00FD, 10},{0x01FC, 11},{0x01FD, 11},{0x03FC, 12},
159 {0x07FC, 13},{0x07FD, 13},{0x0BFC, 13},{0x0BFD, 13}, 122 {0x07FC, 13},{0x07FD, 13},{0x0BFC, 13},{0x0BFD, 13},
160 {0x0FFC, 14},{0x0FFD, 14},{0x1FFC, 15},{0x0007, 3}, 123 {0x0FFC, 14},{0x0FFD, 14},{0x1FFC, 15},{0x0007, 3},
196 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14}, 159 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
197 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15}, 160 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
198 {0x3F7C, 15},{0x3F7D, 15},{0x0000, 4} 161 {0x3F7C, 15},{0x3F7D, 15},{0x0000, 4}
199 }; 162 };
200 163
201 static const int8_t inter_rvlc_run[169]={ 164 const int8_t inter_rvlc_run[169]={
202 0, 0, 0, 0, 0, 0, 0, 0, 165 0, 0, 0, 0, 0, 0, 0, 0,
203 0, 0, 0, 0, 0, 0, 0, 0, 166 0, 0, 0, 0, 0, 0, 0, 0,
204 0, 0, 0, 1, 1, 1, 1, 1, 167 0, 0, 0, 1, 1, 1, 1, 1,
205 1, 1, 1, 1, 1, 2, 2, 2, 168 1, 1, 1, 1, 1, 2, 2, 2,
206 2, 2, 2, 2, 3, 3, 3, 3, 169 2, 2, 2, 2, 3, 3, 3, 3,
221 27, 28, 29, 30, 31, 32, 33, 34, 184 27, 28, 29, 30, 31, 32, 33, 34,
222 35, 36, 37, 38, 39, 40, 41, 42, 185 35, 36, 37, 38, 39, 40, 41, 42,
223 43, 44, 186 43, 44,
224 }; 187 };
225 188
226 static const int8_t inter_rvlc_level[169]={ 189 const int8_t inter_rvlc_level[169]={
227 1, 2, 3, 4, 5, 6, 7, 8, 190 1, 2, 3, 4, 5, 6, 7, 8,
228 9, 10, 11, 12, 13, 14, 15, 16, 191 9, 10, 11, 12, 13, 14, 15, 16,
229 17, 18, 19, 1, 2, 3, 4, 5, 192 17, 18, 19, 1, 2, 3, 4, 5,
230 6, 7, 8, 9, 10, 1, 2, 3, 193 6, 7, 8, 9, 10, 1, 2, 3,
231 4, 5, 6, 7, 1, 2, 3, 4, 194 4, 5, 6, 7, 1, 2, 3, 4,
246 1, 1, 1, 1, 1, 1, 1, 1, 209 1, 1, 1, 1, 1, 1, 1, 1,
247 1, 1, 1, 1, 1, 1, 1, 1, 210 1, 1, 1, 1, 1, 1, 1, 1,
248 1, 1, 211 1, 1,
249 }; 212 };
250 213
251 static RLTable rvlc_rl_inter = { 214 RLTable rvlc_rl_inter = {
252 169, 215 169,
253 103, 216 103,
254 inter_rvlc, 217 inter_rvlc,
255 inter_rvlc_run, 218 inter_rvlc_run,
256 inter_rvlc_level, 219 inter_rvlc_level,
257 }; 220 };
258 221
259 static const uint16_t intra_rvlc[170][2]={ 222 const uint16_t intra_rvlc[170][2]={
260 {0x0006, 3},{0x0007, 3},{0x000A, 4},{0x0009, 5}, 223 {0x0006, 3},{0x0007, 3},{0x000A, 4},{0x0009, 5},
261 {0x0014, 6},{0x0015, 6},{0x0034, 7},{0x0074, 8}, 224 {0x0014, 6},{0x0015, 6},{0x0034, 7},{0x0074, 8},
262 {0x0075, 8},{0x00DD, 9},{0x00EC, 9},{0x01EC, 10}, 225 {0x0075, 8},{0x00DD, 9},{0x00EC, 9},{0x01EC, 10},
263 {0x01ED, 10},{0x01F4, 10},{0x03EC, 11},{0x03ED, 11}, 226 {0x01ED, 10},{0x01F4, 10},{0x03EC, 11},{0x03ED, 11},
264 {0x03F4, 11},{0x077D, 12},{0x07BC, 12},{0x0FBD, 13}, 227 {0x03F4, 11},{0x077D, 12},{0x07BC, 12},{0x0FBD, 13},
300 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14}, 263 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
301 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15}, 264 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
302 {0x3F7C, 15},{0x3F7D, 15},{0x0000, 4} 265 {0x3F7C, 15},{0x3F7D, 15},{0x0000, 4}
303 }; 266 };
304 267
305 static const int8_t intra_rvlc_run[169]={ 268 const int8_t intra_rvlc_run[169]={
306 0, 0, 0, 0, 0, 0, 0, 0, 269 0, 0, 0, 0, 0, 0, 0, 0,
307 0, 0, 0, 0, 0, 0, 0, 0, 270 0, 0, 0, 0, 0, 0, 0, 0,
308 0, 0, 0, 0, 0, 0, 0, 0, 271 0, 0, 0, 0, 0, 0, 0, 0,
309 0, 0, 0, 1, 1, 1, 1, 1, 272 0, 0, 0, 1, 1, 1, 1, 1,
310 1, 1, 1, 1, 1, 1, 1, 1, 273 1, 1, 1, 1, 1, 1, 1, 1,
325 27, 28, 29, 30, 31, 32, 33, 34, 288 27, 28, 29, 30, 31, 32, 33, 34,
326 35, 36, 37, 38, 39, 40, 41, 42, 289 35, 36, 37, 38, 39, 40, 41, 42,
327 43, 44, 290 43, 44,
328 }; 291 };
329 292
330 static const int8_t intra_rvlc_level[169]={ 293 const int8_t intra_rvlc_level[169]={
331 1, 2, 3, 4, 5, 6, 7, 8, 294 1, 2, 3, 4, 5, 6, 7, 8,
332 9, 10, 11, 12, 13, 14, 15, 16, 295 9, 10, 11, 12, 13, 14, 15, 16,
333 17, 18, 19, 20, 21, 22, 23, 24, 296 17, 18, 19, 20, 21, 22, 23, 24,
334 25, 26, 27, 1, 2, 3, 4, 5, 297 25, 26, 27, 1, 2, 3, 4, 5,
335 6, 7, 8, 9, 10, 11, 12, 13, 298 6, 7, 8, 9, 10, 11, 12, 13,
350 1, 1, 1, 1, 1, 1, 1, 1, 313 1, 1, 1, 1, 1, 1, 1, 1,
351 1, 1, 1, 1, 1, 1, 1, 1, 314 1, 1, 1, 1, 1, 1, 1, 1,
352 1, 1, 315 1, 1,
353 }; 316 };
354 317
355 static RLTable rvlc_rl_intra = { 318 RLTable rvlc_rl_intra = {
356 169, 319 169,
357 103, 320 103,
358 intra_rvlc, 321 intra_rvlc,
359 intra_rvlc_run, 322 intra_rvlc_run,
360 intra_rvlc_level, 323 intra_rvlc_level,
361 }; 324 };
362 325
363 static const uint16_t sprite_trajectory_tab[15][2] = { 326 const uint16_t sprite_trajectory_tab[15][2] = {
364 {0x00, 2}, {0x02, 3}, {0x03, 3}, {0x04, 3}, {0x05, 3}, {0x06, 3}, 327 {0x00, 2}, {0x02, 3}, {0x03, 3}, {0x04, 3}, {0x05, 3}, {0x06, 3},
365 {0x0E, 4}, {0x1E, 5}, {0x3E, 6}, {0x7E, 7}, {0xFE, 8}, 328 {0x0E, 4}, {0x1E, 5}, {0x3E, 6}, {0x7E, 7}, {0xFE, 8},
366 {0x1FE, 9},{0x3FE, 10},{0x7FE, 11},{0xFFE, 12}, 329 {0x1FE, 9},{0x3FE, 10},{0x7FE, 11},{0xFFE, 12},
367 }; 330 };
368 331
369 static const uint8_t mb_type_b_tab[4][2] = { 332 const uint8_t mb_type_b_tab[4][2] = {
370 {1, 1}, {1, 2}, {1, 3}, {1, 4}, 333 {1, 1}, {1, 2}, {1, 3}, {1, 4},
371 };
372
373 static const AVRational pixel_aspect[16]={
374 {0, 1},
375 {1, 1},
376 {12, 11},
377 {10, 11},
378 {16, 11},
379 {40, 33},
380 {0, 1},
381 {0, 1},
382 {0, 1},
383 {0, 1},
384 {0, 1},
385 {0, 1},
386 {0, 1},
387 {0, 1},
388 {0, 1},
389 {0, 1},
390 }; 334 };
391 335
392 /* these matrixes will be permuted for the idct */ 336 /* these matrixes will be permuted for the idct */
393 const int16_t ff_mpeg4_default_intra_matrix[64] = { 337 const int16_t ff_mpeg4_default_intra_matrix[64] = {
394 8, 17, 18, 19, 21, 23, 25, 27, 338 8, 17, 18, 19, 21, 23, 25, 27,
423 367
424 const uint16_t ff_mpeg4_resync_prefix[8]={ 368 const uint16_t ff_mpeg4_resync_prefix[8]={
425 0x7F00, 0x7E00, 0x7C00, 0x7800, 0x7000, 0x6000, 0x4000, 0x0000 369 0x7F00, 0x7E00, 0x7C00, 0x7800, 0x7000, 0x6000, 0x4000, 0x0000
426 }; 370 };
427 371
428 static const uint8_t mpeg4_dc_threshold[8]={ 372 const uint8_t mpeg4_dc_threshold[8]={
429 99, 13, 15, 17, 19, 21, 23, 0 373 99, 13, 15, 17, 19, 21, 23, 0
430 }; 374 };
431 375
432 #endif /* AVCODEC_MPEG4DATA_H */ 376 #endif /* AVCODEC_MPEG4DATA_H */