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