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