Merge commit '4912b634b517c8acfc476c5d47f10be83fe7e18b'
[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     {
605         132,
606         85,
607         table0_vlc,
608         table0_run,
609         table0_level,
610     },
611     /* high motion */
612     {
613         185,
614         119,
615         table2_vlc,
616         table2_run,
617         table2_level,
618     },
619     /* mid-rate */
620     {
621         102,
622         67,
623         ff_mpeg4_intra_vlc,
624         ff_mpeg4_intra_run,
625         ff_mpeg4_intra_level,
626     },
627     /* intra chrominance / non intra tables */
628     /* low motion inter */
629     {
630         148,
631         81,
632         table1_vlc,
633         table1_run,
634         table1_level,
635     },
636     /* high motion inter */
637     {
638         168,
639         99,
640         table4_vlc,
641         table4_run,
642         table4_level,
643     },
644     /* mid rate inter */
645     {
646         102,
647         58,
648         ff_inter_vlc,
649         ff_inter_run,
650         ff_inter_level,
651     },
652 };
653
654 /* motion vector table 0 */
655
656 static const uint16_t table0_mv_code[1100] = {
657  0x0001, 0x0003, 0x0005, 0x0007, 0x0003, 0x0008, 0x000c, 0x0001,
658  0x0002, 0x001b, 0x0006, 0x000b, 0x0015, 0x0002, 0x000e, 0x000f,
659  0x0014, 0x0020, 0x0022, 0x0025, 0x0027, 0x0029, 0x002d, 0x004b,
660  0x004d, 0x0003, 0x0022, 0x0023, 0x0025, 0x0027, 0x0042, 0x0048,
661  0x0049, 0x0050, 0x005c, 0x0091, 0x009f, 0x000e, 0x0043, 0x004c,
662  0x0054, 0x0056, 0x008c, 0x0098, 0x009a, 0x009b, 0x00b1, 0x00b2,
663  0x0120, 0x0121, 0x0126, 0x0133, 0x0139, 0x01a1, 0x01a4, 0x01a5,
664  0x01a6, 0x01a7, 0x01ae, 0x01af, 0x000b, 0x0019, 0x0085, 0x0090,
665  0x009b, 0x00aa, 0x00af, 0x010c, 0x010e, 0x011c, 0x011e, 0x0133,
666  0x0144, 0x0160, 0x0174, 0x0175, 0x0177, 0x0178, 0x0249, 0x024b,
667  0x0252, 0x0261, 0x0265, 0x0270, 0x0352, 0x0353, 0x0355, 0x0359,
668  0x0010, 0x0011, 0x0013, 0x0034, 0x0035, 0x0036, 0x0037, 0x003d,
669  0x003e, 0x0109, 0x0126, 0x0156, 0x021a, 0x021e, 0x023a, 0x023e,
670  0x028e, 0x028f, 0x02cf, 0x0491, 0x0494, 0x049f, 0x04a0, 0x04a3,
671  0x04a6, 0x04a7, 0x04ad, 0x04ae, 0x04c0, 0x04c4, 0x04c6, 0x04c8,
672  0x04c9, 0x04f5, 0x04f6, 0x04f7, 0x0680, 0x0682, 0x0683, 0x0688,
673  0x0689, 0x068d, 0x068e, 0x068f, 0x06a2, 0x06a3, 0x06a9, 0x06b0,
674  0x06b1, 0x06b4, 0x06b5, 0x0024, 0x0060, 0x0063, 0x0078, 0x0079,
675  0x0211, 0x0244, 0x0245, 0x0247, 0x0248, 0x0249, 0x024a, 0x024b,
676  0x026b, 0x02af, 0x02b8, 0x02bb, 0x0436, 0x0476, 0x0477, 0x047e,
677  0x04c8, 0x04c9, 0x04ca, 0x0514, 0x0586, 0x0587, 0x0598, 0x059d,
678  0x05d9, 0x05da, 0x0920, 0x0921, 0x093b, 0x093c, 0x093d, 0x0942,
679  0x0943, 0x0944, 0x0945, 0x0959, 0x095e, 0x095f, 0x0982, 0x0983,
680  0x098e, 0x098f, 0x09c4, 0x09e7, 0x09e8, 0x09e9, 0x0d02, 0x0d17,
681  0x0d18, 0x0d19, 0x0d41, 0x0d42, 0x0d43, 0x0d50, 0x0d5f, 0x0d6d,
682  0x0d6e, 0x0d6f, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
683  0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x041e, 0x041f, 0x0420, 0x0421,
684  0x048c, 0x048d, 0x04d3, 0x04d4, 0x04d5, 0x055c, 0x055d, 0x0572,
685  0x0573, 0x0574, 0x0575, 0x08de, 0x08df, 0x08fe, 0x08ff, 0x0996,
686  0x0a36, 0x0a37, 0x0b08, 0x0b09, 0x0b0a, 0x0b0b, 0x0b32, 0x0b33,
687  0x0b34, 0x0b35, 0x0b36, 0x0b37, 0x0b38, 0x0b39, 0x0bb0, 0x0bf7,
688  0x0bf8, 0x0bf9, 0x0bfa, 0x0bfb, 0x0bfc, 0x0bfd, 0x0bfe, 0x0bff,
689  0x1254, 0x1255, 0x1256, 0x1257, 0x1270, 0x1271, 0x1272, 0x1273,
690  0x1274, 0x1275, 0x12ab, 0x12ac, 0x12ad, 0x12ae, 0x12af, 0x12b0,
691  0x12b1, 0x1315, 0x1316, 0x1317, 0x13bf, 0x13c0, 0x13c1, 0x13c2,
692  0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, 0x13ca,
693  0x13cb, 0x13cc, 0x13cd, 0x1a06, 0x1a07, 0x1a28, 0x1a29, 0x1a2a,
694  0x1a2b, 0x1a2c, 0x1a2d, 0x1a80, 0x1abb, 0x1abc, 0x1abd, 0x1ad8,
695  0x1ad9, 0x0094, 0x0095, 0x0096, 0x0097, 0x00a0, 0x00a1, 0x00a2,
696  0x00a3, 0x0831, 0x0832, 0x0833, 0x0834, 0x0835, 0x0836, 0x0837,
697  0x0838, 0x0839, 0x083a, 0x083b, 0x0939, 0x093a, 0x093b, 0x093c,
698  0x093d, 0x093e, 0x093f, 0x09a0, 0x09a1, 0x09a2, 0x09a3, 0x09a4,
699  0x09a5, 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2,
700  0x11b3, 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba,
701  0x11bb, 0x132f, 0x1454, 0x1455, 0x1456, 0x1457, 0x1458, 0x1459,
702  0x145a, 0x145b, 0x145c, 0x145d, 0x145e, 0x145f, 0x1460, 0x1461,
703  0x1462, 0x1463, 0x1464, 0x1465, 0x1466, 0x1467, 0x1468, 0x1469,
704  0x146a, 0x146b, 0x17de, 0x17df, 0x17e0, 0x17e1, 0x17e2, 0x17e3,
705  0x17e4, 0x17e5, 0x17e6, 0x17e7, 0x17e8, 0x17e9, 0x17ea, 0x17eb,
706  0x17ec, 0x17ed, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545,
707  0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d,
708  0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555,
709  0x2628, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c,
710  0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774,
711  0x2775, 0x2776, 0x2777, 0x2778, 0x2779, 0x277a, 0x277b, 0x277c,
712  0x277d, 0x3503, 0x3544, 0x3545, 0x3546, 0x3547, 0x3560, 0x3561,
713  0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569,
714  0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571,
715  0x3572, 0x3573, 0x3574, 0x3575, 0x03f0, 0x103d, 0x103e, 0x103f,
716  0x1040, 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047,
717  0x1048, 0x1049, 0x104a, 0x104b, 0x104c, 0x104d, 0x104e, 0x104f,
718  0x1050, 0x1051, 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057,
719  0x1058, 0x1059, 0x105a, 0x105b, 0x105c, 0x105d, 0x105e, 0x105f,
720  0x1060, 0x1061, 0x1270, 0x1271, 0x21b8, 0x21b9, 0x21ba, 0x21bb,
721  0x21bc, 0x21bd, 0x21be, 0x21bf, 0x21f0, 0x21f1, 0x21f2, 0x21f3,
722  0x21f4, 0x21f5, 0x21f6, 0x21f7, 0x21f8, 0x21f9, 0x21fa, 0x21fb,
723  0x21fc, 0x21fd, 0x21fe, 0x21ff, 0x2340, 0x2341, 0x2342, 0x2343,
724  0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b,
725  0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353,
726  0x2354, 0x2355, 0x2356, 0x2357, 0x265c, 0x2f88, 0x2f89, 0x2f8a,
727  0x2f8b, 0x2f8c, 0x2f8d, 0x2f8e, 0x2f8f, 0x2f90, 0x2f91, 0x2f92,
728  0x2f93, 0x2f94, 0x2f95, 0x2f96, 0x2f97, 0x2f98, 0x2f99, 0x2f9a,
729  0x2f9b, 0x2f9c, 0x2f9d, 0x2f9e, 0x2f9f, 0x2fa0, 0x2fa1, 0x2fa2,
730  0x2fa3, 0x2fa4, 0x2fa5, 0x2fa6, 0x2fa7, 0x2fa8, 0x2fa9, 0x2faa,
731  0x2fab, 0x2fac, 0x2fad, 0x2fae, 0x2faf, 0x2fb0, 0x2fb1, 0x2fb2,
732  0x2fb3, 0x2fb4, 0x2fb5, 0x2fb6, 0x2fb7, 0x2fb8, 0x2fb9, 0x2fba,
733  0x2fbb, 0x4c52, 0x4c53, 0x4e28, 0x4e29, 0x4e2a, 0x4e2b, 0x4e2c,
734  0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32, 0x4e33, 0x4e34,
735  0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, 0x4e3c,
736  0x4e3d, 0x4e3e, 0x4e3f, 0x4e80, 0x4e81, 0x4e82, 0x4e83, 0x4e84,
737  0x4e85, 0x4e86, 0x4e87, 0x4e88, 0x4e89, 0x4e8a, 0x4e8b, 0x4e8c,
738  0x4e8d, 0x4e8e, 0x4e8f, 0x4e90, 0x4e91, 0x4e92, 0x4e93, 0x4e94,
739  0x4e95, 0x4e96, 0x4e97, 0x4e98, 0x4e99, 0x4e9a, 0x4e9b, 0x4e9c,
740  0x4e9d, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea1, 0x4ea2, 0x4ea3, 0x4ea4,
741  0x4ea5, 0x4ea6, 0x4ea7, 0x4ea8, 0x4ea9, 0x4eaa, 0x4eab, 0x4eac,
742  0x4ead, 0x4eae, 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb2, 0x4eb3, 0x4eb4,
743  0x4eb5, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9, 0x4eba, 0x4ebb, 0x4ebc,
744  0x4ebd, 0x4ebe, 0x4ebf, 0x4ec0, 0x4ec1, 0x4ec2, 0x4ec3, 0x4ec4,
745  0x4ec5, 0x4ec6, 0x4ec7, 0x4ec8, 0x4ec9, 0x4eca, 0x4ecb, 0x6a04,
746  0x6a05, 0x07e2, 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8,
747  0x07e9, 0x07ea, 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0,
748  0x07f1, 0x07f2, 0x07f3, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8,
749  0x07f9, 0x07fa, 0x07fb, 0x07fc, 0x07fd, 0x07fe, 0x07ff, 0x2000,
750  0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008,
751  0x2009, 0x200a, 0x200b, 0x200c, 0x200d, 0x200e, 0x200f, 0x2010,
752  0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2016, 0x2017, 0x2018,
753  0x2019, 0x201a, 0x201b, 0x201c, 0x201d, 0x201e, 0x201f, 0x2020,
754  0x2021, 0x2022, 0x2023, 0x2024, 0x2025, 0x2026, 0x2027, 0x2028,
755  0x2029, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e, 0x202f, 0x2030,
756  0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037, 0x2038,
757  0x2039, 0x203a, 0x203b, 0x203c, 0x203d, 0x203e, 0x203f, 0x2040,
758  0x2041, 0x2042, 0x2043, 0x2044, 0x2045, 0x2046, 0x2047, 0x2048,
759  0x2049, 0x204a, 0x204b, 0x204c, 0x204d, 0x204e, 0x204f, 0x2050,
760  0x2051, 0x2052, 0x2053, 0x2054, 0x2055, 0x2056, 0x2057, 0x2058,
761  0x2059, 0x205a, 0x205b, 0x205c, 0x205d, 0x205e, 0x205f, 0x2060,
762  0x2061, 0x2062, 0x2063, 0x2064, 0x2065, 0x2066, 0x2067, 0x2068,
763  0x2069, 0x206a, 0x206b, 0x206c, 0x206d, 0x206e, 0x206f, 0x2070,
764  0x2071, 0x2072, 0x2073, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078,
765  0x2079, 0x4cba, 0x4cbb, 0x5d88, 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c,
766  0x5d8d, 0x5d8e, 0x5d8f, 0x5db0, 0x5db1, 0x5db2, 0x5db3, 0x5db4,
767  0x5db5, 0x5db6, 0x5db7, 0x5db8, 0x5db9, 0x5dba, 0x5dbb, 0x5dbc,
768  0x5dbd, 0x5dbe, 0x5dbf, 0x5e40, 0x5e41, 0x5e42, 0x5e43, 0x5e44,
769  0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4c,
770  0x5e4d, 0x5e4e, 0x5e4f, 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e54,
771  0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, 0x5e5b, 0x5e5c,
772  0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61, 0x5e62, 0x5e63, 0x5e64,
773  0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c,
774  0x5e6d, 0x5e6e, 0x5e6f, 0x5e70, 0x5e71, 0x5e72, 0x5e73, 0x5e74,
775  0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79, 0x5e7a, 0x5e7b, 0x5e7c,
776  0x5e7d, 0x5e7e, 0x5e7f, 0x5e80, 0x5e81, 0x5e82, 0x5e83, 0x5e84,
777  0x5e85, 0x5e86, 0x5e87, 0x5e88, 0x5e89, 0x5e8a, 0x5e8b, 0x5e8c,
778  0x5e8d, 0x5e8e, 0x5e8f, 0x5e90, 0x5e91, 0x5e92, 0x5e93, 0x5e94,
779  0x5e95, 0x5e96, 0x5e97, 0x5e98, 0x5e99, 0x5e9a, 0x5e9b, 0x5e9c,
780  0x5e9d, 0x5e9e, 0x5e9f, 0x5ea0, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4,
781  0x5ea5, 0x5ea6, 0x5ea7, 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac,
782  0x5ead, 0x5eae, 0x5eaf, 0x5eb0, 0x5eb1, 0x5eb2, 0x5eb3, 0x5eb4,
783  0x5eb5, 0x5eb6, 0x5eb7, 0x5eb8, 0x5eb9, 0x5eba, 0x5ebb, 0x5ebc,
784  0x5ebd, 0x5ebe, 0x5ebf, 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4,
785  0x5ec5, 0x5ec6, 0x5ec7, 0x5ec8, 0x5ec9, 0x5eca, 0x5ecb, 0x5ecc,
786  0x5ecd, 0x5ece, 0x5ecf, 0x5ed0, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed4,
787  0x5ed5, 0x5ed6, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edb, 0x5edc,
788  0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4,
789  0x5ee5, 0x5ee6, 0x5ee7, 0x5ee8, 0x5ee9, 0x5eea, 0x5eeb, 0x5eec,
790  0x5eed, 0x5eee, 0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef4,
791  0x5ef5, 0x5ef6, 0x5ef7, 0x5ef8, 0x5ef9, 0x5efa, 0x5efb, 0x5efc,
792  0x5efd, 0x5efe, 0x5eff, 0x5f00, 0x5f01, 0x5f02, 0x5f03, 0x5f04,
793  0x5f05, 0x5f06, 0x5f07, 0x5f08, 0x5f09, 0x5f0a, 0x5f0b, 0x5f0c,
794  0x5f0d, 0x5f0e, 0x5f0f, 0x0000,
795 };
796
797 static const uint8_t table0_mv_bits[1100] = {
798   1,  4,  4,  4,  5,  5,  5,  6,
799   6,  6,  7,  7,  7,  8,  8,  8,
800   8,  8,  8,  8,  8,  8,  8,  8,
801   8,  9,  9,  9,  9,  9,  9,  9,
802   9,  9,  9,  9,  9, 10, 10, 10,
803  10, 10, 10, 10, 10, 10, 10, 10,
804  10, 10, 10, 10, 10, 10, 10, 10,
805  10, 10, 10, 10, 11, 11, 11, 11,
806  11, 11, 11, 11, 11, 11, 11, 11,
807  11, 11, 11, 11, 11, 11, 11, 11,
808  11, 11, 11, 11, 11, 11, 11, 11,
809  12, 12, 12, 12, 12, 12, 12, 12,
810  12, 12, 12, 12, 12, 12, 12, 12,
811  12, 12, 12, 12, 12, 12, 12, 12,
812  12, 12, 12, 12, 12, 12, 12, 12,
813  12, 12, 12, 12, 12, 12, 12, 12,
814  12, 12, 12, 12, 12, 12, 12, 12,
815  12, 12, 12, 13, 13, 13, 13, 13,
816  13, 13, 13, 13, 13, 13, 13, 13,
817  13, 13, 13, 13, 13, 13, 13, 13,
818  13, 13, 13, 13, 13, 13, 13, 13,
819  13, 13, 13, 13, 13, 13, 13, 13,
820  13, 13, 13, 13, 13, 13, 13, 13,
821  13, 13, 13, 13, 13, 13, 13, 13,
822  13, 13, 13, 13, 13, 13, 13, 13,
823  13, 13, 14, 14, 14, 14, 14, 14,
824  14, 14, 14, 14, 14, 14, 14, 14,
825  14, 14, 14, 14, 14, 14, 14, 14,
826  14, 14, 14, 14, 14, 14, 14, 14,
827  14, 14, 14, 14, 14, 14, 14, 14,
828  14, 14, 14, 14, 14, 14, 14, 14,
829  14, 14, 14, 14, 14, 14, 14, 14,
830  14, 14, 14, 14, 14, 14, 14, 14,
831  14, 14, 14, 14, 14, 14, 14, 14,
832  14, 14, 14, 14, 14, 14, 14, 14,
833  14, 14, 14, 14, 14, 14, 14, 14,
834  14, 14, 14, 14, 14, 14, 14, 14,
835  14, 14, 14, 14, 14, 14, 14, 14,
836  14, 15, 15, 15, 15, 15, 15, 15,
837  15, 15, 15, 15, 15, 15, 15, 15,
838  15, 15, 15, 15, 15, 15, 15, 15,
839  15, 15, 15, 15, 15, 15, 15, 15,
840  15, 15, 15, 15, 15, 15, 15, 15,
841  15, 15, 15, 15, 15, 15, 15, 15,
842  15, 15, 15, 15, 15, 15, 15, 15,
843  15, 15, 15, 15, 15, 15, 15, 15,
844  15, 15, 15, 15, 15, 15, 15, 15,
845  15, 15, 15, 15, 15, 15, 15, 15,
846  15, 15, 15, 15, 15, 15, 15, 15,
847  15, 15, 15, 15, 15, 15, 15, 15,
848  15, 15, 15, 15, 15, 15, 15, 15,
849  15, 15, 15, 15, 15, 15, 15, 15,
850  15, 15, 15, 15, 15, 15, 15, 15,
851  15, 15, 15, 15, 15, 15, 15, 15,
852  15, 15, 15, 15, 15, 15, 15, 15,
853  15, 15, 15, 15, 15, 15, 15, 15,
854  15, 15, 15, 15, 15, 15, 15, 15,
855  15, 15, 15, 15, 15, 15, 15, 15,
856  15, 15, 15, 15, 16, 16, 16, 16,
857  16, 16, 16, 16, 16, 16, 16, 16,
858  16, 16, 16, 16, 16, 16, 16, 16,
859  16, 16, 16, 16, 16, 16, 16, 16,
860  16, 16, 16, 16, 16, 16, 16, 16,
861  16, 16, 16, 16, 16, 16, 16, 16,
862  16, 16, 16, 16, 16, 16, 16, 16,
863  16, 16, 16, 16, 16, 16, 16, 16,
864  16, 16, 16, 16, 16, 16, 16, 16,
865  16, 16, 16, 16, 16, 16, 16, 16,
866  16, 16, 16, 16, 16, 16, 16, 16,
867  16, 16, 16, 16, 16, 16, 16, 16,
868  16, 16, 16, 16, 16, 16, 16, 16,
869  16, 16, 16, 16, 16, 16, 16, 16,
870  16, 16, 16, 16, 16, 16, 16, 16,
871  16, 16, 16, 16, 16, 16, 16, 16,
872  16, 16, 16, 16, 16, 16, 16, 16,
873  16, 16, 16, 16, 16, 16, 16, 16,
874  16, 16, 16, 16, 16, 16, 16, 16,
875  16, 16, 16, 16, 16, 16, 16, 16,
876  16, 16, 16, 16, 16, 16, 16, 16,
877  16, 16, 16, 16, 16, 16, 16, 16,
878  16, 16, 16, 16, 16, 16, 16, 16,
879  16, 16, 16, 16, 16, 16, 16, 16,
880  16, 16, 16, 16, 16, 16, 16, 16,
881  16, 16, 16, 16, 16, 16, 16, 16,
882  16, 16, 16, 16, 16, 16, 16, 16,
883  16, 16, 16, 16, 16, 16, 16, 16,
884  16, 16, 16, 16, 16, 16, 16, 16,
885  16, 16, 16, 16, 16, 16, 16, 16,
886  16, 16, 16, 16, 16, 16, 16, 16,
887  16, 17, 17, 17, 17, 17, 17, 17,
888  17, 17, 17, 17, 17, 17, 17, 17,
889  17, 17, 17, 17, 17, 17, 17, 17,
890  17, 17, 17, 17, 17, 17, 17, 17,
891  17, 17, 17, 17, 17, 17, 17, 17,
892  17, 17, 17, 17, 17, 17, 17, 17,
893  17, 17, 17, 17, 17, 17, 17, 17,
894  17, 17, 17, 17, 17, 17, 17, 17,
895  17, 17, 17, 17, 17, 17, 17, 17,
896  17, 17, 17, 17, 17, 17, 17, 17,
897  17, 17, 17, 17, 17, 17, 17, 17,
898  17, 17, 17, 17, 17, 17, 17, 17,
899  17, 17, 17, 17, 17, 17, 17, 17,
900  17, 17, 17, 17, 17, 17, 17, 17,
901  17, 17, 17, 17, 17, 17, 17, 17,
902  17, 17, 17, 17, 17, 17, 17, 17,
903  17, 17, 17, 17, 17, 17, 17, 17,
904  17, 17, 17, 17, 17, 17, 17, 17,
905  17, 17, 17, 17, 17, 17, 17, 17,
906  17, 17, 17, 17, 17, 17, 17, 17,
907  17, 17, 17, 17, 17, 17, 17, 17,
908  17, 17, 17, 17, 17, 17, 17, 17,
909  17, 17, 17, 17, 17, 17, 17, 17,
910  17, 17, 17, 17, 17, 17, 17, 17,
911  17, 17, 17, 17, 17, 17, 17, 17,
912  17, 17, 17, 17, 17, 17, 17, 17,
913  17, 17, 17, 17, 17, 17, 17, 17,
914  17, 17, 17, 17, 17, 17, 17, 17,
915  17, 17, 17, 17, 17, 17, 17, 17,
916  17, 17, 17, 17, 17, 17, 17, 17,
917  17, 17, 17, 17, 17, 17, 17, 17,
918  17, 17, 17, 17, 17, 17, 17, 17,
919  17, 17, 17, 17, 17, 17, 17, 17,
920  17, 17, 17, 17, 17, 17, 17, 17,
921  17, 17, 17, 17, 17, 17, 17, 17,
922  17, 17, 17, 17, 17, 17, 17, 17,
923  17, 17, 17, 17, 17, 17, 17, 17,
924  17, 17, 17, 17, 17, 17, 17, 17,
925  17, 17, 17, 17, 17, 17, 17, 17,
926  17, 17, 17, 17, 17, 17, 17, 17,
927  17, 17, 17, 17, 17, 17, 17, 17,
928  17, 17, 17, 17, 17, 17, 17, 17,
929  17, 17, 17, 17, 17, 17, 17, 17,
930  17, 17, 17, 17, 17, 17, 17, 17,
931  17, 17, 17, 17, 17, 17, 17, 17,
932  17, 17, 17, 17, 17, 17, 17, 17,
933  17, 17, 17, 17, 17, 17, 17, 17,
934  17, 17, 17, 17, 17, 17, 17, 17,
935  17, 17, 17,  8,
936 };
937
938 static const uint8_t table0_mvx[1099] = {
939  32, 32, 31, 32, 33, 31, 33, 31,
940  33, 32, 34, 32, 30, 32, 31, 34,
941  35, 32, 34, 33, 29, 33, 30, 30,
942  31, 31, 35, 29, 33, 35, 33, 34,
943  31, 29, 30, 34, 30, 36, 28, 32,
944  34, 37, 30, 27, 32, 25, 39, 32,
945  34, 32, 35, 35, 35, 31, 35, 29,
946  32, 29, 30, 29, 37, 27, 36, 38,
947  37, 33, 32, 31, 29, 31, 28, 36,
948  33, 30, 34, 33, 33, 28, 27, 25,
949  31, 26, 39, 32, 32, 31, 33, 39,
950  31, 38, 28, 36, 21, 23, 43, 36,
951  34, 41, 30, 25, 28, 31, 30, 34,
952  38, 35, 61, 34, 28, 30, 37, 37,
953  35, 27, 36,  3, 59, 38, 37, 32,
954  31, 29, 26, 33, 37, 33, 27, 27,
955  35, 34, 34, 40, 42, 33, 32, 29,
956   4,  5, 28, 24, 25, 35, 39, 38,
957  32, 23, 27, 32, 30, 35, 26, 34,
958  60, 36, 29, 22, 26, 41,  7, 30,
959  38, 30, 36, 29, 30, 41, 26, 25,
960  32, 34, 24, 39,  1, 25, 39, 32,
961  28, 29, 32, 38, 26, 36, 28, 63,
962  28, 39, 23, 21, 26, 35, 31, 35,
963  57, 31, 29, 29, 28, 30, 27, 35,
964   2, 38, 40, 34, 37, 29, 38, 43,
965  26, 32, 33, 42, 24, 40, 28, 32,
966  32, 32, 36, 32, 43, 25, 21, 31,
967  30, 31, 41, 29, 33, 37, 26, 37,
968  27, 59, 23, 33, 35, 31, 31, 37,
969  38, 39, 32, 23, 32, 27, 37, 36,
970  31, 40, 25, 27, 38, 31, 36, 28,
971  31, 36, 25, 45,  3, 34, 38, 39,
972  40, 38, 30, 32, 19, 24, 25, 26,
973  45, 20, 24, 33, 33, 31, 41, 34,
974  39, 47, 40, 58, 59, 41, 33,  3,
975  17, 61, 42, 30, 26, 29, 36, 61,
976  33, 37, 62, 28, 25, 38, 25, 38,
977  17, 23, 34, 33, 21, 33, 49, 27,
978  32, 23, 27, 22, 24, 22, 39, 43,
979  27, 37,  6, 42, 47, 26, 30, 31,
980  41, 39, 33, 22, 45, 36, 32, 45,
981  19, 22, 30,  5,  5, 17, 29, 22,
982  31, 31, 43, 37, 27, 32, 32, 32,
983  33, 34, 43, 35, 29, 26, 22, 32,
984  19, 32, 25, 31, 41, 49, 28, 34,
985  28, 39, 34, 19, 37, 38, 29, 21,
986  36, 42, 24, 48, 16, 28, 49, 22,
987  34, 31, 38, 39, 44, 11, 35, 30,
988  33, 33, 23, 28, 33, 46, 15, 13,
989  24, 41, 24, 34, 34, 30, 26, 24,
990  14, 60, 21, 29, 39, 23, 35, 37,
991  63, 45, 33, 34, 47, 41, 22, 42,
992  35, 35, 23, 32, 35, 43, 32,  7,
993  31, 41, 20, 31, 16, 13, 63, 25,
994  30, 32, 35, 30, 30, 31, 42, 47,
995  39, 38, 40, 40, 51, 55, 56, 18,
996  21, 39, 39, 33, 17, 41, 23, 24,
997  43, 25, 31, 20, 19, 45,  1, 34,
998  31, 22, 35, 15, 46, 46, 35, 31,
999  28, 29, 29, 23, 41, 27, 14, 53,
1000  53, 27, 24, 32, 57, 32, 17, 42,
1001  37, 29, 33,  1, 25, 32, 32, 63,
1002  26, 40, 44, 36, 31, 39, 20, 20,
1003  44, 23, 33, 34, 35, 33, 33, 28,
1004  41, 23, 41, 41, 29, 25, 26, 49,
1005  29, 24, 37, 49, 50, 51, 51, 26,
1006  39, 25, 26, 15, 39, 18, 42, 17,
1007   4, 31, 32, 32, 60,  1, 42, 32,
1008   0, 12, 19, 35, 21, 41, 17, 26,
1009  20, 45, 46, 32, 37, 22, 47, 29,
1010  31, 27, 29, 30, 21, 33, 35, 18,
1011  25, 33, 50, 51, 42,  2, 15, 51,
1012  53, 33, 25, 29, 55, 37, 38, 33,
1013  38, 59, 38, 33, 39, 13, 32, 40,
1014  61, 61, 32,  9, 44,  3, 31, 29,
1015  25, 31, 27, 23,  9, 25,  9, 29,
1016  20, 30, 30, 42, 18, 28, 25, 28,
1017  28, 21, 29, 43, 29, 43, 26, 44,
1018  44, 21, 38, 21, 24, 45, 45, 35,
1019  39, 22, 35, 36, 34, 34, 45, 34,
1020  29, 31, 46, 25, 46, 16, 17, 31,
1021  20, 32, 47, 47, 47, 32, 49, 49,
1022  49, 31,  1, 27, 28, 39, 39, 21,
1023  36, 23, 51,  2, 40, 51, 32, 53,
1024  24, 30, 24, 30, 21, 40, 57, 57,
1025  31, 41, 58, 32, 12,  4, 32, 34,
1026  59, 31, 32, 13,  9, 35, 26, 35,
1027  37, 61, 37, 63, 26, 29, 41, 38,
1028  23, 20, 41, 26, 41, 42, 42, 42,
1029  26, 26, 26, 26,  1, 26, 37, 37,
1030  37, 23, 34, 42, 27, 43, 34, 27,
1031  31, 24, 33, 16,  3, 31, 24, 33,
1032  24,  4, 44, 44, 11, 44, 31, 13,
1033  13, 44, 45, 13, 25, 22, 38, 26,
1034  38, 38, 39, 32, 30, 39, 30, 22,
1035  32, 26, 30, 47, 47, 47, 19, 47,
1036  30, 31, 35,  8, 23, 47, 47, 27,
1037  35, 47, 31, 48, 35, 19, 36, 49,
1038  49, 33, 31, 39, 27, 39, 49, 49,
1039  50, 50, 50, 39, 31, 51, 51, 39,
1040  28, 33, 33, 21, 40, 31, 52, 53,
1041  40, 53,  9, 33, 31, 53, 54, 54,
1042  54, 55, 55, 34, 15, 56, 25, 56,
1043  21, 21, 40, 40, 25, 40, 58, 36,
1044   5, 41, 41, 12, 60, 41, 41, 37,
1045  22, 61, 18, 29, 29, 30, 61, 30,
1046  61, 62, 62, 30, 30, 63, 18, 13,
1047  30, 23, 19, 20, 20, 41, 13,  2,
1048   5,  5,  1,  5, 32,  6, 32, 35,
1049  20, 35, 27, 35, 35, 36, 36, 13,
1050  36, 41, 41, 41,  3, 30, 42, 27,
1051  20, 30, 27, 28, 30, 21, 33, 33,
1052  14, 24, 30, 42, 24, 33, 25, 42,
1053  43, 14, 43, 43, 14, 43,  7, 36,
1054  37, 37, 37, 37,  7, 14, 25, 43,
1055  43, 44, 15, 37,  7,  7,  3,  1,
1056   8, 15, 15,  8, 44, 44, 44, 45,
1057  45, 45, 45,  8,  8, 45, 21, 45,
1058  28, 28, 28, 21, 28, 28, 22, 37,
1059  46, 46, 37,  8, 29, 37, 29, 22,
1060  46, 37, 22, 29, 47, 47, 38, 38,
1061  16, 38, 38, 33, 38, 22, 47, 47,
1062  29, 25, 16,  0, 48,  1, 34, 48,
1063  48, 34, 25, 26, 26, 49, 49, 26,
1064   1, 49,  4, 26,  4, 49,  1,  9,
1065  49, 49, 49, 10, 49, 17, 38, 17,
1066  17, 50, 38, 50, 50, 22, 38, 51,
1067  38, 38, 51, 39, 39, 18, 22, 39,
1068  51, 22, 52, 52, 52, 39, 53, 53,
1069  10, 23, 18, 29, 10, 53, 29, 54,
1070  11, 54, 11, 11, 55,  1, 18, 55,
1071  55, 55, 55, 55, 55, 29, 34, 18,
1072  29, 56, 56, 34, 57, 34, 34, 29,
1073  29, 57, 57, 35, 35, 35, 35, 35,
1074  39, 35, 59, 59, 18, 59, 39, 30,
1075  18, 40, 60, 60, 61, 30, 18, 61,
1076  61, 19, 19,
1077 };
1078
1079 static const uint8_t table0_mvy[1099] = {
1080  32, 31, 32, 33, 32, 31, 31, 33,
1081  33, 34, 32, 30, 32, 35, 34, 31,
1082  32, 29, 33, 30, 32, 34, 33, 31,
1083  30, 35, 31, 31, 29, 33, 35, 30,
1084  29, 33, 34, 34, 30, 32, 32, 36,
1085  29, 32, 35, 32, 28, 32, 32, 27,
1086  35, 37, 34, 29, 30, 36, 35, 34,
1087  25, 30, 29, 35, 33, 31, 31, 32,
1088  31, 28, 39, 28, 29, 37, 31, 33,
1089  27, 36, 28, 36, 37, 33, 33, 31,
1090  27, 32, 31, 38, 26, 25, 25, 33,
1091  39, 31, 34, 30, 32, 32, 32, 34,
1092  36, 32, 28, 33, 30, 38, 37, 27,
1093  33, 28, 32, 37, 35, 38, 29, 34,
1094  27, 29, 29, 32, 32, 34, 35,  3,
1095  26, 36, 31, 38, 30, 26, 35, 34,
1096  37, 26, 25, 32, 32, 39, 23, 37,
1097  32, 32, 29, 32, 29, 36, 29, 30,
1098  41, 31, 30, 21, 39, 25, 34, 38,
1099  32, 35, 39, 32, 33, 33, 32, 27,
1100  29, 25, 28, 27, 26, 31, 30, 35,
1101  24, 24, 31, 34, 32, 30, 35, 40,
1102  28, 38,  5, 35, 29, 36, 36, 32,
1103  38, 30, 33, 31, 35, 26, 23, 38,
1104  32, 41, 28, 25, 37, 40, 37, 39,
1105  32, 36, 33, 39, 25, 26, 28, 31,
1106  28, 42, 23, 31, 33, 31, 39,  1,
1107  59, 22, 27,  4, 33, 34, 33, 24,
1108  41,  3, 35, 41, 41, 28, 36, 36,
1109  28, 33, 35, 21, 23, 21, 22, 37,
1110  27, 27, 43, 29, 60, 39, 27, 25,
1111  59, 34, 27, 27, 26, 40, 37, 27,
1112  61, 26, 39, 33, 31, 22, 37, 25,
1113  30, 25, 24, 61, 31, 34, 25, 38,
1114  32, 32, 30,  3, 61, 43, 29, 23,
1115  28, 32, 28, 32, 31, 34,  5, 33,
1116  32, 33, 33, 42, 37, 23, 38, 31,
1117  40, 26, 32, 26, 37, 38, 36, 24,
1118  29, 30, 20, 22, 29, 24, 32, 41,
1119   2, 34, 25, 33, 29, 31, 39, 35,
1120  36, 24, 32, 30, 33, 27, 44, 60,
1121  30, 36, 19, 34, 31, 24, 16, 35,
1122  32, 38, 21, 33, 31, 31, 21, 35,
1123   5, 17, 29, 38, 38, 18, 58, 19,
1124  43, 41, 30, 41, 43, 39, 29,  7,
1125  29, 17, 28, 19, 28, 31, 25, 19,
1126  40, 26, 21, 33, 39, 23, 40, 30,
1127  39, 34, 35, 32, 32, 24, 33, 30,
1128  40, 47, 39, 37, 32, 33, 24, 23,
1129  45, 47, 27, 23, 42, 32, 32, 33,
1130  36, 37, 37, 17, 18, 22, 40, 38,
1131  32, 31, 35, 24, 17, 25, 17, 23,
1132  33, 34, 51, 42, 31, 36, 36, 29,
1133  21, 22, 37, 44, 43, 25, 47, 33,
1134  45, 27, 31, 58, 31, 32, 31, 38,
1135  43, 20, 47, 45, 54,  1, 26, 34,
1136  38, 14, 22, 24, 33, 34, 32, 32,
1137  37, 21, 23, 49, 35, 23, 28, 39,
1138  39, 23, 55, 33, 30, 30, 63, 16,
1139  42, 28, 13, 33, 33, 35, 19, 46,
1140  43, 17, 19, 36, 39, 24, 31, 32,
1141  33, 26, 28, 62, 33, 63, 33, 39,
1142  19, 49, 17, 31, 43, 13, 15, 29,
1143  25, 35, 33, 23, 49, 41, 28, 29,
1144  34, 38,  7, 61, 11, 50, 13, 41,
1145  19, 47, 25, 26, 15, 42, 41, 29,
1146  45, 27, 17, 35, 32, 29, 32, 24,
1147  13, 26, 26, 31, 24, 33, 28, 30,
1148  31, 11, 45, 46, 33, 33, 35, 57,
1149  32, 32, 35, 45, 34, 11, 37, 42,
1150  39, 37, 31, 49, 21, 27, 29, 47,
1151  53, 40, 51, 16, 26,  1, 40, 30,
1152  41, 44, 34, 25, 27, 31, 35, 35,
1153  31, 15, 49,  1, 35, 40,  5, 58,
1154  21, 29, 22, 59, 45, 31,  9, 26,
1155   9, 29, 11, 32, 30,  3, 13, 20,
1156  18, 20, 11,  3, 29, 40, 31, 53,
1157  30, 17, 20, 37, 31, 42, 47, 47,
1158  54, 38,  9, 34, 13, 37, 21, 25,
1159  27, 43, 42, 45, 40, 25, 27, 46,
1160  22, 25, 53, 20,  2, 14, 39, 15,
1161  22, 44, 34, 21, 38, 33, 27, 48,
1162  34, 52, 35, 47, 49, 54,  2, 13,
1163  23, 52, 29, 45, 22, 49, 54, 21,
1164  40, 42, 31, 30, 29, 34,  0, 25,
1165  23, 51, 24, 59, 28, 38, 29, 31,
1166   2, 13, 31,  8, 31, 33, 12, 45,
1167  41,  7, 14, 30, 25, 18, 43, 20,
1168  43, 35, 44,  1, 49, 42, 42, 18,
1169  41, 38, 41, 44, 53, 11, 20, 25,
1170  45, 46, 47, 48, 39, 52, 46, 49,
1171  63, 55, 44, 38, 13, 13, 57, 22,
1172  51, 16, 12, 28, 35, 57, 25, 20,
1173  26, 28, 28, 29, 32, 31, 62, 34,
1174  35, 35, 19, 49, 48, 39, 40, 18,
1175  43, 46, 11,  6, 48, 19, 49, 41,
1176  10, 23, 58, 17, 21, 23, 34, 30,
1177  60,  0, 44, 34, 26, 37, 46, 43,
1178  49, 59,  4, 34, 59, 37, 22, 25,
1179  28, 46,  6, 40, 59, 42, 36, 61,
1180  28, 30, 31, 43, 10, 22, 23, 47,
1181  20, 52, 55, 36, 25, 16,  1, 11,
1182  27, 29,  5, 63, 18, 41, 31, 34,
1183  38,  1,  5, 13, 28, 31, 17, 38,
1184  39, 41, 36, 37, 22, 39, 33, 43,
1185  43, 15, 17, 49, 30, 21, 22, 20,
1186  10, 17, 25, 54, 57,  3, 34,  8,
1187  36, 25, 31, 14, 15, 19, 29, 25,
1188  18, 39, 53, 22, 27, 20, 29, 33,
1189  41, 42, 35, 62, 50, 29, 53, 50,
1190  35, 55, 42, 61, 63,  4,  7, 42,
1191  21, 46, 47, 49, 27, 46, 17, 55,
1192  41, 50, 63,  4, 56, 18,  8, 10,
1193  18, 51, 63, 36, 55, 18,  5, 55,
1194   9, 29, 17, 21, 30, 27,  1, 59,
1195   7, 11, 12, 15,  5, 42, 24, 41,
1196  43,  7, 27, 22, 25, 31, 30, 37,
1197  22, 39, 53, 29, 36, 37, 48,  0,
1198   5, 13, 17, 31, 32, 26, 46, 28,
1199  44, 45, 46, 53, 49, 51,  3, 41,
1200   3, 22, 42, 33,  5, 45,  7, 22,
1201  40, 53, 24, 14, 25, 27, 10, 12,
1202  34, 16, 17, 53, 20, 26, 39, 45,
1203  18, 45, 35, 33, 31, 49,  4, 39,
1204  42, 11, 51,  5, 13, 26, 27, 17,
1205  52, 30,  0, 22, 12, 34, 62, 36,
1206  38, 41, 47, 30, 63, 38, 41, 43,
1207  59, 33, 45, 37, 38, 40, 47, 24,
1208  48, 49, 30,  1, 10, 22, 49, 15,
1209  39, 59, 31, 32, 33, 18, 13, 15,
1210  31, 21, 27, 44, 42, 39, 46, 17,
1211  26, 32, 30, 31,  0, 30, 34,  9,
1212  12, 13, 25, 31, 32, 55, 43, 35,
1213  61, 33, 35, 46, 25, 47, 48, 62,
1214  63, 38, 61,  1,  2,  5,  7,  9,
1215  46, 10, 34, 35, 36, 55, 51,  7,
1216  40, 23, 34, 37,  5, 13, 42, 18,
1217  25, 27, 28,
1218 };
1219
1220 /* motion vector table 1 */
1221 static const uint16_t table1_mv_code[1100] = {
1222  0x0000, 0x0007, 0x0009, 0x000f, 0x000a, 0x0011, 0x001a, 0x001c,
1223  0x0011, 0x0031, 0x0025, 0x002d, 0x002f, 0x006f, 0x0075, 0x0041,
1224  0x004c, 0x004e, 0x005c, 0x0060, 0x0062, 0x0066, 0x0068, 0x0069,
1225  0x006b, 0x00a6, 0x00c1, 0x00cb, 0x00cc, 0x00ce, 0x00da, 0x00e8,
1226  0x00ee, 0x0087, 0x0090, 0x009e, 0x009f, 0x00ba, 0x00ca, 0x00d8,
1227  0x00db, 0x00df, 0x0104, 0x0109, 0x010c, 0x0143, 0x0145, 0x014a,
1228  0x0156, 0x015c, 0x01b3, 0x01d3, 0x01da, 0x0103, 0x0109, 0x010b,
1229  0x0122, 0x0127, 0x0134, 0x0161, 0x0164, 0x0176, 0x0184, 0x018d,
1230  0x018e, 0x018f, 0x0190, 0x0193, 0x0196, 0x019d, 0x019e, 0x019f,
1231  0x01a9, 0x01b2, 0x01b4, 0x01ba, 0x01bb, 0x01bc, 0x0201, 0x0202,
1232  0x0205, 0x0207, 0x020d, 0x0210, 0x0211, 0x0215, 0x021b, 0x021f,
1233  0x0281, 0x0285, 0x0290, 0x029c, 0x029d, 0x02a2, 0x02a7, 0x02a8,
1234  0x02aa, 0x02b0, 0x02b1, 0x02b4, 0x02bc, 0x02bf, 0x0320, 0x0326,
1235  0x0327, 0x0329, 0x032a, 0x0336, 0x0360, 0x0362, 0x0363, 0x0372,
1236  0x03b2, 0x03bc, 0x03bd, 0x0203, 0x0205, 0x021a, 0x0249, 0x024a,
1237  0x024c, 0x02c7, 0x02ca, 0x02ce, 0x02ef, 0x030d, 0x0322, 0x0325,
1238  0x0338, 0x0373, 0x037a, 0x0409, 0x0415, 0x0416, 0x0418, 0x0428,
1239  0x042d, 0x042f, 0x0434, 0x0508, 0x0509, 0x0510, 0x0511, 0x051c,
1240  0x051e, 0x0524, 0x0541, 0x0543, 0x0546, 0x0547, 0x054d, 0x0557,
1241  0x055f, 0x056a, 0x056c, 0x056d, 0x056f, 0x0576, 0x0577, 0x057a,
1242  0x057b, 0x057c, 0x057d, 0x0600, 0x0601, 0x0603, 0x0614, 0x0616,
1243  0x0617, 0x061c, 0x061f, 0x0642, 0x0648, 0x0649, 0x064a, 0x064b,
1244  0x0657, 0x0668, 0x0669, 0x066b, 0x066e, 0x067f, 0x06c2, 0x06c8,
1245  0x06cb, 0x06de, 0x06df, 0x06e2, 0x06e3, 0x06ef, 0x0748, 0x074b,
1246  0x076e, 0x076f, 0x077c, 0x0409, 0x0423, 0x0428, 0x0429, 0x042a,
1247  0x042b, 0x0432, 0x0433, 0x0496, 0x049a, 0x04d5, 0x04db, 0x0581,
1248  0x0582, 0x058b, 0x058c, 0x058d, 0x0598, 0x0599, 0x059a, 0x059e,
1249  0x05dd, 0x0619, 0x0632, 0x0633, 0x0648, 0x0672, 0x06a1, 0x06a2,
1250  0x06a3, 0x06af, 0x06e2, 0x06e3, 0x06e4, 0x0800, 0x0801, 0x0802,
1251  0x0803, 0x081a, 0x081b, 0x0829, 0x082f, 0x0832, 0x083e, 0x083f,
1252  0x0852, 0x0853, 0x0858, 0x086b, 0x0877, 0x0878, 0x0879, 0x087a,
1253  0x087b, 0x0a00, 0x0a01, 0x0a0d, 0x0a0e, 0x0a0f, 0x0a24, 0x0a37,
1254  0x0a3a, 0x0a3b, 0x0a3e, 0x0a46, 0x0a47, 0x0a4a, 0x0a4b, 0x0a5f,
1255  0x0a79, 0x0a7a, 0x0a7b, 0x0a80, 0x0a81, 0x0a84, 0x0a85, 0x0a99,
1256  0x0aa5, 0x0aa6, 0x0ab8, 0x0aba, 0x0abb, 0x0abc, 0x0abd, 0x0ac8,
1257  0x0ace, 0x0acf, 0x0ad7, 0x0adc, 0x0aeb, 0x0c04, 0x0c25, 0x0c26,
1258  0x0c27, 0x0c2a, 0x0c2b, 0x0c3a, 0x0c3b, 0x0c3c, 0x0c3d, 0x0ca0,
1259  0x0cad, 0x0cd4, 0x0cd5, 0x0cfc, 0x0cfd, 0x0d86, 0x0d92, 0x0d93,
1260  0x0d94, 0x0d95, 0x0db0, 0x0db8, 0x0db9, 0x0dba, 0x0dbb, 0x0dc0,
1261  0x0dc2, 0x0dc3, 0x0dda, 0x0ddb, 0x0ddc, 0x0ddd, 0x0e92, 0x0e93,
1262  0x0e94, 0x0e95, 0x0ec7, 0x0ecc, 0x0ece, 0x0ecf, 0x0ed8, 0x0ed9,
1263  0x0eda, 0x0edb, 0x0808, 0x0809, 0x080a, 0x0810, 0x0811, 0x0844,
1264  0x0845, 0x0861, 0x0862, 0x0863, 0x086c, 0x0922, 0x0923, 0x092e,
1265  0x092f, 0x0936, 0x0937, 0x09b1, 0x09b2, 0x09b3, 0x09b4, 0x09b5,
1266  0x09b8, 0x09b9, 0x09ba, 0x09bb, 0x09bc, 0x09bd, 0x09be, 0x09bf,
1267  0x0b00, 0x0b15, 0x0b2c, 0x0b2d, 0x0b2e, 0x0b2f, 0x0b36, 0x0bb9,
1268  0x0c28, 0x0c2a, 0x0c2b, 0x0c2c, 0x0c2d, 0x0c2e, 0x0c2f, 0x0c30,
1269  0x0c31, 0x0c38, 0x0c60, 0x0c61, 0x0c62, 0x0c63, 0x0c8d, 0x0c8e,
1270  0x0c8f, 0x0c92, 0x0cbe, 0x0cbf, 0x0ce6, 0x0ce7, 0x0d40, 0x0d41,
1271  0x0d57, 0x0d58, 0x0d59, 0x0d5a, 0x0d5b, 0x0d5c, 0x0d5d, 0x0d98,
1272  0x0d99, 0x0d9a, 0x0d9b, 0x0d9c, 0x0d9d, 0x0dad, 0x0dae, 0x0daf,
1273  0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, 0x0dca, 0x0dcb, 0x0dec, 0x0ded,
1274  0x0dee, 0x0def, 0x1018, 0x1022, 0x1023, 0x1030, 0x1031, 0x1032,
1275  0x1033, 0x1050, 0x1051, 0x105c, 0x1074, 0x1075, 0x1076, 0x1077,
1276  0x1078, 0x1079, 0x107a, 0x107b, 0x10b2, 0x10b3, 0x10b8, 0x10b9,
1277  0x10ba, 0x10bb, 0x10d4, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x1404,
1278  0x1405, 0x1406, 0x1407, 0x1410, 0x1411, 0x1412, 0x1413, 0x1414,
1279  0x1415, 0x1416, 0x1417, 0x1418, 0x1419, 0x1466, 0x1467, 0x1468,
1280  0x1469, 0x146a, 0x146b, 0x146c, 0x146d, 0x147e, 0x147f, 0x1488,
1281  0x1489, 0x148a, 0x148b, 0x14b6, 0x14b7, 0x14b8, 0x14b9, 0x14ba,
1282  0x14bb, 0x14bc, 0x14bd, 0x14f0, 0x14f1, 0x14f8, 0x14f9, 0x14fa,
1283  0x14fb, 0x14fc, 0x14fd, 0x14fe, 0x14ff, 0x152a, 0x152b, 0x152c,
1284  0x152d, 0x152e, 0x152f, 0x1530, 0x1531, 0x1548, 0x1549, 0x154e,
1285  0x154f, 0x1558, 0x1559, 0x155a, 0x155b, 0x1572, 0x159a, 0x159b,
1286  0x15ac, 0x15ba, 0x15bb, 0x15d0, 0x15d1, 0x15d2, 0x15d3, 0x15d4,
1287  0x15d5, 0x181d, 0x181e, 0x181f, 0x1840, 0x1841, 0x1842, 0x1843,
1288  0x1844, 0x1845, 0x1846, 0x1847, 0x1848, 0x1849, 0x1861, 0x1862,
1289  0x1863, 0x1864, 0x1865, 0x1866, 0x1867, 0x1868, 0x1869, 0x186a,
1290  0x186b, 0x186c, 0x186d, 0x186e, 0x191b, 0x191c, 0x191d, 0x191e,
1291  0x191f, 0x1942, 0x1943, 0x1944, 0x1945, 0x1946, 0x1947, 0x1958,
1292  0x1959, 0x19ed, 0x19ee, 0x19ef, 0x19f0, 0x19f1, 0x19f2, 0x19f3,
1293  0x19f4, 0x19f5, 0x19f6, 0x19f7, 0x1b0e, 0x1b0f, 0x1b62, 0x1b63,
1294  0x1b64, 0x1b65, 0x1b66, 0x1b67, 0x1b68, 0x1b69, 0x1b6a, 0x1b6b,
1295  0x1b6c, 0x1b6d, 0x1b6e, 0x1b6f, 0x1b82, 0x1ba8, 0x1ba9, 0x1baa,
1296  0x1bab, 0x1bac, 0x1bad, 0x1bae, 0x1baf, 0x1bb0, 0x1bb1, 0x1bb2,
1297  0x1bb3, 0x1d80, 0x1d81, 0x1d82, 0x1d83, 0x1d84, 0x1d85, 0x1d86,
1298  0x1d87, 0x1d88, 0x1d89, 0x1d8a, 0x1d8b, 0x1d8c, 0x1d8d, 0x1007,
1299  0x1008, 0x1009, 0x100a, 0x100b, 0x100c, 0x100d, 0x100e, 0x100f,
1300  0x1016, 0x1080, 0x1081, 0x1082, 0x1083, 0x1084, 0x1085, 0x1086,
1301  0x1087, 0x10c0, 0x123a, 0x123b, 0x123c, 0x123d, 0x123e, 0x123f,
1302  0x1240, 0x1241, 0x1242, 0x1243, 0x1350, 0x1352, 0x1353, 0x1358,
1303  0x1359, 0x135a, 0x135b, 0x135c, 0x135d, 0x135e, 0x135f, 0x1360,
1304  0x1361, 0x1602, 0x1603, 0x160c, 0x160d, 0x160e, 0x160f, 0x1620,
1305  0x1621, 0x1622, 0x1623, 0x1624, 0x1625, 0x1626, 0x1627, 0x1628,
1306  0x1629, 0x166e, 0x166f, 0x167c, 0x167d, 0x167e, 0x167f, 0x1770,
1307  0x1771, 0x1852, 0x1853, 0x1872, 0x1873, 0x1874, 0x1875, 0x1876,
1308  0x1877, 0x1878, 0x1879, 0x187a, 0x187b, 0x187c, 0x187d, 0x187e,
1309  0x187f, 0x1918, 0x1919, 0x1926, 0x1927, 0x1970, 0x1971, 0x1972,
1310  0x1973, 0x1974, 0x1975, 0x1976, 0x1977, 0x1978, 0x1979, 0x197a,
1311  0x197b, 0x1aa0, 0x1aa1, 0x1aa2, 0x1aa3, 0x1aa4, 0x1aa5, 0x1aa6,
1312  0x1aa7, 0x1aa8, 0x1aa9, 0x1aaa, 0x1aab, 0x1aac, 0x1aad, 0x1b3c,
1313  0x1b3d, 0x1b3e, 0x1b3f, 0x1b50, 0x1b51, 0x1b52, 0x1b53, 0x1b54,
1314  0x1b55, 0x1b56, 0x1b57, 0x1b58, 0x1b59, 0x2032, 0x2033, 0x2034,
1315  0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x203a, 0x203b, 0x203c,
1316  0x203d, 0x203e, 0x203f, 0x2040, 0x2041, 0x2042, 0x2043, 0x20ba,
1317  0x20bb, 0x20cc, 0x20cd, 0x20ce, 0x20cf, 0x20e0, 0x20e1, 0x20e2,
1318  0x20e3, 0x20e4, 0x20e5, 0x20e6, 0x20e7, 0x21aa, 0x21ab, 0x21c0,
1319  0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, 0x21c8,
1320  0x21c9, 0x21ca, 0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf, 0x21d0,
1321  0x21d1, 0x21d2, 0x21d3, 0x2894, 0x2895, 0x2896, 0x2897, 0x2898,
1322  0x2899, 0x289a, 0x289b, 0x289c, 0x289d, 0x289e, 0x289f, 0x28c0,
1323  0x28c1, 0x28c2, 0x28c3, 0x28c4, 0x28c5, 0x28c6, 0x28c7, 0x28c8,
1324  0x28c9, 0x28ca, 0x28cb, 0x2930, 0x2931, 0x2932, 0x2933, 0x2934,
1325  0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c,
1326  0x293d, 0x293e, 0x293f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964,
1327  0x2965, 0x2966, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x2a40,
1328  0x2a41, 0x2a42, 0x2a43, 0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48,
1329  0x2a49, 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50,
1330  0x2a51, 0x2a52, 0x2a53, 0x2ae6, 0x2ae7, 0x2b24, 0x2b25, 0x2b26,
1331  0x2b27, 0x2b28, 0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e,
1332  0x2b2f, 0x2b30, 0x2b31, 0x2b32, 0x2b33, 0x2b5a, 0x2b5b, 0x3014,
1333  0x3015, 0x3016, 0x3017, 0x3020, 0x3021, 0x3022, 0x3023, 0x3024,
1334  0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c,
1335  0x302d, 0x302e, 0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034,
1336  0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x30c0, 0x30c1, 0x30de,
1337  0x30df, 0x3218, 0x3219, 0x321a, 0x321b, 0x321c, 0x321d, 0x321e,
1338  0x321f, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226,
1339  0x3227, 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e,
1340  0x322f, 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3378,
1341  0x3379, 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x337f, 0x33c0,
1342  0x33c1, 0x33c2, 0x33c3, 0x33c4, 0x33c5, 0x33c6, 0x33c7, 0x33c8,
1343  0x33c9, 0x33ca, 0x33cb, 0x33cc, 0x33cd, 0x33ce, 0x33cf, 0x33d0,
1344  0x33d1, 0x33d2, 0x33d3, 0x33d4, 0x33d5, 0x33d6, 0x33d7, 0x33d8,
1345  0x33d9, 0x3706, 0x3707, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
1346  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
1347  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
1348  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
1349  0x374d, 0x374e, 0x374f, 0x3b34, 0x3b35, 0x3b36, 0x3b37, 0x3be8,
1350  0x3be9, 0x3bea, 0x3beb, 0x3bec, 0x3bed, 0x3bee, 0x3bef, 0x3bf0,
1351  0x3bf1, 0x3bf2, 0x3bf3, 0x3bf4, 0x3bf5, 0x3bf6, 0x3bf7, 0x3bf8,
1352  0x3bf9, 0x3bfa, 0x3bfb, 0x3bfc, 0x3bfd, 0x3bfe, 0x3bff, 0x2000,
1353  0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008,
1354  0x2009, 0x200a, 0x200b, 0x200c, 0x200d, 0x202e, 0x202f, 0x2182,
1355  0x2183, 0x21b4, 0x21b5, 0x21b6, 0x21b7, 0x21b8, 0x21b9, 0x21ba,
1356  0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf, 0x2460, 0x2461, 0x2462,
1357  0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a,
1358  0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472,
1359  0x2473, 0x26a2, 0x26a3, 0x000b,
1360 };
1361
1362 static const uint8_t table1_mv_bits[1100] = {
1363   2,  4,  4,  4,  5,  5,  5,  5,
1364   6,  6,  7,  7,  7,  7,  7,  8,
1365   8,  8,  8,  8,  8,  8,  8,  8,
1366   8,  8,  8,  8,  8,  8,  8,  8,
1367   8,  9,  9,  9,  9,  9,  9,  9,
1368   9,  9,  9,  9,  9,  9,  9,  9,
1369   9,  9,  9,  9,  9, 10, 10, 10,
1370  10, 10, 10, 10, 10, 10, 10, 10,
1371  10, 10, 10, 10, 10, 10, 10, 10,
1372  10, 10, 10, 10, 10, 10, 10, 10,
1373  10, 10, 10, 10, 10, 10, 10, 10,
1374  10, 10, 10, 10, 10, 10, 10, 10,
1375  10, 10, 10, 10, 10, 10, 10, 10,
1376  10, 10, 10, 10, 10, 10, 10, 10,
1377  10, 10, 10, 11, 11, 11, 11, 11,
1378  11, 11, 11, 11, 11, 11, 11, 11,
1379  11, 11, 11, 11, 11, 11, 11, 11,
1380  11, 11, 11, 11, 11, 11, 11, 11,
1381  11, 11, 11, 11, 11, 11, 11, 11,
1382  11, 11, 11, 11, 11, 11, 11, 11,
1383  11, 11, 11, 11, 11, 11, 11, 11,
1384  11, 11, 11, 11, 11, 11, 11, 11,
1385  11, 11, 11, 11, 11, 11, 11, 11,
1386  11, 11, 11, 11, 11, 11, 11, 11,
1387  11, 11, 11, 12, 12, 12, 12, 12,
1388  12, 12, 12, 12, 12, 12, 12, 12,
1389  12, 12, 12, 12, 12, 12, 12, 12,
1390  12, 12, 12, 12, 12, 12, 12, 12,
1391  12, 12, 12, 12, 12, 12, 12, 12,
1392  12, 12, 12, 12, 12, 12, 12, 12,
1393  12, 12, 12, 12, 12, 12, 12, 12,
1394  12, 12, 12, 12, 12, 12, 12, 12,
1395  12, 12, 12, 12, 12, 12, 12, 12,
1396  12, 12, 12, 12, 12, 12, 12, 12,
1397  12, 12, 12, 12, 12, 12, 12, 12,
1398  12, 12, 12, 12, 12, 12, 12, 12,
1399  12, 12, 12, 12, 12, 12, 12, 12,
1400  12, 12, 12, 12, 12, 12, 12, 12,
1401  12, 12, 12, 12, 12, 12, 12, 12,
1402  12, 12, 12, 12, 12, 12, 12, 12,
1403  12, 12, 12, 12, 12, 12, 12, 12,
1404  12, 12, 13, 13, 13, 13, 13, 13,
1405  13, 13, 13, 13, 13, 13, 13, 13,
1406  13, 13, 13, 13, 13, 13, 13, 13,
1407  13, 13, 13, 13, 13, 13, 13, 13,
1408  13, 13, 13, 13, 13, 13, 13, 13,
1409  13, 13, 13, 13, 13, 13, 13, 13,
1410  13, 13, 13, 13, 13, 13, 13, 13,
1411  13, 13, 13, 13, 13, 13, 13, 13,
1412  13, 13, 13, 13, 13, 13, 13, 13,
1413  13, 13, 13, 13, 13, 13, 13, 13,
1414  13, 13, 13, 13, 13, 13, 13, 13,
1415  13, 13, 13, 13, 13, 13, 13, 13,
1416  13, 13, 13, 13, 13, 13, 13, 13,
1417  13, 13, 13, 13, 13, 13, 13, 13,
1418  13, 13, 13, 13, 13, 13, 13, 13,
1419  13, 13, 13, 13, 13, 13, 13, 13,
1420  13, 13, 13, 13, 13, 13, 13, 13,
1421  13, 13, 13, 13, 13, 13, 13, 13,
1422  13, 13, 13, 13, 13, 13, 13, 13,
1423  13, 13, 13, 13, 13, 13, 13, 13,
1424  13, 13, 13, 13, 13, 13, 13, 13,
1425  13, 13, 13, 13, 13, 13, 13, 13,
1426  13, 13, 13, 13, 13, 13, 13, 13,
1427  13, 13, 13, 13, 13, 13, 13, 13,
1428  13, 13, 13, 13, 13, 13, 13, 13,
1429  13, 13, 13, 13, 13, 13, 13, 13,
1430  13, 13, 13, 13, 13, 13, 13, 13,
1431  13, 13, 13, 13, 13, 13, 13, 13,
1432  13, 13, 13, 13, 13, 13, 13, 13,
1433  13, 13, 13, 13, 13, 13, 13, 13,
1434  13, 13, 13, 13, 13, 13, 13, 13,
1435  13, 13, 13, 13, 13, 13, 13, 13,
1436  13, 13, 13, 13, 13, 13, 13, 13,
1437  13, 13, 13, 13, 13, 13, 13, 13,
1438  13, 13, 13, 13, 13, 13, 13, 13,
1439  13, 13, 13, 13, 13, 13, 13, 14,
1440  14, 14, 14, 14, 14, 14, 14, 14,
1441  14, 14, 14, 14, 14, 14, 14, 14,
1442  14, 14, 14, 14, 14, 14, 14, 14,
1443  14, 14, 14, 14, 14, 14, 14, 14,
1444  14, 14, 14, 14, 14, 14, 14, 14,
1445  14, 14, 14, 14, 14, 14, 14, 14,
1446  14, 14, 14, 14, 14, 14, 14, 14,
1447  14, 14, 14, 14, 14, 14, 14, 14,
1448  14, 14, 14, 14, 14, 14, 14, 14,
1449  14, 14, 14, 14, 14, 14, 14, 14,
1450  14, 14, 14, 14, 14, 14, 14, 14,
1451  14, 14, 14, 14, 14, 14, 14, 14,
1452  14, 14, 14, 14, 14, 14, 14, 14,
1453  14, 14, 14, 14, 14, 14, 14, 14,
1454  14, 14, 14, 14, 14, 14, 14, 14,
1455  14, 14, 14, 14, 14, 14, 14, 14,
1456  14, 14, 14, 14, 14, 14, 14, 14,
1457  14, 14, 14, 14, 14, 14, 14, 14,
1458  14, 14, 14, 14, 14, 14, 14, 14,
1459  14, 14, 14, 14, 14, 14, 14, 14,
1460  14, 14, 14, 14, 14, 14, 14, 14,
1461  14, 14, 14, 14, 14, 14, 14, 14,
1462  14, 14, 14, 14, 14, 14, 14, 14,
1463  14, 14, 14, 14, 14, 14, 14, 14,
1464  14, 14, 14, 14, 14, 14, 14, 14,
1465  14, 14, 14, 14, 14, 14, 14, 14,
1466  14, 14, 14, 14, 14, 14, 14, 14,
1467  14, 14, 14, 14, 14, 14, 14, 14,
1468  14, 14, 14, 14, 14, 14, 14, 14,
1469  14, 14, 14, 14, 14, 14, 14, 14,
1470  14, 14, 14, 14, 14, 14, 14, 14,
1471  14, 14, 14, 14, 14, 14, 14, 14,
1472  14, 14, 14, 14, 14, 14, 14, 14,
1473  14, 14, 14, 14, 14, 14, 14, 14,
1474  14, 14, 14, 14, 14, 14, 14, 14,
1475  14, 14, 14, 14, 14, 14, 14, 14,
1476  14, 14, 14, 14, 14, 14, 14, 14,
1477  14, 14, 14, 14, 14, 14, 14, 14,
1478  14, 14, 14, 14, 14, 14, 14, 14,
1479  14, 14, 14, 14, 14, 14, 14, 14,
1480  14, 14, 14, 14, 14, 14, 14, 14,
1481  14, 14, 14, 14, 14, 14, 14, 14,
1482  14, 14, 14, 14, 14, 14, 14, 14,
1483  14, 14, 14, 14, 14, 14, 14, 14,
1484  14, 14, 14, 14, 14, 14, 14, 14,
1485  14, 14, 14, 14, 14, 14, 14, 14,
1486  14, 14, 14, 14, 14, 14, 14, 14,
1487  14, 14, 14, 14, 14, 14, 14, 14,
1488  14, 14, 14, 14, 14, 14, 14, 14,
1489  14, 14, 14, 14, 14, 14, 14, 14,
1490  14, 14, 14, 14, 14, 14, 14, 14,
1491  14, 14, 14, 14, 14, 14, 14, 14,
1492  14, 14, 14, 14, 14, 14, 14, 14,
1493  14, 14, 14, 14, 14, 14, 14, 15,
1494  15, 15, 15, 15, 15, 15, 15, 15,
1495  15, 15, 15, 15, 15, 15, 15, 15,
1496  15, 15, 15, 15, 15, 15, 15, 15,
1497  15, 15, 15, 15, 15, 15, 15, 15,
1498  15, 15, 15, 15, 15, 15, 15, 15,
1499  15, 15, 15, 15, 15, 15, 15, 15,
1500  15, 15, 15,  4,
1501 };
1502
1503 static const uint8_t table1_mvx[1099] = {
1504  32, 31, 32, 31, 33, 32, 33, 33,
1505  31, 34, 30, 32, 32, 34, 35, 32,
1506  34, 33, 29, 30, 30, 32, 31, 31,
1507  33, 35, 35, 33, 31, 29, 29, 33,
1508  34, 30, 31, 28, 36, 30, 34, 32,
1509  32, 37, 32, 32, 25, 27, 39, 32,
1510  32, 32, 38, 35, 36, 32, 37, 61,
1511  26, 32, 34, 35,  3, 35, 27, 28,
1512  29, 34, 28, 37, 31, 36, 32, 27,
1513  31, 30, 29, 39, 33, 29, 33, 35,
1514  25, 25, 29, 33, 31, 31, 31, 33,
1515  32, 30, 32, 32, 41, 39, 33, 36,
1516  32, 28, 34, 36, 38, 24, 60, 31,
1517  23, 28, 32, 33, 59, 32, 40, 30,
1518   5, 34, 32, 38, 32, 30, 43,  4,
1519  32, 32, 42, 31, 31, 32, 26, 38,
1520  26, 22, 21, 37, 61, 63, 37, 31,
1521  32, 33,  2,  1, 23, 33, 41, 27,
1522  35, 30, 38, 23, 33,  3, 28, 34,
1523  34, 27, 41, 29, 39, 35, 36, 29,
1524  32, 27, 30, 32, 24, 61, 37, 26,
1525  59, 25, 35, 27, 36, 37, 30, 31,
1526  34, 40,  3, 28, 34, 39, 32, 31,
1527  32, 30, 24, 28, 35, 36, 26, 32,
1528  31, 33, 29, 33, 39, 25, 30, 24,
1529  35, 59, 29, 34, 25, 30, 21, 35,
1530  43, 40, 32, 29,  5, 28, 31, 62,
1531  33, 33, 25, 31, 21, 31, 43, 31,
1532  34, 33, 20, 40, 39, 31, 31, 57,
1533  38, 32, 42, 33, 32, 31, 32, 29,
1534  30, 44,  5, 31, 22, 34, 36, 17,
1535  38, 58, 38, 35, 32, 60, 35, 24,
1536  32, 38, 16, 45, 42, 32, 31, 29,
1537   4, 30, 17, 40, 46, 48, 63, 32,
1538  42, 19, 41, 22, 28, 36, 45, 33,
1539  33, 32, 29,  7, 41, 42, 18, 33,
1540  33, 32, 22, 37,  1, 26, 22, 23,
1541  49, 28, 26, 27, 32, 33, 27, 23,
1542  28, 36, 15,  6, 34, 27, 31, 26,
1543  23,  2, 33, 32, 34, 41, 28, 32,
1544  41,  0, 36, 38, 34, 31, 47, 32,
1545  17, 31, 39, 33, 37, 51, 30, 47,
1546  32, 50, 32, 19, 63, 30, 25, 27,
1547  33, 62, 24, 31, 27, 30, 37, 31,
1548  45, 32, 39, 20, 46, 47, 35, 19,
1549  34,  1, 49, 21, 21, 14, 51, 26,
1550  23, 31, 36, 35, 58, 29, 29, 21,
1551  20, 42, 13, 28, 12, 40, 31, 33,
1552  39, 60, 32, 44, 33, 31, 28, 37,
1553  29, 32, 30, 49, 43, 28, 39, 25,
1554  32, 48,  2, 15, 20, 25, 31, 28,
1555  21, 24, 25, 15, 31, 17, 37, 43,
1556  18, 32, 33, 24, 33, 36, 13, 33,
1557  31, 39, 11, 31, 33, 32, 39, 37,
1558  32, 32, 29, 17, 44, 46, 36, 35,
1559  26, 37, 58, 32, 34, 38,  8, 38,
1560  38, 22, 29, 25, 16, 35, 32, 35,
1561  33, 43, 18, 46, 38, 50, 33, 18,
1562  53, 60, 13, 32, 36, 33, 51, 36,
1563  43, 45, 27, 42, 29, 24, 30, 25,
1564  31, 52, 31, 35, 38,  9, 22, 34,
1565   4, 17, 28, 55, 42, 25, 17, 20,
1566  47, 34, 33, 16, 40, 25, 16, 30,
1567  53, 29, 10, 11, 14, 26, 33,  4,
1568  35, 44, 26, 16, 31, 26, 34, 38,
1569  29, 31, 30, 24, 22, 61, 32,  9,
1570  45, 34, 31, 19,  9, 31, 46, 31,
1571  35, 54, 29, 57, 30, 50,  3, 31,
1572  63, 34, 47, 41, 51, 18, 31, 14,
1573  37, 38, 31, 24, 32, 31, 50, 33,
1574  31, 54, 27,  9, 33, 23, 19, 32,
1575  29, 29, 33, 28, 47, 49, 30, 47,
1576  33, 27, 25, 54, 44, 45, 50, 58,
1577  51, 48, 33, 59, 33, 34, 57, 13,
1578  26, 33, 13, 48, 30, 11,  7, 56,
1579  34, 55, 26,  0, 26, 35,  1, 51,
1580  33, 53, 31, 45, 12, 29, 29, 51,
1581  31, 48,  2,  6, 34, 30, 28, 33,
1582  60, 40, 27, 46, 31,  9, 35, 29,
1583  31, 39, 55, 46, 19, 37, 62, 34,
1584  30, 16, 19, 49, 41, 41, 39, 37,
1585  14,  5, 13, 35, 55, 30, 40, 40,
1586  42,  8, 20, 25, 45, 35, 33, 36,
1587  54, 38, 27, 37, 62, 40, 15, 59,
1588  49, 31, 29, 34, 34, 39, 24, 29,
1589  25, 29, 21, 29, 10, 61, 33, 49,
1590  35, 34,  3, 38, 39, 29,  7, 41,
1591   1, 35,  4, 23, 15, 23, 11, 37,
1592  28, 35, 30, 30, 24,  1, 43, 56,
1593   8, 34, 42, 24, 45, 30, 20, 23,
1594   8, 38, 22, 33, 17, 52, 34, 22,
1595  53, 43, 44,  1, 27, 31, 41, 43,
1596  41, 30, 31, 36, 30,  5, 55, 31,
1597  33, 30, 40, 23, 15, 29, 34, 34,
1598  59, 34, 30, 11, 13, 38,  5,  0,
1599  30, 42,  5, 30, 29, 34, 10, 44,
1600  30, 63, 35, 12,  3, 26, 15, 17,
1601  25, 34, 43, 39, 34, 56, 29, 23,
1602  30, 12, 30, 10, 35,  9, 24, 58,
1603  10, 12, 54, 33, 37, 20, 41, 35,
1604  29, 18, 61, 30, 40, 24, 39, 53,
1605  62, 26, 29, 33, 34, 53, 49, 21,
1606  27, 11, 63, 20, 26, 23,  7, 13,
1607   6, 47, 29, 30,  9, 51, 22, 34,
1608  21, 25, 33, 56, 57, 30, 38, 51,
1609  51, 38, 63, 28, 40, 35, 33, 18,
1610  33, 33, 24, 58, 58, 34, 49, 29,
1611  43,  4,  1,  4, 42, 35, 35, 30,
1612  17,  5, 56, 61, 25, 37, 36, 55,
1613  28, 35, 29, 50, 48, 52,  2, 42,
1614  34, 40, 46, 46, 43, 35, 29, 48,
1615  20, 29, 31, 41,  7, 30, 35, 19,
1616  14, 21,  8, 39, 39, 40, 46, 55,
1617  34,  6, 30, 34, 37, 25, 37, 33,
1618  22, 44, 52, 17, 35, 29, 36, 35,
1619  40, 37, 28, 30, 50, 14, 28, 55,
1620   6, 23, 19, 14, 30,  3, 30, 28,
1621  28, 61, 61, 47, 45, 48, 40, 40,
1622  34, 34, 25, 30, 29, 35,  4, 26,
1623  53, 50, 26, 41, 27, 59, 27, 38,
1624  39,  3, 50, 43, 47, 23, 33, 55,
1625  35, 21, 23, 35, 61, 33, 46, 52,
1626  35, 34, 24, 30, 43, 16, 37, 21,
1627   2, 24, 45, 34, 30, 55, 55,  1,
1628  29, 29, 26, 28, 25, 31, 36, 22,
1629  17, 30, 52,  2, 44, 44, 57, 26,
1630  62, 41, 39, 57, 26, 46, 49, 11,
1631  16, 19,  5, 59, 38, 39, 58, 38,
1632  25, 49, 50, 22, 28, 59,  9, 59,
1633   7, 28, 55, 17,  4, 35, 50, 21,
1634  29, 44, 47, 18, 24, 19, 25, 42,
1635  35,  3, 51, 35, 16, 35, 30, 63,
1636  57, 39, 39, 25, 35, 38,  9, 16,
1637  36, 45, 31, 60, 14, 34, 42, 24,
1638   0, 37, 18, 61, 57, 37, 28, 53,
1639  20, 46, 14, 47, 38, 38, 38,  9,
1640  34, 39, 43, 17, 39, 59,  5, 27,
1641   0, 12, 27,
1642 };
1643
1644 static const uint8_t table1_mvy[1099] = {
1645  32, 32, 31, 31, 32, 33, 31, 33,
1646  33, 32, 32, 30, 34, 31, 32, 29,
1647  33, 30, 32, 33, 31, 35, 34, 30,
1648  34, 31, 33, 29, 29, 31, 33, 35,
1649  30, 30, 35, 32, 32, 34, 34, 28,
1650  25, 32, 36, 27, 32, 32, 32, 37,
1651  39,  3, 32, 30, 31, 26, 31, 32,
1652  32, 38, 29, 29, 32, 34, 31, 31,
1653  34, 35, 33, 33, 28, 33,  1, 33,
1654  27, 29, 30, 31, 28, 29, 37, 35,
1655  31, 33, 35, 27, 36, 37, 25, 25,
1656  61, 35,  4,  5, 32, 33, 36, 30,
1657  23, 30, 28, 34, 31, 32, 32, 39,
1658  32, 34, 21, 39, 32, 59, 32, 28,
1659  32, 36, 60, 33, 24, 36, 32, 32,
1660  41,  2, 32, 38, 26, 22, 33, 30,
1661  31, 32, 32, 30, 31, 32, 29,  3,
1662  40, 38, 32, 32, 33, 26, 31, 34,
1663  28, 38, 34, 31,  3, 31, 35, 38,
1664  27, 35, 33, 28, 29, 27, 29, 27,
1665  43, 29, 37, 63, 31, 33, 34, 30,
1666  31, 30, 37, 30, 35, 35, 26, 41,
1667  37, 31, 33, 28, 26, 30, 42, 24,
1668   7, 27, 33, 29, 36, 28, 34, 57,
1669  23, 41, 36, 23, 35, 34, 25, 30,
1670  25, 33, 25, 25, 29, 24, 33, 39,
1671  33, 33,  0, 37, 31, 36, 21, 32,
1672  61, 24, 35, 61, 31,  5, 31, 59,
1673  39, 21, 32, 30, 34, 22, 40, 32,
1674  29, 16, 31,  5, 62,  2, 20, 39,
1675  39, 32, 33,  1, 31, 24, 36, 32,
1676  36, 32, 28, 26,  6, 31, 38, 34,
1677  58, 35, 32, 33, 33, 17, 43, 26,
1678  31, 40, 31, 34, 32, 32, 31, 19,
1679  30, 32, 29, 33, 38, 38, 32, 59,
1680  40, 18, 38, 32, 35, 34, 32, 17,
1681   1, 15, 30, 28, 31, 28, 34, 29,
1682  32, 27, 35, 27, 49, 22, 37, 34,
1683  37, 26, 32, 32, 22, 28, 45, 29,
1684  30, 31, 43, 46, 41, 30, 26, 13,
1685  34, 32, 27, 38, 42, 42, 33, 47,
1686  33, 60, 27, 42, 25, 32, 22, 32,
1687  48, 32, 45, 33, 33, 41, 27, 25,
1688  19, 31, 35, 19, 36, 42, 27, 17,
1689  31, 44, 28, 33, 33, 31, 23, 31,
1690  40, 33, 31, 34, 30, 32, 33, 36,
1691  35, 47, 37, 41, 31, 23, 41, 29,
1692  30, 35, 32, 25, 32, 28, 58,  2,
1693  37, 33, 14, 33, 49, 20, 39, 36,
1694  21,  9, 23, 33, 35, 24, 39, 37,
1695  11, 33, 30, 31, 31, 28, 51, 40,
1696  35, 29, 25, 33, 46, 35, 37, 30,
1697  30,  8, 63, 28, 15, 40, 33, 45,
1698  49, 25, 32,  4, 47, 51, 36, 39,
1699  53, 10, 24, 29, 30, 31, 25, 40,
1700  38, 38, 33, 56, 23, 27, 32, 37,
1701  26, 29, 43, 36, 33, 24, 55, 43,
1702   9, 29, 34, 34, 24, 33, 18, 33,
1703  33, 30, 31, 50, 24, 60, 30, 39,
1704  34, 30, 39, 28, 22, 38,  2, 26,
1705  63, 32, 57, 21, 39, 33, 28, 18,
1706  30, 34, 22, 33, 29, 41, 30, 34,
1707  35, 21, 13, 34, 35, 39, 30, 46,
1708  32, 42, 32, 31, 33, 26, 11, 33,
1709  22, 31, 25, 31, 53, 27, 43, 25,
1710  40, 50, 21, 36, 38, 30, 12, 31,
1711  34, 20, 15, 29, 32, 62, 30, 13,
1712  17, 32, 19, 31, 20, 31, 30,  7,
1713   1, 17, 34, 37, 31, 31, 44, 34,
1714  26, 40, 16, 37, 52, 48, 30, 20,
1715  18, 33, 38, 29,  7, 25, 30, 54,
1716  45, 47, 46, 41, 29, 29, 16, 30,
1717  14, 26, 38, 34, 34, 29, 34, 30,
1718  29, 30, 57, 30,  4, 46, 33, 29,
1719  39, 44, 30, 31, 50, 33, 31, 32,
1720  19, 32, 40, 31, 37, 47,  1, 35,
1721  16, 31,  0, 35, 33,  1, 17, 34,
1722   9, 34, 33, 31, 49, 43, 42, 51,
1723  34, 29, 23, 29, 14, 30, 45, 49,
1724  11, 24, 31, 28, 35, 41, 30, 44,
1725  18, 29, 34, 35, 36, 25, 26, 21,
1726  31, 30, 34, 19, 34, 44, 36, 38,
1727  25, 31, 28, 23, 37,  3, 55, 41,
1728  30, 22, 41, 24, 33, 26, 35, 35,
1729  30, 55, 51, 47, 48, 38, 24, 15,
1730  21, 50, 25, 46, 30, 29, 10, 34,
1731  42, 45, 29, 42, 22,  3, 33, 27,
1732  34,  1, 34, 28, 34, 36, 35, 23,
1733  23, 13, 58,  3, 26, 63, 25, 31,
1734  34, 61, 38, 39, 25, 61, 29, 37,
1735  30, 41, 26, 48, 28, 33, 50, 35,
1736  30, 37, 29, 29, 40,  6, 39, 28,
1737  28, 19,  8, 22, 45, 34, 35, 10,
1738  58, 17, 37, 39, 30, 18, 54, 14,
1739  29, 16, 59, 30, 35, 23, 35, 30,
1740  47, 36, 29, 55, 20, 12, 31, 35,
1741  14, 29, 18, 34, 34, 24, 29, 26,
1742  22,  2, 27, 23,  8, 30, 55, 38,
1743  60, 31,  4, 34, 49, 34, 27, 34,
1744  33, 30, 31, 54, 42, 35, 38, 46,
1745  44, 26, 27,  9, 39, 25, 21, 29,
1746  28, 42, 13,  0,  5, 34, 37, 28,
1747  24, 29, 63, 26, 22, 27, 29, 25,
1748  33, 25, 61,  0, 35, 25, 36, 15,
1749  27, 40, 53, 33,  3, 10, 16, 37,
1750  38, 18, 30, 46, 27,  9,  6, 29,
1751  62,  8, 42, 28, 29,  3, 25, 16,
1752  26, 29, 35, 28, 27, 51, 61, 48,
1753  37,  9, 34,  7, 49, 45, 20, 29,
1754  21,  5,  5, 29, 28, 34, 29, 24,
1755  10, 24, 35, 36, 38, 55, 11, 36,
1756  38, 53, 54, 26, 30, 49, 20, 27,
1757  30, 39, 33, 41, 49, 22, 38, 38,
1758   4, 30,  8,  9,  3, 24, 22, 50,
1759  37, 36, 31, 27,  2,  9, 42, 63,
1760  25, 19, 44,  1, 28, 28, 48, 30,
1761  34, 41, 41, 38, 12, 27, 15,  0,
1762  16, 34, 35, 38, 28, 29, 40, 42,
1763  51, 52, 45, 54, 59, 59, 42, 44,
1764  37, 26, 46, 24, 15, 39, 22, 46,
1765  19, 35, 38, 17, 37, 23, 52, 55,
1766  50, 37, 26, 11, 37, 12, 24, 30,
1767  16, 13, 22, 13, 36, 35, 40, 41,
1768  34, 41, 26, 53, 51,  5, 21, 30,
1769   2, 63, 41, 20,  1, 56, 21, 24,
1770  25,  5, 28, 35, 26, 28, 30, 18,
1771  29, 23, 40, 34, 20, 42, 39, 34,
1772  28, 61, 38, 27, 62,  9, 36, 17,
1773   9, 49, 24, 25, 54, 34, 39, 37,
1774   3,  1, 25, 38, 38, 44, 35, 36,
1775  12, 60, 36, 38, 40, 25, 43, 39,
1776  53, 28, 39, 57, 46, 10, 52, 27,
1777  35, 42, 45, 59, 15, 60, 38, 24,
1778  23, 39, 12, 29, 24,  0, 20, 16,
1779  28, 43, 35, 28,  1, 49,  4, 21,
1780  42, 39, 29,  3, 44, 21, 53, 55,
1781  11,  5,  3, 39, 53, 28, 25, 19,
1782  34, 28, 21,
1783 };
1784
1785 MVTable ff_mv_tables[2] = {
1786     {
1787         1099,
1788         table0_mv_code,
1789         table0_mv_bits,
1790         table0_mvx,
1791         table0_mvy,
1792     },
1793     {
1794         1099,
1795         table1_mv_code,
1796         table1_mv_bits,
1797         table1_mvx,
1798         table1_mvy,
1799     }
1800 };
1801
1802 const uint8_t ff_v2_mb_type[8][2] = {
1803  {1, 1}, {0   , 2}, {3   , 3}, {9   , 5},
1804  {5, 4}, {0x21, 7}, {0x20, 7}, {0x11, 6},
1805 };
1806
1807 const uint8_t ff_v2_intra_cbpc[4][2] = {
1808  {1, 1}, {0, 3}, {1, 3}, {1, 2},
1809 };
1810
1811 const uint8_t ff_wmv1_y_dc_scale_table[32]={
1812 //  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1813     0, 8, 8, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21
1814 };
1815 const uint8_t ff_wmv1_c_dc_scale_table[32]={
1816 //  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1817     0, 8, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22
1818 };
1819
1820 const uint8_t ff_old_ff_y_dc_scale_table[32]={
1821 //  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
1822     0, 8, 8, 8, 8,10,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
1823 };
1824
1825 const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64]={
1826   {
1827     0x00, 0x08, 0x01, 0x02, 0x09, 0x10, 0x18, 0x11,
1828     0x0A, 0x03, 0x04, 0x0B, 0x12, 0x19, 0x20, 0x28,
1829     0x30, 0x38, 0x29, 0x21, 0x1A, 0x13, 0x0C, 0x05,
1830     0x06, 0x0D, 0x14, 0x1B, 0x22, 0x31, 0x39, 0x3A,
1831     0x32, 0x2A, 0x23, 0x1C, 0x15, 0x0E, 0x07, 0x0F,
1832     0x16, 0x1D, 0x24, 0x2B, 0x33, 0x3B, 0x3C, 0x34,
1833     0x2C, 0x25, 0x1E, 0x17, 0x1F, 0x26, 0x2D, 0x35,
1834     0x3D, 0x3E, 0x36, 0x2E, 0x27, 0x2F, 0x37, 0x3F,
1835   },
1836   {
1837     0x00, 0x08, 0x01, 0x02, 0x09, 0x10, 0x18, 0x11,
1838     0x0A, 0x03, 0x04, 0x0B, 0x12, 0x19, 0x20, 0x28,
1839     0x21, 0x30, 0x1A, 0x13, 0x0C, 0x05, 0x06, 0x0D,
1840     0x14, 0x1B, 0x22, 0x29, 0x38, 0x31, 0x39, 0x2A,
1841     0x23, 0x1C, 0x15, 0x0E, 0x07, 0x0F, 0x16, 0x1D,
1842     0x24, 0x2B, 0x32, 0x3A, 0x33, 0x3B, 0x2C, 0x25,
1843     0x1E, 0x17, 0x1F, 0x26, 0x2D, 0x34, 0x3C, 0x35,
1844     0x3D, 0x2E, 0x27, 0x2F, 0x36, 0x3E, 0x37, 0x3F,
1845   },
1846   {
1847     0x00, 0x01, 0x08, 0x02, 0x03, 0x09, 0x10, 0x18,
1848     0x11, 0x0A, 0x04, 0x05, 0x0B, 0x12, 0x19, 0x20,
1849     0x28, 0x30, 0x21, 0x1A, 0x13, 0x0C, 0x06, 0x07,
1850     0x0D, 0x14, 0x1B, 0x22, 0x29, 0x38, 0x31, 0x39,
1851     0x2A, 0x23, 0x1C, 0x15, 0x0E, 0x0F, 0x16, 0x1D,
1852     0x24, 0x2B, 0x32, 0x3A, 0x33, 0x2C, 0x25, 0x1E,
1853     0x17, 0x1F, 0x26, 0x2D, 0x34, 0x3B, 0x3C, 0x35,
1854     0x2E, 0x27, 0x2F, 0x36, 0x3D, 0x3E, 0x37, 0x3F,
1855   },
1856   {
1857     0x00, 0x08, 0x10, 0x01, 0x18, 0x20, 0x28, 0x09,
1858     0x02, 0x03, 0x0A, 0x11, 0x19, 0x30, 0x38, 0x29,
1859     0x21, 0x1A, 0x12, 0x0B, 0x04, 0x05, 0x0C, 0x13,
1860     0x1B, 0x22, 0x31, 0x39, 0x32, 0x2A, 0x23, 0x1C,
1861     0x14, 0x0D, 0x06, 0x07, 0x0E, 0x15, 0x1D, 0x24,
1862     0x2B, 0x33, 0x3A, 0x3B, 0x34, 0x2C, 0x25, 0x1E,
1863     0x16, 0x0F, 0x17, 0x1F, 0x26, 0x2D, 0x3C, 0x35,
1864     0x2E, 0x27, 0x2F, 0x36, 0x3D, 0x3E, 0x37, 0x3F,
1865   }
1866 };
1867
1868 const uint8_t ff_table_inter_intra[4][2]={
1869     {0,1} /*Luma-Left Chroma-Left*/,
1870     {2,2} /*Luma-Top  Chroma-Left*/,
1871     {6,3} /*luma-Left Chroma-Top */,
1872     {7,3} /*luma-Top  Chroma-Top */
1873 };
1874
1875 static const uint32_t table_mb_non_intra2[128][2] = {
1876 {0x0000A7, 14}, {0x01B2B8, 18}, {0x01B28E, 18}, {0x036575, 19},
1877 {0x006CAC, 16}, {0x000A69, 18}, {0x002934, 20}, {0x00526B, 21},
1878 {0x006CA1, 16}, {0x01B2B9, 18}, {0x0029AD, 20}, {0x029353, 24},
1879 {0x006CA7, 16}, {0x006CAB, 16}, {0x01B2BB, 18}, {0x00029B, 16},
1880 {0x00D944, 17}, {0x000A6A, 18}, {0x0149A8, 23}, {0x03651F, 19},
1881 {0x006CAF, 16}, {0x000A4C, 18}, {0x03651E, 19}, {0x000A48, 18},
1882 {0x00299C, 20}, {0x00299F, 20}, {0x029352, 24}, {0x0029AC, 20},
1883 {0x000296, 16}, {0x00D946, 17}, {0x000A68, 18}, {0x000298, 16},
1884 {0x000527, 17}, {0x00D94D, 17}, {0x0014D7, 19}, {0x036574, 19},
1885 {0x000A5C, 18}, {0x01B299, 18}, {0x00299D, 20}, {0x00299E, 20},
1886 {0x000525, 17}, {0x000A66, 18}, {0x00A4D5, 22}, {0x00149B, 19},
1887 {0x000295, 16}, {0x006CAD, 16}, {0x000A49, 18}, {0x000521, 17},
1888 {0x006CAA, 16}, {0x00D945, 17}, {0x01B298, 18}, {0x00052F, 17},
1889 {0x003654, 15}, {0x006CA0, 16}, {0x000532, 17}, {0x000291, 16},
1890 {0x003652, 15}, {0x000520, 17}, {0x000A5D, 18}, {0x000294, 16},
1891 {0x00009B, 11}, {0x0006E2, 12}, {0x000028, 12}, {0x0001B0, 10},
1892 {0x000001,  3}, {0x000010,  8}, {0x00002F,  6}, {0x00004C, 10},
1893 {0x00000D,  4}, {0x000000, 10}, {0x000006,  9}, {0x000134, 12},
1894 {0x00000C,  4}, {0x000007, 10}, {0x000007,  9}, {0x0006E1, 12},
1895 {0x00000E,  5}, {0x0000DA,  9}, {0x000022,  9}, {0x000364, 11},
1896 {0x00000F,  4}, {0x000006, 10}, {0x00000F,  9}, {0x000135, 12},
1897 {0x000014,  5}, {0x0000DD,  9}, {0x000004,  9}, {0x000015, 11},
1898 {0x00001A,  6}, {0x0001B3, 10}, {0x000005, 10}, {0x0006E3, 12},
1899 {0x00000C,  5}, {0x0000B9,  8}, {0x000004,  8}, {0x0000DB,  9},
1900 {0x00000E,  4}, {0x00000B, 10}, {0x000023,  9}, {0x0006CB, 12},
1901 {0x000005,  6}, {0x0001B1, 10}, {0x000001, 10}, {0x0006E0, 12},
1902 {0x000011,  5}, {0x0000DF,  9}, {0x00000E,  9}, {0x000373, 11},
1903 {0x000003,  5}, {0x0000B8,  8}, {0x000006,  8}, {0x000175,  9},
1904 {0x000015,  5}, {0x000174,  9}, {0x000027,  9}, {0x000372, 11},
1905 {0x000010,  5}, {0x0000BB,  8}, {0x000005,  8}, {0x0000DE,  9},
1906 {0x00000F,  5}, {0x000001,  9}, {0x000012,  8}, {0x000004, 10},
1907 {0x000002,  3}, {0x000016,  5}, {0x000009,  4}, {0x000001,  5},
1908 };
1909
1910 static const uint32_t table_mb_non_intra3[128][2] = {
1911 {0x0002A1, 10}, {0x005740, 15}, {0x01A0BF, 18}, {0x015D19, 17},
1912 {0x001514, 13}, {0x00461E, 15}, {0x015176, 17}, {0x015177, 17},
1913 {0x0011AD, 13}, {0x00682E, 16}, {0x0682F9, 20}, {0x03417D, 19},
1914 {0x001A36, 14}, {0x002A2D, 14}, {0x00D05E, 17}, {0x006824, 16},
1915 {0x001515, 13}, {0x00545C, 15}, {0x0230E9, 18}, {0x011AFA, 17},
1916 {0x0015D7, 13}, {0x005747, 15}, {0x008D79, 16}, {0x006825, 16},
1917 {0x002BA2, 14}, {0x00A8BA, 16}, {0x0235F6, 18}, {0x015D18, 17},
1918 {0x0011AE, 13}, {0x00346F, 15}, {0x008C3B, 16}, {0x00346E, 15},
1919 {0x000D1A, 13}, {0x00461F, 15}, {0x0682F8, 20}, {0x011875, 17},
1920 {0x002BA1, 14}, {0x008D61, 16}, {0x0235F7, 18}, {0x0230E8, 18},
1921 {0x001513, 13}, {0x008D7B, 16}, {0x011AF4, 17}, {0x011AF5, 17},
1922 {0x001185, 13}, {0x0046BF, 15}, {0x008D60, 16}, {0x008D7C, 16},
1923 {0x001512, 13}, {0x00461C, 15}, {0x00AE8D, 16}, {0x008D78, 16},
1924 {0x000D0E, 13}, {0x003413, 15}, {0x0046B1, 15}, {0x003416, 15},
1925 {0x000AEA, 12}, {0x002A2C, 14}, {0x005741, 15}, {0x002A2F, 14},
1926 {0x000158,  9}, {0x0008D2, 12}, {0x00054C, 11}, {0x000686, 12},
1927 {0x000000,  2}, {0x000069,  8}, {0x00006B,  8}, {0x00068C, 12},
1928 {0x000007,  3}, {0x00015E,  9}, {0x0002A3, 10}, {0x000AE9, 12},
1929 {0x000006,  3}, {0x000231, 10}, {0x0002B8, 10}, {0x001A08, 14},
1930 {0x000010,  5}, {0x0001A9, 10}, {0x000342, 11}, {0x000A88, 12},
1931 {0x000004,  4}, {0x0001A2, 10}, {0x0002A4, 10}, {0x001184, 13},
1932 {0x000012,  5}, {0x000232, 10}, {0x0002B2, 10}, {0x000680, 12},
1933 {0x00001B,  6}, {0x00046A, 11}, {0x00068E, 12}, {0x002359, 14},
1934 {0x000016,  5}, {0x00015F,  9}, {0x0002A0, 10}, {0x00054D, 11},
1935 {0x000005,  4}, {0x000233, 10}, {0x0002B9, 10}, {0x0015D6, 13},
1936 {0x000022,  6}, {0x000468, 11}, {0x000683, 12}, {0x001A0A, 14},
1937 {0x000013,  5}, {0x000236, 10}, {0x0002BB, 10}, {0x001186, 13},
1938 {0x000017,  5}, {0x0001AB, 10}, {0x0002A7, 10}, {0x0008D3, 12},
1939 {0x000014,  5}, {0x000237, 10}, {0x000460, 11}, {0x000D0F, 13},
1940 {0x000019,  6}, {0x0001AA, 10}, {0x0002B3, 10}, {0x000681, 12},
1941 {0x000018,  6}, {0x0001A8, 10}, {0x0002A5, 10}, {0x00068F, 12},
1942 {0x000007,  4}, {0x000055,  7}, {0x000047,  7}, {0x0000AD,  8},
1943 };
1944
1945 static const uint32_t table_mb_non_intra4[128][2] = {
1946 {0x0000D4,  8}, {0x0021C5, 14}, {0x00F18A, 16}, {0x00D5BC, 16},
1947 {0x000879, 12}, {0x00354D, 14}, {0x010E3F, 17}, {0x010F54, 17},
1948 {0x000866, 12}, {0x00356E, 14}, {0x010F55, 17}, {0x010E3E, 17},
1949 {0x0010CE, 13}, {0x003C84, 14}, {0x00D5BD, 16}, {0x00F18B, 16},
1950 {0x000868, 12}, {0x00438C, 15}, {0x0087AB, 16}, {0x00790B, 15},
1951 {0x000F10, 12}, {0x00433D, 15}, {0x006AD3, 15}, {0x00790A, 15},
1952 {0x001AA7, 13}, {0x0043D4, 15}, {0x00871E, 16}, {0x006ADF, 15},
1953 {0x000D7C, 12}, {0x003C94, 14}, {0x00438D, 15}, {0x006AD2, 15},
1954 {0x0006BC, 11}, {0x0021E9, 14}, {0x006ADA, 15}, {0x006A99, 15},
1955 {0x0010F7, 13}, {0x004389, 15}, {0x006ADB, 15}, {0x0078C4, 15},
1956 {0x000D56, 12}, {0x0035F7, 14}, {0x00438E, 15}, {0x006A98, 15},
1957 {0x000D52, 12}, {0x003C95, 14}, {0x004388, 15}, {0x00433C, 15},
1958 {0x000D54, 12}, {0x001E4B, 13}, {0x003C63, 14}, {0x003C83, 14},
1959 {0x000861, 12}, {0x0021EB, 14}, {0x00356C, 14}, {0x0035F6, 14},
1960 {0x000863, 12}, {0x00219F, 14}, {0x003568, 14}, {0x003C82, 14},
1961 {0x0001AE,  9}, {0x0010C0, 13}, {0x000F11, 12}, {0x001AFA, 13},
1962 {0x000000,  1}, {0x0000F0,  8}, {0x0001AD,  9}, {0x0010C1, 13},
1963 {0x00000A,  4}, {0x0003C5, 10}, {0x000789, 11}, {0x001AB5, 13},
1964 {0x000009,  4}, {0x000435, 11}, {0x000793, 11}, {0x001E40, 13},
1965 {0x00001D,  5}, {0x0003CB, 10}, {0x000878, 12}, {0x001AAF, 13},
1966 {0x00000B,  4}, {0x0003C7, 10}, {0x000791, 11}, {0x001AAB, 13},
1967 {0x00001F,  5}, {0x000436, 11}, {0x0006BF, 11}, {0x000F19, 12},
1968 {0x00003D,  6}, {0x000D51, 12}, {0x0010C4, 13}, {0x0021E8, 14},
1969 {0x000036,  6}, {0x000437, 11}, {0x0006AF, 11}, {0x0010C5, 13},
1970 {0x00000C,  4}, {0x000432, 11}, {0x000794, 11}, {0x001E30, 13},
1971 {0x000042,  7}, {0x000870, 12}, {0x000F24, 12}, {0x001E43, 13},
1972 {0x000020,  6}, {0x00043E, 11}, {0x000795, 11}, {0x001AAA, 13},
1973 {0x000037,  6}, {0x0006AC, 11}, {0x0006AE, 11}, {0x0010F6, 13},
1974 {0x000034,  6}, {0x00043A, 11}, {0x000D50, 12}, {0x001AAE, 13},
1975 {0x000039,  6}, {0x00043F, 11}, {0x00078D, 11}, {0x0010D2, 13},
1976 {0x000038,  6}, {0x00043B, 11}, {0x0006BD, 11}, {0x0010D3, 13},
1977 {0x000011,  5}, {0x0001AC,  9}, {0x0000F3,  8}, {0x000439, 11},
1978 };
1979
1980 const uint32_t (* const ff_wmv2_inter_table[WMV2_INTER_CBP_TABLE_COUNT])[2]={
1981     table_mb_non_intra2,
1982     table_mb_non_intra3,
1983     table_mb_non_intra4,
1984     ff_table_mb_non_intra,
1985 };
1986
1987 const uint8_t ff_wmv2_scantableA[64]={
1988 0x00, 0x01, 0x02, 0x08, 0x03, 0x09, 0x0A, 0x10,
1989 0x04, 0x0B, 0x11, 0x18, 0x12, 0x0C, 0x05, 0x13,
1990 0x19, 0x0D, 0x14, 0x1A, 0x1B, 0x06, 0x15, 0x1C,
1991 0x0E, 0x16, 0x1D, 0x07, 0x1E, 0x0F, 0x17, 0x1F,
1992 };
1993
1994 const uint8_t ff_wmv2_scantableB[64]={
1995 0x00, 0x08, 0x01, 0x10, 0x09, 0x18, 0x11, 0x02,
1996 0x20, 0x0A, 0x19, 0x28, 0x12, 0x30, 0x21, 0x1A,
1997 0x38, 0x29, 0x22, 0x03, 0x31, 0x39, 0x0B, 0x2A,
1998 0x13, 0x32, 0x1B, 0x3A, 0x23, 0x2B, 0x33, 0x3B,
1999 };