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