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