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