bbbf3a550ad15245dcabe5611c9cb0690186d4af
[ffmpeg.git] / libavcodec / msmpeg4data.h
1 /*
2  * MSMPEG4 backend for ffmpeg encoder and decoder
3  * copyright (c) 2001 Fabrice Bellard
4  * copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  *
22  * msmpeg4v1 & v2 stuff by Michael Niedermayer <michaelni@gmx.at>
23  */
24
25 /**
26  * @file msmpeg4data.h
27  * MSMPEG4 data tables.
28  */
29
30 /* intra picture macro block coded block pattern */
31 const uint16_t ff_msmp4_mb_i_table[64][2] = {
32 { 0x1, 1 },{ 0x17, 6 },{ 0x9, 5 },{ 0x5, 5 },
33 { 0x6, 5 },{ 0x47, 9 },{ 0x20, 7 },{ 0x10, 7 },
34 { 0x2, 5 },{ 0x7c, 9 },{ 0x3a, 7 },{ 0x1d, 7 },
35 { 0x2, 6 },{ 0xec, 9 },{ 0x77, 8 },{ 0x0, 8 },
36 { 0x3, 5 },{ 0xb7, 9 },{ 0x2c, 7 },{ 0x13, 7 },
37 { 0x1, 6 },{ 0x168, 10 },{ 0x46, 8 },{ 0x3f, 8 },
38 { 0x1e, 6 },{ 0x712, 13 },{ 0xb5, 9 },{ 0x42, 8 },
39 { 0x22, 7 },{ 0x1c5, 11 },{ 0x11e, 10 },{ 0x87, 9 },
40 { 0x6, 4 },{ 0x3, 9 },{ 0x1e, 7 },{ 0x1c, 6 },
41 { 0x12, 7 },{ 0x388, 12 },{ 0x44, 9 },{ 0x70, 9 },
42 { 0x1f, 6 },{ 0x23e, 11 },{ 0x39, 8 },{ 0x8e, 9 },
43 { 0x1, 7 },{ 0x1c6, 11 },{ 0xb6, 9 },{ 0x45, 9 },
44 { 0x14, 6 },{ 0x23f, 11 },{ 0x7d, 9 },{ 0x18, 9 },
45 { 0x7, 7 },{ 0x1c7, 11 },{ 0x86, 9 },{ 0x19, 9 },
46 { 0x15, 6 },{ 0x1db, 10 },{ 0x2, 9 },{ 0x46, 9 },
47 { 0xd, 8 },{ 0x713, 13 },{ 0x1da, 10 },{ 0x169, 10 },
48 };
49
50 /* non intra picture macro block coded block pattern + mb type */
51 static const uint32_t table_mb_non_intra[128][2] = {
52 { 0x40, 7 },{ 0x13c9, 13 },{ 0x9fd, 12 },{ 0x1fc, 15 },
53 { 0x9fc, 12 },{ 0xa83, 18 },{ 0x12d34, 17 },{ 0x83bc, 16 },
54 { 0x83a, 12 },{ 0x7f8, 17 },{ 0x3fd, 16 },{ 0x3ff, 16 },
55 { 0x79, 13 },{ 0xa82, 18 },{ 0x969d, 16 },{ 0x2a4, 16 },
56 { 0x978, 12 },{ 0x543, 17 },{ 0x41df, 15 },{ 0x7f9, 17 },
57 { 0x12f3, 13 },{ 0x25a6b, 18 },{ 0x25ef9, 18 },{ 0x3fa, 16 },
58 { 0x20ee, 14 },{ 0x969ab, 20 },{ 0x969c, 16 },{ 0x25ef8, 18 },
59 { 0x12d2, 13 },{ 0xa85, 18 },{ 0x969e, 16 },{ 0x4bc8, 15 },
60 { 0x3d, 12 },{ 0x12f7f, 17 },{ 0x2a2, 16 },{ 0x969f, 16 },
61 { 0x25ee, 14 },{ 0x12d355, 21 },{ 0x12f7d, 17 },{ 0x12f7e, 17 },
62 { 0x9e5, 12 },{ 0xa81, 18 },{ 0x4b4d4, 19 },{ 0x83bd, 16 },
63 { 0x78, 13 },{ 0x969b, 16 },{ 0x3fe, 16 },{ 0x2a5, 16 },
64 { 0x7e, 13 },{ 0xa80, 18 },{ 0x2a3, 16 },{ 0x3fb, 16 },
65 { 0x1076, 13 },{ 0xa84, 18 },{ 0x153, 15 },{ 0x4bc9, 15 },
66 { 0x55, 13 },{ 0x12d354, 21 },{ 0x4bde, 15 },{ 0x25e5, 14 },
67 { 0x25b, 10 },{ 0x4b4c, 15 },{ 0x96b, 12 },{ 0x96a, 12 },
68 { 0x1, 2 },{ 0x0, 7 },{ 0x26, 6 },{ 0x12b, 9 },
69 { 0x7, 3 },{ 0x20f, 10 },{ 0x4, 9 },{ 0x28, 12 },
70 { 0x6, 3 },{ 0x20a, 10 },{ 0x128, 9 },{ 0x2b, 12 },
71 { 0x11, 5 },{ 0x1b, 11 },{ 0x13a, 9 },{ 0x4ff, 11 },
72 { 0x3, 4 },{ 0x277, 10 },{ 0x106, 9 },{ 0x839, 12 },
73 { 0xb, 4 },{ 0x27b, 10 },{ 0x12c, 9 },{ 0x4bf, 11 },
74 { 0x9, 6 },{ 0x35, 12 },{ 0x27e, 10 },{ 0x13c8, 13 },
75 { 0x1, 6 },{ 0x4aa, 11 },{ 0x208, 10 },{ 0x29, 12 },
76 { 0x1, 4 },{ 0x254, 10 },{ 0x12e, 9 },{ 0x838, 12 },
77 { 0x24, 6 },{ 0x4f3, 11 },{ 0x276, 10 },{ 0x12f6, 13 },
78 { 0x1, 5 },{ 0x27a, 10 },{ 0x13e, 9 },{ 0x3e, 12 },
79 { 0x8, 6 },{ 0x413, 11 },{ 0xc, 10 },{ 0x4be, 11 },
80 { 0x14, 5 },{ 0x412, 11 },{ 0x253, 10 },{ 0x97a, 12 },
81 { 0x21, 6 },{ 0x4ab, 11 },{ 0x20b, 10 },{ 0x34, 12 },
82 { 0x15, 5 },{ 0x278, 10 },{ 0x252, 10 },{ 0x968, 12 },
83 { 0x5, 5 },{ 0xb, 10 },{ 0x9c, 8 },{ 0xe, 10 },
84 };
85
86 /* dc table 0 */
87
88 const uint32_t ff_table0_dc_lum[120][2] = {
89 { 0x1, 1 },{ 0x1, 2 },{ 0x1, 4 },{ 0x1, 5 },
90 { 0x5, 5 },{ 0x7, 5 },{ 0x8, 6 },{ 0xc, 6 },
91 { 0x0, 7 },{ 0x2, 7 },{ 0x12, 7 },{ 0x1a, 7 },
92 { 0x3, 8 },{ 0x7, 8 },{ 0x27, 8 },{ 0x37, 8 },
93 { 0x5, 9 },{ 0x4c, 9 },{ 0x6c, 9 },{ 0x6d, 9 },
94 { 0x8, 10 },{ 0x19, 10 },{ 0x9b, 10 },{ 0x1b, 10 },
95 { 0x9a, 10 },{ 0x13, 11 },{ 0x34, 11 },{ 0x35, 11 },
96 { 0x61, 12 },{ 0x48, 13 },{ 0xc4, 13 },{ 0x4a, 13 },
97 { 0xc6, 13 },{ 0xc7, 13 },{ 0x92, 14 },{ 0x18b, 14 },
98 { 0x93, 14 },{ 0x183, 14 },{ 0x182, 14 },{ 0x96, 14 },
99 { 0x97, 14 },{ 0x180, 14 },{ 0x314, 15 },{ 0x315, 15 },
100 { 0x605, 16 },{ 0x604, 16 },{ 0x606, 16 },{ 0xc0e, 17 },
101 { 0x303cd, 23 },{ 0x303c9, 23 },{ 0x303c8, 23 },{ 0x303ca, 23 },
102 { 0x303cb, 23 },{ 0x303cc, 23 },{ 0x303ce, 23 },{ 0x303cf, 23 },
103 { 0x303d0, 23 },{ 0x303d1, 23 },{ 0x303d2, 23 },{ 0x303d3, 23 },
104 { 0x303d4, 23 },{ 0x303d5, 23 },{ 0x303d6, 23 },{ 0x303d7, 23 },
105 { 0x303d8, 23 },{ 0x303d9, 23 },{ 0x303da, 23 },{ 0x303db, 23 },
106 { 0x303dc, 23 },{ 0x303dd, 23 },{ 0x303de, 23 },{ 0x303df, 23 },
107 { 0x303e0, 23 },{ 0x303e1, 23 },{ 0x303e2, 23 },{ 0x303e3, 23 },
108 { 0x303e4, 23 },{ 0x303e5, 23 },{ 0x303e6, 23 },{ 0x303e7, 23 },
109 { 0x303e8, 23 },{ 0x303e9, 23 },{ 0x303ea, 23 },{ 0x303eb, 23 },
110 { 0x303ec, 23 },{ 0x303ed, 23 },{ 0x303ee, 23 },{ 0x303ef, 23 },
111 { 0x303f0, 23 },{ 0x303f1, 23 },{ 0x303f2, 23 },{ 0x303f3, 23 },
112 { 0x303f4, 23 },{ 0x303f5, 23 },{ 0x303f6, 23 },{ 0x303f7, 23 },
113 { 0x303f8, 23 },{ 0x303f9, 23 },{ 0x303fa, 23 },{ 0x303fb, 23 },
114 { 0x303fc, 23 },{ 0x303fd, 23 },{ 0x303fe, 23 },{ 0x303ff, 23 },
115 { 0x60780, 24 },{ 0x60781, 24 },{ 0x60782, 24 },{ 0x60783, 24 },
116 { 0x60784, 24 },{ 0x60785, 24 },{ 0x60786, 24 },{ 0x60787, 24 },
117 { 0x60788, 24 },{ 0x60789, 24 },{ 0x6078a, 24 },{ 0x6078b, 24 },
118 { 0x6078c, 24 },{ 0x6078d, 24 },{ 0x6078e, 24 },{ 0x6078f, 24 },
119 };
120
121 const uint32_t ff_table0_dc_chroma[120][2] = {
122 { 0x0, 2 },{ 0x1, 2 },{ 0x5, 3 },{ 0x9, 4 },
123 { 0xd, 4 },{ 0x11, 5 },{ 0x1d, 5 },{ 0x1f, 5 },
124 { 0x21, 6 },{ 0x31, 6 },{ 0x38, 6 },{ 0x33, 6 },
125 { 0x39, 6 },{ 0x3d, 6 },{ 0x61, 7 },{ 0x79, 7 },
126 { 0x80, 8 },{ 0xc8, 8 },{ 0xca, 8 },{ 0xf0, 8 },
127 { 0x81, 8 },{ 0xc0, 8 },{ 0xc9, 8 },{ 0x107, 9 },
128 { 0x106, 9 },{ 0x196, 9 },{ 0x183, 9 },{ 0x1e3, 9 },
129 { 0x1e2, 9 },{ 0x20a, 10 },{ 0x20b, 10 },{ 0x609, 11 },
130 { 0x412, 11 },{ 0x413, 11 },{ 0x60b, 11 },{ 0x411, 11 },
131 { 0x60a, 11 },{ 0x65f, 11 },{ 0x410, 11 },{ 0x65d, 11 },
132 { 0x65e, 11 },{ 0xcb8, 12 },{ 0xc10, 12 },{ 0xcb9, 12 },
133 { 0x1823, 13 },{ 0x3045, 14 },{ 0x6089, 15 },{ 0xc110, 16 },
134 { 0x304448, 22 },{ 0x304449, 22 },{ 0x30444a, 22 },{ 0x30444b, 22 },
135 { 0x30444c, 22 },{ 0x30444d, 22 },{ 0x30444e, 22 },{ 0x30444f, 22 },
136 { 0x304450, 22 },{ 0x304451, 22 },{ 0x304452, 22 },{ 0x304453, 22 },
137 { 0x304454, 22 },{ 0x304455, 22 },{ 0x304456, 22 },{ 0x304457, 22 },
138 { 0x304458, 22 },{ 0x304459, 22 },{ 0x30445a, 22 },{ 0x30445b, 22 },
139 { 0x30445c, 22 },{ 0x30445d, 22 },{ 0x30445e, 22 },{ 0x30445f, 22 },
140 { 0x304460, 22 },{ 0x304461, 22 },{ 0x304462, 22 },{ 0x304463, 22 },
141 { 0x304464, 22 },{ 0x304465, 22 },{ 0x304466, 22 },{ 0x304467, 22 },
142 { 0x304468, 22 },{ 0x304469, 22 },{ 0x30446a, 22 },{ 0x30446b, 22 },
143 { 0x30446c, 22 },{ 0x30446d, 22 },{ 0x30446e, 22 },{ 0x30446f, 22 },
144 { 0x304470, 22 },{ 0x304471, 22 },{ 0x304472, 22 },{ 0x304473, 22 },
145 { 0x304474, 22 },{ 0x304475, 22 },{ 0x304476, 22 },{ 0x304477, 22 },
146 { 0x304478, 22 },{ 0x304479, 22 },{ 0x30447a, 22 },{ 0x30447b, 22 },
147 { 0x30447c, 22 },{ 0x30447d, 22 },{ 0x30447e, 22 },{ 0x30447f, 22 },
148 { 0x608880, 23 },{ 0x608881, 23 },{ 0x608882, 23 },{ 0x608883, 23 },
149 { 0x608884, 23 },{ 0x608885, 23 },{ 0x608886, 23 },{ 0x608887, 23 },
150 { 0x608888, 23 },{ 0x608889, 23 },{ 0x60888a, 23 },{ 0x60888b, 23 },
151 { 0x60888c, 23 },{ 0x60888d, 23 },{ 0x60888e, 23 },{ 0x60888f, 23 },
152 };
153
154 /* dc table 1 */
155
156 const uint32_t ff_table1_dc_lum[120][2] = {
157 { 0x2, 2 },{ 0x3, 2 },{ 0x3, 3 },{ 0x2, 4 },
158 { 0x5, 4 },{ 0x1, 5 },{ 0x3, 5 },{ 0x8, 5 },
159 { 0x0, 6 },{ 0x5, 6 },{ 0xd, 6 },{ 0xf, 6 },
160 { 0x13, 6 },{ 0x8, 7 },{ 0x18, 7 },{ 0x1c, 7 },
161 { 0x24, 7 },{ 0x4, 8 },{ 0x6, 8 },{ 0x12, 8 },
162 { 0x32, 8 },{ 0x3b, 8 },{ 0x4a, 8 },{ 0x4b, 8 },
163 { 0xb, 9 },{ 0x26, 9 },{ 0x27, 9 },{ 0x66, 9 },
164 { 0x74, 9 },{ 0x75, 9 },{ 0x14, 10 },{ 0x1c, 10 },
165 { 0x1f, 10 },{ 0x1d, 10 },{ 0x2b, 11 },{ 0x3d, 11 },
166 { 0x19d, 11 },{ 0x19f, 11 },{ 0x54, 12 },{ 0x339, 12 },
167 { 0x338, 12 },{ 0x33d, 12 },{ 0xab, 13 },{ 0xf1, 13 },
168 { 0x678, 13 },{ 0xf2, 13 },{ 0x1e0, 14 },{ 0x1e1, 14 },
169 { 0x154, 14 },{ 0xcf2, 14 },{ 0x3cc, 15 },{ 0x2ab, 15 },
170 { 0x19e7, 15 },{ 0x3ce, 15 },{ 0x19e6, 15 },{ 0x554, 16 },
171 { 0x79f, 16 },{ 0x555, 16 },{ 0xf3d, 17 },{ 0xf37, 17 },
172 { 0xf3c, 17 },{ 0xf35, 17 },{ 0x1e6d, 18 },{ 0x1e68, 18 },
173 { 0x3cd8, 19 },{ 0x3cd3, 19 },{ 0x3cd9, 19 },{ 0x79a4, 20 },
174 { 0xf34ba, 25 },{ 0xf34b4, 25 },{ 0xf34b5, 25 },{ 0xf34b6, 25 },
175 { 0xf34b7, 25 },{ 0xf34b8, 25 },{ 0xf34b9, 25 },{ 0xf34bb, 25 },
176 { 0xf34bc, 25 },{ 0xf34bd, 25 },{ 0xf34be, 25 },{ 0xf34bf, 25 },
177 { 0x1e6940, 26 },{ 0x1e6941, 26 },{ 0x1e6942, 26 },{ 0x1e6943, 26 },
178 { 0x1e6944, 26 },{ 0x1e6945, 26 },{ 0x1e6946, 26 },{ 0x1e6947, 26 },
179 { 0x1e6948, 26 },{ 0x1e6949, 26 },{ 0x1e694a, 26 },{ 0x1e694b, 26 },
180 { 0x1e694c, 26 },{ 0x1e694d, 26 },{ 0x1e694e, 26 },{ 0x1e694f, 26 },
181 { 0x1e6950, 26 },{ 0x1e6951, 26 },{ 0x1e6952, 26 },{ 0x1e6953, 26 },
182 { 0x1e6954, 26 },{ 0x1e6955, 26 },{ 0x1e6956, 26 },{ 0x1e6957, 26 },
183 { 0x1e6958, 26 },{ 0x1e6959, 26 },{ 0x1e695a, 26 },{ 0x1e695b, 26 },
184 { 0x1e695c, 26 },{ 0x1e695d, 26 },{ 0x1e695e, 26 },{ 0x1e695f, 26 },
185 { 0x1e6960, 26 },{ 0x1e6961, 26 },{ 0x1e6962, 26 },{ 0x1e6963, 26 },
186 { 0x1e6964, 26 },{ 0x1e6965, 26 },{ 0x1e6966, 26 },{ 0x1e6967, 26 },
187 };
188
189 const uint32_t ff_table1_dc_chroma[120][2] = {
190 { 0x0, 2 },{ 0x1, 2 },{ 0x4, 3 },{ 0x7, 3 },
191 { 0xb, 4 },{ 0xd, 4 },{ 0x15, 5 },{ 0x28, 6 },
192 { 0x30, 6 },{ 0x32, 6 },{ 0x52, 7 },{ 0x62, 7 },
193 { 0x66, 7 },{ 0xa6, 8 },{ 0xc6, 8 },{ 0xcf, 8 },
194 { 0x14f, 9 },{ 0x18e, 9 },{ 0x19c, 9 },{ 0x29d, 10 },
195 { 0x33a, 10 },{ 0x538, 11 },{ 0x63c, 11 },{ 0x63e, 11 },
196 { 0x63f, 11 },{ 0x676, 11 },{ 0xa73, 12 },{ 0xc7a, 12 },
197 { 0xcef, 12 },{ 0x14e5, 13 },{ 0x19dd, 13 },{ 0x29c8, 14 },
198 { 0x29c9, 14 },{ 0x63dd, 15 },{ 0x33b8, 14 },{ 0x33b9, 14 },
199 { 0xc7b6, 16 },{ 0x63d8, 15 },{ 0x63df, 15 },{ 0xc7b3, 16 },
200 { 0xc7b4, 16 },{ 0xc7b5, 16 },{ 0x63de, 15 },{ 0xc7b7, 16 },
201 { 0xc7b8, 16 },{ 0xc7b9, 16 },{ 0x18f65, 17 },{ 0x31ec8, 18 },
202 { 0xc7b248, 24 },{ 0xc7b249, 24 },{ 0xc7b24a, 24 },{ 0xc7b24b, 24 },
203 { 0xc7b24c, 24 },{ 0xc7b24d, 24 },{ 0xc7b24e, 24 },{ 0xc7b24f, 24 },
204 { 0xc7b250, 24 },{ 0xc7b251, 24 },{ 0xc7b252, 24 },{ 0xc7b253, 24 },
205 { 0xc7b254, 24 },{ 0xc7b255, 24 },{ 0xc7b256, 24 },{ 0xc7b257, 24 },
206 { 0xc7b258, 24 },{ 0xc7b259, 24 },{ 0xc7b25a, 24 },{ 0xc7b25b, 24 },
207 { 0xc7b25c, 24 },{ 0xc7b25d, 24 },{ 0xc7b25e, 24 },{ 0xc7b25f, 24 },
208 { 0xc7b260, 24 },{ 0xc7b261, 24 },{ 0xc7b262, 24 },{ 0xc7b263, 24 },
209 { 0xc7b264, 24 },{ 0xc7b265, 24 },{ 0xc7b266, 24 },{ 0xc7b267, 24 },
210 { 0xc7b268, 24 },{ 0xc7b269, 24 },{ 0xc7b26a, 24 },{ 0xc7b26b, 24 },
211 { 0xc7b26c, 24 },{ 0xc7b26d, 24 },{ 0xc7b26e, 24 },{ 0xc7b26f, 24 },
212 { 0xc7b270, 24 },{ 0xc7b271, 24 },{ 0xc7b272, 24 },{ 0xc7b273, 24 },
213 { 0xc7b274, 24 },{ 0xc7b275, 24 },{ 0xc7b276, 24 },{ 0xc7b277, 24 },
214 { 0xc7b278, 24 },{ 0xc7b279, 24 },{ 0xc7b27a, 24 },{ 0xc7b27b, 24 },
215 { 0xc7b27c, 24 },{ 0xc7b27d, 24 },{ 0xc7b27e, 24 },{ 0xc7b27f, 24 },
216 { 0x18f6480, 25 },{ 0x18f6481, 25 },{ 0x18f6482, 25 },{ 0x18f6483, 25 },
217 { 0x18f6484, 25 },{ 0x18f6485, 25 },{ 0x18f6486, 25 },{ 0x18f6487, 25 },
218 { 0x18f6488, 25 },{ 0x18f6489, 25 },{ 0x18f648a, 25 },{ 0x18f648b, 25 },
219 { 0x18f648c, 25 },{ 0x18f648d, 25 },{ 0x18f648e, 25 },{ 0x18f648f, 25 },
220 };
221
222 /* vlc table 0, for intra luma */
223
224 static const uint16_t table0_vlc[133][2] = {
225 { 0x1, 2 },{ 0x6, 3 },{ 0xf, 4 },{ 0x16, 5 },
226 { 0x20, 6 },{ 0x18, 7 },{ 0x8, 8 },{ 0x9a, 8 },
227 { 0x56, 9 },{ 0x13e, 9 },{ 0xf0, 10 },{ 0x3a5, 10 },
228 { 0x77, 11 },{ 0x1ef, 11 },{ 0x9a, 12 },{ 0x5d, 13 },
229 { 0x1, 4 },{ 0x11, 5 },{ 0x2, 7 },{ 0xb, 8 },
230 { 0x12, 9 },{ 0x1d6, 9 },{ 0x27e, 10 },{ 0x191, 11 },
231 { 0xea, 12 },{ 0x3dc, 12 },{ 0x13b, 13 },{ 0x4, 5 },
232 { 0x14, 7 },{ 0x9e, 8 },{ 0x9, 10 },{ 0x1ac, 11 },
233 { 0x1e2, 11 },{ 0x3ca, 12 },{ 0x5f, 13 },{ 0x17, 5 },
234 { 0x4e, 7 },{ 0x5e, 9 },{ 0xf3, 10 },{ 0x1ad, 11 },
235 { 0xec, 12 },{ 0x5f0, 13 },{ 0xe, 6 },{ 0xe1, 8 },
236 { 0x3a4, 10 },{ 0x9c, 12 },{ 0x13d, 13 },{ 0x3b, 6 },
237 { 0x1c, 9 },{ 0x14, 11 },{ 0x9be, 12 },{ 0x6, 7 },
238 { 0x7a, 9 },{ 0x190, 11 },{ 0x137, 13 },{ 0x1b, 7 },
239 { 0x8, 10 },{ 0x75c, 11 },{ 0x71, 7 },{ 0xd7, 10 },
240 { 0x9bf, 12 },{ 0x7, 8 },{ 0xaf, 10 },{ 0x4cc, 11 },
241 { 0x34, 8 },{ 0x265, 10 },{ 0x9f, 12 },{ 0xe0, 8 },
242 { 0x16, 11 },{ 0x327, 12 },{ 0x15, 9 },{ 0x17d, 11 },
243 { 0xebb, 12 },{ 0x14, 9 },{ 0xf6, 10 },{ 0x1e4, 11 },
244 { 0xcb, 10 },{ 0x99d, 12 },{ 0xca, 10 },{ 0x2fc, 12 },
245 { 0x17f, 11 },{ 0x4cd, 11 },{ 0x2fd, 12 },{ 0x4fe, 11 },
246 { 0x13a, 13 },{ 0xa, 4 },{ 0x42, 7 },{ 0x1d3, 9 },
247 { 0x4dd, 11 },{ 0x12, 5 },{ 0xe8, 8 },{ 0x4c, 11 },
248 { 0x136, 13 },{ 0x39, 6 },{ 0x264, 10 },{ 0xeba, 12 },
249 { 0x0, 7 },{ 0xae, 10 },{ 0x99c, 12 },{ 0x1f, 7 },
250 { 0x4de, 11 },{ 0x43, 7 },{ 0x4dc, 11 },{ 0x3, 8 },
251 { 0x3cb, 12 },{ 0x6, 8 },{ 0x99e, 12 },{ 0x2a, 8 },
252 { 0x5f1, 13 },{ 0xf, 8 },{ 0x9fe, 12 },{ 0x33, 8 },
253 { 0x9ff, 12 },{ 0x98, 8 },{ 0x99f, 12 },{ 0xea, 8 },
254 { 0x13c, 13 },{ 0x2e, 8 },{ 0x192, 11 },{ 0x136, 9 },
255 { 0x6a, 9 },{ 0x15, 11 },{ 0x3af, 10 },{ 0x1e3, 11 },
256 { 0x74, 11 },{ 0xeb, 12 },{ 0x2f9, 12 },{ 0x5c, 13 },
257 { 0xed, 12 },{ 0x3dd, 12 },{ 0x326, 12 },{ 0x5e, 13 },
258 { 0x16, 7 },
259 };
260
261 static const int8_t table0_level[132] = {
262   1,  2,  3,  4,  5,  6,  7,  8,
263   9, 10, 11, 12, 13, 14, 15, 16,
264   1,  2,  3,  4,  5,  6,  7,  8,
265   9, 10, 11,  1,  2,  3,  4,  5,
266   6,  7,  8,  1,  2,  3,  4,  5,
267   6,  7,  1,  2,  3,  4,  5,  1,
268   2,  3,  4,  1,  2,  3,  4,  1,
269   2,  3,  1,  2,  3,  1,  2,  3,
270   1,  2,  3,  1,  2,  3,  1,  2,
271   3,  1,  2,  3,  1,  2,  1,  2,
272   1,  1,  1,  1,  1,  1,  2,  3,
273   4,  1,  2,  3,  4,  1,  2,  3,
274   1,  2,  3,  1,  2,  1,  2,  1,
275   2,  1,  2,  1,  2,  1,  2,  1,
276   2,  1,  2,  1,  2,  1,  2,  1,
277   1,  1,  1,  1,  1,  1,  1,  1,
278   1,  1,  1,  1,
279 };
280
281 static const int8_t table0_run[132] = {
282   0,  0,  0,  0,  0,  0,  0,  0,
283   0,  0,  0,  0,  0,  0,  0,  0,
284   1,  1,  1,  1,  1,  1,  1,  1,
285   1,  1,  1,  2,  2,  2,  2,  2,
286   2,  2,  2,  3,  3,  3,  3,  3,
287   3,  3,  4,  4,  4,  4,  4,  5,
288   5,  5,  5,  6,  6,  6,  6,  7,
289   7,  7,  8,  8,  8,  9,  9,  9,
290  10, 10, 10, 11, 11, 11, 12, 12,
291  12, 13, 13, 13, 14, 14, 15, 15,
292  16, 17, 18, 19, 20,  0,  0,  0,
293   0,  1,  1,  1,  1,  2,  2,  2,
294   3,  3,  3,  4,  4,  5,  5,  6,
295   6,  7,  7,  8,  8,  9,  9, 10,
296  10, 11, 11, 12, 12, 13, 13, 14,
297  15, 16, 17, 18, 19, 20, 21, 22,
298  23, 24, 25, 26,
299 };
300
301 /* vlc table 1, for intra chroma and P macro blocks */
302
303 static const uint16_t table1_vlc[149][2] = {
304 { 0x4, 3 },{ 0x14, 5 },{ 0x17, 7 },{ 0x7f, 8 },
305 { 0x154, 9 },{ 0x1f2, 10 },{ 0xbf, 11 },{ 0x65, 12 },
306 { 0xaaa, 12 },{ 0x630, 13 },{ 0x1597, 13 },{ 0x3b7, 14 },
307 { 0x2b22, 14 },{ 0xbe6, 15 },{ 0xb, 4 },{ 0x37, 7 },
308 { 0x62, 9 },{ 0x7, 11 },{ 0x166, 12 },{ 0xce, 13 },
309 { 0x1590, 13 },{ 0x5f6, 14 },{ 0xbe7, 15 },{ 0x7, 5 },
310 { 0x6d, 8 },{ 0x3, 11 },{ 0x31f, 12 },{ 0x5f2, 14 },
311 { 0x2, 6 },{ 0x61, 9 },{ 0x55, 12 },{ 0x1df, 14 },
312 { 0x1a, 6 },{ 0x1e, 10 },{ 0xac9, 12 },{ 0x2b23, 14 },
313 { 0x1e, 6 },{ 0x1f, 10 },{ 0xac3, 12 },{ 0x2b2b, 14 },
314 { 0x6, 7 },{ 0x4, 11 },{ 0x2f8, 13 },{ 0x19, 7 },
315 { 0x6, 11 },{ 0x63d, 13 },{ 0x57, 7 },{ 0x182, 11 },
316 { 0x2aa2, 14 },{ 0x4, 8 },{ 0x180, 11 },{ 0x59c, 14 },
317 { 0x7d, 8 },{ 0x164, 12 },{ 0x76d, 15 },{ 0x2, 9 },
318 { 0x18d, 11 },{ 0x1581, 13 },{ 0xad, 8 },{ 0x60, 12 },
319 { 0xc67, 14 },{ 0x1c, 9 },{ 0xee, 13 },{ 0x3, 9 },
320 { 0x2cf, 13 },{ 0xd9, 9 },{ 0x1580, 13 },{ 0x2, 11 },
321 { 0x183, 11 },{ 0x57, 12 },{ 0x61, 12 },{ 0x31, 11 },
322 { 0x66, 12 },{ 0x631, 13 },{ 0x632, 13 },{ 0xac, 13 },
323 { 0x31d, 12 },{ 0x76, 12 },{ 0x3a, 11 },{ 0x165, 12 },
324 { 0xc66, 14 },{ 0x3, 2 },{ 0x54, 7 },{ 0x2ab, 10 },
325 { 0x16, 13 },{ 0x5f7, 14 },{ 0x5, 4 },{ 0xf8, 9 },
326 { 0xaa9, 12 },{ 0x5f, 15 },{ 0x4, 4 },{ 0x1c, 10 },
327 { 0x1550, 13 },{ 0x4, 5 },{ 0x77, 11 },{ 0x76c, 15 },
328 { 0xe, 5 },{ 0xa, 12 },{ 0xc, 5 },{ 0x562, 11 },
329 { 0x4, 6 },{ 0x31c, 12 },{ 0x6, 6 },{ 0xc8, 13 },
330 { 0xd, 6 },{ 0x1da, 13 },{ 0x7, 6 },{ 0xc9, 13 },
331 { 0x1, 7 },{ 0x2e, 14 },{ 0x14, 7 },{ 0x1596, 13 },
332 { 0xa, 7 },{ 0xac2, 12 },{ 0x16, 7 },{ 0x15b, 14 },
333 { 0x15, 7 },{ 0x15a, 14 },{ 0xf, 8 },{ 0x5e, 15 },
334 { 0x7e, 8 },{ 0xab, 8 },{ 0x2d, 9 },{ 0xd8, 9 },
335 { 0xb, 9 },{ 0x14, 10 },{ 0x2b3, 10 },{ 0x1f3, 10 },
336 { 0x3a, 10 },{ 0x0, 10 },{ 0x58, 10 },{ 0x2e, 9 },
337 { 0x5e, 10 },{ 0x563, 11 },{ 0xec, 12 },{ 0x54, 12 },
338 { 0xac1, 12 },{ 0x1556, 13 },{ 0x2fa, 13 },{ 0x181, 11 },
339 { 0x1557, 13 },{ 0x59d, 14 },{ 0x2aa3, 14 },{ 0x2b2a, 14 },
340 { 0x1de, 14 },{ 0x63c, 13 },{ 0xcf, 13 },{ 0x1594, 13 },
341 { 0xd, 9 },
342 };
343
344 static const int8_t table1_level[148] = {
345   1,  2,  3,  4,  5,  6,  7,  8,
346   9, 10, 11, 12, 13, 14,  1,  2,
347   3,  4,  5,  6,  7,  8,  9,  1,
348   2,  3,  4,  5,  1,  2,  3,  4,
349   1,  2,  3,  4,  1,  2,  3,  4,
350   1,  2,  3,  1,  2,  3,  1,  2,
351   3,  1,  2,  3,  1,  2,  3,  1,
352   2,  3,  1,  2,  3,  1,  2,  1,
353   2,  1,  2,  1,  1,  1,  1,  1,
354   1,  1,  1,  1,  1,  1,  1,  1,
355   1,  1,  2,  3,  4,  5,  1,  2,
356   3,  4,  1,  2,  3,  1,  2,  3,
357   1,  2,  1,  2,  1,  2,  1,  2,
358   1,  2,  1,  2,  1,  2,  1,  2,
359   1,  2,  1,  2,  1,  2,  1,  2,
360   1,  1,  1,  1,  1,  1,  1,  1,
361   1,  1,  1,  1,  1,  1,  1,  1,
362   1,  1,  1,  1,  1,  1,  1,  1,
363   1,  1,  1,  1,
364 };
365
366 static const int8_t table1_run[148] = {
367   0,  0,  0,  0,  0,  0,  0,  0,
368   0,  0,  0,  0,  0,  0,  1,  1,
369   1,  1,  1,  1,  1,  1,  1,  2,
370   2,  2,  2,  2,  3,  3,  3,  3,
371   4,  4,  4,  4,  5,  5,  5,  5,
372   6,  6,  6,  7,  7,  7,  8,  8,
373   8,  9,  9,  9, 10, 10, 10, 11,
374  11, 11, 12, 12, 12, 13, 13, 14,
375  14, 15, 15, 16, 17, 18, 19, 20,
376  21, 22, 23, 24, 25, 26, 27, 28,
377  29,  0,  0,  0,  0,  0,  1,  1,
378   1,  1,  2,  2,  2,  3,  3,  3,
379   4,  4,  5,  5,  6,  6,  7,  7,
380   8,  8,  9,  9, 10, 10, 11, 11,
381  12, 12, 13, 13, 14, 14, 15, 15,
382  16, 17, 18, 19, 20, 21, 22, 23,
383  24, 25, 26, 27, 28, 29, 30, 31,
384  32, 33, 34, 35, 36, 37, 38, 39,
385  40, 41, 42, 43,
386 };
387
388 /* third vlc table */
389
390 static const uint16_t table2_vlc[186][2] = {
391 { 0x1, 2 },{ 0x5, 3 },{ 0xd, 4 },{ 0x12, 5 },
392 { 0xe, 6 },{ 0x15, 7 },{ 0x13, 8 },{ 0x3f, 8 },
393 { 0x4b, 9 },{ 0x11f, 9 },{ 0xb8, 10 },{ 0x3e3, 10 },
394 { 0x172, 11 },{ 0x24d, 12 },{ 0x3da, 12 },{ 0x2dd, 13 },
395 { 0x1f55, 13 },{ 0x5b9, 14 },{ 0x3eae, 14 },{ 0x0, 4 },
396 { 0x10, 5 },{ 0x8, 7 },{ 0x20, 8 },{ 0x29, 9 },
397 { 0x1f4, 9 },{ 0x233, 10 },{ 0x1e0, 11 },{ 0x12a, 12 },
398 { 0x3dd, 12 },{ 0x50a, 13 },{ 0x1f29, 13 },{ 0xa42, 14 },
399 { 0x1272, 15 },{ 0x1737, 15 },{ 0x3, 5 },{ 0x11, 7 },
400 { 0xc4, 8 },{ 0x4b, 10 },{ 0xb4, 11 },{ 0x7d4, 11 },
401 { 0x345, 12 },{ 0x2d7, 13 },{ 0x7bf, 13 },{ 0x938, 14 },
402 { 0xbbb, 14 },{ 0x95e, 15 },{ 0x13, 5 },{ 0x78, 7 },
403 { 0x69, 9 },{ 0x232, 10 },{ 0x461, 11 },{ 0x3ec, 12 },
404 { 0x520, 13 },{ 0x1f2a, 13 },{ 0x3e50, 14 },{ 0x3e51, 14 },
405 { 0x1486, 15 },{ 0xc, 6 },{ 0x24, 9 },{ 0x94, 11 },
406 { 0x8c0, 12 },{ 0xf09, 14 },{ 0x1ef0, 15 },{ 0x3d, 6 },
407 { 0x53, 9 },{ 0x1a0, 11 },{ 0x2d6, 13 },{ 0xf08, 14 },
408 { 0x13, 7 },{ 0x7c, 9 },{ 0x7c1, 11 },{ 0x4ac, 14 },
409 { 0x1b, 7 },{ 0xa0, 10 },{ 0x344, 12 },{ 0xf79, 14 },
410 { 0x79, 7 },{ 0x3e1, 10 },{ 0x2d4, 13 },{ 0x2306, 14 },
411 { 0x21, 8 },{ 0x23c, 10 },{ 0xfae, 12 },{ 0x23de, 14 },
412 { 0x35, 8 },{ 0x175, 11 },{ 0x7b3, 13 },{ 0xc5, 8 },
413 { 0x174, 11 },{ 0x785, 13 },{ 0x48, 9 },{ 0x1a3, 11 },
414 { 0x49e, 13 },{ 0x2c, 9 },{ 0xfa, 10 },{ 0x7d6, 11 },
415 { 0x92, 10 },{ 0x5cc, 13 },{ 0x1ef1, 15 },{ 0xa3, 10 },
416 { 0x3ed, 12 },{ 0x93e, 14 },{ 0x1e2, 11 },{ 0x1273, 15 },
417 { 0x7c4, 11 },{ 0x1487, 15 },{ 0x291, 12 },{ 0x293, 12 },
418 { 0xf8a, 12 },{ 0x509, 13 },{ 0x508, 13 },{ 0x78d, 13 },
419 { 0x7be, 13 },{ 0x78c, 13 },{ 0x4ae, 14 },{ 0xbba, 14 },
420 { 0x2307, 14 },{ 0xb9a, 14 },{ 0x1736, 15 },{ 0xe, 4 },
421 { 0x45, 7 },{ 0x1f3, 9 },{ 0x47a, 11 },{ 0x5dc, 13 },
422 { 0x23df, 14 },{ 0x19, 5 },{ 0x28, 9 },{ 0x176, 11 },
423 { 0x49d, 13 },{ 0x23dd, 14 },{ 0x30, 6 },{ 0xa2, 10 },
424 { 0x2ef, 12 },{ 0x5b8, 14 },{ 0x3f, 6 },{ 0xa5, 10 },
425 { 0x3db, 12 },{ 0x93f, 14 },{ 0x44, 7 },{ 0x7cb, 11 },
426 { 0x95f, 15 },{ 0x63, 7 },{ 0x3c3, 12 },{ 0x15, 8 },
427 { 0x8f6, 12 },{ 0x17, 8 },{ 0x498, 13 },{ 0x2c, 8 },
428 { 0x7b2, 13 },{ 0x2f, 8 },{ 0x1f54, 13 },{ 0x8d, 8 },
429 { 0x7bd, 13 },{ 0x8e, 8 },{ 0x1182, 13 },{ 0xfb, 8 },
430 { 0x50b, 13 },{ 0x2d, 8 },{ 0x7c0, 11 },{ 0x79, 9 },
431 { 0x1f5f, 13 },{ 0x7a, 9 },{ 0x1f56, 13 },{ 0x231, 10 },
432 { 0x3e4, 10 },{ 0x1a1, 11 },{ 0x143, 11 },{ 0x1f7, 11 },
433 { 0x16f, 12 },{ 0x292, 12 },{ 0x2e7, 12 },{ 0x16c, 12 },
434 { 0x16d, 12 },{ 0x3dc, 12 },{ 0xf8b, 12 },{ 0x499, 13 },
435 { 0x3d8, 12 },{ 0x78e, 13 },{ 0x2d5, 13 },{ 0x1f5e, 13 },
436 { 0x1f2b, 13 },{ 0x78f, 13 },{ 0x4ad, 14 },{ 0x3eaf, 14 },
437 { 0x23dc, 14 },{ 0x4a, 9 },
438 };
439
440 static const int8_t table2_level[185] = {
441   1,  2,  3,  4,  5,  6,  7,  8,
442   9, 10, 11, 12, 13, 14, 15, 16,
443  17, 18, 19,  1,  2,  3,  4,  5,
444   6,  7,  8,  9, 10, 11, 12, 13,
445  14, 15,  1,  2,  3,  4,  5,  6,
446   7,  8,  9, 10, 11, 12,  1,  2,
447   3,  4,  5,  6,  7,  8,  9, 10,
448  11,  1,  2,  3,  4,  5,  6,  1,
449   2,  3,  4,  5,  1,  2,  3,  4,
450   1,  2,  3,  4,  1,  2,  3,  4,
451   1,  2,  3,  4,  1,  2,  3,  1,
452   2,  3,  1,  2,  3,  1,  2,  3,
453   1,  2,  3,  1,  2,  3,  1,  2,
454   1,  2,  1,  1,  1,  1,  1,  1,
455   1,  1,  1,  1,  1,  1,  1,  1,
456   2,  3,  4,  5,  6,  1,  2,  3,
457   4,  5,  1,  2,  3,  4,  1,  2,
458   3,  4,  1,  2,  3,  1,  2,  1,
459   2,  1,  2,  1,  2,  1,  2,  1,
460   2,  1,  2,  1,  2,  1,  2,  1,
461   2,  1,  2,  1,  1,  1,  1,  1,
462   1,  1,  1,  1,  1,  1,  1,  1,
463   1,  1,  1,  1,  1,  1,  1,  1,
464   1,
465 };
466
467 static const int8_t table2_run[185] = {
468   0,  0,  0,  0,  0,  0,  0,  0,
469   0,  0,  0,  0,  0,  0,  0,  0,
470   0,  0,  0,  1,  1,  1,  1,  1,
471   1,  1,  1,  1,  1,  1,  1,  1,
472   1,  1,  2,  2,  2,  2,  2,  2,
473   2,  2,  2,  2,  2,  2,  3,  3,
474   3,  3,  3,  3,  3,  3,  3,  3,
475   3,  4,  4,  4,  4,  4,  4,  5,
476   5,  5,  5,  5,  6,  6,  6,  6,
477   7,  7,  7,  7,  8,  8,  8,  8,
478   9,  9,  9,  9, 10, 10, 10, 11,
479  11, 11, 12, 12, 12, 13, 13, 13,
480  14, 14, 14, 15, 15, 15, 16, 16,
481  17, 17, 18, 19, 20, 21, 22, 23,
482  24, 25, 26, 27, 28, 29, 30,  0,
483   0,  0,  0,  0,  0,  1,  1,  1,
484   1,  1,  2,  2,  2,  2,  3,  3,
485   3,  3,  4,  4,  4,  5,  5,  6,
486   6,  7,  7,  8,  8,  9,  9, 10,
487  10, 11, 11, 12, 12, 13, 13, 14,
488  14, 15, 15, 16, 17, 18, 19, 20,
489  21, 22, 23, 24, 25, 26, 27, 28,
490  29, 30, 31, 32, 33, 34, 35, 36,
491  37,
492 };
493
494 /* second non intra vlc table */
495 static const uint16_t table4_vlc[169][2] = {
496 { 0x0, 3 },{ 0x3, 4 },{ 0xb, 5 },{ 0x14, 6 },
497 { 0x3f, 6 },{ 0x5d, 7 },{ 0xa2, 8 },{ 0xac, 9 },
498 { 0x16e, 9 },{ 0x20a, 10 },{ 0x2e2, 10 },{ 0x432, 11 },
499 { 0x5c9, 11 },{ 0x827, 12 },{ 0xb54, 12 },{ 0x4e6, 13 },
500 { 0x105f, 13 },{ 0x172a, 13 },{ 0x20b2, 14 },{ 0x2d4e, 14 },
501 { 0x39f0, 14 },{ 0x4175, 15 },{ 0x5a9e, 15 },{ 0x4, 4 },
502 { 0x1e, 5 },{ 0x42, 7 },{ 0xb6, 8 },{ 0x173, 9 },
503 { 0x395, 10 },{ 0x72e, 11 },{ 0xb94, 12 },{ 0x16a4, 13 },
504 { 0x20b3, 14 },{ 0x2e45, 14 },{ 0x5, 5 },{ 0x40, 7 },
505 { 0x49, 9 },{ 0x28f, 10 },{ 0x5cb, 11 },{ 0x48a, 13 },
506 { 0x9dd, 14 },{ 0x73e2, 15 },{ 0x18, 5 },{ 0x25, 8 },
507 { 0x8a, 10 },{ 0x51b, 11 },{ 0xe5f, 12 },{ 0x9c9, 14 },
508 { 0x139c, 15 },{ 0x29, 6 },{ 0x4f, 9 },{ 0x412, 11 },
509 { 0x48d, 13 },{ 0x2e41, 14 },{ 0x38, 6 },{ 0x10e, 9 },
510 { 0x5a8, 11 },{ 0x105c, 13 },{ 0x39f2, 14 },{ 0x58, 7 },
511 { 0x21f, 10 },{ 0xe7e, 12 },{ 0x39ff, 14 },{ 0x23, 8 },
512 { 0x2e3, 10 },{ 0x4e5, 13 },{ 0x2e40, 14 },{ 0xa1, 8 },
513 { 0x5be, 11 },{ 0x9c8, 14 },{ 0x83, 8 },{ 0x13a, 11 },
514 { 0x1721, 13 },{ 0x44, 9 },{ 0x276, 12 },{ 0x39f6, 14 },
515 { 0x8b, 10 },{ 0x4ef, 13 },{ 0x5a9b, 15 },{ 0x208, 10 },
516 { 0x1cfe, 13 },{ 0x399, 10 },{ 0x1cb4, 13 },{ 0x39e, 10 },
517 { 0x39f3, 14 },{ 0x5ab, 11 },{ 0x73e3, 15 },{ 0x737, 11 },
518 { 0x5a9f, 15 },{ 0x82d, 12 },{ 0xe69, 12 },{ 0xe68, 12 },
519 { 0x433, 11 },{ 0xb7b, 12 },{ 0x2df8, 14 },{ 0x2e56, 14 },
520 { 0x2e57, 14 },{ 0x39f7, 14 },{ 0x51a5, 15 },{ 0x3, 3 },
521 { 0x2a, 6 },{ 0xe4, 8 },{ 0x28e, 10 },{ 0x735, 11 },
522 { 0x1058, 13 },{ 0x1cfa, 13 },{ 0x2df9, 14 },{ 0x4174, 15 },
523 { 0x9, 4 },{ 0x54, 8 },{ 0x398, 10 },{ 0x48b, 13 },
524 { 0x139d, 15 },{ 0xd, 4 },{ 0xad, 9 },{ 0x826, 12 },
525 { 0x2d4c, 14 },{ 0x11, 5 },{ 0x16b, 9 },{ 0xb7f, 12 },
526 { 0x51a4, 15 },{ 0x19, 5 },{ 0x21b, 10 },{ 0x16fd, 13 },
527 { 0x1d, 5 },{ 0x394, 10 },{ 0x28d3, 14 },{ 0x2b, 6 },
528 { 0x5bc, 11 },{ 0x5a9a, 15 },{ 0x2f, 6 },{ 0x247, 12 },
529 { 0x10, 7 },{ 0xa35, 12 },{ 0x3e, 6 },{ 0xb7a, 12 },
530 { 0x59, 7 },{ 0x105e, 13 },{ 0x26, 8 },{ 0x9cf, 14 },
531 { 0x55, 8 },{ 0x1cb5, 13 },{ 0x57, 8 },{ 0xe5b, 12 },
532 { 0xa0, 8 },{ 0x1468, 13 },{ 0x170, 9 },{ 0x90, 10 },
533 { 0x1ce, 9 },{ 0x21a, 10 },{ 0x218, 10 },{ 0x168, 9 },
534 { 0x21e, 10 },{ 0x244, 12 },{ 0x736, 11 },{ 0x138, 11 },
535 { 0x519, 11 },{ 0xe5e, 12 },{ 0x72c, 11 },{ 0xb55, 12 },
536 { 0x9dc, 14 },{ 0x20bb, 14 },{ 0x48c, 13 },{ 0x1723, 13 },
537 { 0x2e44, 14 },{ 0x16a5, 13 },{ 0x518, 11 },{ 0x39fe, 14 },
538 { 0x169, 9 },
539 };
540
541 static const int8_t table4_level[168] = {
542   1,  2,  3,  4,  5,  6,  7,  8,
543   9, 10, 11, 12, 13, 14, 15, 16,
544  17, 18, 19, 20, 21, 22, 23,  1,
545   2,  3,  4,  5,  6,  7,  8,  9,
546  10, 11,  1,  2,  3,  4,  5,  6,
547   7,  8,  1,  2,  3,  4,  5,  6,
548   7,  1,  2,  3,  4,  5,  1,  2,
549   3,  4,  5,  1,  2,  3,  4,  1,
550   2,  3,  4,  1,  2,  3,  1,  2,
551   3,  1,  2,  3,  1,  2,  3,  1,
552   2,  1,  2,  1,  2,  1,  2,  1,
553   2,  1,  1,  1,  1,  1,  1,  1,
554   1,  1,  1,  1,  2,  3,  4,  5,
555   6,  7,  8,  9,  1,  2,  3,  4,
556   5,  1,  2,  3,  4,  1,  2,  3,
557   4,  1,  2,  3,  1,  2,  3,  1,
558   2,  3,  1,  2,  1,  2,  1,  2,
559   1,  2,  1,  2,  1,  2,  1,  2,
560   1,  2,  1,  1,  1,  1,  1,  1,
561   1,  1,  1,  1,  1,  1,  1,  1,
562   1,  1,  1,  1,  1,  1,  1,  1,
563 };
564
565 static const int8_t table4_run[168] = {
566   0,  0,  0,  0,  0,  0,  0,  0,
567   0,  0,  0,  0,  0,  0,  0,  0,
568   0,  0,  0,  0,  0,  0,  0,  1,
569   1,  1,  1,  1,  1,  1,  1,  1,
570   1,  1,  2,  2,  2,  2,  2,  2,
571   2,  2,  3,  3,  3,  3,  3,  3,
572   3,  4,  4,  4,  4,  4,  5,  5,
573   5,  5,  5,  6,  6,  6,  6,  7,
574   7,  7,  7,  8,  8,  8,  9,  9,
575   9, 10, 10, 10, 11, 11, 11, 12,
576  12, 13, 13, 14, 14, 15, 15, 16,
577  16, 17, 18, 19, 20, 21, 22, 23,
578  24, 25, 26,  0,  0,  0,  0,  0,
579   0,  0,  0,  0,  1,  1,  1,  1,
580   1,  2,  2,  2,  2,  3,  3,  3,
581   3,  4,  4,  4,  5,  5,  5,  6,
582   6,  6,  7,  7,  8,  8,  9,  9,
583  10, 10, 11, 11, 12, 12, 13, 13,
584  14, 14, 15, 16, 17, 18, 19, 20,
585  21, 22, 23, 24, 25, 26, 27, 28,
586  29, 30, 31, 32, 33, 34, 35, 36,
587 };
588
589 extern const uint16_t inter_vlc[103][2];
590 extern const int8_t inter_level[102];
591 extern const int8_t inter_run[102];
592
593 extern const uint16_t intra_vlc[103][2];
594 extern const int8_t intra_level[102];
595 extern const int8_t intra_run[102];
596
597 extern const uint8_t DCtab_lum[13][2];
598 extern const uint8_t DCtab_chrom[13][2];
599
600 extern const uint8_t cbpy_tab[16][2];
601 extern const uint8_t mvtab[33][2];
602
603 extern const uint8_t intra_MCBPC_code[9];
604 extern const uint8_t intra_MCBPC_bits[9];
605
606 extern const uint8_t inter_MCBPC_code[28];
607 extern const uint8_t inter_MCBPC_bits[28];
608
609 #define NB_RL_TABLES  6
610
611 static RLTable rl_table[NB_RL_TABLES] = {
612     /* intra luminance tables */
613     /* low motion  */
614     {
615         132,
616         85,
617         table0_vlc,
618         table0_run,
619         table0_level,
620     },
621     /* high motion */
622     {
623         185,
624         119,
625         table2_vlc,
626         table2_run,
627         table2_level,
628     },
629     /* mid-rate */
630     {
631         102,
632         67,
633         intra_vlc,
634         intra_run,
635         intra_level,
636     },
637     /* intra chrominance / non intra tables */
638     /* low motion inter */
639     {
640         148,
641         81,
642         table1_vlc,
643         table1_run,
644         table1_level,
645     },
646     /* high motion inter */
647     {
648         168,
649         99,
650         table4_vlc,
651         table4_run,
652         table4_level,
653     },
654     /* mid rate inter */
655     {
656         102,
657         58,
658         inter_vlc,
659         inter_run,
660         inter_level,
661     },
662 };
663
664 /* motion vector table 0 */
665
666 static const uint16_t table0_mv_code[1100] = {
667  0x0001, 0x0003, 0x0005, 0x0007, 0x0003, 0x0008, 0x000c, 0x0001,
668  0x0002, 0x001b, 0x0006, 0x000b, 0x0015, 0x0002, 0x000e, 0x000f,
669  0x0014, 0x0020, 0x0022, 0x0025, 0x0027, 0x0029, 0x002d, 0x004b,
670  0x004d, 0x0003, 0x0022, 0x0023, 0x0025, 0x0027, 0x0042, 0x0048,
671  0x0049, 0x0050, 0x005c, 0x0091, 0x009f, 0x000e, 0x0043, 0x004c,
672  0x0054, 0x0056, 0x008c, 0x0098, 0x009a, 0x009b, 0x00b1, 0x00b2,
673  0x0120, 0x0121, 0x0126, 0x0133, 0x0139, 0x01a1, 0x01a4, 0x01a5,
674  0x01a6, 0x01a7, 0x01ae, 0x01af, 0x000b, 0x0019, 0x0085, 0x0090,
675  0x009b, 0x00aa, 0x00af, 0x010c, 0x010e, 0x011c, 0x011e, 0x0133,
676  0x0144, 0x0160, 0x0174, 0x0175, 0x0177, 0x0178, 0x0249, 0x024b,
677  0x0252, 0x0261, 0x0265, 0x0270, 0x0352, 0x0353, 0x0355, 0x0359,
678  0x0010, 0x0011, 0x0013, 0x0034, 0x0035, 0x0036, 0x0037, 0x003d,
679  0x003e, 0x0109, 0x0126, 0x0156, 0x021a, 0x021e, 0x023a, 0x023e,
680  0x028e, 0x028f, 0x02cf, 0x0491, 0x0494, 0x049f, 0x04a0, 0x04a3,
681  0x04a6, 0x04a7, 0x04ad, 0x04ae, 0x04c0, 0x04c4, 0x04c6, 0x04c8,
682  0x04c9, 0x04f5, 0x04f6, 0x04f7, 0x0680, 0x0682, 0x0683, 0x0688,
683  0x0689, 0x068d, 0x068e, 0x068f, 0x06a2, 0x06a3, 0x06a9, 0x06b0,
684  0x06b1, 0x06b4, 0x06b5, 0x0024, 0x0060, 0x0063, 0x0078, 0x0079,
685  0x0211, 0x0244, 0x0245, 0x0247, 0x0248, 0x0249, 0x024a, 0x024b,
686  0x026b, 0x02af, 0x02b8, 0x02bb, 0x0436, 0x0476, 0x0477, 0x047e,
687  0x04c8, 0x04c9, 0x04ca, 0x0514, 0x0586, 0x0587, 0x0598, 0x059d,
688  0x05d9, 0x05da, 0x0920, 0x0921, 0x093b, 0x093c, 0x093d, 0x0942,
689  0x0943, 0x0944, 0x0945, 0x0959, 0x095e, 0x095f, 0x0982, 0x0983,
690  0x098e, 0x098f, 0x09c4, 0x09e7, 0x09e8, 0x09e9, 0x0d02, 0x0d17,
691  0x0d18, 0x0d19, 0x0d41, 0x0d42, 0x0d43, 0x0d50, 0x0d5f, 0x0d6d,
692  0x0d6e, 0x0d6f, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
693  0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x041e, 0x041f, 0x0420, 0x0421,
694  0x048c, 0x048d, 0x04d3, 0x04d4, 0x04d5, 0x055c, 0x055d, 0x0572,
695  0x0573, 0x0574, 0x0575, 0x08de, 0x08df, 0x08fe, 0x08ff, 0x0996,
696  0x0a36, 0x0a37, 0x0b08, 0x0b09, 0x0b0a, 0x0b0b, 0x0b32, 0x0b33,
697  0x0b34, 0x0b35, 0x0b36, 0x0b37, 0x0b38, 0x0b39, 0x0bb0, 0x0bf7,
698  0x0bf8, 0x0bf9, 0x0bfa, 0x0bfb, 0x0bfc, 0x0bfd, 0x0bfe, 0x0bff,
699  0x1254, 0x1255, 0x1256, 0x1257, 0x1270, 0x1271, 0x1272, 0x1273,
700  0x1274, 0x1275, 0x12ab, 0x12ac, 0x12ad, 0x12ae, 0x12af, 0x12b0,
701  0x12b1, 0x1315, 0x1316, 0x1317, 0x13bf, 0x13c0, 0x13c1, 0x13c2,
702  0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca,
703  0x13cb, 0x13cc, 0x13cd, 0x1a06, 0x1a07, 0x1a28, 0x1a29, 0x1a2a,
704  0x1a2b, 0x1a2c, 0x1a2d, 0x1a80, 0x1abb, 0x1abc, 0x1abd, 0x1ad8,
705  0x1ad9, 0x0094, 0x0095, 0x0096, 0x0097, 0x00a0, 0x00a1, 0x00a2,
706  0x00a3, 0x0831, 0x0832, 0x0833, 0x0834, 0x0835, 0x0836, 0x0837,
707  0x0838, 0x0839, 0x083a, 0x083b, 0x0939, 0x093a, 0x093b, 0x093c,
708  0x093d, 0x093e, 0x093f, 0x09a0, 0x09a1, 0x09a2, 0x09a3, 0x09a4,
709  0x09a5, 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2,
710  0x11b3, 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba,
711  0x11bb, 0x132f, 0x1454, 0x1455, 0x1456, 0x1457, 0x1458, 0x1459,
712  0x145a, 0x145b, 0x145c, 0x145d, 0x145e, 0x145f, 0x1460, 0x1461,
713  0x1462, 0x1463, 0x1464, 0x1465, 0x1466, 0x1467, 0x1468, 0x1469,
714  0x146a, 0x146b, 0x17de, 0x17df, 0x17e0, 0x17e1, 0x17e2, 0x17e3,
715  0x17e4, 0x17e5, 0x17e6, 0x17e7, 0x17e8, 0x17e9, 0x17ea, 0x17eb,
716  0x17ec, 0x17ed, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545,
717  0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d,
718  0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555,
719  0x2628, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c,
720  0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774,
721  0x2775, 0x2776, 0x2777, 0x2778, 0x2779, 0x277a, 0x277b, 0x277c,
722  0x277d, 0x3503, 0x3544, 0x3545, 0x3546, 0x3547, 0x3560, 0x3561,
723  0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569,
724  0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571,
725  0x3572, 0x3573, 0x3574, 0x3575, 0x03f0, 0x103d, 0x103e, 0x103f,
726  0x1040, 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047,
727  0x1048, 0x1049, 0x104a, 0x104b, 0x104c, 0x104d, 0x104e, 0x104f,
728  0x1050, 0x1051, 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057,
729  0x1058, 0x1059, 0x105a, 0x105b, 0x105c, 0x105d, 0x105e, 0x105f,
730  0x1060, 0x1061, 0x1270, 0x1271, 0x21b8, 0x21b9, 0x21ba, 0x21bb,
731  0x21bc, 0x21bd, 0x21be, 0x21bf, 0x21f0, 0x21f1, 0x21f2, 0x21f3,
732  0x21f4, 0x21f5, 0x21f6, 0x21f7, 0x21f8, 0x21f9, 0x21fa, 0x21fb,
733  0x21fc, 0x21fd, 0x21fe, 0x21ff, 0x2340, 0x2341, 0x2342, 0x2343,
734  0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b,
735  0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353,
736  0x2354, 0x2355, 0x2356, 0x2357, 0x265c, 0x2f88, 0x2f89, 0x2f8a,
737  0x2f8b, 0x2f8c, 0x2f8d, 0x2f8e, 0x2f8f, 0x2f90, 0x2f91, 0x2f92,
738  0x2f93, 0x2f94, 0x2f95, 0x2f96, 0x2f97, 0x2f98, 0x2f99, 0x2f9a,
739  0x2f9b, 0x2f9c, 0x2f9d, 0x2f9e, 0x2f9f, 0x2fa0, 0x2fa1, 0x2fa2,
740  0x2fa3, 0x2fa4, 0x2fa5, 0x2fa6, 0x2fa7, 0x2fa8, 0x2fa9, 0x2faa,
741  0x2fab, 0x2fac, 0x2fad, 0x2fae, 0x2faf, 0x2fb0, 0x2fb1, 0x2fb2,
742  0x2fb3, 0x2fb4, 0x2fb5, 0x2fb6, 0x2fb7, 0x2fb8, 0x2fb9, 0x2fba,
743  0x2fbb, 0x4c52, 0x4c53, 0x4e28, 0x4e29, 0x4e2a, 0x4e2b, 0x4e2c,
744  0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32, 0x4e33, 0x4e34,
745  0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, 0x4e3c,
746  0x4e3d, 0x4e3e, 0x4e3f, 0x4e80, 0x4e81, 0x4e82, 0x4e83, 0x4e84,
747  0x4e85, 0x4e86, 0x4e87, 0x4e88, 0x4e89, 0x4e8a, 0x4e8b, 0x4e8c,
748  0x4e8d, 0x4e8e, 0x4e8f, 0x4e90, 0x4e91, 0x4e92, 0x4e93, 0x4e94,
749  0x4e95, 0x4e96, 0x4e97, 0x4e98, 0x4e99, 0x4e9a, 0x4e9b, 0x4e9c,
750  0x4e9d, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea1, 0x4ea2, 0x4ea3, 0x4ea4,
751  0x4ea5, 0x4ea6, 0x4ea7, 0x4ea8, 0x4ea9, 0x4eaa, 0x4eab, 0x4eac,
752  0x4ead, 0x4eae, 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb2, 0x4eb3, 0x4eb4,
753  0x4eb5, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9, 0x4eba, 0x4ebb, 0x4ebc,
754  0x4ebd, 0x4ebe, 0x4ebf, 0x4ec0, 0x4ec1, 0x4ec2, 0x4ec3, 0x4ec4,
755  0x4ec5, 0x4ec6, 0x4ec7, 0x4ec8, 0x4ec9, 0x4eca, 0x4ecb, 0x6a04,
756  0x6a05, 0x07e2, 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8,
757  0x07e9, 0x07ea, 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0,
758  0x07f1, 0x07f2, 0x07f3, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8,
759  0x07f9, 0x07fa, 0x07fb, 0x07fc, 0x07fd, 0x07fe, 0x07ff, 0x2000,
760  0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008,
761  0x2009, 0x200a, 0x200b, 0x200c, 0x200d, 0x200e, 0x200f, 0x2010,
762  0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2016, 0x2017, 0x2018,
763  0x2019, 0x201a, 0x201b, 0x201c, 0x201d, 0x201e, 0x201f, 0x2020,
764  0x2021, 0x2022, 0x2023, 0x2024, 0x2025, 0x2026, 0x2027, 0x2028,
765  0x2029, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e, 0x202f, 0x2030,
766  0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037, 0x2038,
767  0x2039, 0x203a, 0x203b, 0x203c, 0x203d, 0x203e, 0x203f, 0x2040,
768  0x2041, 0x2042, 0x2043, 0x2044, 0x2045, 0x2046, 0x2047, 0x2048,
769  0x2049, 0x204a, 0x204b, 0x204c, 0x204d, 0x204e, 0x204f, 0x2050,
770  0x2051, 0x2052, 0x2053, 0x2054, 0x2055, 0x2056, 0x2057, 0x2058,
771  0x2059, 0x205a, 0x205b, 0x205c, 0x205d, 0x205e, 0x205f, 0x2060,
772  0x2061, 0x2062, 0x2063, 0x2064, 0x2065, 0x2066, 0x2067, 0x2068,
773  0x2069, 0x206a, 0x206b, 0x206c, 0x206d, 0x206e, 0x206f, 0x2070,
774  0x2071, 0x2072, 0x2073, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078,
775  0x2079, 0x4cba, 0x4cbb, 0x5d88, 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c,
776  0x5d8d, 0x5d8e, 0x5d8f, 0x5db0, 0x5db1, 0x5db2, 0x5db3, 0x5db4,
777  0x5db5, 0x5db6, 0x5db7, 0x5db8, 0x5db9, 0x5dba, 0x5dbb, 0x5dbc,
778  0x5dbd, 0x5dbe, 0x5dbf, 0x5e40, 0x5e41, 0x5e42, 0x5e43, 0x5e44,
779  0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4c,
780  0x5e4d, 0x5e4e, 0x5e4f, 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e54,
781  0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, 0x5e5b, 0x5e5c,
782  0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61, 0x5e62, 0x5e63, 0x5e64,
783  0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c,
784  0x5e6d, 0x5e6e, 0x5e6f, 0x5e70, 0x5e71, 0x5e72, 0x5e73, 0x5e74,
785  0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79, 0x5e7a, 0x5e7b, 0x5e7c,
786  0x5e7d, 0x5e7e, 0x5e7f, 0x5e80, 0x5e81, 0x5e82, 0x5e83, 0x5e84,
787  0x5e85, 0x5e86, 0x5e87, 0x5e88, 0x5e89, 0x5e8a, 0x5e8b, 0x5e8c,
788  0x5e8d, 0x5e8e, 0x5e8f, 0x5e90, 0x5e91, 0x5e92, 0x5e93, 0x5e94,
789  0x5e95, 0x5e96, 0x5e97, 0x5e98, 0x5e99, 0x5e9a, 0x5e9b, 0x5e9c,
790  0x5e9d, 0x5e9e, 0x5e9f, 0x5ea0, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4,
791  0x5ea5, 0x5ea6, 0x5ea7, 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac,
792  0x5ead, 0x5eae, 0x5eaf, 0x5eb0, 0x5eb1, 0x5eb2, 0x5eb3, 0x5eb4,
793  0x5eb5, 0x5eb6, 0x5eb7, 0x5eb8, 0x5eb9, 0x5eba, 0x5ebb, 0x5ebc,
794  0x5ebd, 0x5ebe, 0x5ebf, 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4,
795  0x5ec5, 0x5ec6, 0x5ec7, 0x5ec8, 0x5ec9, 0x5eca, 0x5ecb, 0x5ecc,
796  0x5ecd, 0x5ece, 0x5ecf, 0x5ed0, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed4,
797  0x5ed5, 0x5ed6, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edb, 0x5edc,
798  0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4,
799  0x5ee5, 0x5ee6, 0x5ee7, 0x5ee8, 0x5ee9, 0x5eea, 0x5eeb, 0x5eec,
800  0x5eed, 0x5eee, 0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef4,
801  0x5ef5, 0x5ef6, 0x5ef7, 0x5ef8, 0x5ef9, 0x5efa, 0x5efb, 0x5efc,
802  0x5efd, 0x5efe, 0x5eff, 0x5f00, 0x5f01, 0x5f02, 0x5f03, 0x5f04,
803  0x5f05, 0x5f06, 0x5f07, 0x5f08, 0x5f09, 0x5f0a, 0x5f0b, 0x5f0c,
804  0x5f0d, 0x5f0e, 0x5f0f, 0x0000,
805 };
806
807 static const uint8_t table0_mv_bits[1100] = {
808   1,  4,  4,  4,  5,  5,  5,  6,
809   6,  6,  7,  7,  7,  8,  8,  8,
810   8,  8,  8,  8,  8,  8,  8,  8,
811   8,  9,  9,  9,  9,  9,  9,  9,
812   9,  9,  9,  9,  9, 10, 10, 10,
813  10, 10, 10, 10, 10, 10, 10, 10,
814  10, 10, 10, 10, 10, 10, 10, 10,
815  10, 10, 10, 10, 11, 11, 11, 11,
816  11, 11, 11, 11, 11, 11, 11, 11,
817  11, 11, 11, 11, 11, 11, 11, 11,
818  11, 11, 11, 11, 11, 11, 11, 11,
819  12, 12, 12, 12, 12, 12, 12, 12,
820  12, 12, 12, 12, 12, 12, 12, 12,
821  12, 12, 12, 12, 12, 12, 12, 12,
822  12, 12, 12, 12, 12, 12, 12, 12,
823  12, 12, 12, 12, 12, 12, 12, 12,
824  12, 12, 12, 12, 12, 12, 12, 12,
825  12, 12, 12, 13, 13, 13, 13, 13,
826  13, 13, 13, 13, 13, 13, 13, 13,
827  13, 13, 13, 13, 13, 13, 13, 13,
828  13, 13, 13, 13, 13, 13, 13, 13,
829  13, 13, 13, 13, 13, 13, 13, 13,
830  13, 13, 13, 13, 13, 13, 13, 13,
831  13, 13, 13, 13, 13, 13, 13, 13,
832  13, 13, 13, 13, 13, 13, 13, 13,
833  13, 13, 14, 14, 14, 14, 14, 14,
834  14, 14, 14, 14, 14, 14, 14, 14,
835  14, 14, 14, 14, 14, 14, 14, 14,
836  14, 14, 14, 14, 14, 14, 14, 14,
837  14, 14, 14, 14, 14, 14, 14, 14,
838  14, 14, 14, 14, 14, 14, 14, 14,
839  14, 14, 14, 14, 14, 14, 14, 14,
840  14, 14, 14, 14, 14, 14, 14, 14,
841  14, 14, 14, 14, 14, 14, 14, 14,
842  14, 14, 14, 14, 14, 14, 14, 14,
843  14, 14, 14, 14, 14, 14, 14, 14,
844  14, 14, 14, 14, 14, 14, 14, 14,
845  14, 14, 14, 14, 14, 14, 14, 14,
846  14, 15, 15, 15, 15, 15, 15, 15,
847  15, 15, 15, 15, 15, 15, 15, 15,
848  15, 15, 15, 15, 15, 15, 15, 15,
849  15, 15, 15, 15, 15, 15, 15, 15,
850  15, 15, 15, 15, 15, 15, 15, 15,
851  15, 15, 15, 15, 15, 15, 15, 15,
852  15, 15, 15, 15, 15, 15, 15, 15,
853  15, 15, 15, 15, 15, 15, 15, 15,
854  15, 15, 15, 15, 15, 15, 15, 15,
855  15, 15, 15, 15, 15, 15, 15, 15,
856  15, 15, 15, 15, 15, 15, 15, 15,
857  15, 15, 15, 15, 15, 15, 15, 15,
858  15, 15, 15, 15, 15, 15, 15, 15,
859  15, 15, 15, 15, 15, 15, 15, 15,
860  15, 15, 15, 15, 15, 15, 15, 15,
861  15, 15, 15, 15, 15, 15, 15, 15,
862  15, 15, 15, 15, 15, 15, 15, 15,
863  15, 15, 15, 15, 15, 15, 15, 15,
864  15, 15, 15, 15, 15, 15, 15, 15,
865  15, 15, 15, 15, 15, 15, 15, 15,
866  15, 15, 15, 15, 16, 16, 16, 16,
867  16, 16, 16, 16, 16, 16, 16, 16,
868  16, 16, 16, 16, 16, 16, 16, 16,
869  16, 16, 16, 16, 16, 16, 16, 16,
870  16, 16, 16, 16, 16, 16, 16, 16,
871  16, 16, 16, 16, 16, 16, 16, 16,
872  16, 16, 16, 16, 16, 16, 16, 16,
873  16, 16, 16, 16, 16, 16, 16, 16,
874  16, 16, 16, 16, 16, 16, 16, 16,
875  16, 16, 16, 16, 16, 16, 16, 16,
876  16, 16, 16, 16, 16, 16, 16, 16,
877  16, 16, 16, 16, 16, 16, 16, 16,
878  16, 16, 16, 16, 16, 16, 16, 16,
879  16, 16, 16, 16, 16, 16, 16, 16,
880  16, 16, 16, 16, 16, 16, 16, 16,
881  16, 16, 16, 16, 16, 16, 16, 16,
882  16, 16, 16, 16, 16, 16, 16, 16,
883  16, 16, 16, 16, 16, 16, 16, 16,
884  16, 16, 16, 16, 16, 16, 16, 16,
885  16, 16, 16, 16, 16, 16, 16, 16,
886  16, 16, 16, 16, 16, 16, 16, 16,
887  16, 16, 16, 16, 16, 16, 16, 16,
888  16, 16, 16, 16, 16, 16, 16, 16,
889  16, 16, 16, 16, 16, 16, 16, 16,
890  16, 16, 16, 16, 16, 16, 16, 16,
891  16, 16, 16, 16, 16, 16, 16, 16,
892  16, 16, 16, 16, 16, 16, 16, 16,
893  16, 16, 16, 16, 16, 16, 16, 16,
894  16, 16, 16, 16, 16, 16, 16, 16,
895  16, 16, 16, 16, 16, 16, 16, 16,
896  16, 16, 16, 16, 16, 16, 16, 16,
897  16, 17, 17, 17, 17, 17, 17, 17,
898  17, 17, 17, 17, 17, 17, 17, 17,
899  17, 17, 17, 17, 17, 17, 17, 17,
900  17, 17, 17, 17, 17, 17, 17, 17,
901  17, 17, 17, 17, 17, 17, 17, 17,
902  17, 17, 17, 17, 17, 17, 17, 17,
903  17, 17, 17, 17, 17, 17, 17, 17,
904  17, 17, 17, 17, 17, 17, 17, 17,
905  17, 17, 17, 17, 17, 17, 17, 17,
906  17, 17, 17, 17, 17, 17, 17, 17,
907  17, 17, 17, 17, 17, 17, 17, 17,
908  17, 17, 17, 17, 17, 17, 17, 17,
909  17, 17, 17, 17, 17, 17, 17, 17,
910  17, 17, 17, 17, 17, 17, 17, 17,
911  17, 17, 17, 17, 17, 17, 17, 17,
912  17, 17, 17, 17, 17, 17, 17, 17,
913  17, 17, 17, 17, 17, 17, 17, 17,
914  17, 17, 17, 17, 17, 17, 17, 17,
915  17, 17, 17, 17, 17, 17, 17, 17,
916  17, 17, 17, 17, 17, 17, 17, 17,
917  17, 17, 17, 17, 17, 17, 17, 17,
918  17, 17, 17, 17, 17, 17, 17, 17,
919  17, 17, 17, 17, 17, 17, 17, 17,
920  17, 17, 17, 17, 17, 17, 17, 17,
921  17, 17, 17, 17, 17, 17, 17, 17,
922  17, 17, 17, 17, 17, 17, 17, 17,
923  17, 17, 17, 17, 17, 17, 17, 17,
924  17, 17, 17, 17, 17, 17, 17, 17,
925  17, 17, 17, 17, 17, 17, 17, 17,
926  17, 17, 17, 17, 17, 17, 17, 17,
927  17, 17, 17, 17, 17, 17, 17, 17,
928  17, 17, 17, 17, 17, 17, 17, 17,
929  17, 17, 17, 17, 17, 17, 17, 17,
930  17, 17, 17, 17, 17, 17, 17, 17,
931  17, 17, 17, 17, 17, 17, 17, 17,
932  17, 17, 17, 17, 17, 17, 17, 17,
933  17, 17, 17, 17, 17, 17, 17, 17,
934  17, 17, 17, 17, 17, 17, 17, 17,
935  17, 17, 17, 17, 17, 17, 17, 17,
936  17, 17, 17, 17, 17, 17, 17, 17,
937  17, 17, 17, 17, 17, 17, 17, 17,
938  17, 17, 17, 17, 17, 17, 17, 17,
939  17, 17, 17, 17, 17, 17, 17, 17,
940  17, 17, 17, 17, 17, 17, 17, 17,
941  17, 17, 17, 17, 17, 17, 17, 17,
942  17, 17, 17, 17, 17, 17, 17, 17,
943  17, 17, 17, 17, 17, 17, 17, 17,
944  17, 17, 17, 17, 17, 17, 17, 17,
945  17, 17, 17,  8,
946 };
947
948 static const uint8_t table0_mvx[1099] = {
949  32, 32, 31, 32, 33, 31, 33, 31,
950  33, 32, 34, 32, 30, 32, 31, 34,
951  35, 32, 34, 33, 29, 33, 30, 30,
952  31, 31, 35, 29, 33, 35, 33, 34,
953  31, 29, 30, 34, 30, 36, 28, 32,
954  34, 37, 30, 27, 32, 25, 39, 32,
955  34, 32, 35, 35, 35, 31, 35, 29,
956  32, 29, 30, 29, 37, 27, 36, 38,
957  37, 33, 32, 31, 29, 31, 28, 36,
958  33, 30, 34, 33, 33, 28, 27, 25,
959  31, 26, 39, 32, 32, 31, 33, 39,
960  31, 38, 28, 36, 21, 23, 43, 36,
961  34, 41, 30, 25, 28, 31, 30, 34,
962  38, 35, 61, 34, 28, 30, 37, 37,
963  35, 27, 36,  3, 59, 38, 37, 32,
964  31, 29, 26, 33, 37, 33, 27, 27,
965  35, 34, 34, 40, 42, 33, 32, 29,
966   4,  5, 28, 24, 25, 35, 39, 38,
967  32, 23, 27, 32, 30, 35, 26, 34,
968  60, 36, 29, 22, 26, 41,  7, 30,
969  38, 30, 36, 29, 30, 41, 26, 25,
970  32, 34, 24, 39,  1, 25, 39, 32,
971  28, 29, 32, 38, 26, 36, 28, 63,
972  28, 39, 23, 21, 26, 35, 31, 35,
973  57, 31, 29, 29, 28, 30, 27, 35,
974   2, 38, 40, 34, 37, 29, 38, 43,
975  26, 32, 33, 42, 24, 40, 28, 32,
976  32, 32, 36, 32, 43, 25, 21, 31,
977  30, 31, 41, 29, 33, 37, 26, 37,
978  27, 59, 23, 33, 35, 31, 31, 37,
979  38, 39, 32, 23, 32, 27, 37, 36,
980  31, 40, 25, 27, 38, 31, 36, 28,
981  31, 36, 25, 45,  3, 34, 38, 39,
982  40, 38, 30, 32, 19, 24, 25, 26,
983  45, 20, 24, 33, 33, 31, 41, 34,
984  39, 47, 40, 58, 59, 41, 33,  3,
985  17, 61, 42, 30, 26, 29, 36, 61,
986  33, 37, 62, 28, 25, 38, 25, 38,
987  17, 23, 34, 33, 21, 33, 49, 27,
988  32, 23, 27, 22, 24, 22, 39, 43,
989  27, 37,  6, 42, 47, 26, 30, 31,
990  41, 39, 33, 22, 45, 36, 32, 45,
991  19, 22, 30,  5,  5, 17, 29, 22,
992  31, 31, 43, 37, 27, 32, 32, 32,
993  33, 34, 43, 35, 29, 26, 22, 32,
994  19, 32, 25, 31, 41, 49, 28, 34,
995  28, 39, 34, 19, 37, 38, 29, 21,
996  36, 42, 24, 48, 16, 28, 49, 22,
997  34, 31, 38, 39, 44, 11, 35, 30,
998  33, 33, 23, 28, 33, 46, 15, 13,
999  24, 41, 24, 34, 34, 30, 26, 24,
1000  14, 60, 21, 29, 39, 23, 35, 37,
1001  63, 45, 33, 34, 47, 41, 22, 42,
1002  35, 35, 23, 32, 35, 43, 32,  7,
1003  31, 41, 20, 31, 16, 13, 63, 25,
1004  30, 32, 35, 30, 30, 31, 42, 47,
1005  39, 38, 40, 40, 51, 55, 56, 18,
1006  21, 39, 39, 33, 17, 41, 23, 24,
1007  43, 25, 31, 20, 19, 45,  1, 34,
1008  31, 22, 35, 15, 46, 46, 35, 31,
1009  28, 29, 29, 23, 41, 27, 14, 53,
1010  53, 27, 24, 32, 57, 32, 17, 42,
1011  37, 29, 33,  1, 25, 32, 32, 63,
1012  26, 40, 44, 36, 31, 39, 20, 20,
1013  44, 23, 33, 34, 35, 33, 33, 28,
1014  41, 23, 41, 41, 29, 25, 26, 49,
1015  29, 24, 37, 49, 50, 51, 51, 26,
1016  39, 25, 26, 15, 39, 18, 42, 17,
1017   4, 31, 32, 32, 60,  1, 42, 32,
1018   0, 12, 19, 35, 21, 41, 17, 26,
1019  20, 45, 46, 32, 37, 22, 47, 29,
1020  31, 27, 29, 30, 21, 33, 35, 18,
1021  25, 33, 50, 51, 42,  2, 15, 51,
1022  53, 33, 25, 29, 55, 37, 38, 33,
1023  38, 59, 38, 33, 39, 13, 32, 40,
1024  61, 61, 32,  9, 44,  3, 31, 29,
1025  25, 31, 27, 23,  9, 25,  9, 29,
1026  20, 30, 30, 42, 18, 28, 25, 28,
1027  28, 21, 29, 43, 29, 43, 26, 44,
1028  44, 21, 38, 21, 24, 45, 45, 35,
1029  39, 22, 35, 36, 34, 34, 45, 34,
1030  29, 31, 46, 25, 46, 16, 17, 31,
1031  20, 32, 47, 47, 47, 32, 49, 49,
1032  49, 31,  1, 27, 28, 39, 39, 21,
1033  36, 23, 51,  2, 40, 51, 32, 53,
1034  24, 30, 24, 30, 21, 40, 57, 57,
1035  31, 41, 58, 32, 12,  4, 32, 34,
1036  59, 31, 32, 13,  9, 35, 26, 35,
1037  37, 61, 37, 63, 26, 29, 41, 38,
1038  23, 20, 41, 26, 41, 42, 42, 42,
1039  26, 26, 26, 26,  1, 26, 37, 37,
1040  37, 23, 34, 42, 27, 43, 34, 27,
1041  31, 24, 33, 16,  3, 31, 24, 33,
1042  24,  4, 44, 44, 11, 44, 31, 13,
1043  13, 44, 45, 13, 25, 22, 38, 26,
1044  38, 38, 39, 32, 30, 39, 30, 22,
1045  32, 26, 30, 47, 47, 47, 19, 47,
1046  30, 31, 35,  8, 23, 47, 47, 27,
1047  35, 47, 31, 48, 35, 19, 36, 49,
1048  49, 33, 31, 39, 27, 39, 49, 49,
1049  50, 50, 50, 39, 31, 51, 51, 39,
1050  28, 33, 33, 21, 40, 31, 52, 53,
1051  40, 53,  9, 33, 31, 53, 54, 54,
1052  54, 55, 55, 34, 15, 56, 25, 56,
1053  21, 21, 40, 40, 25, 40, 58, 36,
1054   5, 41, 41, 12, 60, 41, 41, 37,
1055  22, 61, 18, 29, 29, 30, 61, 30,
1056  61, 62, 62, 30, 30, 63, 18, 13,
1057  30, 23, 19, 20, 20, 41, 13,  2,
1058   5,  5,  1,  5, 32,  6, 32, 35,
1059  20, 35, 27, 35, 35, 36, 36, 13,
1060  36, 41, 41, 41,  3, 30, 42, 27,
1061  20, 30, 27, 28, 30, 21, 33, 33,
1062  14, 24, 30, 42, 24, 33, 25, 42,
1063  43, 14, 43, 43, 14, 43,  7, 36,
1064  37, 37, 37, 37,  7, 14, 25, 43,
1065  43, 44, 15, 37,  7,  7,  3,  1,
1066   8, 15, 15,  8, 44, 44, 44, 45,
1067  45, 45, 45,  8,  8, 45, 21, 45,
1068  28, 28, 28, 21, 28, 28, 22, 37,
1069  46, 46, 37,  8, 29, 37, 29, 22,
1070  46, 37, 22, 29, 47, 47, 38, 38,
1071  16, 38, 38, 33, 38, 22, 47, 47,
1072  29, 25, 16,  0, 48,  1, 34, 48,
1073  48, 34, 25, 26, 26, 49, 49, 26,
1074   1, 49,  4, 26,  4, 49,  1,  9,
1075  49, 49, 49, 10, 49, 17, 38, 17,
1076  17, 50, 38, 50, 50, 22, 38, 51,
1077  38, 38, 51, 39, 39, 18, 22, 39,
1078  51, 22, 52, 52, 52, 39, 53, 53,
1079  10, 23, 18, 29, 10, 53, 29, 54,
1080  11, 54, 11, 11, 55,  1, 18, 55,
1081  55, 55, 55, 55, 55, 29, 34, 18,
1082  29, 56, 56, 34, 57, 34, 34, 29,
1083  29, 57, 57, 35, 35, 35, 35, 35,
1084  39, 35, 59, 59, 18, 59, 39, 30,
1085  18, 40, 60, 60, 61, 30, 18, 61,
1086  61, 19, 19,
1087 };
1088
1089 static const uint8_t table0_mvy[1099] = {
1090  32, 31, 32, 33, 32, 31, 31, 33,
1091  33, 34, 32, 30, 32, 35, 34, 31,
1092  32, 29, 33, 30, 32, 34, 33, 31,
1093  30, 35, 31, 31, 29, 33, 35, 30,
1094  29, 33, 34, 34, 30, 32, 32, 36,
1095  29, 32, 35, 32, 28, 32, 32, 27,
1096  35, 37, 34, 29, 30, 36, 35, 34,
1097  25, 30, 29, 35, 33, 31, 31, 32,
1098  31, 28, 39, 28, 29, 37, 31, 33,
1099  27, 36, 28, 36, 37, 33, 33, 31,
1100  27, 32, 31, 38, 26, 25, 25, 33,
1101  39, 31, 34, 30, 32, 32, 32, 34,
1102  36, 32, 28, 33, 30, 38, 37, 27,
1103  33, 28, 32, 37, 35, 38, 29, 34,
1104  27, 29, 29, 32, 32, 34, 35,  3,
1105  26, 36, 31, 38, 30, 26, 35, 34,
1106  37, 26, 25, 32, 32, 39, 23, 37,
1107  32, 32, 29, 32, 29, 36, 29, 30,
1108  41, 31, 30, 21, 39, 25, 34, 38,
1109  32, 35, 39, 32, 33, 33, 32, 27,
1110  29, 25, 28, 27, 26, 31, 30, 35,
1111  24, 24, 31, 34, 32, 30, 35, 40,
1112  28, 38,  5, 35, 29, 36, 36, 32,
1113  38, 30, 33, 31, 35, 26, 23, 38,
1114  32, 41, 28, 25, 37, 40, 37, 39,
1115  32, 36, 33, 39, 25, 26, 28, 31,
1116  28, 42, 23, 31, 33, 31, 39,  1,
1117  59, 22, 27,  4, 33, 34, 33, 24,
1118  41,  3, 35, 41, 41, 28, 36, 36,
1119  28, 33, 35, 21, 23, 21, 22, 37,
1120  27, 27, 43, 29, 60, 39, 27, 25,
1121  59, 34, 27, 27, 26, 40, 37, 27,
1122  61, 26, 39, 33, 31, 22, 37, 25,
1123  30, 25, 24, 61, 31, 34, 25, 38,
1124  32, 32, 30,  3, 61, 43, 29, 23,
1125  28, 32, 28, 32, 31, 34,  5, 33,
1126  32, 33, 33, 42, 37, 23, 38, 31,
1127  40, 26, 32, 26, 37, 38, 36, 24,
1128  29, 30, 20, 22, 29, 24, 32, 41,
1129   2, 34, 25, 33, 29, 31, 39, 35,
1130  36, 24, 32, 30, 33, 27, 44, 60,
1131  30, 36, 19, 34, 31, 24, 16, 35,
1132  32, 38, 21, 33, 31, 31, 21, 35,
1133   5, 17, 29, 38, 38, 18, 58, 19,
1134  43, 41, 30, 41, 43, 39, 29,  7,
1135  29, 17, 28, 19, 28, 31, 25, 19,
1136  40, 26, 21, 33, 39, 23, 40, 30,
1137  39, 34, 35, 32, 32, 24, 33, 30,
1138  40, 47, 39, 37, 32, 33, 24, 23,
1139  45, 47, 27, 23, 42, 32, 32, 33,
1140  36, 37, 37, 17, 18, 22, 40, 38,
1141  32, 31, 35, 24, 17, 25, 17, 23,
1142  33, 34, 51, 42, 31, 36, 36, 29,
1143  21, 22, 37, 44, 43, 25, 47, 33,
1144  45, 27, 31, 58, 31, 32, 31, 38,
1145  43, 20, 47, 45, 54,  1, 26, 34,
1146  38, 14, 22, 24, 33, 34, 32, 32,
1147  37, 21, 23, 49, 35, 23, 28, 39,
1148  39, 23, 55, 33, 30, 30, 63, 16,
1149  42, 28, 13, 33, 33, 35, 19, 46,
1150  43, 17, 19, 36, 39, 24, 31, 32,
1151  33, 26, 28, 62, 33, 63, 33, 39,
1152  19, 49, 17, 31, 43, 13, 15, 29,
1153  25, 35, 33, 23, 49, 41, 28, 29,
1154  34, 38,  7, 61, 11, 50, 13, 41,
1155  19, 47, 25, 26, 15, 42, 41, 29,
1156  45, 27, 17, 35, 32, 29, 32, 24,
1157  13, 26, 26, 31, 24, 33, 28, 30,
1158  31, 11, 45, 46, 33, 33, 35, 57,
1159  32, 32, 35, 45, 34, 11, 37, 42,
1160  39, 37, 31, 49, 21, 27, 29, 47,
1161  53, 40, 51, 16, 26,  1, 40, 30,
1162  41, 44, 34, 25, 27, 31, 35, 35,
1163  31, 15, 49,  1, 35, 40,  5, 58,
1164  21, 29, 22, 59, 45, 31,  9, 26,
1165   9, 29, 11, 32, 30,  3, 13, 20,
1166  18, 20, 11,  3, 29, 40, 31, 53,
1167  30, 17, 20, 37, 31, 42, 47, 47,
1168  54, 38,  9, 34, 13, 37, 21, 25,
1169  27, 43, 42, 45, 40, 25, 27, 46,
1170  22, 25, 53, 20,  2, 14, 39, 15,
1171  22, 44, 34, 21, 38, 33, 27, 48,
1172  34, 52, 35, 47, 49, 54,  2, 13,
1173  23, 52, 29, 45, 22, 49, 54, 21,
1174  40, 42, 31, 30, 29, 34,  0, 25,
1175  23, 51, 24, 59, 28, 38, 29, 31,
1176   2, 13, 31,  8, 31, 33, 12, 45,
1177  41,  7, 14, 30, 25, 18, 43, 20,
1178  43, 35, 44,  1, 49, 42, 42, 18,
1179  41, 38, 41, 44, 53, 11, 20, 25,
1180  45, 46, 47, 48, 39, 52, 46, 49,
1181  63, 55, 44, 38, 13, 13, 57, 22,
1182  51, 16, 12, 28, 35, 57, 25, 20,
1183  26, 28, 28, 29, 32, 31, 62, 34,
1184  35, 35, 19, 49, 48, 39, 40, 18,
1185  43, 46, 11,  6, 48, 19, 49, 41,
1186  10, 23, 58, 17, 21, 23, 34, 30,
1187  60,  0, 44, 34, 26, 37, 46, 43,
1188  49, 59,  4, 34, 59, 37, 22, 25,
1189  28, 46,  6, 40, 59, 42, 36, 61,
1190  28, 30, 31, 43, 10, 22, 23, 47,
1191  20, 52, 55, 36, 25, 16,  1, 11,
1192  27, 29,  5, 63, 18, 41, 31, 34,
1193  38,  1,  5, 13, 28, 31, 17, 38,
1194  39, 41, 36, 37, 22, 39, 33, 43,
1195  43, 15, 17, 49, 30, 21, 22, 20,
1196  10, 17, 25, 54, 57,  3, 34,  8,
1197  36, 25, 31, 14, 15, 19, 29, 25,
1198  18, 39, 53, 22, 27, 20, 29, 33,
1199  41, 42, 35, 62, 50, 29, 53, 50,
1200  35, 55, 42, 61, 63,  4,  7, 42,
1201  21, 46, 47, 49, 27, 46, 17, 55,
1202  41, 50, 63,  4, 56, 18,  8, 10,
1203  18, 51, 63, 36, 55, 18,  5, 55,
1204   9, 29, 17, 21, 30, 27,  1, 59,
1205   7, 11, 12, 15,  5, 42, 24, 41,
1206  43,  7, 27, 22, 25, 31, 30, 37,
1207  22, 39, 53, 29, 36, 37, 48,  0,
1208   5, 13, 17, 31, 32, 26, 46, 28,
1209  44, 45, 46, 53, 49, 51,  3, 41,
1210   3, 22, 42, 33,  5, 45,  7, 22,
1211  40, 53, 24, 14, 25, 27, 10, 12,
1212  34, 16, 17, 53, 20, 26, 39, 45,
1213  18, 45, 35, 33, 31, 49,  4, 39,
1214  42, 11, 51,  5, 13, 26, 27, 17,
1215  52, 30,  0, 22, 12, 34, 62, 36,
1216  38, 41, 47, 30, 63, 38, 41, 43,
1217  59, 33, 45, 37, 38, 40, 47, 24,
1218  48, 49, 30,  1, 10, 22, 49, 15,
1219  39, 59, 31, 32, 33, 18, 13, 15,
1220  31, 21, 27, 44, 42, 39, 46, 17,
1221  26, 32, 30, 31,  0, 30, 34,  9,
1222  12, 13, 25, 31, 32, 55, 43, 35,
1223  61, 33, 35, 46, 25, 47, 48, 62,
1224  63, 38, 61,  1,  2,  5,  7,  9,
1225  46, 10, 34, 35, 36, 55, 51,  7,
1226  40, 23, 34, 37,  5, 13, 42, 18,
1227  25, 27, 28,
1228 };
1229
1230 /* motion vector table 1 */
1231 static const uint16_t table1_mv_code[1100] = {
1232  0x0000, 0x0007, 0x0009, 0x000f, 0x000a, 0x0011, 0x001a, 0x001c,
1233  0x0011, 0x0031, 0x0025, 0x002d, 0x002f, 0x006f, 0x0075, 0x0041,
1234  0x004c, 0x004e, 0x005c, 0x0060, 0x0062, 0x0066, 0x0068, 0x0069,
1235  0x006b, 0x00a6, 0x00c1, 0x00cb, 0x00cc, 0x00ce, 0x00da, 0x00e8,
1236  0x00ee, 0x0087, 0x0090, 0x009e, 0x009f, 0x00ba, 0x00ca, 0x00d8,
1237  0x00db, 0x00df, 0x0104, 0x0109, 0x010c, 0x0143, 0x0145, 0x014a,
1238  0x0156, 0x015c, 0x01b3, 0x01d3, 0x01da, 0x0103, 0x0109, 0x010b,
1239  0x0122, 0x0127, 0x0134, 0x0161, 0x0164, 0x0176, 0x0184, 0x018d,
1240  0x018e, 0x018f, 0x0190, 0x0193, 0x0196, 0x019d, 0x019e, 0x019f,
1241  0x01a9, 0x01b2, 0x01b4, 0x01ba, 0x01bb, 0x01bc, 0x0201, 0x0202,
1242  0x0205, 0x0207, 0x020d, 0x0210, 0x0211, 0x0215, 0x021b, 0x021f,
1243  0x0281, 0x0285, 0x0290, 0x029c, 0x029d, 0x02a2, 0x02a7, 0x02a8,
1244  0x02aa, 0x02b0, 0x02b1, 0x02b4, 0x02bc, 0x02bf, 0x0320, 0x0326,
1245  0x0327, 0x0329, 0x032a, 0x0336, 0x0360, 0x0362, 0x0363, 0x0372,
1246  0x03b2, 0x03bc, 0x03bd, 0x0203, 0x0205, 0x021a, 0x0249, 0x024a,
1247  0x024c, 0x02c7, 0x02ca, 0x02ce, 0x02ef, 0x030d, 0x0322, 0x0325,
1248  0x0338, 0x0373, 0x037a, 0x0409, 0x0415, 0x0416, 0x0418, 0x0428,
1249  0x042d, 0x042f, 0x0434, 0x0508, 0x0509, 0x0510, 0x0511, 0x051c,
1250  0x051e, 0x0524, 0x0541, 0x0543, 0x0546, 0x0547, 0x054d, 0x0557,
1251  0x055f, 0x056a, 0x056c, 0x056d, 0x056f, 0x0576, 0x0577, 0x057a,
1252  0x057b, 0x057c, 0x057d, 0x0600, 0x0601, 0x0603, 0x0614, 0x0616,
1253  0x0617, 0x061c, 0x061f, 0x0642, 0x0648, 0x0649, 0x064a, 0x064b,
1254  0x0657, 0x0668, 0x0669, 0x066b, 0x066e, 0x067f, 0x06c2, 0x06c8,
1255  0x06cb, 0x06de, 0x06df, 0x06e2, 0x06e3, 0x06ef, 0x0748, 0x074b,
1256  0x076e, 0x076f, 0x077c, 0x0409, 0x0423, 0x0428, 0x0429, 0x042a,
1257  0x042b, 0x0432, 0x0433, 0x0496, 0x049a, 0x04d5, 0x04db, 0x0581,
1258  0x0582, 0x058b, 0x058c, 0x058d, 0x0598, 0x0599, 0x059a, 0x059e,
1259  0x05dd, 0x0619, 0x0632, 0x0633, 0x0648, 0x0672, 0x06a1, 0x06a2,
1260  0x06a3, 0x06af, 0x06e2, 0x06e3, 0x06e4, 0x0800, 0x0801, 0x0802,
1261  0x0803, 0x081a, 0x081b, 0x0829, 0x082f, 0x0832, 0x083e, 0x083f,
1262  0x0852, 0x0853, 0x0858, 0x086b, 0x0877, 0x0878, 0x0879, 0x087a,
1263  0x087b, 0x0a00, 0x0a01, 0x0a0d, 0x0a0e, 0x0a0f, 0x0a24, 0x0a37,
1264  0x0a3a, 0x0a3b, 0x0a3e, 0x0a46, 0x0a47, 0x0a4a, 0x0a4b, 0x0a5f,
1265  0x0a79, 0x0a7a, 0x0a7b, 0x0a80, 0x0a81, 0x0a84, 0x0a85, 0x0a99,
1266  0x0aa5, 0x0aa6, 0x0ab8, 0x0aba, 0x0abb, 0x0abc, 0x0abd, 0x0ac8,
1267  0x0ace, 0x0acf, 0x0ad7, 0x0adc, 0x0aeb, 0x0c04, 0x0c25, 0x0c26,
1268  0x0c27, 0x0c2a, 0x0c2b, 0x0c3a, 0x0c3b, 0x0c3c, 0x0c3d, 0x0ca0,
1269  0x0cad, 0x0cd4, 0x0cd5, 0x0cfc, 0x0cfd, 0x0d86, 0x0d92, 0x0d93,
1270  0x0d94, 0x0d95, 0x0db0, 0x0db8, 0x0db9, 0x0dba, 0x0dbb, 0x0dc0,
1271  0x0dc2, 0x0dc3, 0x0dda, 0x0ddb, 0x0ddc, 0x0ddd, 0x0e92, 0x0e93,
1272  0x0e94, 0x0e95, 0x0ec7, 0x0ecc, 0x0ece, 0x0ecf, 0x0ed8, 0x0ed9,
1273  0x0eda, 0x0edb, 0x0808, 0x0809, 0x080a, 0x0810, 0x0811, 0x0844,
1274  0x0845, 0x0861, 0x0862, 0x0863, 0x086c, 0x0922, 0x0923, 0x092e,
1275  0x092f, 0x0936, 0x0937, 0x09b1, 0x09b2, 0x09b3, 0x09b4, 0x09b5,
1276  0x09b8, 0x09b9, 0x09ba, 0x09bb, 0x09bc, 0x09bd, 0x09be, 0x09bf,
1277  0x0b00, 0x0b15, 0x0b2c, 0x0b2d, 0x0b2e, 0x0b2f, 0x0b36, 0x0bb9,
1278  0x0c28, 0x0c2a, 0x0c2b, 0x0c2c, 0x0c2d, 0x0c2e, 0x0c2f, 0x0c30,
1279  0x0c31, 0x0c38, 0x0c60, 0x0c61, 0x0c62, 0x0c63, 0x0c8d, 0x0c8e,
1280  0x0c8f, 0x0c92, 0x0cbe, 0x0cbf, 0x0ce6, 0x0ce7, 0x0d40, 0x0d41,
1281  0x0d57, 0x0d58, 0x0d59, 0x0d5a, 0x0d5b, 0x0d5c, 0x0d5d, 0x0d98,
1282  0x0d99, 0x0d9a, 0x0d9b, 0x0d9c, 0x0d9d, 0x0dad, 0x0dae, 0x0daf,
1283  0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, 0x0dca, 0x0dcb, 0x0dec, 0x0ded,
1284  0x0dee, 0x0def, 0x1018, 0x1022, 0x1023, 0x1030, 0x1031, 0x1032,
1285  0x1033, 0x1050, 0x1051, 0x105c, 0x1074, 0x1075, 0x1076, 0x1077,
1286  0x1078, 0x1079, 0x107a, 0x107b, 0x10b2, 0x10b3, 0x10b8, 0x10b9,
1287  0x10ba, 0x10bb, 0x10d4, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x1404,
1288  0x1405, 0x1406, 0x1407, 0x1410, 0x1411, 0x1412, 0x1413, 0x1414,
1289  0x1415, 0x1416, 0x1417, 0x1418, 0x1419, 0x1466, 0x1467, 0x1468,
1290  0x1469, 0x146a, 0x146b, 0x146c, 0x146d, 0x147e, 0x147f, 0x1488,
1291  0x1489, 0x148a, 0x148b, 0x14b6, 0x14b7, 0x14b8, 0x14b9, 0x14ba,
1292  0x14bb, 0x14bc, 0x14bd, 0x14f0, 0x14f1, 0x14f8, 0x14f9, 0x14fa,
1293  0x14fb, 0x14fc, 0x14fd, 0x14fe, 0x14ff, 0x152a, 0x152b, 0x152c,
1294  0x152d, 0x152e, 0x152f, 0x1530, 0x1531, 0x1548, 0x1549, 0x154e,
1295  0x154f, 0x1558, 0x1559, 0x155a, 0x155b, 0x1572, 0x159a, 0x159b,
1296  0x15ac, 0x15ba, 0x15bb, 0x15d0, 0x15d1, 0x15d2, 0x15d3, 0x15d4,
1297  0x15d5, 0x181d, 0x181e, 0x181f, 0x1840, 0x1841, 0x1842, 0x1843,
1298  0x1844, 0x1845, 0x1846, 0x1847, 0x1848, 0x1849, 0x1861, 0x1862,
1299  0x1863, 0x1864, 0x1865, 0x1866, 0x1867, 0x1868, 0x1869, 0x186a,
1300  0x186b, 0x186c, 0x186d, 0x186e, 0x191b, 0x191c, 0x191d, 0x191e,
1301  0x191f, 0x1942, 0x1943, 0x1944, 0x1945, 0x1946, 0x1947, 0x1958,
1302  0x1959, 0x19ed, 0x19ee, 0x19ef, 0x19f0, 0x19f1, 0x19f2, 0x19f3,
1303  0x19f4, 0x19f5, 0x19f6, 0x19f7, 0x1b0e, 0x1b0f, 0x1b62, 0x1b63,
1304  0x1b64, 0x1b65, 0x1b66, 0x1b67, 0x1b68, 0x1b69, 0x1b6a, 0x1b6b,
1305  0x1b6c, 0x1b6d, 0x1b6e, 0x1b6f, 0x1b82, 0x1ba8, 0x1ba9, 0x1baa,
1306  0x1bab, 0x1bac, 0x1bad, 0x1bae, 0x1baf, 0x1bb0, 0x1bb1, 0x1bb2,
1307  0x1bb3, 0x1d80, 0x1d81, 0x1d82, 0x1d83, 0x1d84, 0x1d85, 0x1d86,
1308  0x1d87, 0x1d88, 0x1d89, 0x1d8a, 0x1d8b, 0x1d8c, 0x1d8d, 0x1007,
1309  0x1008, 0x1009, 0x100a, 0x100b, 0x100c, 0x100d, 0x100e, 0x100f,
1310  0x1016, 0x1080, 0x1081, 0x1082, 0x1083, 0x1084, 0x1085, 0x1086,
1311  0x1087, 0x10c0, 0x123a, 0x123b, 0x123c, 0x123d, 0x123e, 0x123f,
1312  0x1240, 0x1241, 0x1242, 0x1243, 0x1350, 0x1352, 0x1353, 0x1358,
1313  0x1359, 0x135a, 0x135b, 0x135c, 0x135d, 0x135e, 0x135f, 0x1360,
1314  0x1361, 0x1602, 0x1603, 0x160c, 0x160d, 0x160e, 0x160f, 0x1620,
1315  0x1621, 0x1622, 0x1623, 0x1624, 0x1625, 0x1626, 0x1627, 0x1628,
1316  0x1629, 0x166e, 0x166f, 0x167c, 0x167d, 0x167e, 0x167f, 0x1770,
1317  0x1771, 0x1852, 0x1853, 0x1872, 0x1873, 0x1874, 0x1875, 0x1876,
1318  0x1877, 0x1878, 0x1879, 0x187a, 0x187b, 0x187c, 0x187d, 0x187e,
1319  0x187f, 0x1918, 0x1919, 0x1926, 0x1927, 0x1970, 0x1971, 0x1972,
1320  0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978, 0x1979, 0x197a,
1321  0x197b, 0x1aa0, 0x1aa1, 0x1aa2, 0x1aa3, 0x1aa4, 0x1aa5, 0x1aa6,
1322  0x1aa7, 0x1aa8, 0x1aa9, 0x1aaa, 0x1aab, 0x1aac, 0x1aad, 0x1b3c,
1323  0x1b3d, 0x1b3e, 0x1b3f, 0x1b50, 0x1b51, 0x1b52, 0x1b53, 0x1b54,
1324  0x1b55, 0x1b56, 0x1b57, 0x1b58, 0x1b59, 0x2032, 0x2033, 0x2034,
1325  0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x203a, 0x203b, 0x203c,
1326  0x203d, 0x203e, 0x203f, 0x2040, 0x2041, 0x2042, 0x2043, 0x20ba,
1327  0x20bb, 0x20cc, 0x20cd, 0x20ce, 0x20cf, 0x20e0, 0x20e1, 0x20e2,
1328  0x20e3, 0x20e4, 0x20e5, 0x20e6, 0x20e7, 0x21aa, 0x21ab, 0x21c0,
1329  0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, 0x21c8,
1330  0x21c9, 0x21ca, 0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf, 0x21d0,
1331  0x21d1, 0x21d2, 0x21d3, 0x2894, 0x2895, 0x2896, 0x2897, 0x2898,
1332  0x2899, 0x289a, 0x289b, 0x289c, 0x289d, 0x289e, 0x289f, 0x28c0,
1333  0x28c1, 0x28c2, 0x28c3, 0x28c4, 0x28c5, 0x28c6, 0x28c7, 0x28c8,
1334  0x28c9, 0x28ca, 0x28cb, 0x2930, 0x2931, 0x2932, 0x2933, 0x2934,
1335  0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c,
1336  0x293d, 0x293e, 0x293f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964,
1337  0x2965, 0x2966, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x2a40,
1338  0x2a41, 0x2a42, 0x2a43, 0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48,
1339  0x2a49, 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50,
1340  0x2a51, 0x2a52, 0x2a53, 0x2ae6, 0x2ae7, 0x2b24, 0x2b25, 0x2b26,
1341  0x2b27, 0x2b28, 0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e,
1342  0x2b2f, 0x2b30, 0x2b31, 0x2b32, 0x2b33, 0x2b5a, 0x2b5b, 0x3014,
1343  0x3015, 0x3016, 0x3017, 0x3020, 0x3021, 0x3022, 0x3023, 0x3024,
1344  0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c,
1345  0x302d, 0x302e, 0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034,
1346  0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x30c0, 0x30c1, 0x30de,
1347  0x30df, 0x3218, 0x3219, 0x321a, 0x321b, 0x321c, 0x321d, 0x321e,
1348  0x321f, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226,
1349  0x3227, 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e,
1350  0x322f, 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3378,
1351  0x3379, 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x337f, 0x33c0,
1352  0x33c1, 0x33c2, 0x33c3, 0x33c4, 0x33c5, 0x33c6, 0x33c7, 0x33c8,
1353  0x33c9, 0x33ca, 0x33cb, 0x33cc, 0x33cd, 0x33ce, 0x33cf, 0x33d0,
1354  0x33d1, 0x33d2, 0x33d3, 0x33d4, 0x33d5, 0x33d6, 0x33d7, 0x33d8,
1355  0x33d9, 0x3706, 0x3707, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
1356  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
1357  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
1358  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
1359  0x374d, 0x374e, 0x374f, 0x3b34, 0x3b35, 0x3b36, 0x3b37, 0x3be8,
1360  0x3be9, 0x3bea, 0x3beb, 0x3bec, 0x3bed, 0x3bee, 0x3bef, 0x3bf0,
1361  0x3bf1, 0x3bf2, 0x3bf3, 0x3bf4, 0x3bf5, 0x3bf6, 0x3bf7, 0x3bf8,
1362  0x3bf9, 0x3bfa, 0x3bfb, 0x3bfc, 0x3bfd, 0x3bfe, 0x3bff, 0x2000,
1363  0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008,
1364  0x2009, 0x200a, 0x200b, 0x200c, 0x200d, 0x202e, 0x202f, 0x2182,
1365  0x2183, 0x21b4, 0x21b5, 0x21b6, 0x21b7, 0x21b8, 0x21b9, 0x21ba,
1366  0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf, 0x2460, 0x2461, 0x2462,
1367  0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a,
1368  0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472,
1369  0x2473, 0x26a2, 0x26a3, 0x000b,
1370 };
1371
1372 static const uint8_t table1_mv_bits[1100] = {
1373   2,  4,  4,  4,  5,  5,  5,  5,
1374   6,  6,  7,  7,  7,  7,  7,  8,
1375   8,  8,  8,  8,  8,  8,  8,  8,
1376   8,  8,  8,  8,  8,  8,  8,  8,
1377   8,  9,  9,  9,  9,  9,  9,  9,
1378   9,  9,  9,  9,  9,  9,  9,  9,
1379   9,  9,  9,  9,  9, 10, 10, 10,
1380  10, 10, 10, 10, 10, 10, 10, 10,
1381  10, 10, 10, 10, 10, 10, 10, 10,
1382  10, 10, 10, 10, 10, 10, 10, 10,
1383  10, 10, 10, 10, 10, 10, 10, 10,
1384  10, 10, 10, 10, 10, 10, 10, 10,
1385  10, 10, 10, 10, 10, 10, 10, 10,
1386  10, 10, 10, 10, 10, 10, 10, 10,
1387  10, 10, 10, 11, 11, 11, 11, 11,
1388  11, 11, 11, 11, 11, 11, 11, 11,
1389  11, 11, 11, 11, 11, 11, 11, 11,
1390  11, 11, 11, 11, 11, 11, 11, 11,
1391  11, 11, 11, 11, 11, 11, 11, 11,
1392  11, 11, 11, 11, 11, 11, 11, 11,
1393  11, 11, 11, 11, 11, 11, 11, 11,
1394  11, 11, 11, 11, 11, 11, 11, 11,
1395  11, 11, 11, 11, 11, 11, 11, 11,
1396  11, 11, 11, 11, 11, 11, 11, 11,
1397  11, 11, 11, 12, 12, 12, 12, 12,
1398  12, 12, 12, 12, 12, 12, 12, 12,
1399  12, 12, 12, 12, 12, 12, 12, 12,
1400  12, 12, 12, 12, 12, 12, 12, 12,
1401  12, 12, 12, 12, 12, 12, 12, 12,
1402  12, 12, 12, 12, 12, 12, 12, 12,
1403  12, 12, 12, 12, 12, 12, 12, 12,
1404  12, 12, 12, 12, 12, 12, 12, 12,
1405  12, 12, 12, 12, 12, 12, 12, 12,
1406  12, 12, 12, 12, 12, 12, 12, 12,
1407  12, 12, 12, 12, 12, 12, 12, 12,
1408  12, 12, 12, 12, 12, 12, 12, 12,
1409  12, 12, 12, 12, 12, 12, 12, 12,
1410  12, 12, 12, 12, 12, 12, 12, 12,
1411  12, 12, 12, 12, 12, 12, 12, 12,
1412  12, 12, 12, 12, 12, 12, 12, 12,
1413  12, 12, 12, 12, 12, 12, 12, 12,
1414  12, 12, 13, 13, 13, 13, 13, 13,
1415  13, 13, 13, 13, 13, 13, 13, 13,
1416  13, 13, 13, 13, 13, 13, 13, 13,
1417  13, 13, 13, 13, 13, 13, 13, 13,
1418  13, 13, 13, 13, 13, 13, 13, 13,
1419  13, 13, 13, 13, 13, 13, 13, 13,
1420  13, 13, 13, 13, 13, 13, 13, 13,
1421  13, 13, 13, 13, 13, 13, 13, 13,
1422  13, 13, 13, 13, 13, 13, 13, 13,
1423  13, 13, 13, 13, 13, 13, 13, 13,
1424  13, 13, 13, 13, 13, 13, 13, 13,
1425  13, 13, 13, 13, 13, 13, 13, 13,
1426  13, 13, 13, 13, 13, 13, 13, 13,
1427  13, 13, 13, 13, 13, 13, 13, 13,
1428  13, 13, 13, 13, 13, 13, 13, 13,
1429  13, 13, 13, 13, 13, 13, 13, 13,
1430  13, 13, 13, 13, 13, 13, 13, 13,
1431  13, 13, 13, 13, 13, 13, 13, 13,
1432  13, 13, 13, 13, 13, 13, 13, 13,
1433  13, 13, 13, 13, 13, 13, 13, 13,
1434  13, 13, 13, 13, 13, 13, 13, 13,
1435  13, 13, 13, 13, 13, 13, 13, 13,
1436  13, 13, 13, 13, 13, 13, 13, 13,
1437  13, 13, 13, 13, 13, 13, 13, 13,
1438  13, 13, 13, 13, 13, 13, 13, 13,
1439  13, 13, 13, 13, 13, 13, 13, 13,
1440  13, 13, 13, 13, 13, 13, 13, 13,
1441  13, 13, 13, 13, 13, 13, 13, 13,
1442  13, 13, 13, 13, 13, 13, 13, 13,
1443  13, 13, 13, 13, 13, 13, 13, 13,
1444  13, 13, 13, 13, 13, 13, 13, 13,
1445  13, 13, 13, 13, 13, 13, 13, 13,
1446  13, 13, 13, 13, 13, 13, 13, 13,
1447  13, 13, 13, 13, 13, 13, 13, 13,
1448  13, 13, 13, 13, 13, 13, 13, 13,
1449  13, 13, 13, 13, 13, 13, 13, 14,
1450  14, 14, 14, 14, 14, 14, 14, 14,
1451  14, 14, 14, 14, 14, 14, 14, 14,
1452  14, 14, 14, 14, 14, 14, 14, 14,
1453  14, 14, 14, 14, 14, 14, 14, 14,
1454  14, 14, 14, 14, 14, 14, 14, 14,
1455  14, 14, 14, 14, 14, 14, 14, 14,
1456  14, 14, 14, 14, 14, 14, 14, 14,
1457  14, 14, 14, 14, 14, 14, 14, 14,
1458  14, 14, 14, 14, 14, 14, 14, 14,
1459  14, 14, 14, 14, 14, 14, 14, 14,
1460  14, 14, 14, 14, 14, 14, 14, 14,
1461  14, 14, 14, 14, 14, 14, 14, 14,
1462  14, 14, 14, 14, 14, 14, 14, 14,
1463  14, 14, 14, 14, 14, 14, 14, 14,
1464  14, 14, 14, 14, 14, 14, 14, 14,
1465  14, 14, 14, 14, 14, 14, 14, 14,
1466  14, 14, 14, 14, 14, 14, 14, 14,
1467  14, 14, 14, 14, 14, 14, 14, 14,
1468  14, 14, 14, 14, 14, 14, 14, 14,
1469  14, 14, 14, 14, 14, 14, 14, 14,
1470  14, 14, 14, 14, 14, 14, 14, 14,
1471  14, 14, 14, 14, 14, 14, 14, 14,
1472  14, 14, 14, 14, 14, 14, 14, 14,
1473  14, 14, 14, 14, 14, 14, 14, 14,
1474  14, 14, 14, 14, 14, 14, 14, 14,
1475  14, 14, 14, 14, 14, 14, 14, 14,
1476  14, 14, 14, 14, 14, 14, 14, 14,
1477  14, 14, 14, 14, 14, 14, 14, 14,
1478  14, 14, 14, 14, 14, 14, 14, 14,
1479  14, 14, 14, 14, 14, 14, 14, 14,
1480  14, 14, 14, 14, 14, 14, 14, 14,
1481  14, 14, 14, 14, 14, 14, 14, 14,
1482  14, 14, 14, 14, 14, 14, 14, 14,
1483  14, 14, 14, 14, 14, 14, 14, 14,
1484  14, 14, 14, 14, 14, 14, 14, 14,
1485  14, 14, 14, 14, 14, 14, 14, 14,
1486  14, 14, 14, 14, 14, 14, 14, 14,
1487  14, 14, 14, 14, 14, 14, 14, 14,
1488  14, 14, 14, 14, 14, 14, 14, 14,
1489  14, 14, 14, 14, 14, 14, 14, 14,
1490  14, 14, 14, 14, 14, 14, 14, 14,
1491  14, 14, 14, 14, 14, 14, 14, 14,
1492  14, 14, 14, 14, 14, 14, 14, 14,
1493  14, 14, 14, 14, 14, 14, 14, 14,
1494  14, 14, 14, 14, 14, 14, 14, 14,
1495  14, 14, 14, 14, 14, 14, 14, 14,
1496  14, 14, 14, 14, 14, 14, 14, 14,
1497  14, 14, 14, 14, 14, 14, 14, 14,
1498  14, 14, 14, 14, 14, 14, 14, 14,
1499  14, 14, 14, 14, 14, 14, 14, 14,
1500  14, 14, 14, 14, 14, 14, 14, 14,
1501  14, 14, 14, 14, 14, 14, 14, 14,
1502  14, 14, 14, 14, 14, 14, 14, 14,
1503  14, 14, 14, 14, 14, 14, 14, 15,
1504  15, 15, 15, 15, 15, 15, 15, 15,
1505  15, 15, 15, 15, 15, 15, 15, 15,
1506  15, 15, 15, 15, 15, 15, 15, 15,
1507  15, 15, 15, 15, 15, 15, 15, 15,
1508  15, 15, 15, 15, 15, 15, 15, 15,
1509  15, 15, 15, 15, 15, 15, 15, 15,
1510  15, 15, 15,  4,
1511 };
1512
1513 static const uint8_t table1_mvx[1099] = {
1514  32, 31, 32, 31, 33, 32, 33, 33,
1515  31, 34, 30, 32, 32, 34, 35, 32,
1516  34, 33, 29, 30, 30, 32, 31, 31,
1517  33, 35, 35, 33, 31, 29, 29, 33,
1518  34, 30, 31, 28, 36, 30, 34, 32,
1519  32, 37, 32, 32, 25, 27, 39, 32,
1520  32, 32, 38, 35, 36, 32, 37, 61,
1521  26, 32, 34, 35,  3, 35, 27, 28,
1522  29, 34, 28, 37, 31, 36, 32, 27,
1523  31, 30, 29, 39, 33, 29, 33, 35,
1524  25, 25, 29, 33, 31, 31, 31, 33,
1525  32, 30, 32, 32, 41, 39, 33, 36,
1526  32, 28, 34, 36, 38, 24, 60, 31,
1527  23, 28, 32, 33, 59, 32, 40, 30,
1528   5, 34, 32, 38, 32, 30, 43,  4,
1529  32, 32, 42, 31, 31, 32, 26, 38,
1530  26, 22, 21, 37, 61, 63, 37, 31,
1531  32, 33,  2,  1, 23, 33, 41, 27,
1532  35, 30, 38, 23, 33,  3, 28, 34,
1533  34, 27, 41, 29, 39, 35, 36, 29,
1534  32, 27, 30, 32, 24, 61, 37, 26,
1535  59, 25, 35, 27, 36, 37, 30, 31,
1536  34, 40,  3, 28, 34, 39, 32, 31,
1537  32, 30, 24, 28, 35, 36, 26, 32,
1538  31, 33, 29, 33, 39, 25, 30, 24,
1539  35, 59, 29, 34, 25, 30, 21, 35,
1540  43, 40, 32, 29,  5, 28, 31, 62,
1541  33, 33, 25, 31, 21, 31, 43, 31,
1542  34, 33, 20, 40, 39, 31, 31, 57,
1543  38, 32, 42, 33, 32, 31, 32, 29,
1544  30, 44,  5, 31, 22, 34, 36, 17,
1545  38, 58, 38, 35, 32, 60, 35, 24,
1546  32, 38, 16, 45, 42, 32, 31, 29,
1547   4, 30, 17, 40, 46, 48, 63, 32,
1548  42, 19, 41, 22, 28, 36, 45, 33,
1549  33, 32, 29,  7, 41, 42, 18, 33,
1550  33, 32, 22, 37,  1, 26, 22, 23,
1551  49, 28, 26, 27, 32, 33, 27, 23,
1552  28, 36, 15,  6, 34, 27, 31, 26,
1553  23,  2, 33, 32, 34, 41, 28, 32,
1554  41,  0, 36, 38, 34, 31, 47, 32,
1555  17, 31, 39, 33, 37, 51, 30, 47,
1556  32, 50, 32, 19, 63, 30, 25, 27,
1557  33, 62, 24, 31, 27, 30, 37, 31,
1558  45, 32, 39, 20, 46, 47, 35, 19,
1559  34,  1, 49, 21, 21, 14, 51, 26,
1560  23, 31, 36, 35, 58, 29, 29, 21,
1561  20, 42, 13, 28, 12, 40, 31, 33,
1562  39, 60, 32, 44, 33, 31, 28, 37,
1563  29, 32, 30, 49, 43, 28, 39, 25,
1564  32, 48,  2, 15, 20, 25, 31, 28,
1565  21, 24, 25, 15, 31, 17, 37, 43,
1566  18, 32, 33, 24, 33, 36, 13, 33,
1567  31, 39, 11, 31, 33, 32, 39, 37,
1568  32, 32, 29, 17, 44, 46, 36, 35,
1569  26, 37, 58, 32, 34, 38,  8, 38,
1570  38, 22, 29, 25, 16, 35, 32, 35,
1571  33, 43, 18, 46, 38, 50, 33, 18,
1572  53, 60, 13, 32, 36, 33, 51, 36,
1573  43, 45, 27, 42, 29, 24, 30, 25,
1574  31, 52, 31, 35, 38,  9, 22, 34,
1575   4, 17, 28, 55, 42, 25, 17, 20,
1576  47, 34, 33, 16, 40, 25, 16, 30,
1577  53, 29, 10, 11, 14, 26, 33,  4,
1578  35, 44, 26, 16, 31, 26, 34, 38,
1579  29, 31, 30, 24, 22, 61, 32,  9,
1580  45, 34, 31, 19,  9, 31, 46, 31,
1581  35, 54, 29, 57, 30, 50,  3, 31,
1582  63, 34, 47, 41, 51, 18, 31, 14,
1583  37, 38, 31, 24, 32, 31, 50, 33,
1584  31, 54, 27,  9, 33, 23, 19, 32,
1585  29, 29, 33, 28, 47, 49, 30, 47,
1586  33, 27, 25, 54, 44, 45, 50, 58,
1587  51, 48, 33, 59, 33, 34, 57, 13,
1588  26, 33, 13, 48, 30, 11,  7, 56,
1589  34, 55, 26,  0, 26, 35,  1, 51,
1590  33, 53, 31, 45, 12, 29, 29, 51,
1591  31, 48,  2,  6, 34, 30, 28, 33,
1592  60, 40, 27, 46, 31,  9, 35, 29,
1593  31, 39, 55, 46, 19, 37, 62, 34,
1594  30, 16, 19, 49, 41, 41, 39, 37,
1595  14,  5, 13, 35, 55, 30, 40, 40,
1596  42,  8, 20, 25, 45, 35, 33, 36,
1597  54, 38, 27, 37, 62, 40, 15, 59,
1598  49, 31, 29, 34, 34, 39, 24, 29,
1599  25, 29, 21, 29, 10, 61, 33, 49,
1600  35, 34,  3, 38, 39, 29,  7, 41,
1601   1, 35,  4, 23, 15, 23, 11, 37,
1602  28, 35, 30, 30, 24,  1, 43, 56,
1603   8, 34, 42, 24, 45, 30, 20, 23,
1604   8, 38, 22, 33, 17, 52, 34, 22,
1605  53, 43, 44,  1, 27, 31, 41, 43,
1606  41, 30, 31, 36, 30,  5, 55, 31,
1607  33, 30, 40, 23, 15, 29, 34, 34,
1608  59, 34, 30, 11, 13, 38,  5,  0,
1609  30, 42,  5, 30, 29, 34, 10, 44,
1610  30, 63, 35, 12,  3, 26, 15, 17,
1611  25, 34, 43, 39, 34, 56, 29, 23,
1612  30, 12, 30, 10, 35,  9, 24, 58,
1613  10, 12, 54, 33, 37, 20, 41, 35,
1614  29, 18, 61, 30, 40, 24, 39, 53,
1615  62, 26, 29, 33, 34, 53, 49, 21,
1616  27, 11, 63, 20, 26, 23,  7, 13,
1617   6, 47, 29, 30,  9, 51, 22, 34,
1618  21, 25, 33, 56, 57, 30, 38, 51,
1619  51, 38, 63, 28, 40, 35, 33, 18,
1620  33, 33, 24, 58, 58, 34, 49, 29,
1621  43,  4,  1,  4, 42, 35, 35, 30,
1622  17,  5, 56, 61, 25, 37, 36, 55,
1623  28, 35, 29, 50, 48, 52,  2, 42,
1624  34, 40, 46, 46, 43, 35, 29, 48,
1625  20, 29, 31, 41,  7, 30, 35, 19,
1626  14, 21,  8, 39, 39, 40, 46, 55,
1627  34,  6, 30, 34, 37, 25, 37, 33,
1628  22, 44, 52, 17, 35, 29, 36, 35,
1629  40, 37, 28, 30, 50, 14, 28, 55,
1630   6, 23, 19, 14, 30,  3, 30, 28,
1631  28, 61, 61, 47, 45, 48, 40, 40,
1632  34, 34, 25, 30, 29, 35,  4, 26,
1633  53, 50, 26, 41, 27, 59, 27, 38,
1634  39,  3, 50, 43, 47, 23, 33, 55,
1635  35, 21, 23, 35, 61, 33, 46, 52,
1636  35, 34, 24, 30, 43, 16, 37, 21,
1637   2, 24, 45, 34, 30, 55, 55,  1,
1638  29, 29, 26, 28, 25, 31, 36, 22,
1639  17, 30, 52,  2, 44, 44, 57, 26,
1640  62, 41, 39, 57, 26, 46, 49, 11,
1641  16, 19,  5, 59, 38, 39, 58, 38,
1642  25, 49, 50, 22, 28, 59,  9, 59,
1643   7, 28, 55, 17,  4, 35, 50, 21,
1644  29, 44, 47, 18, 24, 19, 25, 42,
1645  35,  3, 51, 35, 16, 35, 30, 63,
1646  57, 39, 39, 25, 35, 38,  9, 16,
1647  36, 45, 31, 60, 14, 34, 42, 24,
1648   0, 37, 18, 61, 57, 37, 28, 53,
1649  20, 46, 14, 47, 38, 38, 38,  9,
1650  34, 39, 43, 17, 39, 59,  5, 27,
1651   0, 12, 27,
1652 };
1653
1654 static const uint8_t table1_mvy[1099] = {
1655  32, 32, 31, 31, 32, 33, 31, 33,
1656  33, 32, 32, 30, 34, 31, 32, 29,
1657  33, 30, 32, 33, 31, 35, 34, 30,
1658  34, 31, 33, 29, 29, 31, 33, 35,
1659  30, 30, 35, 32, 32, 34, 34, 28,
1660  25, 32, 36, 27, 32, 32, 32, 37,
1661  39,  3, 32, 30, 31, 26, 31, 32,
1662  32, 38, 29, 29, 32, 34, 31, 31,
1663  34, 35, 33, 33, 28, 33,  1, 33,
1664  27, 29, 30, 31, 28, 29, 37, 35,
1665  31, 33, 35, 27, 36, 37, 25, 25,
1666  61, 35,  4,  5, 32, 33, 36, 30,
1667  23, 30, 28, 34, 31, 32, 32, 39,
1668  32, 34, 21, 39, 32, 59, 32, 28,
1669  32, 36, 60, 33, 24, 36, 32, 32,
1670  41,  2, 32, 38, 26, 22, 33, 30,
1671  31, 32, 32, 30, 31, 32, 29,  3,
1672  40, 38, 32, 32, 33, 26, 31, 34,
1673  28, 38, 34, 31,  3, 31, 35, 38,
1674  27, 35, 33, 28, 29, 27, 29, 27,
1675  43, 29, 37, 63, 31, 33, 34, 30,
1676  31, 30, 37, 30, 35, 35, 26, 41,
1677  37, 31, 33, 28, 26, 30, 42, 24,
1678   7, 27, 33, 29, 36, 28, 34, 57,
1679  23, 41, 36, 23, 35, 34, 25, 30,
1680  25, 33, 25, 25, 29, 24, 33, 39,
1681  33, 33,  0, 37, 31, 36, 21, 32,
1682  61, 24, 35, 61, 31,  5, 31, 59,
1683  39, 21, 32, 30, 34, 22, 40, 32,
1684  29, 16, 31,  5, 62,  2, 20, 39,
1685  39, 32, 33,  1, 31, 24, 36, 32,
1686  36, 32, 28, 26,  6, 31, 38, 34,
1687  58, 35, 32, 33, 33, 17, 43, 26,
1688  31, 40, 31, 34, 32, 32, 31, 19,
1689  30, 32, 29, 33, 38, 38, 32, 59,
1690  40, 18, 38, 32, 35, 34, 32, 17,
1691   1, 15, 30, 28, 31, 28, 34, 29,
1692  32, 27, 35, 27, 49, 22, 37, 34,
1693  37, 26, 32, 32, 22, 28, 45, 29,
1694  30, 31, 43, 46, 41, 30, 26, 13,
1695  34, 32, 27, 38, 42, 42, 33, 47,
1696  33, 60, 27, 42, 25, 32, 22, 32,
1697  48, 32, 45, 33, 33, 41, 27, 25,
1698  19, 31, 35, 19, 36, 42, 27, 17,
1699  31, 44, 28, 33, 33, 31, 23, 31,
1700  40, 33, 31, 34, 30, 32, 33, 36,
1701  35, 47, 37, 41, 31, 23, 41, 29,
1702  30, 35, 32, 25, 32, 28, 58,  2,
1703  37, 33, 14, 33, 49, 20, 39, 36,
1704  21,  9, 23, 33, 35, 24, 39, 37,
1705  11, 33, 30, 31, 31, 28, 51, 40,
1706  35, 29, 25, 33, 46, 35, 37, 30,
1707  30,  8, 63, 28, 15, 40, 33, 45,
1708  49, 25, 32,  4, 47, 51, 36, 39,
1709  53, 10, 24, 29, 30, 31, 25, 40,
1710  38, 38, 33, 56, 23, 27, 32, 37,
1711  26, 29, 43, 36, 33, 24, 55, 43,
1712   9, 29, 34, 34, 24, 33, 18, 33,
1713  33, 30, 31, 50, 24, 60, 30, 39,
1714  34, 30, 39, 28, 22, 38,  2, 26,
1715  63, 32, 57, 21, 39, 33, 28, 18,
1716  30, 34, 22, 33, 29, 41, 30, 34,
1717  35, 21, 13, 34, 35, 39, 30, 46,
1718  32, 42, 32, 31, 33, 26, 11, 33,
1719  22, 31, 25, 31, 53, 27, 43, 25,
1720  40, 50, 21, 36, 38, 30, 12, 31,
1721  34, 20, 15, 29, 32, 62, 30, 13,
1722  17, 32, 19, 31, 20, 31, 30,  7,
1723   1, 17, 34, 37, 31, 31, 44, 34,
1724  26, 40, 16, 37, 52, 48, 30, 20,
1725  18, 33, 38, 29,  7, 25, 30, 54,
1726  45, 47, 46, 41, 29, 29, 16, 30,
1727  14, 26, 38, 34, 34, 29, 34, 30,
1728  29, 30, 57, 30,  4, 46, 33, 29,
1729  39, 44, 30, 31, 50, 33, 31, 32,
1730  19, 32, 40, 31, 37, 47,  1, 35,
1731  16, 31,  0, 35, 33,  1, 17, 34,
1732   9, 34, 33, 31, 49, 43, 42, 51,
1733  34, 29, 23, 29, 14, 30, 45, 49,
1734  11, 24, 31, 28, 35, 41, 30, 44,
1735  18, 29, 34, 35, 36, 25, 26, 21,
1736  31, 30, 34, 19, 34, 44, 36, 38,
1737  25, 31, 28, 23, 37,  3, 55, 41,
1738  30, 22, 41, 24, 33, 26, 35, 35,
1739  30, 55, 51, 47, 48, 38, 24, 15,
1740  21, 50, 25, 46, 30, 29, 10, 34,
1741  42, 45, 29, 42, 22,  3, 33, 27,
1742  34,  1, 34, 28, 34, 36, 35, 23,
1743  23, 13, 58,  3, 26, 63, 25, 31,
1744  34, 61, 38, 39, 25, 61, 29, 37,
1745  30, 41, 26, 48, 28, 33, 50, 35,
1746  30, 37, 29, 29, 40,  6, 39, 28,
1747  28, 19,  8, 22, 45, 34, 35, 10,
1748  58, 17, 37, 39, 30, 18, 54, 14,
1749  29, 16, 59, 30, 35, 23, 35, 30,
1750  47, 36, 29, 55, 20, 12, 31, 35,
1751  14, 29, 18, 34, 34, 24, 29, 26,
1752  22,  2, 27, 23,  8, 30, 55, 38,
1753  60, 31,  4, 34, 49, 34, 27, 34,
1754  33, 30, 31, 54, 42, 35, 38, 46,
1755  44, 26, 27,  9, 39, 25, 21, 29,
1756  28, 42, 13,  0,  5, 34, 37, 28,
1757  24, 29, 63, 26, 22, 27, 29, 25,
1758  33, 25, 61,  0, 35, 25, 36, 15,
1759  27, 40, 53, 33,  3, 10, 16, 37,
1760  38, 18, 30, 46, 27,  9,  6, 29,
1761  62,  8, 42, 28, 29,  3, 25, 16,
1762  26, 29, 35, 28, 27, 51, 61, 48,
1763  37,  9, 34,  7, 49, 45, 20, 29,
1764  21,  5,  5, 29, 28, 34, 29, 24,
1765  10, 24, 35, 36, 38, 55, 11, 36,
1766  38, 53, 54, 26, 30, 49, 20, 27,
1767  30, 39, 33, 41, 49, 22, 38, 38,
1768   4, 30,  8,  9,  3, 24, 22, 50,
1769  37, 36, 31, 27,  2,  9, 42, 63,
1770  25, 19, 44,  1, 28, 28, 48, 30,
1771  34, 41, 41, 38, 12, 27, 15,  0,
1772  16, 34, 35, 38, 28, 29, 40, 42,
1773  51, 52, 45, 54, 59, 59, 42, 44,
1774  37, 26, 46, 24, 15, 39, 22, 46,
1775  19, 35, 38, 17, 37, 23, 52, 55,
1776  50, 37, 26, 11, 37, 12, 24, 30,
1777  16, 13, 22, 13, 36, 35, 40, 41,
1778  34, 41, 26, 53, 51,  5, 21, 30,
1779   2, 63, 41, 20,  1, 56, 21, 24,
1780  25,  5, 28, 35, 26, 28, 30, 18,
1781  29, 23, 40, 34, 20, 42, 39, 34,
1782  28, 61, 38, 27, 62,  9, 36, 17,
1783   9, 49, 24, 25, 54, 34, 39, 37,
1784   3,  1, 25, 38, 38, 44, 35, 36,
1785  12, 60, 36, 38, 40, 25, 43, 39,
1786  53, 28, 39, 57, 46, 10, 52, 27,
1787  35, 42, 45, 59, 15, 60, 38, 24,
1788  23, 39, 12, 29, 24,  0, 20, 16,
1789  28, 43, 35, 28,  1, 49,  4, 21,
1790  42, 39, 29,  3, 44, 21, 53, 55,
1791  11,  5,  3, 39, 53, 28, 25, 19,
1792  34, 28, 21,
1793 };
1794
1795 /* motion vector table */
1796 typedef struct MVTable {
1797     int n;
1798     const uint16_t *table_mv_code;
1799     const uint8_t *table_mv_bits;
1800     const uint8_t *table_mvx;
1801     const uint8_t *table_mvy;
1802     uint16_t *table_mv_index; /* encoding: convert mv to index in table_mv */
1803     VLC vlc;                /* decoding: vlc */
1804 } MVTable;
1805
1806 static MVTable mv_tables[2] = {
1807     {
1808         1099,
1809         table0_mv_code,
1810         table0_mv_bits,
1811         table0_mvx,
1812         table0_mvy,
1813     },
1814     {
1815         1099,
1816         table1_mv_code,
1817         table1_mv_bits,
1818         table1_mvx,
1819         table1_mvy,
1820     }
1821 };
1822
1823 static const uint8_t v2_mb_type[8][2] = {
1824  {1, 1}, {0   , 2}, {3   , 3}, {9   , 5},
1825  {5, 4}, {0x21, 7}, {0x20, 7}, {0x11, 6},
1826 };
1827
1828 static const uint8_t v2_intra_cbpc[4][2] = {
1829  {1, 1}, {0, 3}, {1, 3}, {1, 2},
1830 };
1831
1832 static const uint8_t wmv1_y_dc_scale_table[32]={
1833 //  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
1834     0, 8, 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,19,20,20,21,21
1835 };
1836 static const uint8_t wmv1_c_dc_scale_table[32]={
1837 //  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
1838     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,19,20,20,21,21,22
1839 };
1840
1841 static const uint8_t old_ff_y_dc_scale_table[32]={
1842 //  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
1843     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,33,34,35,36,37,38,39
1844 };
1845 static const uint8_t old_ff_c_dc_scale_table[32]={
1846 //  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
1847     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,19,20,20,21,21,22
1848 };
1849
1850
1851 #define WMV1_SCANTABLE_COUNT 4
1852
1853 static const uint8_t wmv1_scantable00[64]= {
1854 0x00, 0x08, 0x01, 0x02, 0x09, 0x10, 0x18, 0x11,
1855 0x0A, 0x03, 0x04, 0x0B, 0x12, 0x19, 0x20, 0x28,
1856 0x30, 0x38, 0x29, 0x21, 0x1A, 0x13, 0x0C, 0x05,
1857 0x06, 0x0D, 0x14, 0x1B, 0x22, 0x31, 0x39, 0x3A,
1858 0x32, 0x2A, 0x23, 0x1C, 0x15, 0x0E, 0x07, 0x0F,
1859 0x16, 0x1D, 0x24, 0x2B, 0x33, 0x3B, 0x3C, 0x34,
1860 0x2C, 0x25, 0x1E, 0x17, 0x1F, 0x26, 0x2D, 0x35,
1861 0x3D, 0x3E, 0x36, 0x2E, 0x27, 0x2F, 0x37, 0x3F,
1862 };
1863 static const uint8_t wmv1_scantable01[64]= {
1864 0x00, 0x08, 0x01, 0x02, 0x09, 0x10, 0x18, 0x11,
1865 0x0A, 0x03, 0x04, 0x0B, 0x12, 0x19, 0x20, 0x28,
1866 0x21, 0x30, 0x1A, 0x13, 0x0C, 0x05, 0x06, 0x0D,
1867 0x14, 0x1B, 0x22, 0x29, 0x38, 0x31, 0x39, 0x2A,
1868 0x23, 0x1C, 0x15, 0x0E, 0x07, 0x0F, 0x16, 0x1D,
1869 0x24, 0x2B, 0x32, 0x3A, 0x33, 0x3B, 0x2C, 0x25,
1870 0x1E, 0x17, 0x1F, 0x26, 0x2D, 0x34, 0x3C, 0x35,
1871 0x3D, 0x2E, 0x27, 0x2F, 0x36, 0x3E, 0x37, 0x3F,
1872 };
1873 static const uint8_t wmv1_scantable02[64]= {
1874 0x00, 0x01, 0x08, 0x02, 0x03, 0x09, 0x10, 0x18,
1875 0x11, 0x0A, 0x04, 0x05, 0x0B, 0x12, 0x19, 0x20,
1876 0x28, 0x30, 0x21, 0x1A, 0x13, 0x0C, 0x06, 0x07,
1877 0x0D, 0x14, 0x1B, 0x22, 0x29, 0x38, 0x31, 0x39,
1878 0x2A, 0x23, 0x1C, 0x15, 0x0E, 0x0F, 0x16, 0x1D,
1879 0x24, 0x2B, 0x32, 0x3A, 0x33, 0x2C, 0x25, 0x1E,
1880 0x17, 0x1F, 0x26, 0x2D, 0x34, 0x3B, 0x3C, 0x35,
1881 0x2E, 0x27, 0x2F, 0x36, 0x3D, 0x3E, 0x37, 0x3F,
1882 };
1883 static const uint8_t wmv1_scantable03[64]= {
1884 0x00, 0x08, 0x10, 0x01, 0x18, 0x20, 0x28, 0x09,
1885 0x02, 0x03, 0x0A, 0x11, 0x19, 0x30, 0x38, 0x29,
1886 0x21, 0x1A, 0x12, 0x0B, 0x04, 0x05, 0x0C, 0x13,
1887 0x1B, 0x22, 0x31, 0x39, 0x32, 0x2A, 0x23, 0x1C,
1888 0x14, 0x0D, 0x06, 0x07, 0x0E, 0x15, 0x1D, 0x24,
1889 0x2B, 0x33, 0x3A, 0x3B, 0x34, 0x2C, 0x25, 0x1E,
1890 0x16, 0x0F, 0x17, 0x1F, 0x26, 0x2D, 0x3C, 0x35,
1891 0x2E, 0x27, 0x2F, 0x36, 0x3D, 0x3E, 0x37, 0x3F,
1892 };
1893
1894 static const uint8_t *wmv1_scantable[WMV1_SCANTABLE_COUNT+1]={
1895     wmv1_scantable00,
1896     wmv1_scantable01,
1897     wmv1_scantable02,
1898     wmv1_scantable03,
1899 };
1900
1901 static const uint8_t table_inter_intra[4][2]={
1902     {0,1} /*Luma-Left Chroma-Left*/,
1903     {2,2} /*Luma-Top  Chroma-Left*/,
1904     {6,3} /*luma-Left Chroma-Top */,
1905     {7,3} /*luma-Top  Chroma-Top */
1906 };
1907
1908 #define WMV2_INTER_CBP_TABLE_COUNT 4
1909
1910 static const uint32_t table_mb_non_intra2[128][2] = {
1911 {0x0000A7, 14}, {0x01B2B8, 18}, {0x01B28E, 18}, {0x036575, 19},
1912 {0x006CAC, 16}, {0x000A69, 18}, {0x002934, 20}, {0x00526B, 21},
1913 {0x006CA1, 16}, {0x01B2B9, 18}, {0x0029AD, 20}, {0x029353, 24},
1914 {0x006CA7, 16}, {0x006CAB, 16}, {0x01B2BB, 18}, {0x00029B, 16},
1915 {0x00D944, 17}, {0x000A6A, 18}, {0x0149A8, 23}, {0x03651F, 19},
1916 {0x006CAF, 16}, {0x000A4C, 18}, {0x03651E, 19}, {0x000A48, 18},
1917 {0x00299C, 20}, {0x00299F, 20}, {0x029352, 24}, {0x0029AC, 20},
1918 {0x000296, 16}, {0x00D946, 17}, {0x000A68, 18}, {0x000298, 16},
1919 {0x000527, 17}, {0x00D94D, 17}, {0x0014D7, 19}, {0x036574, 19},
1920 {0x000A5C, 18}, {0x01B299, 18}, {0x00299D, 20}, {0x00299E, 20},
1921 {0x000525, 17}, {0x000A66, 18}, {0x00A4D5, 22}, {0x00149B, 19},
1922 {0x000295, 16}, {0x006CAD, 16}, {0x000A49, 18}, {0x000521, 17},
1923 {0x006CAA, 16}, {0x00D945, 17}, {0x01B298, 18}, {0x00052F, 17},
1924 {0x003654, 15}, {0x006CA0, 16}, {0x000532, 17}, {0x000291, 16},
1925 {0x003652, 15}, {0x000520, 17}, {0x000A5D, 18}, {0x000294, 16},
1926 {0x00009B, 11}, {0x0006E2, 12}, {0x000028, 12}, {0x0001B0, 10},
1927 {0x000001,  3}, {0x000010,  8}, {0x00002F,  6}, {0x00004C, 10},
1928 {0x00000D,  4}, {0x000000, 10}, {0x000006,  9}, {0x000134, 12},
1929 {0x00000C,  4}, {0x000007, 10}, {0x000007,  9}, {0x0006E1, 12},
1930 {0x00000E,  5}, {0x0000DA,  9}, {0x000022,  9}, {0x000364, 11},
1931 {0x00000F,  4}, {0x000006, 10}, {0x00000F,  9}, {0x000135, 12},
1932 {0x000014,  5}, {0x0000DD,  9}, {0x000004,  9}, {0x000015, 11},
1933 {0x00001A,  6}, {0x0001B3, 10}, {0x000005, 10}, {0x0006E3, 12},
1934 {0x00000C,  5}, {0x0000B9,  8}, {0x000004,  8}, {0x0000DB,  9},
1935 {0x00000E,  4}, {0x00000B, 10}, {0x000023,  9}, {0x0006CB, 12},
1936 {0x000005,  6}, {0x0001B1, 10}, {0x000001, 10}, {0x0006E0, 12},
1937 {0x000011,  5}, {0x0000DF,  9}, {0x00000E,  9}, {0x000373, 11},
1938 {0x000003,  5}, {0x0000B8,  8}, {0x000006,  8}, {0x000175,  9},
1939 {0x000015,  5}, {0x000174,  9}, {0x000027,  9}, {0x000372, 11},
1940 {0x000010,  5}, {0x0000BB,  8}, {0x000005,  8}, {0x0000DE,  9},
1941 {0x00000F,  5}, {0x000001,  9}, {0x000012,  8}, {0x000004, 10},
1942 {0x000002,  3}, {0x000016,  5}, {0x000009,  4}, {0x000001,  5},
1943 };
1944
1945 static const uint32_t table_mb_non_intra3[128][2] = {
1946 {0x0002A1, 10}, {0x005740, 15}, {0x01A0BF, 18}, {0x015D19, 17},
1947 {0x001514, 13}, {0x00461E, 15}, {0x015176, 17}, {0x015177, 17},
1948 {0x0011AD, 13}, {0x00682E, 16}, {0x0682F9, 20}, {0x03417D, 19},
1949 {0x001A36, 14}, {0x002A2D, 14}, {0x00D05E, 17}, {0x006824, 16},
1950 {0x001515, 13}, {0x00545C, 15}, {0x0230E9, 18}, {0x011AFA, 17},
1951 {0x0015D7, 13}, {0x005747, 15}, {0x008D79, 16}, {0x006825, 16},
1952 {0x002BA2, 14}, {0x00A8BA, 16}, {0x0235F6, 18}, {0x015D18, 17},
1953 {0x0011AE, 13}, {0x00346F, 15}, {0x008C3B, 16}, {0x00346E, 15},
1954 {0x000D1A, 13}, {0x00461F, 15}, {0x0682F8, 20}, {0x011875, 17},
1955 {0x002BA1, 14}, {0x008D61, 16}, {0x0235F7, 18}, {0x0230E8, 18},
1956 {0x001513, 13}, {0x008D7B, 16}, {0x011AF4, 17}, {0x011AF5, 17},
1957 {0x001185, 13}, {0x0046BF, 15}, {0x008D60, 16}, {0x008D7C, 16},
1958 {0x001512, 13}, {0x00461C, 15}, {0x00AE8D, 16}, {0x008D78, 16},
1959 {0x000D0E, 13}, {0x003413, 15}, {0x0046B1, 15}, {0x003416, 15},
1960 {0x000AEA, 12}, {0x002A2C, 14}, {0x005741, 15}, {0x002A2F, 14},
1961 {0x000158,  9}, {0x0008D2, 12}, {0x00054C, 11}, {0x000686, 12},
1962 {0x000000,  2}, {0x000069,  8}, {0x00006B,  8}, {0x00068C, 12},
1963 {0x000007,  3}, {0x00015E,  9}, {0x0002A3, 10}, {0x000AE9, 12},
1964 {0x000006,  3}, {0x000231, 10}, {0x0002B8, 10}, {0x001A08, 14},
1965 {0x000010,  5}, {0x0001A9, 10}, {0x000342, 11}, {0x000A88, 12},
1966 {0x000004,  4}, {0x0001A2, 10}, {0x0002A4, 10}, {0x001184, 13},
1967 {0x000012,  5}, {0x000232, 10}, {0x0002B2, 10}, {0x000680, 12},
1968 {0x00001B,  6}, {0x00046A, 11}, {0x00068E, 12}, {0x002359, 14},
1969 {0x000016,  5}, {0x00015F,  9}, {0x0002A0, 10}, {0x00054D, 11},
1970 {0x000005,  4}, {0x000233, 10}, {0x0002B9, 10}, {0x0015D6, 13},
1971 {0x000022,  6}, {0x000468, 11}, {0x000683, 12}, {0x001A0A, 14},
1972 {0x000013,  5}, {0x000236, 10}, {0x0002BB, 10}, {0x001186, 13},
1973 {0x000017,  5}, {0x0001AB, 10}, {0x0002A7, 10}, {0x0008D3, 12},
1974 {0x000014,  5}, {0x000237, 10}, {0x000460, 11}, {0x000D0F, 13},
1975 {0x000019,  6}, {0x0001AA, 10}, {0x0002B3, 10}, {0x000681, 12},
1976 {0x000018,  6}, {0x0001A8, 10}, {0x0002A5, 10}, {0x00068F, 12},
1977 {0x000007,  4}, {0x000055,  7}, {0x000047,  7}, {0x0000AD,  8},
1978 };
1979
1980 static const uint32_t table_mb_non_intra4[128][2] = {
1981 {0x0000D4,  8}, {0x0021C5, 14}, {0x00F18A, 16}, {0x00D5BC, 16},
1982 {0x000879, 12}, {0x00354D, 14}, {0x010E3F, 17}, {0x010F54, 17},
1983 {0x000866, 12}, {0x00356E, 14}, {0x010F55, 17}, {0x010E3E, 17},
1984 {0x0010CE, 13}, {0x003C84, 14}, {0x00D5BD, 16}, {0x00F18B, 16},
1985 {0x000868, 12}, {0x00438C, 15}, {0x0087AB, 16}, {0x00790B, 15},
1986 {0x000F10, 12}, {0x00433D, 15}, {0x006AD3, 15}, {0x00790A, 15},
1987 {0x001AA7, 13}, {0x0043D4, 15}, {0x00871E, 16}, {0x006ADF, 15},
1988 {0x000D7C, 12}, {0x003C94, 14}, {0x00438D, 15}, {0x006AD2, 15},
1989 {0x0006BC, 11}, {0x0021E9, 14}, {0x006ADA, 15}, {0x006A99, 15},
1990 {0x0010F7, 13}, {0x004389, 15}, {0x006ADB, 15}, {0x0078C4, 15},
1991 {0x000D56, 12}, {0x0035F7, 14}, {0x00438E, 15}, {0x006A98, 15},
1992 {0x000D52, 12}, {0x003C95, 14}, {0x004388, 15}, {0x00433C, 15},
1993 {0x000D54, 12}, {0x001E4B, 13}, {0x003C63, 14}, {0x003C83, 14},
1994 {0x000861, 12}, {0x0021EB, 14}, {0x00356C, 14}, {0x0035F6, 14},
1995 {0x000863, 12}, {0x00219F, 14}, {0x003568, 14}, {0x003C82, 14},
1996 {0x0001AE,  9}, {0x0010C0, 13}, {0x000F11, 12}, {0x001AFA, 13},
1997 {0x000000,  1}, {0x0000F0,  8}, {0x0001AD,  9}, {0x0010C1, 13},
1998 {0x00000A,  4}, {0x0003C5, 10}, {0x000789, 11}, {0x001AB5, 13},
1999 {0x000009,  4}, {0x000435, 11}, {0x000793, 11}, {0x001E40, 13},
2000 {0x00001D,  5}, {0x0003CB, 10}, {0x000878, 12}, {0x001AAF, 13},
2001 {0x00000B,  4}, {0x0003C7, 10}, {0x000791, 11}, {0x001AAB, 13},
2002 {0x00001F,  5}, {0x000436, 11}, {0x0006BF, 11}, {0x000F19, 12},
2003 {0x00003D,  6}, {0x000D51, 12}, {0x0010C4, 13}, {0x0021E8, 14},
2004 {0x000036,  6}, {0x000437, 11}, {0x0006AF, 11}, {0x0010C5, 13},
2005 {0x00000C,  4}, {0x000432, 11}, {0x000794, 11}, {0x001E30, 13},
2006 {0x000042,  7}, {0x000870, 12}, {0x000F24, 12}, {0x001E43, 13},
2007 {0x000020,  6}, {0x00043E, 11}, {0x000795, 11}, {0x001AAA, 13},
2008 {0x000037,  6}, {0x0006AC, 11}, {0x0006AE, 11}, {0x0010F6, 13},
2009 {0x000034,  6}, {0x00043A, 11}, {0x000D50, 12}, {0x001AAE, 13},
2010 {0x000039,  6}, {0x00043F, 11}, {0x00078D, 11}, {0x0010D2, 13},
2011 {0x000038,  6}, {0x00043B, 11}, {0x0006BD, 11}, {0x0010D3, 13},
2012 {0x000011,  5}, {0x0001AC,  9}, {0x0000F3,  8}, {0x000439, 11},
2013 };
2014
2015 static const uint32_t (*wmv2_inter_table[WMV2_INTER_CBP_TABLE_COUNT])[2]={
2016     table_mb_non_intra2,
2017     table_mb_non_intra3,
2018     table_mb_non_intra4,
2019     table_mb_non_intra,
2020 };
2021
2022 static const uint8_t wmv2_scantableA[64]={
2023 0x00, 0x01, 0x02, 0x08, 0x03, 0x09, 0x0A, 0x10,
2024 0x04, 0x0B, 0x11, 0x18, 0x12, 0x0C, 0x05, 0x13,
2025 0x19, 0x0D, 0x14, 0x1A, 0x1B, 0x06, 0x15, 0x1C,
2026 0x0E, 0x16, 0x1D, 0x07, 0x1E, 0x0F, 0x17, 0x1F,
2027 };
2028
2029 static const uint8_t wmv2_scantableB[64]={
2030 0x00, 0x08, 0x01, 0x10, 0x09, 0x18, 0x11, 0x02,
2031 0x20, 0x0A, 0x19, 0x28, 0x12, 0x30, 0x21, 0x1A,
2032 0x38, 0x29, 0x22, 0x03, 0x31, 0x39, 0x0B, 0x2A,
2033 0x13, 0x32, 0x1B, 0x3A, 0x23, 0x2B, 0x33, 0x3B,
2034 };