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