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