]> git.sesse.net Git - ffmpeg/blob - libavcodec/dnxhddata.c
Merge commit '403ea4ac7289ac39229452b6b5e2f8ebcc00f2a1'
[ffmpeg] / libavcodec / dnxhddata.c
1 /*
2  * VC3/DNxHD data.
3  * Copyright (c) 2007 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #include "avcodec.h"
23 #include "dnxhddata.h"
24 #include "libavutil/common.h"
25
26 /* The quantization tables below are in zigzag order! */
27
28 /* Used in CID 1235, 1256 */
29 static const uint8_t dnxhd_1235_luma_weight[] = {
30      0, 32, 32, 32, 33, 32, 32, 32,
31     32, 31, 32, 33, 33, 33, 33, 35,
32     36, 36, 34, 34, 36, 37, 37, 36,
33     36, 35, 36, 38, 39, 39, 37, 36,
34     37, 37, 39, 41, 42, 41, 39, 39,
35     40, 41, 42, 43, 42, 42, 41, 41,
36     41, 44, 47, 46, 46, 48, 51, 51,
37     50, 50, 53, 55, 55, 56, 60, 60,
38 };
39
40 static const uint8_t dnxhd_1235_chroma_weight[] = {
41      0, 32, 33, 34, 34, 33, 34, 35,
42     37, 40, 43, 42, 39, 38, 39, 41,
43     43, 44, 47, 50, 55, 61, 63, 56,
44     48, 46, 49, 54, 59, 58, 55, 58,
45     63, 65, 67, 74, 84, 82, 75, 72,
46     70, 74, 84, 87, 87, 94, 93, 81,
47     75, 78, 83, 89, 91, 86, 82, 85,
48     90, 90, 85, 79, 73, 73, 73, 73,
49 };
50
51 /* Used in CID 1237, 1253 */
52 static const uint8_t dnxhd_1237_luma_weight[] = {
53      0,  32,  33,  34, 34, 36, 37, 36,
54     36,  37,  38,  38, 38, 39, 41, 44,
55     43,  41,  40,  41, 46, 49, 47, 46,
56     47,  49,  51,  54, 60, 62, 59, 55,
57     54,  56,  58,  61, 65, 66, 64, 63,
58     66,  73,  78,  79, 80, 79, 78, 78,
59     82,  87,  89,  90, 93, 95, 96, 97,
60     97, 100, 104, 102, 98, 98, 99, 99,
61 };
62
63 /* Used in CID 1237, 1253 */
64 static const uint8_t dnxhd_1237_chroma_weight[] = {
65      0,  32,  36,  39, 39, 38, 39,  41,
66     45,  51,  57,  58, 53, 48, 47,  51,
67     55,  58,  66,  75, 81, 83, 82,  78,
68     73,  72,  74,  77, 83, 85, 83,  82,
69     89,  99,  96,  90, 94, 97, 99, 105,
70    109, 105,  95,  89, 92, 95, 94,  93,
71     92,  88,  89,  90, 93, 95, 96,  97,
72     97, 100, 104, 102, 98, 98, 99,  99,
73 };
74
75 static const uint8_t dnxhd_1238_luma_weight[] = {
76      0, 32, 32, 33, 34, 33, 33, 33,
77     33, 33, 33, 33, 33, 35, 37, 37,
78     36, 36, 35, 36, 38, 38, 36, 35,
79     36, 37, 38, 41, 42, 41, 39, 38,
80     38, 38, 39, 41, 42, 41, 39, 39,
81     40, 41, 43, 44, 44, 44, 44, 44,
82     45, 47, 47, 47, 49, 50, 51, 51,
83     51, 53, 55, 57, 58, 59, 57, 57,
84 };
85
86 static const uint8_t dnxhd_1238_chroma_weight[] = {
87      0, 32, 35, 35, 35, 34, 34, 35,
88     39, 43, 45, 45, 41, 39, 40, 41,
89     42, 44, 48, 55, 59, 63, 65, 59,
90     53, 52, 52, 55, 61, 62, 58, 58,
91     63, 66, 66, 65, 70, 74, 70, 66,
92     65, 68, 75, 77, 74, 74, 77, 76,
93     73, 73, 73, 73, 76, 80, 89, 90,
94     82, 77, 80, 86, 84, 82, 82, 82,
95 };
96
97 static const uint8_t dnxhd_1241_luma_weight[] = {
98      0, 32, 33, 34, 34, 35, 36, 37,
99     36, 37, 38, 38, 38, 39, 39, 40,
100     40, 38, 38, 39, 38, 37, 39, 41,
101     41, 42, 43, 45, 45, 46, 47, 46,
102     45, 43, 39, 37, 37, 40, 44, 45,
103     45, 46, 46, 46, 47, 47, 46, 44,
104     42, 43, 45, 47, 48, 49, 50, 49,
105     48, 46, 47, 48, 48, 49, 49, 49,
106 };
107
108 static const uint8_t dnxhd_1241_chroma_weight[] = {
109      0, 32, 36, 38, 37, 37, 40, 41,
110     40, 40, 42, 42, 41, 41, 41, 41,
111     42, 43, 44, 44, 45, 46, 46, 45,
112     44, 45, 45, 45, 45, 46, 47, 46,
113     45, 44, 42, 41, 43, 45, 45, 47,
114     48, 48, 48, 46, 47, 47, 46, 47,
115     46, 45, 45, 47, 48, 49, 50, 49,
116     48, 46, 48, 49, 48, 49, 49, 49,
117 };
118
119 static const uint8_t dnxhd_1242_luma_weight[] = {
120      0, 32, 33, 33, 34, 35, 36, 35,
121     33, 33, 35, 36, 37, 37, 38, 37,
122     37, 37, 36, 37, 37, 37, 38, 39,
123     37, 36, 37, 40, 42, 45, 46, 44,
124     41, 42, 44, 45, 47, 49, 50, 48,
125     46, 48, 49, 50, 52, 52, 50, 49,
126     47, 48, 50, 50, 51, 51, 50, 49,
127     49, 51, 52, 51, 49, 47, 47, 47,
128 };
129
130 static const uint8_t dnxhd_1242_chroma_weight[] = {
131      0, 32, 37, 42, 45, 45, 45, 44,
132     38, 37, 40, 42, 44, 49, 51, 47,
133     41, 40, 43, 44, 46, 48, 51, 54,
134     51, 47, 47, 45, 47, 50, 51, 49,
135     46, 47, 49, 47, 50, 55, 55, 51,
136     48, 49, 51, 51, 52, 52, 54, 54,
137     49, 49, 52, 53, 54, 54, 53, 53,
138     55, 59, 63, 62, 60, 60, 60, 60,
139 };
140
141 static const uint8_t dnxhd_1243_luma_weight[] = {
142      0, 32, 32, 33, 33, 35, 35, 35,
143     35, 35, 35, 35, 34, 35, 38, 40,
144     39, 37, 37, 37, 36, 35, 36, 38,
145     40, 41, 42, 44, 45, 44, 42, 41,
146     40, 38, 36, 36, 37, 38, 40, 43,
147     44, 45, 45, 45, 45, 45, 45, 41,
148     39, 41, 45, 47, 47, 48, 48, 48,
149     46, 44, 45, 47, 47, 48, 47, 47,
150 };
151
152 static const uint8_t dnxhd_1243_chroma_weight[] = {
153      0, 32, 36, 37, 36, 37, 39, 39,
154     41, 43, 43, 42, 41, 41, 41, 42,
155     43, 43, 43, 44, 44, 44, 46, 47,
156     46, 45, 45, 45, 45, 46, 44, 44,
157     45, 44, 42, 41, 43, 46, 45, 44,
158     45, 45, 45, 46, 46, 46, 45, 44,
159     45, 44, 45, 47, 47, 48, 49, 48,
160     46, 45, 46, 47, 47, 48, 47, 47,
161 };
162
163 static const uint8_t dnxhd_1250_luma_weight[] = {
164      0, 32, 32, 33, 34, 35, 35, 35,
165     34, 34, 35, 36, 36, 36, 36, 36,
166     37, 38, 38, 38, 38, 38, 39, 39,
167     38, 38, 39, 41, 43, 43, 42, 41,
168     40, 40, 39, 40, 41, 41, 39, 39,
169     40, 42, 47, 50, 47, 45, 46, 46,
170     44, 45, 46, 47, 49, 54, 58, 54,
171     48, 49, 54, 57, 60, 62, 63, 63,
172 };
173
174 static const uint8_t dnxhd_1250_chroma_weight[] = {
175      0, 32, 35, 36, 36, 35, 36, 39,
176     41, 43, 45, 44, 41, 39, 40, 42,
177     43, 43, 45, 48, 49, 51, 52, 50,
178     50, 51, 51, 51, 51, 52, 53, 54,
179     51, 49, 51, 52, 52, 56, 57, 55,
180     54, 54, 55, 56, 55, 58, 58, 58,
181     60, 61, 62, 62, 59, 57, 58, 58,
182     61, 59, 59, 59, 60, 62, 63, 63,
183 };
184
185 static const uint8_t dnxhd_1251_luma_weight[] = {
186      0, 32, 32, 34, 34, 34, 34, 35,
187     35, 35, 36, 37, 36, 36, 35, 36,
188     38, 38, 38, 38, 38, 38, 38, 38,
189     38, 38, 39, 41, 44, 43, 41, 40,
190     40, 40, 40, 39, 40, 41, 40, 39,
191     40, 43, 46, 46, 44, 44, 44, 42,
192     41, 43, 46, 48, 50, 55, 58, 53,
193     48, 50, 55, 58, 61, 62, 62, 62,
194 };
195
196 static const uint8_t dnxhd_1251_chroma_weight[] = {
197      0, 32, 35, 36, 36, 35, 36, 39,
198     41, 43, 45, 44, 41, 39, 40, 42,
199     43, 43, 45, 48, 48, 48, 50, 50,
200     50, 51, 51, 51, 51, 52, 53, 54,
201     51, 49, 51, 52, 52, 56, 57, 55,
202     54, 54, 55, 56, 55, 58, 58, 58,
203     60, 61, 62, 62, 59, 57, 58, 58,
204     61, 59, 59, 59, 61, 62, 62, 62,
205 };
206
207 static const uint8_t dnxhd_1252_luma_weight[] = {
208       0,  32,  34, 35, 36, 36, 36, 37,
209      36,  37,  39, 40, 41, 40, 40, 40,
210      41,  41,  42, 41, 41, 43, 44, 44,
211      45,  46,  48, 55, 60, 57, 52, 50,
212      49,  49,  52, 52, 53, 55, 58, 62,
213      65,  73,  82, 82, 80, 78, 73, 68,
214      71,  82,  90, 90, 88, 87, 90, 95,
215     100, 107, 103, 97, 95, 93, 99, 99,
216 };
217 static const uint8_t dnxhd_1252_chroma_weight[] = {
218       0,  32,  35,  36,  37,  37,  38,  40,
219      42,  46,  49,  50,  50,  49,  49,  53,
220      56,  56,  57,  58,  60,  62,  64,  65,
221      63,  64,  64,  65,  66,  65,  67,  71,
222      72,  74,  74,  74,  74,  77,  81,  78,
223      72,  73,  82,  85,  89,  88,  84,  80,
224      90, 100,  90,  90,  88,  87,  90,  95,
225     114, 128, 125, 129, 134, 125, 116, 116,
226 };
227
228 static const uint8_t dnxhd_1256_chroma_weight[] = {
229      0, 32, 32, 32, 32, 32, 32, 33,
230     32, 32, 32, 32, 32, 32, 32, 34,
231     32, 32, 32, 32, 32, 32, 33, 37,
232     32, 32, 32, 32, 32, 32, 36, 39,
233     32, 32, 32, 32, 32, 34, 39, 44,
234     32, 37, 32, 32, 35, 40, 43, 49,
235     32, 33, 36, 36, 40, 43, 50, 60,
236     34, 37, 39, 44, 51, 56, 61, 70,
237 };
238
239 static const uint8_t dnxhd_1258_luma_weight[] = {
240      0, 32, 36, 36,  40,  40, 55, 60,
241     34, 36, 37, 40,  41,  48, 57, 82,
242     35, 36, 41, 41,  46,  52, 73, 82,
243     37, 40, 42, 45,  50,  65, 80, 87,
244     39, 41, 44, 49,  62,  78, 88, 90,
245     41, 44, 49, 58,  73,  90, 95, 95,
246     43, 52, 55, 68,  90, 100, 97, 93,
247     52, 53, 71, 82, 107, 103, 99, 99,
248 };
249
250 static const uint8_t dnxhd_1258_chroma_weight[] = {
251      0, 32, 37,  38,  49,  53,  65,  66,
252     35, 37, 40,  49,  56,  64,  65,  82,
253     36, 42, 50,  56,  64,  67,  73,  85,
254     46, 50, 57,  63,  71,  72,  89,  87,
255     49, 58, 65,  72,  78,  88,  88,  90,
256     60, 64, 74,  81,  84,  90,  95, 134,
257     62, 74, 77,  80,  90, 114, 129, 125,
258     74, 74, 90, 100, 128, 125, 116, 116,
259 };
260
261 /* Used in CID 1235, 1241, 1250, 1256 */
262 static const uint8_t dnxhd_1235_dc_codes[14] = {
263     10, 62, 11, 12, 13, 0, 1, 2, 3, 4, 14, 30, 126, 127,
264 };
265
266 /* Used in CID 1235, 1241, 1250, 1256 */
267 static const uint8_t dnxhd_1235_dc_bits[14] = {
268     4, 6, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 7, 7,
269 };
270
271 /* Used in CID 1237, 1238, 1242, 1243, 1251, 1252, 1253, 1258 */
272 static const uint8_t dnxhd_1237_dc_codes[12] = {
273     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
274 };
275
276 /* Used in CID 1237, 1238, 1242, 1243, 1251, 1252, 1253, 1258 */
277 static const uint8_t dnxhd_1237_dc_bits[12] = {
278     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
279 };
280
281 /* Used in CID 1237, 1242, 1253 */
282 static const uint16_t dnxhd_1237_ac_codes[257] = {
283         0,     1,     4,     5,    12,    26,    27,    56,
284        57,    58,    59,   120,   121,   244,   245,   246,
285       247,   248,   498,   499,   500,   501,   502,  1006,
286      1007,  1008,  1009,  1010,  1011,  2024,  2025,  2026,
287      2027,  2028,  2029,  2030,  2031,  4064,  4065,  4066,
288      4067,  4068,  4069,  4070,  4071,  4072,  4073,  8148,
289      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
290      8157,  8158, 16318, 16319, 16320, 16321, 16322, 16323,
291     16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331,
292     16332, 16333, 32668, 32669, 32670, 32671, 32672, 32673,
293     32674, 32675, 32676, 32677, 32678, 32679, 32680, 32681,
294     32682, 32683, 32684, 65370, 65371, 65372, 65373, 65374,
295     65375, 65376, 65377, 65378, 65379, 65380, 65381, 65382,
296     65383, 65384, 65385, 65386, 65387, 65388, 65389, 65390,
297     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
298     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
299     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
300     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
301     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
302     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
303     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
304     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
305     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
306     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
307     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
308     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
309     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
310     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
311     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
312     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
313     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
314     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
315     65535,
316 };
317
318 /* Used in CID 1237, 1242, 1253 */
319 static const uint8_t dnxhd_1237_ac_bits[257] = {
320      2,  2,  3,  3,  4,  5,  5,  6,  6,  6,  6,  7,  7,  8,  8,  8,
321      8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
322     11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
323     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
324     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
325     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
326     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
327     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
328     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
329     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
330     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
331     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
332     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
333     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
334     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
335     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
336     16,
337 };
338
339 /* Used in CID 1237, 1242, 1253 */
340 static const uint8_t dnxhd_1237_ac_level[257] = {
341       3,  3,  5,  0,  7,  9,  5, 11, 13, 15,  7, 17, 19, 21, 23, 25,
342       9, 11, 27, 29, 31, 33, 13, 35, 37, 39, 41, 43, 15, 45, 47, 49,
343      51, 53, 55, 17, 19, 57, 59, 61, 63, 65, 67, 69, 21, 23, 25, 71,
344      73, 75, 77, 79, 81, 83, 27, 29, 31, 33, 85, 87, 89, 91, 93, 95,
345      97, 99,101,103,105, 35, 37, 39, 41, 43,107,109,111,113,115,117,
346     119,121,123,129,  3, 45, 47, 49, 51, 53, 55,125,127,  5,  7,  9,
347      11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
348      43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
349      75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
350     107,109,111,113,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
351      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
352      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
353     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
354      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
355      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
356      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
357     129,
358 };
359
360 static const uint8_t dnxhd_1237_ac_flags[257] = {
361     0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0,
362     2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0,
363     0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
364     0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
365     0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
366     0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1,
367     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
368     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
369     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
370     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
371     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
372     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
373     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
374     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
375     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
376     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
377     3,
378 };
379
380 /* Used in CID 1237, 1242, 1253 */
381 static const uint16_t dnxhd_1237_run_codes[62] = {
382        0,    4,   10,   11,   24,   25,   26,   54,
383       55,   56,   57,   58,  118,  119,  240,  482,
384      483,  484,  485,  486,  487,  488,  489,  490,
385      491,  492,  493,  494,  990,  991,  992,  993,
386      994,  995,  996,  997,  998,  999, 1000, 1001,
387     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
388     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
389     1018, 1019, 1020, 1021, 1022, 1023,
390 };
391
392 /* Used in CID 1237, 1242, 1253 */
393 static const uint8_t dnxhd_1237_run_bits[62] = {
394      1,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  6,  7,  7,  8,  9,
395      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
396     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
397     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
398 };
399
400 /* Used in CID 1237, 1242, 1253 */
401 static const uint8_t dnxhd_1237_run[62] = {
402      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
403     17, 18, 19, 20, 21, 53, 57, 58, 59, 60, 61, 62, 22, 23, 24, 25,
404     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
405     42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56,
406 };
407
408 /* Used in CID 1238, 1243 */
409 static const uint16_t dnxhd_1238_ac_codes[257] = {
410         0,     1,     4,    10,    11,    24,    25,    26,
411        54,    55,    56,    57,   116,   117,   118,   119,
412       240,   241,   242,   243,   244,   245,   492,   493,
413       494,   495,   496,   497,   498,   499,  1000,  1001,
414      1002,  1003,  1004,  1005,  1006,  1007,  1008,  2018,
415      2019,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
416      2027,  4056,  4057,  4058,  4059,  4060,  4061,  4062,
417      4063,  4064,  4065,  4066,  4067,  4068,  4069,  8140,
418      8141,  8142,  8143,  8144,  8145,  8146,  8147,  8148,
419      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
420     16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321,
421     16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329,
422     16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337,
423     16338, 32678, 32679, 32680, 32681, 32682, 32683, 32684,
424     32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692,
425     32693, 32694, 32695, 32696, 32697, 32698, 32699, 32700,
426     32701, 32702, 32703, 32704, 32705, 65412, 65413, 65414,
427     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
428     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
429     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
430     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
431     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
432     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
433     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
434     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
435     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
436     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
437     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
438     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
439     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
440     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
441     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
442     65535,
443 };
444
445 /* Used in CID 1238, 1243 */
446 static const uint8_t dnxhd_1238_ac_bits[257] = {
447      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
448      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
449     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
450     11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
451     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
452     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
453     14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
454     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
455     15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
456     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
457     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
458     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
459     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
460     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
461     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
462     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
463     16,
464 };
465
466 /* Used in CID 1238, 1243 */
467 static const uint8_t dnxhd_1238_ac_level[257] = {
468       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
469      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 15, 47, 49,
470      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 21,
471      23, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 25, 27, 29, 99,
472     101,103,105,107,109,111,113,115,117,119,121,123, 31, 33, 35, 37,
473     125,127,129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27,
474      29, 31, 33, 39, 41, 43, 45, 47, 49, 35, 37, 39, 41, 43, 45, 47,
475      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 81, 51,
476      53, 55, 57, 59, 61, 77, 79, 83, 85, 87, 89, 91, 93, 95, 97, 99,
477     101,103,105,107,109,111,113,115,117,119,121,123,125,127,129, 63,
478      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
479      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
480     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
481      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
482      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
483      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
484     129,
485 }; /* 0 is EOB */
486
487 static const uint8_t dnxhd_1238_ac_flags[257] = {
488     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
489     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
490     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
491     2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
492     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
493     0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
494     1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
495     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
496     2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
497     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
498     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
499     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
500     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
501     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
502     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
503     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
504     3,
505 };
506
507 /* Used in CID 1235, 1238, 1241, 1256 */
508 static const uint16_t dnxhd_1235_run_codes[62] = {
509        0,    4,   10,   11,   24,   25,   26,   27,
510       56,   57,   58,   59,  120,  242,  486,  487,
511      488,  489,  980,  981,  982,  983,  984,  985,
512      986,  987,  988,  989,  990,  991,  992,  993,
513      994,  995,  996,  997,  998,  999, 1000, 1001,
514     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
515     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
516     1018, 1019, 1020, 1021, 1022, 1023,
517 };
518
519 /* Used in CID 1235, 1238, 1241, 1243, 1256 */
520 static const uint8_t dnxhd_1235_run_bits[62] = {
521      1,  3,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  8,  9,  9,
522      9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
523     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
524     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
525 };
526
527 static const uint8_t dnxhd_1238_run[62] = {
528      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
529     20, 21, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
530     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
531     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
532 };
533
534 /* Used in CID 1235, 1241, 1256 */
535 static const uint16_t dnxhd_1235_ac_codes[257] = {
536         0,     1,     4,    10,    11,    24,    25,    26,
537        54,    55,    56,    57,   116,   117,   118,   119,
538       240,   241,   242,   243,   244,   245,   492,   493,
539       494,   495,   496,   497,   498,   998,   999,  1000,
540      1001,  1002,  1003,  1004,  1005,  1006,  1007,  2016,
541      2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
542      2025,  2026,  4054,  4055,  4056,  4057,  4058,  4059,
543      4060,  4061,  4062,  4063,  4064,  4065,  4066,  4067,
544      4068,  4069,  8140,  8141,  8142,  8143,  8144,  8145,
545      8146,  8147,  8148,  8149,  8150,  8151,  8152,  8153,
546      8154,  8155,  8156,  8157, 16316, 16317, 16318, 16319,
547     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
548     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
549     16336, 16337, 32676, 32677, 32678, 32679, 32680, 32681,
550     32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689,
551     32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697,
552     32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705,
553     32706, 32707, 32708, 65418, 65419, 65420, 65421, 65422,
554     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
555     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
556     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
557     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
558     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
559     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
560     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
561     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
562     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
563     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
564     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
565     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
566     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
567     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
568     65535,
569 };
570
571 /* Used in CID 1235, 1241, 1256 */
572 static const uint8_t dnxhd_1235_ac_bits[257] = {
573      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
574      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
575     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
576     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
577     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
578     13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
579     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
580     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
581     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
582     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
583     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
584     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
585     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
586     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
587     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
588     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
589     16,
590 };
591
592 /* Used in CID 1235, 1241, 1256 */
593 static const uint8_t dnxhd_1235_ac_level[257] = {
594       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
595      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 15, 45, 47, 49,
596      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 77,
597      21, 23, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101, 25, 27,
598      29, 31,103,105,107,109,111,113,115,117,119,121,123,125,127,  3,
599      33, 35, 37, 39,129,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25,
600      27, 29, 31, 33, 35, 41, 43, 45, 47, 49, 37, 39, 41, 43, 45, 47,
601      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
602      81, 83, 85, 51, 53, 55, 57, 59, 61, 63, 65, 87, 89, 91, 93, 95,
603      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
604     129, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
605      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
606     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
607      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
608      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
609      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
610     129,
611 };
612
613 /* Used in CID 1235, 1241, 1256 */
614 static const uint8_t dnxhd_1235_ac_flags[257] = {
615     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
616     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0,
617     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
618     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
619     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
620     2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
621     1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
622     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
623     1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
624     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
625     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
626     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
627     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
628     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
629     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
630     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
631     3,
632 };
633
634 /* Used in CID 1235, 1241, 1256 */
635 static const uint8_t dnxhd_1235_run[62] = {
636      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
637     18, 20, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
638     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
639     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
640 };
641
642 static const uint16_t dnxhd_1250_ac_codes[257] = {
643         0,     1,     4,    10,    11,    24,    25,    26,
644        54,    55,    56,    57,   116,   117,   118,   119,
645       240,   241,   242,   243,   244,   245,   492,   493,
646       494,   495,   496,   497,   498,   998,   999,  1000,
647      1001,  1002,  1003,  1004,  1005,  1006,  2014,  2015,
648      2016,  2017,  2018,  2019,  2020,  2021,  2022,  2023,
649      2024,  2025,  4052,  4053,  4054,  4055,  4056,  4057,
650      4058,  4059,  4060,  4061,  4062,  4063,  4064,  4065,
651      4066,  4067,  8136,  8137,  8138,  8139,  8140,  8141,
652      8142,  8143,  8144,  8145,  8146,  8147,  8148,  8149,
653      8150,  8151,  8152,  8153,  8154,  8155,  8156, 16314,
654     16315, 16316, 16317, 16318, 16319, 16320, 16321, 16322,
655     16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330,
656     16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338,
657     32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685,
658     32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693,
659     32694, 32695, 32696, 32697, 32698, 32699, 32700, 32701,
660     32702, 32703, 32704, 32705, 32706, 32707, 32708, 32709,
661     32710, 32711, 32712, 65426, 65427, 65428, 65429, 65430,
662     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
663     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
664     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
665     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
666     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
667     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
668     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
669     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
670     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
671     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
672     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
673     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
674     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
675     65535
676 };
677 static const uint8_t dnxhd_1250_ac_bits[257] = {
678      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
679      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
680     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
681     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
682     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
683     13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
684     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
685     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
686     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
687     15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
688     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
689     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
690     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
691     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
692     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
693     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
694     16
695 };
696 static const uint8_t dnxhd_1250_ac_level[257] = {
697       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
698      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 47, 49, 51,
699      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
700      19, 21, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105, 23,
701      25, 27,107,109,111,113,115,117,119,121,123,125,127,129,  3,  5,
702       7,  9, 11, 29, 31, 33, 35, 13, 15, 17, 19, 21, 23, 25, 27, 29,
703      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 37, 39, 41, 43,
704      55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
705      87, 89, 91, 93, 95, 97, 99,101,103,105,107,111,113, 45, 47, 49,
706      51, 53, 55,109,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
707      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
708      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
709     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
710      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
711      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
712      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
713     129
714 };
715 static const uint8_t dnxhd_1250_ac_flags[257] = {
716     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
717     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
718     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
719     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
720     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
721     1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
722     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
723     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
724     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
725     2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
726     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
727     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
728     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
729     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
730     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
731     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
732     3,
733 };
734 static const uint16_t dnxhd_1250_run_codes[62] = {
735        0,    4,    5,   12,   26,   27,   28,   58,
736      118,  119,  120,  242,  486,  487,  976,  977,
737      978,  979,  980,  981,  982,  983,  984,  985,
738      986,  987,  988,  989,  990,  991,  992,  993,
739      994,  995,  996,  997,  998,  999, 1000, 1001,
740     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
741     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
742     1018, 1019, 1020, 1021, 1022, 1023
743 };
744 static const uint8_t dnxhd_1250_run_bits[62] = {
745      1,  3,  3,  4,  5,  5,  5,  6,  7,  7,  7,  8,  9,  9, 10, 10,
746     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
747     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
748     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
749 };
750 static const uint8_t dnxhd_1250_run[62] = {
751      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
752     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
753     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
754     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62
755 };
756
757 static const uint16_t dnxhd_1251_ac_codes[257] = {
758         0,     1,     4,    10,    11,    24,    25,    26,
759        54,    55,    56,    57,   116,   117,   118,   119,
760       240,   241,   242,   243,   244,   245,   492,   493,
761       494,   495,   496,   497,   996,   997,   998,   999,
762      1000,  1001,  1002,  1003,  1004,  1005,  2012,  2013,
763      2014,  2015,  2016,  2017,  2018,  2019,  2020,  2021,
764      2022,  2023,  2024,  2025,  4052,  4053,  4054,  4055,
765      4056,  4057,  4058,  4059,  4060,  4061,  4062,  4063,
766      4064,  4065,  4066,  8134,  8135,  8136,  8137,  8138,
767      8139,  8140,  8141,  8142,  8143,  8144,  8145,  8146,
768      8147,  8148,  8149,  8150,  8151,  8152,  8153,  8154,
769      8155,  8156, 16314, 16315, 16316, 16317, 16318, 16319,
770     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
771     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
772     16336, 16337, 16338, 16339, 32680, 32681, 32682, 32683,
773     32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691,
774     32692, 32693, 32694, 32695, 32696, 32697, 32698, 32699,
775     32700, 32701, 32702, 32703, 32704, 32705, 32706, 32707,
776     32708, 32709, 32710, 32711, 32712, 32713, 32714, 65430,
777     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
778     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
779     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
780     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
781     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
782     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
783     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
784     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
785     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
786     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
787     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
788     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
789     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
790     65535,
791 };
792
793 static const uint8_t dnxhd_1251_ac_bits[257] = {
794      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
795      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
796     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
797     11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
798     12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
799     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
800     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
801     14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
802     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
803     15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
804     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
805     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
806     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
807     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
808     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
809     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
810     16,
811 };
812
813 static const uint8_t dnxhd_1251_ac_level[257] = {
814       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
815      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 45, 47, 49, 51,
816      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
817      81, 19, 21, 23, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
818      25, 27, 29,107,109,111,113,115,117,119,121,123,125,127,129,  3,
819       5,  7,  9, 11, 13, 15, 17, 31, 33, 35, 19, 21, 23, 25, 27, 29,
820      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 37,
821      39, 41, 43, 45, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83,
822      85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,111,113,115,
823     117, 47, 49, 51, 53, 55, 57,119,121,123,125,127,129, 59, 61, 63,
824      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
825      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
826     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
827      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
828      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
829      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
830     129,
831 };
832
833 static const uint8_t dnxhd_1251_ac_flags[257] = {
834     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
835     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
836     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
837     0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
838     2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
839     1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
840     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
841     2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
842     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
843     1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2,
844     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
845     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
846     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
847     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
848     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
849     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
850     3,
851 };
852
853 /* Used in CID 1251, 1252, 1258 */
854 static const uint16_t dnxhd_1251_run_codes[62] = {
855        0,    4,    5,   12,   26,   27,   28,   58,
856      118,  119,  120,  242,  486,  487,  976,  977,
857      978,  979,  980,  981,  982,  983,  984,  985,
858      986,  987,  988,  989,  990,  991,  992,  993,
859      994,  995,  996,  997,  998,  999, 1000, 1001,
860     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
861     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
862     1018, 1019, 1020, 1021, 1022, 1023,
863 };
864
865 /* Used in CID 1251, 1252, 1258 */
866 static const uint8_t dnxhd_1251_run_bits[62] = {
867      1,  3,  3,  4,  5,  5,  5,  6,  7,  7,  7,  8,  9,  9, 10, 10,
868     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
869     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
870     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
871 };
872
873 /* Used in CID 1251, 1252, 1258 */
874 static const uint8_t dnxhd_1251_run[62] = {
875      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
876     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
877     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
878     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
879 };
880
881 /* Used in CID 1252, 1258 */
882 static const uint16_t dnxhd_1252_ac_codes[257] = {
883         0,     1,     4,    10,    11,    12,    26,    27,
884        56,    57,    58,   118,   119,   120,   242,   243,
885       244,   245,   246,   247,   496,   497,   498,   499,
886       500,  1002,  1003,  1004,  1005,  1006,  1007,  1008,
887      1009,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
888      2027,  2028,  2029,  4060,  4061,  4062,  4063,  4064,
889      4065,  4066,  4067,  4068,  4069,  4070,  4071,  8144,
890      8145,  8146,  8147,  8148,  8149,  8150,  8151,  8152,
891      8153,  8154,  8155,  8156,  8157,  8158, 16318, 16319,
892     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
893     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
894     32672, 32673, 32674, 32675, 32676, 32677, 32678, 32679,
895     32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687,
896     32688, 32689, 32690, 32691, 32692, 32693, 32694, 65390,
897     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
898     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
899     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
900     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
901     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
902     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
903     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
904     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
905     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
906     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
907     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
908     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
909     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
910     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
911     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
912     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
913     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
914     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
915     65535,
916 };
917
918 /* Used in CID 1252, 1258 */
919 static const uint8_t dnxhd_1252_ac_bits[257] = {
920      2,  2,  3,  4,  4,  4,  5,  5,  6,  6,  6,  7,  7,  7,  8,  8,
921      8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10,
922     10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
923     12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
924     13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
925     14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
926     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
927     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
928     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
929     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
930     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
931     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
932     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
933     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
934     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
935     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
936     16,
937 };
938
939 /* Used in CID 1252, 1258 */
940 static const uint8_t dnxhd_1252_ac_level[257] = {
941       3,  3,  5,  7,  5,  0,  9, 11, 13, 15,  7, 17, 19, 21, 23, 25,
942      27, 29,  9, 11, 31, 33, 35, 37, 13, 39, 41, 43, 45, 47, 49, 15,
943      17, 51, 53, 55, 57, 59, 61, 63, 65, 19, 21, 67, 69, 71, 73, 75,
944      77, 79, 81, 83, 23, 25, 27, 85, 87, 89, 91, 93, 95, 97, 99,101,
945     103,105,107, 29, 31, 33,109,111,113,115,117,119,121,123,125,127,
946     129,  3,  5,  7, 35, 37, 39, 41,  9, 11, 13, 15, 17, 19, 21, 23,
947      25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 43, 45, 47, 49, 51, 45,
948      47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
949      79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,
950     111,113,115,117,119,121,123,125,127,129, 53, 55, 57, 59, 61, 63,
951      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
952      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
953     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
954      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
955      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
956      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
957     129,
958 };
959
960 static const uint8_t dnxhd_1252_ac_flags[257] = {
961     0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
962     0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
963     2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0,
964     0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
965     0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
966     0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
967     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1,
968     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
969     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
970     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
971     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
972     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
973     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
974     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
975     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
976     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
977     3,
978 };
979
980 const CIDEntry ff_dnxhd_cid_table[] = {
981     { 1235, 1920, 1080, 0, 917504, 917504, 6, 10, 4,
982       dnxhd_1235_luma_weight, dnxhd_1235_chroma_weight,
983       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
984       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
985       dnxhd_1235_ac_flags,
986       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
987       { 175, 185, 365, 440 },
988       { { 24000, 1001 }, { 25, 1 }, { 50, 1 }, { 60000, 1001 } } },
989     { 1237, 1920, 1080, 0, 606208, 606208, 4, 8, 3,
990       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
991       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
992       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
993       dnxhd_1237_ac_flags,
994       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
995       { 115, 120, 145, 240, 290 },
996       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
997     { 1238, 1920, 1080, 0, 917504, 917504, 4, 8, 4,
998       dnxhd_1238_luma_weight, dnxhd_1238_chroma_weight,
999       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1000       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
1001       dnxhd_1238_ac_flags,
1002       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1238_run,
1003       { 175, 185, 220, 365, 440 },
1004       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
1005     { 1241, 1920, 1080, 1, 917504, 458752, 6, 10, 4,
1006       dnxhd_1241_luma_weight, dnxhd_1241_chroma_weight,
1007       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
1008       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
1009       dnxhd_1235_ac_flags,
1010       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
1011       { 185, 220 },
1012       { { 25, 1 }, { 30000, 1001 } } },
1013     { 1242, 1920, 1080, 1, 606208, 303104, 4, 8, 3,
1014       dnxhd_1242_luma_weight, dnxhd_1242_chroma_weight,
1015       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1016       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
1017       dnxhd_1237_ac_flags,
1018       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
1019       { 120, 145 },
1020       { { 25, 1 }, { 30000, 1001 } } },
1021     { 1243, 1920, 1080, 1, 917504, 458752, 4, 8, 4,
1022       dnxhd_1243_luma_weight, dnxhd_1243_chroma_weight,
1023       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1024       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
1025       dnxhd_1238_ac_flags,
1026       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1238_run,
1027       { 185, 220 },
1028       { { 25, 1 }, { 30000, 1001 } } },
1029     { 1250, 1280,  720, 0, 458752, 458752, 6, 10, 4,
1030       dnxhd_1250_luma_weight, dnxhd_1250_chroma_weight,
1031       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
1032       dnxhd_1250_ac_codes, dnxhd_1250_ac_bits, dnxhd_1250_ac_level,
1033       dnxhd_1250_ac_flags,
1034       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
1035       { 90, 90, 180, 220 },
1036       { { 24000, 1001 }, { 25, 1 }, { 50, 1 }, { 60000, 1001 } } },
1037     { 1251, 1280,  720, 0, 458752, 458752, 4, 8, 4,
1038       dnxhd_1251_luma_weight, dnxhd_1251_chroma_weight,
1039       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1040       dnxhd_1251_ac_codes, dnxhd_1251_ac_bits, dnxhd_1251_ac_level,
1041       dnxhd_1251_ac_flags,
1042       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1043       { 90, 90, 110, 180, 220 },
1044       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
1045     { 1252, 1280,  720, 0, 303104, 303104, 4, 8, 5,
1046       dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight,
1047       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1048       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
1049       dnxhd_1252_ac_flags,
1050       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1051       { 60, 60, 75, 120, 145 },
1052       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
1053     { 1253, 1920, 1080, 0, 188416, 188416, 4, 8, 3,
1054       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
1055       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1056       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
1057       dnxhd_1237_ac_flags,
1058       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
1059       { 36, 36, 45, 75, 90 },
1060       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
1061     { 1256, 1920, 1080, 0, 1835008, 1835008, 6, 10, 4,
1062       dnxhd_1235_luma_weight, dnxhd_1256_chroma_weight,
1063       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
1064       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
1065       dnxhd_1235_ac_flags,
1066       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
1067       { 350, 390, 440, 730, 880 },
1068       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
1069     { 1258, 960, 720, 0, 212992, 212992, 4, 8, 5,
1070       dnxhd_1258_luma_weight, dnxhd_1258_chroma_weight,
1071       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1072       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
1073       dnxhd_1252_ac_flags,
1074       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1075       { 42, 60, 75, 115 } },
1076
1077 };
1078
1079 int ff_dnxhd_get_cid_table(int cid)
1080 {
1081     int i;
1082     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
1083         if (ff_dnxhd_cid_table[i].cid == cid)
1084             return i;
1085     return -1;
1086 }
1087
1088 int avpriv_dnxhd_get_frame_size(int cid)
1089 {
1090     int i = ff_dnxhd_get_cid_table(cid);
1091     if (i<0)
1092         return i;
1093     return ff_dnxhd_cid_table[i].frame_size;
1094 }
1095
1096 int avpriv_dnxhd_get_interlaced(int cid)
1097 {
1098     int i = ff_dnxhd_get_cid_table(cid);
1099     if (i < 0)
1100         return i;
1101     return ff_dnxhd_cid_table[i].interlaced;
1102 }
1103
1104 int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
1105 {
1106     int i, j;
1107     int mbs = avctx->bit_rate / 1000000;
1108     if (!mbs)
1109         return 0;
1110     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
1111         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
1112         if (cid->width == avctx->width && cid->height == avctx->height &&
1113             cid->interlaced == !!(avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) &&
1114             cid->bit_depth == bit_depth) {
1115             for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
1116                 if (cid->bit_rates[j] == mbs)
1117                     return cid->cid;
1118             }
1119         }
1120     }
1121     return 0;
1122 }
1123
1124 void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel)
1125 {
1126     int i, j;
1127     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
1128         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
1129         for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
1130             if (!cid->bit_rates[j])
1131                 break;
1132
1133             av_log(avctx, loglevel, "Frame size: %dx%d%c; bitrate: %dMbps; pixel format: %s; framerate: %d/%d\n",
1134                    cid->width, cid->height, cid->interlaced ? 'i' : 'p', cid->bit_rates[j],
1135                    cid->bit_depth == 10 ? "yuv422p10" : "yuv422p", cid->frame_rates[j].num, cid->frame_rates[j].den);
1136         }
1137     }
1138 }