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