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