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