added mvd_params.
[swftools.git] / lib / h.263 / h263tables.c
1 struct huffcode {
2     char*code;
3     int len;
4     int index;
5 };
6
7 #define MCBPC_INTRA_STUFFING 8
8
9 struct huffcode mcbpc_intra[] = {
10 {"1",1, 0},              /*cbpc-00 mb type 3*/
11 {"001",3, 1},         /*cbpc-01 mb type 3*/
12 {"010",3, 2},         /*cbpc-10 mb type 3*/
13 {"011",3, 3},         /*cbpc-11 mb type 3*/
14 {"0001",4, 4},        /*cbpc-00 mb type 4*/
15 {"000001",6, 5},      /*cbpc-01 mb type 4*/
16 {"000010",6, 6},      /*cbpc-10 mb type 4*/
17 {"000011",6, 7},      /*cbpc-11 mb type 4*/
18 {"000000001",9, 8},   /* stuffing */
19 {0,0,0},
20 };
21
22 struct mcbpc_intra_params
23 {
24     int index;
25     int mb_type;
26     int cbpc;
27 } mcbpc_intra_params[] =
28 {{0, 3, 0}, //00 
29  {1, 3, 1}, //01 
30  {2, 3, 2}, //10 
31  {3, 3, 3}, //11 
32  {4, 4, 0}, //00 
33  {5, 4, 1}, //01 
34  {6, 4, 2}, //10 
35  {7, 4, 3}, //11 
36  {8 -1, -1}
37 };
38
39 #define MCBPC_INTER_STUFFING 20
40
41 struct huffcode mcbpc_inter[] = {
42 {"1", 1, 0},
43 {"0011", 4, 1},
44 {"0010", 4 ,2},
45 {"000101", 6, 3},
46 {"011", 3, 4},
47 {"0000111", 7, 5},
48 {"0000110", 7, 6},
49 {"000000101", 9, 7},
50 {"010", 3, 8},
51 {"0000101", 7, 9},
52 {"0000100", 7, 10},
53 {"00000101", 8, 11},
54 {"00011", 5, 12},
55 {"00000100", 8, 13},
56 {"00000011", 8, 14},
57 {"0000011", 7, 15},
58 {"000100", 6, 16},
59 {"000000100", 9, 17},
60 {"000000011", 9, 18},
61 {"000000010", 9, 19},
62 {"000000001", 9, 20}, /*stuffing*/
63
64 /* h.263+ only
65 {"00000000010", 11, 21},
66 {"0000000001100", 13, 22},
67 {"0000000001110", 13, 23},
68 {"0000000001111", 13, 24},
69 */
70 {0,0,0}
71 };
72
73 struct mcbpc_inter_params
74 {
75     int index;
76     int mb_type;
77     int cbpc;
78 } mcbpc_inter_params[] =
79 { {0, 0, 0},  {1, 0, 1},  {2, 0, 2},  {3, 0, 3}, 
80   {4, 1, 0},  {5, 1, 1},  {6, 1, 2},  {7, 1, 3}, 
81   {8, 2, 0},  {9, 2, 1}, {10, 2, 2}, {11, 2, 3}, 
82  {12, 3, 0}, {13, 3, 1}, {14, 3, 2}, {15, 3, 3}, 
83  {16, 4, 0}, {17, 4, 1}, {18, 4, 2}, {19, 4, 3},
84  {20, -1, -1}, //stuffing
85  //{21, 5, 0}, {22, 5, 1}, {23, 5, 2}, {24, 5, 3}, //h.263+ only
86 };
87
88 struct huffcode cbpy[] = {
89 {"0011", 4, 0},
90 {"00101", 5, 1},
91 {"00100", 5, 2},
92 {"1001", 4, 3},
93 {"00011", 5, 4},
94 {"0111", 4, 5},
95 {"000010", 6, 6},
96 {"1011", 4, 7},
97 {"00010", 5, 8},
98 {"000011", 6, 9},
99 {"0101", 4, 10},
100 {"1010", 4, 11},
101 {"0100", 4, 12},
102 {"1000", 4, 13},
103 {"0110", 4, 14},
104 {"11", 2, 15},
105 {0,0,0}
106 };
107
108 struct huffcode mvd[] = 
109 {
110 {"0000000000101", 13, 0},
111 {"0000000000111", 13, 1},
112 {"000000000101", 12, 2},
113 {"000000000111", 12, 3},
114 {"000000001001", 12, 4},
115 {"000000001011", 12, 5},
116 {"000000001101", 12, 6},
117 {"000000001111", 12, 7},
118 {"00000001001", 11, 8},
119 {"00000001011", 11, 9},
120 {"00000001101", 11, 10},
121 {"00000001111", 11, 11},
122 {"00000010001", 11, 12},
123 {"00000010011", 11, 13},
124 {"00000010101", 11, 14},
125 {"00000010111", 11, 15},
126 {"00000011001", 11, 16},
127 {"00000011011", 11, 17},
128 {"00000011101", 11, 18},
129 {"00000011111", 11, 19},
130 {"00000100001", 11, 20},
131 {"00000100011", 11, 21},
132 {"0000010011", 10, 22},
133 {"0000010101", 10, 23},
134 {"0000010111", 10, 24},
135 {"00000111", 8, 25},
136 {"00001001", 8, 26},
137 {"00001011", 8, 27},
138 {"0000111", 7, 28},
139 {"00011", 5, 29},
140 {"0011", 4, 30},
141 {"011", 3, 31},
142 {"1", 1, 32},
143 {"010", 3, 33},
144 {"0010", 4, 34},
145 {"00010", 5, 35},
146 {"0000110", 7, 36},
147 {"00001010", 8, 37},
148 {"00001000", 8, 38},
149 {"00000110", 8, 39},
150 {"0000010110", 10, 40},
151 {"0000010100", 10, 41},
152 {"0000010010", 10, 42},
153 {"00000100010", 11, 43},
154 {"00000100000", 11, 44},
155 {"00000011110", 11, 45},
156 {"00000011100", 11, 46},
157 {"00000011010", 11, 47},
158 {"00000011000", 11, 48},
159 {"00000010110", 11, 49},
160 {"00000010100", 11, 50},
161 {"00000010010", 11, 51},
162 {"00000010000", 11, 52},
163 {"00000001110", 11, 53},
164 {"00000001100", 11, 54},
165 {"00000001010", 11, 55},
166 {"00000001000", 11, 56},
167 {"000000001110", 12, 57},
168 {"000000001100", 12, 58},
169 {"000000001010", 12, 59},
170 {"000000001000", 12, 60},
171 {"000000000110", 12, 61},
172 {"000000000100", 12, 62},
173 {"0000000000110", 13, 63},
174 {0,0,0}};
175
176 struct mvd_params
177 {
178     int index;
179     float v1,v2; /*TODO: should be ints */
180 } mvd_params[] =
181 {
182 {0, -16, 16},
183 {1, -15.5, 16.5},
184 {2, -15, 17},
185 {3, -14.5, 17.5},
186 {4, -14, 18},
187 {5, -13.5, 18.5},
188 {6, -13, 19},
189 {7, -12.5, 19.5},
190 {8, -12, 20},
191 {9, -11.5, 20.5},
192 {10, -11, 21},
193 {11, -10.5, 21.5},
194 {12, -10, 22},
195 {13, -9.5, 22.5},
196 {14, -9, 23},
197 {15, -8.5, 23.5},
198 {16, -8, 24},
199 {17, -7.5, 24.5},
200 {18, -7, 25},
201 {19, -6.5, 25.5},
202 {20, -6, 26},
203 {21, -5.5, 26.5},
204 {22, -5, 27},
205 {23, -4.5, 27.5},
206 {24, -4, 28},
207 {25, -3.5, 28.5},
208 {26, -3, 29},
209 {27, -2.5, 29.5},
210 {28, -2, 30},
211 {29, -1.5, 30.5},
212 {30, -1, 31},
213 {31, -0.5, 31.5},
214 {32, 0, 0},
215 {33, 0.5, -31.5},
216 {34, 1, -31},
217 {35, 1.5, -30.5},
218 {36, 2, -30},
219 {37, 2.5, -29.5},
220 {38, 3, -29},
221 {39, 3.5, -28.5},
222 {40, 4, -28},
223 {41, 4.5, -27.5},
224 {42, 5, -27},
225 {43, 5.5, -26.5},
226 {44, 6, -26},
227 {45, 6.5, -25.5},
228 {46, 7, -25},
229 {47, 7.5, -24.5},
230 {48, 8, -24},
231 {49, 8.5, -23.5},
232 {50, 9, -23},
233 {51, 9.5, -22.5},
234 {52, 10, -22},
235 {53, 10.5, -21.5},
236 {54, 11, -21},
237 {55, 11.5, -20.5},
238 {56, 12, -20},
239 {57, 12.5, -19.5},
240 {58, 13, -19},
241 {59, 13.5, -18.5},
242 {60, 14, -18},
243 {61, 14.5, -17.5},
244 {62, 15, -17},
245 {63, 15.5, -16.5}
246 };
247
248
249 struct huffcode rle[] = 
250 {
251 {"10", 2, 0},
252 {"1111", 4, 1},
253 {"010101", 6, 2},
254 {"0010111", 7, 3},
255 {"00011111", 8, 4},
256 {"000100101", 9, 5},
257 {"000100100", 9, 6},
258 {"0000100001", 10, 7},
259 {"0000100000", 10, 8},
260 {"00000000111", 11, 9},
261 {"00000000110", 11, 10},
262 {"00000100000", 11, 11},
263 {"110", 3, 12},
264 {"010100", 6, 13},
265 {"00011110", 8, 14},
266 {"0000001111", 10, 15},
267 {"00000100001", 11, 16},
268 {"000001010000", 12, 17},
269 {"1110", 4, 18},
270 {"00011101", 8, 19},
271 {"0000001110", 10, 20},
272 {"000001010001", 12, 21},
273 {"01101", 5, 22},
274 {"000100011", 9, 23},
275 {"0000001101", 10, 24},
276 {"01100", 5, 25},
277 {"000100010", 9, 26},
278 {"000001010010", 12, 27},
279 {"01011", 5, 28},
280 {"0000001100", 10, 29},
281 {"000001010011", 12, 30},
282 {"010011", 6, 31},
283 {"0000001011", 10, 32},
284 {"000001010100", 12, 33},
285 {"010010", 6, 34},
286 {"0000001010", 10, 35},
287 {"010001", 6, 36},
288 {"0000001001", 10, 37},
289 {"010000", 6, 38},
290 {"0000001000", 10, 39},
291 {"0010110", 7, 40},
292 {"000001010101", 12, 41},
293 {"0010101", 7, 42},
294 {"0010100", 7, 43},
295 {"00011100", 8, 44},
296 {"00011011", 8, 45},
297 {"000100001", 9, 46},
298 {"000100000", 9, 47},
299 {"000011111", 9, 48},
300 {"000011110", 9, 49},
301 {"000011101", 9, 50},
302 {"000011100", 9, 51},
303 {"000011011", 9, 52},
304 {"000011010", 9, 53},
305 {"00000100010", 11, 54},
306 {"00000100011", 11, 55},
307 {"000001010110", 12, 56},
308 {"000001010111", 12, 57},
309 {"0111", 4, 58},
310 {"000011001", 9, 59},
311 {"00000000101", 11, 60},
312 {"001111", 6, 61},
313 {"00000000100", 11, 62},
314 {"001110", 6, 63},
315 {"001101", 6, 64},
316 {"001100", 6, 65},
317 {"0010011", 7, 66},
318 {"0010010", 7, 67},
319 {"0010001", 7, 68},
320 {"0010000", 7, 69},
321 {"00011010", 8, 70},
322 {"00011001", 8, 71},
323 {"00011000", 8, 72},
324 {"00010111", 8, 73},
325 {"00010110", 8, 74},
326 {"00010101", 8, 75},
327 {"00010100", 8, 76},
328 {"00010011", 8, 77},
329 {"000011000", 9, 78},
330 {"000010111", 9, 79},
331 {"000010110", 9, 80},
332 {"000010101", 9, 81},
333 {"000010100", 9, 82},
334 {"000010011", 9, 83},
335 {"000010010", 9, 84},
336 {"000010001", 9, 85},
337 {"0000000111", 10, 86},
338 {"0000000110", 10, 87},
339 {"0000000101", 10, 88},
340 {"0000000100", 10, 89},
341 {"00000100100", 11, 90},
342 {"00000100101", 11, 91},
343 {"00000100110", 11, 92},
344 {"00000100111", 11, 93},
345 {"000001011000", 12, 94},
346 {"000001011001", 12, 95},
347 {"000001011010", 12, 96},
348 {"000001011011", 12, 97},
349 {"000001011100", 12, 98},
350 {"000001011101", 12, 99},
351 {"000001011110", 12, 100},
352 {"000001011111", 12, 101},
353 {"0000011", 7, 102}, /*ESCAPE*/
354 {0,0,0}
355 };
356
357 #define RLE_ESCAPE 102
358
359 struct rle_params
360 {
361     int index;
362     int last;
363     int run;
364     int level;
365 } rle_params[] =
366 {{0,0,0,1}, {1,0,0,2}, {2,0,0,3}, {3,0,0,4}, {4,0,0,5}, {5,0,0,6}, {6,0,0,7},
367 {7,0,0,8}, {8,0,0,9}, {9,0,0,10}, {10,0,0,11}, {11,0,0,12}, {12,0,1,1}, {13,0,1,2},
368 {14,0,1,3}, {15,0,1,4}, {16,0,1,5}, {17,0,1,6}, {18,0,2,1}, {19,0,2,2}, {20,0,2,3}, {21,0,2,4},
369 {22,0,3,1}, {23,0,3,2}, {24,0,3,3}, {25,0,4,1}, {26,0,4,2}, {27,0,4,3}, {28,0,5,1},
370 {29,0,5,2}, {30,0,5,3}, {31,0,6,1}, {32,0,6,2}, {33,0,6,3},
371 {34,0,7,1}, {35,0,7,2}, {36,0,8,1}, {37,0,8,2}, {38,0,9,1}, {39,0,9,2}, {40,0,10,1}, 
372 {41,0,10,2}, {42,0,11,1}, {43,0,12,1}, {44,0,13,1}, {45,0,14,1}, {46,0,15,1}, 
373 {47,0,16,1}, {48,0,17,1}, {49,0,18,1}, {50,0,19,1}, {51,0,20,1}, {52,0,21,1}, 
374 {53,0,22,1}, {54,0,23,1}, {55,0,24,1}, {56,0,25,1}, {57,0,26,1}, 
375 {58,1,0,1}, {59,1,0,2}, {60,1,0,3}, {61,1,1,1}, {62,1,1,2}, {63,1,2,1}, {64,1,3,1}, {65, 1,4,1}, 
376 {66,1,5,1}, {67,1,6,1}, {68,1,7,1}, {69,1,8,1}, {70,1,9,1}, {71,1,10,1}, 
377 {72,1,11,1}, {73,1,12,1}, {74,1,13,1}, {75,1,14,1}, {76,1,15,1}, {77,1,16,1}, 
378 {78,1,17,1}, {79,1,18,1}, {80,1,19,1}, {81,1,20,1}, {82,1,21,1}, {83,1,22,1}, 
379 {84,1,23,1}, {85,1,24,1}, {86,1,25,1}, {87,1,26,1}, {88,1,27,1}, {89,1,28,1}, 
380 {90,1,29,1}, {91,1,30,1}, {92,1,31,1}, {93,1,32,1}, {94,1,33,1}, {95,1,34,1}, 
381 {96,1,35,1}, {97,1,36,1}, {98,1,37,1}, {99,1,38,1}, {100,1,39,1}, {101,1,40,1}, 
382 {102,-1, -1, -1}
383 };
384