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