* UINTX -> uintx_t INTX -> intx_t
[ffmpeg.git] / libavcodec / mpeg4data.h
1 // shapes
2 #define RECT_SHAPE       0
3 #define BIN_SHAPE        1
4 #define BIN_ONLY_SHAPE   2
5 #define GRAY_SHAPE       3
6
7 #define SIMPLE_VO_TYPE             1
8 #define CORE_VO_TYPE               3
9 #define MAIN_VO_TYPE               4
10 #define NBIT_VO_TYPE               5
11 #define ARTS_VO_TYPE               10
12 #define ACE_VO_TYPE                12
13 #define ADV_SIMPLE_VO_TYPE         17
14
15 // aspect_ratio_info
16 #define EXTENDED_PAR 15
17
18 //vol_sprite_usage / sprite_enable
19 #define STATIC_SPRITE 1
20 #define GMC_SPRITE 2
21
22 #define MOTION_MARKER 0x1F001
23 #define DC_MARKER     0x6B001
24
25 #define MB_TYPE_B_DIRECT 0
26 #define MB_TYPE_B_BIDIR  1
27 #define MB_TYPE_B_BACKW  2
28 #define MB_TYPE_B_FORW   3
29
30 #define VOS_STARTCODE        0x1B0
31 #define USER_DATA_STARTCODE  0x1B2
32 #define GOP_STARTCODE        0x1B3
33 #define VISUAL_OBJ_STARTCODE 0x1B5
34 #define VOP_STARTCODE        0x1B6
35
36 /* dc encoding for mpeg4 */
37 const uint8_t DCtab_lum[13][2] =
38 {
39     {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
40     {1,8}, {1,9}, {1,10}, {1,11},
41 }; 
42
43 const uint8_t DCtab_chrom[13][2] =
44 {
45     {3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8},
46     {1,9}, {1,10}, {1,11}, {1,12},
47 }; 
48
49 const uint16_t intra_vlc[103][2] = {
50 { 0x2, 2 },
51 { 0x6, 3 },{ 0xf, 4 },{ 0xd, 5 },{ 0xc, 5 },
52 { 0x15, 6 },{ 0x13, 6 },{ 0x12, 6 },{ 0x17, 7 },
53 { 0x1f, 8 },{ 0x1e, 8 },{ 0x1d, 8 },{ 0x25, 9 },
54 { 0x24, 9 },{ 0x23, 9 },{ 0x21, 9 },{ 0x21, 10 },
55 { 0x20, 10 },{ 0xf, 10 },{ 0xe, 10 },{ 0x7, 11 },
56 { 0x6, 11 },{ 0x20, 11 },{ 0x21, 11 },{ 0x50, 12 },
57 { 0x51, 12 },{ 0x52, 12 },{ 0xe, 4 },{ 0x14, 6 },
58 { 0x16, 7 },{ 0x1c, 8 },{ 0x20, 9 },{ 0x1f, 9 },
59 { 0xd, 10 },{ 0x22, 11 },{ 0x53, 12 },{ 0x55, 12 },
60 { 0xb, 5 },{ 0x15, 7 },{ 0x1e, 9 },{ 0xc, 10 },
61 { 0x56, 12 },{ 0x11, 6 },{ 0x1b, 8 },{ 0x1d, 9 },
62 { 0xb, 10 },{ 0x10, 6 },{ 0x22, 9 },{ 0xa, 10 },
63 { 0xd, 6 },{ 0x1c, 9 },{ 0x8, 10 },{ 0x12, 7 },
64 { 0x1b, 9 },{ 0x54, 12 },{ 0x14, 7 },{ 0x1a, 9 },
65 { 0x57, 12 },{ 0x19, 8 },{ 0x9, 10 },{ 0x18, 8 },
66 { 0x23, 11 },{ 0x17, 8 },{ 0x19, 9 },{ 0x18, 9 },
67 { 0x7, 10 },{ 0x58, 12 },{ 0x7, 4 },{ 0xc, 6 },
68 { 0x16, 8 },{ 0x17, 9 },{ 0x6, 10 },{ 0x5, 11 },
69 { 0x4, 11 },{ 0x59, 12 },{ 0xf, 6 },{ 0x16, 9 },
70 { 0x5, 10 },{ 0xe, 6 },{ 0x4, 10 },{ 0x11, 7 },
71 { 0x24, 11 },{ 0x10, 7 },{ 0x25, 11 },{ 0x13, 7 },
72 { 0x5a, 12 },{ 0x15, 8 },{ 0x5b, 12 },{ 0x14, 8 },
73 { 0x13, 8 },{ 0x1a, 8 },{ 0x15, 9 },{ 0x14, 9 },
74 { 0x13, 9 },{ 0x12, 9 },{ 0x11, 9 },{ 0x26, 11 },
75 { 0x27, 11 },{ 0x5c, 12 },{ 0x5d, 12 },{ 0x5e, 12 },
76 { 0x5f, 12 },{ 0x3, 7 },
77 };
78
79 const int8_t intra_level[102] = {
80   1,  2,  3,  4,  5,  6,  7,  8,
81   9, 10, 11, 12, 13, 14, 15, 16,
82  17, 18, 19, 20, 21, 22, 23, 24,
83  25, 26, 27,  1,  2,  3,  4,  5,
84   6,  7,  8,  9, 10,  1,  2,  3,
85   4,  5,  1,  2,  3,  4,  1,  2,
86   3,  1,  2,  3,  1,  2,  3,  1,
87   2,  3,  1,  2,  1,  2,  1,  1,
88   1,  1,  1,  1,  2,  3,  4,  5,
89   6,  7,  8,  1,  2,  3,  1,  2,
90   1,  2,  1,  2,  1,  2,  1,  2,
91   1,  1,  1,  1,  1,  1,  1,  1,
92   1,  1,  1,  1,  1,  1,
93 };
94
95 const int8_t intra_run[102] = {
96   0,  0,  0,  0,  0,  0,  0,  0,
97   0,  0,  0,  0,  0,  0,  0,  0,
98   0,  0,  0,  0,  0,  0,  0,  0,
99   0,  0,  0,  1,  1,  1,  1,  1,
100   1,  1,  1,  1,  1,  2,  2,  2,
101   2,  2,  3,  3,  3,  3,  4,  4,
102   4,  5,  5,  5,  6,  6,  6,  7,
103   7,  7,  8,  8,  9,  9, 10, 11,
104  12, 13, 14,  0,  0,  0,  0,  0,
105   0,  0,  0,  1,  1,  1,  2,  2,
106   3,  3,  4,  4,  5,  5,  6,  6,
107   7,  8,  9, 10, 11, 12, 13, 14,
108  15, 16, 17, 18, 19, 20,
109 };
110
111 static RLTable rl_intra = {
112     102,
113     67,
114     intra_vlc,
115     intra_run,
116     intra_level,
117 };
118
119 static const uint16_t sprite_trajectory_tab[15][2] = {
120  {0x00, 2}, {0x02, 3},  {0x03, 3},  {0x04, 3}, {0x05, 3}, {0x06, 3},
121  {0x0E, 4}, {0x1E, 5},  {0x3E, 6},  {0x7E, 7}, {0xFE, 8}, 
122  {0x1FE, 9},{0x3FE, 10},{0x7FE, 11},{0xFFE, 12},
123 };
124
125 static const uint8_t mb_type_b_tab[4][2] = {
126  {1, 1}, {1, 2}, {1, 3}, {1, 4},
127 };
128
129 static const uint16_t pixel_aspect[16][2]={
130  {0, 0},
131  {1, 1},
132  {12, 11},
133  {10, 11},
134  {16, 11},
135  {40, 33},
136  {0, 0},
137  {0, 0},
138  {0, 0},
139  {0, 0},
140  {0, 0},
141  {0, 0},
142  {0, 0},
143  {0, 0},
144  {0, 0},
145  {0, 0},
146 };
147
148 /* these matrixes will be permuted for the idct */
149 const int16_t ff_mpeg4_default_intra_matrix[64] = {
150   8, 17, 18, 19, 21, 23, 25, 27,
151  17, 18, 19, 21, 23, 25, 27, 28,
152  20, 21, 22, 23, 24, 26, 28, 30,
153  21, 22, 23, 24, 26, 28, 30, 32,
154  22, 23, 24, 26, 28, 30, 32, 35,
155  23, 24, 26, 28, 30, 32, 35, 38,
156  25, 26, 28, 30, 32, 35, 38, 41,
157  27, 28, 30, 32, 35, 38, 41, 45, 
158 };
159
160 const int16_t ff_mpeg4_default_non_intra_matrix[64] = {
161  16, 17, 18, 19, 20, 21, 22, 23,
162  17, 18, 19, 20, 21, 22, 23, 24,
163  18, 19, 20, 21, 22, 23, 24, 25,
164  19, 20, 21, 22, 23, 24, 26, 27,
165  20, 21, 22, 23, 25, 26, 27, 28,
166  21, 22, 23, 24, 26, 27, 28, 30,
167  22, 23, 24, 26, 27, 28, 30, 31,
168  23, 24, 25, 27, 28, 30, 31, 33,
169 };
170
171 uint8_t ff_mpeg4_y_dc_scale_table[32]={
172 //  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
173     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
174 };
175 uint8_t ff_mpeg4_c_dc_scale_table[32]={
176 //  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
177     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
178 };
179
180 const uint16_t ff_mpeg4_resync_prefix[8]={
181     0x7F00, 0x7E00, 0x7C00, 0x7800, 0x7000, 0x6000, 0x4000, 0x0000
182 };