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