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