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