6 /* type definitions for variable length code table entries */
10 U_Int code
; /* right justified */
15 /* DC prediction sizes */
17 static VLCtable DCtab_lum
[13] =
19 {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
20 {1,8}, {1,9}, {1,10}, {1,11}
23 static VLCtable DCtab_chrom
[13] =
25 {3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8},
26 {1,9}, {1,10}, {1,11}, {1,12}
32 static VLCtable mvtab
[33] =
34 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
35 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
36 {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
37 {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
42 /* MCBPC Indexing by cbpc in first two bits, mode in last two.
43 CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10.
44 Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */
46 static VLCtable mcbpc_intra_tab
[15] =
48 {0x01,9}, {0x01,1}, {0x01,4}, {0x00,0},
49 {0x00,0}, {0x01,3}, {0x01,6}, {0x00,0},
50 {0x00,0}, {0x02,3}, {0x02,6}, {0x00,0},
51 {0x00,0}, {0x03,3}, {0x03,6}
56 Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */
58 static VLCtable mcbpc_inter_tab
[29] =
60 {1,1}, {3,3}, {2,3}, {3,5}, {4,6}, {1,9}, {0,0}, {0,0},
61 {3,4}, {7,7}, {5,7}, {4,8}, {4,9}, {0,0}, {0,0}, {0,0},
62 {2,4}, {6,7}, {4,7}, {3,8}, {3,9}, {0,0}, {0,0}, {0,0},
63 {5,6}, {5,9}, {5,8}, {3,7}, {2,9}
66 static VLCtable mcbpc_sprite_tab
[31] =
68 {1,1}, {0,12}, {2,3}, {3,5}, {4,6}, {3,3}, {12,4}, {1,9},
69 {3,4}, {1,12}, {5,7}, {4,8}, {4,9}, {7,7}, {12,5}, {0,0},
70 {2,4}, {2,12}, {4,7}, {3,8}, {3,9}, {6,7}, {12,6}, {0,0},
71 {5,6}, {3,12}, {5,8}, {3,7}, {2,9}, {5,9}, {12,7}
74 /* MODB table, MW 18-MAY-1998 */
76 static VLCtable modb_tab
[3] =
82 /* MCBPC for separate mode */
84 static VLCtable mcbpc_sep_tab
[9] =
86 {1,1}, {1,3}, {2,3}, {3,3}, {1,4}, {1,6}, {2,6}, {3,6}, {1,9}
90 /* CBPY. Straightforward indexing */
92 static VLCtable cbpy_tab
[16] =
94 {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
95 {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
98 static VLCtable cbpy_tab3
[8] =
100 {3,3},{1,6},{1,5},{2,3},{2,5},{3,5},{1,3},{1,1}
102 static VLCtable cbpy_tab2
[4] =
104 {1,4},{1,3},{1,2},{1,1}
108 /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
109 the sign bit must be added afterwards. */
111 /* first part of coeffs for last = 0. Indexed by [run][level-1] */
113 static VLCtable coeff_tab0
[2][12] =
117 {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7},
118 {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21,10},
119 {0x20,10}, {0x07,11}, {0x06,11}, {0x20,11}
123 {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f,10},
124 {0x21,11}, {0x50,12}, {0x00, 0}, {0x00, 0},
125 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
129 /* rest of coeffs for last = 0. indexing by [run-2][level-1] */
131 static VLCtable coeff_tab1
[25][4] =
135 {0x0e, 4}, {0x1d, 8}, {0x0e,10}, {0x51,12}
139 {0x0d, 5}, {0x23, 9}, {0x0d,10}, {0x00, 0}
143 {0x0c, 5}, {0x22, 9}, {0x52,12}, {0x00, 0}
146 {0x0b, 5}, {0x0c,10}, {0x53,12}, {0x00, 0}
149 {0x13, 6}, {0x0b,10}, {0x54,12}, {0x00, 0}
152 {0x12, 6}, {0x0a,10}, {0x00, 0}, {0x00, 0}
155 {0x11, 6}, {0x09,10}, {0x00, 0}, {0x00, 0}
158 {0x10, 6}, {0x08,10}, {0x00, 0}, {0x00, 0}
161 {0x16, 7}, {0x55,12}, {0x00, 0}, {0x00, 0}
164 {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
167 {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
170 {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
173 {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
176 {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
179 {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
182 {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
185 {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
188 {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
191 {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
194 {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
197 {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
200 {0x22,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
203 {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
206 {0x56,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
209 {0x57,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
213 /* first coeffs of last = 1. indexing by [run][level-1] */
215 static VLCtable coeff_tab2
[2][3] =
219 {0x07, 4}, {0x19, 9}, {0x05,11}
223 {0x0f, 6}, {0x04,11}, {0x00, 0}
227 /* rest of coeffs for last = 1. indexing by [run-2] */
229 static VLCtable coeff_tab3
[40] =
231 {0x0e, 6}, {0x0d, 6}, {0x0c, 6},
232 {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7},
233 {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8},
234 {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8},
235 {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9},
236 {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
237 {0x07,10}, {0x06,10}, {0x05,10}, {0x04,10},
238 {0x24,11}, {0x25,11}, {0x26,11}, {0x27,11},
239 {0x58,12}, {0x59,12}, {0x5a,12}, {0x5b,12},
240 {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12},
244 /* New tables for Intra luminance coefficients. Same codewords,
247 /* Coeffs for last = 0, run = 0. Indexed by [level-1] */
249 static VLCtable coeff_tab4
[27] =
252 {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5},
253 {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6},
254 {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8},
255 {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9},
256 {0x21,10}, {0x20,10}, {0x0f,10}, {0x0e,10},
257 {0x07,11}, {0x06,11}, {0x20,11}, {0x21,11},
258 {0x50,12}, {0x51,12}, {0x52,12}
261 /* Coeffs for last = 0, run = 1. Indexed by [level-1] */
263 static VLCtable coeff_tab5
[10] =
265 {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8},
266 {0x20, 9}, {0x1f, 9}, {0x0d,10}, {0x22,11},
270 /* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */
272 static VLCtable coeff_tab6
[8][5] =
276 {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c,10},
281 {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b,10},
286 {0x10, 6}, {0x22, 9}, {0x0a,10}, {0x00, 0},
291 {0x0d, 6}, {0x1c, 9}, {0x08,10}, {0x00, 0},
296 {0x12, 7}, {0x1b, 9}, {0x54,12}, {0x00, 0},
301 {0x14, 7}, {0x1a, 9}, {0x57,12}, {0x00, 0},
306 {0x19, 8}, {0x09,10}, {0x00, 0}, {0x00, 0},
311 {0x18, 8}, {0x23,11}, {0x00, 0}, {0x00, 0},
316 /* Coeffs for last = 0, run = 10 -> 14. Indexed by [run-10] */
318 static VLCtable coeff_tab7
[5] =
320 {0x17, 8}, {0x19, 9}, {0x18, 9}, {0x07,10},
324 /* Coeffs for last = 1, run = 0. Indexed by [level-1] */
326 static VLCtable coeff_tab8
[8] =
328 {0x07, 4}, {0x0c, 6}, {0x16, 8}, {0x17, 9},
329 {0x06,10}, {0x05,11}, {0x04,11}, {0x59,12}
332 /* Coeffs for last = 1, run = 1 -> 6. Indexed by [run-1][level-1] */
334 static VLCtable coeff_tab9
[6][3] =
338 {0x0f, 6}, {0x16, 9}, {0x05,10}
342 {0x0e, 6}, {0x04,10}, {0x00, 0}
346 {0x11, 7}, {0x24,11}, {0x00, 0}
350 {0x10, 7}, {0x25,11}, {0x00, 0}
354 {0x13, 7}, {0x5a,12}, {0x00, 0}
358 {0x15, 8}, {0x5b,12}, {0x00, 0}
362 /* Coeffs for last = 1, run = 7 -> 20. Indexed by [run-7] */
364 static VLCtable coeff_tab10
[14] =
366 {0x14, 8}, {0x13, 8}, {0x1a, 8}, {0x15, 9},
367 {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
368 {0x26,11}, {0x27,11}, {0x5c,12}, {0x5d,12},
375 /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
376 the sign bit must be added afterwards. */
378 /* DCT coeffs (intra) for last = 0. */
380 /* Indexed by [level-1] */
382 static VLCtable coeff_RVLCtab1
[27] =
415 /* Indexed by [level-1] */
417 static VLCtable coeff_RVLCtab2
[13] =
436 /* Indexed by [level-1] */
438 static VLCtable coeff_RVLCtab3
[11] =
455 /* Indexed by [level-1] */
457 static VLCtable coeff_RVLCtab4
[9] =
472 /* Indexed by [run-4][level-1] */
474 static VLCtable coeff_RVLCtab5
[2][6] =
497 /* Indexed by [run-6][level-1] */
499 static VLCtable coeff_RVLCtab6
[2][5] =
520 /* Indexed by [run-8][level-1] */
522 static VLCtable coeff_RVLCtab7
[2][4] =
541 /* Indexed by [run-10][level-1] */
543 static VLCtable coeff_RVLCtab8
[3][2] =
563 /* Indexed by [level-1] */
565 static VLCtable coeff_RVLCtab9
[7] =
578 /* first coeffs of last = 1. indexing by [run][level-1] */
580 static VLCtable coeff_RVLCtab10
[2][5] =
601 static VLCtable coeff_RVLCtab11
[3] =
610 static VLCtable coeff_RVLCtab12
[11][2] =
670 static VLCtable coeff_RVLCtab13
[32] =
707 /* Coeffs for last = 0, run = 0. Indexed by [level-1] */
709 static VLCtable coeff_RVLCtab14
[19] =
733 static VLCtable coeff_RVLCtab15
[10] =
748 static VLCtable coeff_RVLCtab16
[2][7] =
772 static VLCtable coeff_RVLCtab17
[5] =
782 static VLCtable coeff_RVLCtab18
[3][4] =
807 static VLCtable coeff_RVLCtab19
[2][3] =
823 static VLCtable coeff_RVLCtab20
[8][2] =
867 static VLCtable coeff_RVLCtab21
[21] =
894 /* first coeffs of last = 1. indexing by [run][level-1] */
896 static VLCtable coeff_RVLCtab22
[2][5] =
916 static VLCtable coeff_RVLCtab23
[3] =
924 static VLCtable coeff_RVLCtab24
[11][2] =
984 static VLCtable coeff_RVLCtab25
[32] =