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