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