Merge remote-tracking branch 'qatar/master'
[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
25 static const uint8_t dnxhd_1235_luma_weight[] = {
26      0, 32, 32, 32, 33, 35, 38, 39,
27     32, 33, 32, 33, 36, 36, 39, 42,
28     32, 32, 33, 36, 35, 37, 41, 43,
29     31, 33, 34, 36, 36, 40, 42, 48,
30     32, 34, 36, 37, 39, 42, 46, 51,
31     36, 37, 37, 39, 41, 46, 51, 55,
32     37, 39, 41, 41, 47, 50, 55, 56,
33     41, 42, 41, 44, 50, 53, 60, 60
34 };
35
36 static const uint8_t dnxhd_1235_chroma_weight[] = {
37      0, 32, 33, 34, 39, 41, 54, 59,
38     33, 34, 35, 38, 43, 49, 58, 84,
39     34, 37, 39, 44, 46, 55, 74, 87,
40     40, 42, 47, 48, 58, 70, 87, 86,
41     43, 50, 56, 63, 72, 94, 91, 82,
42     55, 63, 65, 75, 93, 89, 85, 73,
43     61, 67, 82, 81, 83, 90, 79, 73,
44     74, 84, 75, 78, 90, 85, 73, 73
45 };
46
47 static const uint8_t dnxhd_1237_luma_weight[] = {
48      0,  32,  33,  34, 34, 36, 37, 36,
49     36,  37,  38,  38, 38, 39, 41, 44,
50     43,  41,  40,  41, 46, 49, 47, 46,
51     47,  49,  51,  54, 60, 62, 59, 55,
52     54,  56,  58,  61, 65, 66, 64, 63,
53     66,  73,  78,  79, 80, 79, 78, 78,
54     82,  87,  89,  90, 93, 95, 96, 97,
55     97, 100, 104, 102, 98, 98, 99, 99,
56 };
57
58 static const uint8_t dnxhd_1237_chroma_weight[] = {
59      0,  32,  36,  39, 39, 38, 39,  41,
60     45,  51,  57,  58, 53, 48, 47,  51,
61     55,  58,  66,  75, 81, 83, 82,  78,
62     73,  72,  74,  77, 83, 85, 83,  82,
63     89,  99,  96,  90, 94, 97, 99, 105,
64    109, 105,  95,  89, 92, 95, 94,  93,
65     92,  88,  89,  90, 93, 95, 96,  97,
66     97, 100, 104, 102, 98, 98, 99,  99,
67 };
68
69 static const uint8_t dnxhd_1238_luma_weight[] = {
70      0, 32, 32, 33, 34, 33, 33, 33,
71     33, 33, 33, 33, 33, 35, 37, 37,
72     36, 36, 35, 36, 38, 38, 36, 35,
73     36, 37, 38, 41, 42, 41, 39, 38,
74     38, 38, 39, 41, 42, 41, 39, 39,
75     40, 41, 43, 44, 44, 44, 44, 44,
76     45, 47, 47, 47, 49, 50, 51, 51,
77     51, 53, 55, 57, 58, 59, 57, 57,
78 };
79
80 static const uint8_t dnxhd_1238_chroma_weight[] = {
81      0, 32, 35, 35, 35, 34, 34, 35,
82     39, 43, 45, 45, 41, 39, 40, 41,
83     42, 44, 48, 55, 59, 63, 65, 59,
84     53, 52, 52, 55, 61, 62, 58, 58,
85     63, 66, 66, 65, 70, 74, 70, 66,
86     65, 68, 75, 77, 74, 74, 77, 76,
87     73, 73, 73, 73, 76, 80, 89, 90,
88     82, 77, 80, 86, 84, 82, 82, 82,
89 };
90
91 static const uint8_t dnxhd_1241_luma_weight[] = {
92      0, 32, 33, 34, 34, 35, 36, 37,
93     36, 37, 38, 38, 38, 39, 39, 40,
94     40, 38, 38, 39, 38, 37, 39, 41,
95     41, 42, 43, 45, 45, 46, 47, 46,
96     45, 43, 39, 37, 37, 40, 44, 45,
97     45, 46, 46, 46, 47, 47, 46, 44,
98     42, 43, 45, 47, 48, 49, 50, 49,
99     48, 46, 47, 48, 48, 49, 49, 49,
100 };
101
102 static const uint8_t dnxhd_1241_chroma_weight[] = {
103      0, 32, 36, 38, 37, 37, 40, 41,
104     40, 40, 42, 42, 41, 41, 41, 41,
105     42, 43, 44, 44, 45, 46, 46, 45,
106     44, 45, 45, 45, 45, 46, 47, 46,
107     45, 44, 42, 41, 43, 45, 45, 47,
108     48, 48, 48, 46, 47, 47, 46, 47,
109     46, 45, 45, 47, 48, 49, 50, 49,
110     48, 46, 48, 49, 48, 49, 49, 49,
111 };
112
113 static const uint8_t dnxhd_1242_luma_weight[] = {
114      0, 32, 33, 33, 34, 35, 36, 35,
115     33, 33, 35, 36, 37, 37, 38, 37,
116     37, 37, 36, 37, 37, 37, 38, 39,
117     37, 36, 37, 40, 42, 45, 46, 44,
118     41, 42, 44, 45, 47, 49, 50, 48,
119     46, 48, 49, 50, 52, 52, 50, 49,
120     47, 48, 50, 50, 51, 51, 50, 49,
121     49, 51, 52, 51, 49, 47, 47, 47,
122 };
123
124 static const uint8_t dnxhd_1242_chroma_weight[] = {
125      0, 32, 37, 42, 45, 45, 45, 44,
126     38, 37, 40, 42, 44, 49, 51, 47,
127     41, 40, 43, 44, 46, 48, 51, 54,
128     51, 47, 47, 45, 47, 50, 51, 49,
129     46, 47, 49, 47, 50, 55, 55, 51,
130     48, 49, 51, 51, 52, 52, 54, 54,
131     49, 49, 52, 53, 54, 54, 53, 53,
132     55, 59, 63, 62, 60, 60, 60, 60,
133 };
134
135 static const uint8_t dnxhd_1243_luma_weight[] = {
136      0, 32, 32, 33, 33, 35, 35, 35,
137     35, 35, 35, 35, 34, 35, 38, 40,
138     39, 37, 37, 37, 36, 35, 36, 38,
139     40, 41, 42, 44, 45, 44, 42, 41,
140     40, 38, 36, 36, 37, 38, 40, 43,
141     44, 45, 45, 45, 45, 45, 45, 41,
142     39, 41, 45, 47, 47, 48, 48, 48,
143     46, 44, 45, 47, 47, 48, 47, 47,
144 };
145
146 static const uint8_t dnxhd_1243_chroma_weight[] = {
147      0, 32, 36, 37, 36, 37, 39, 39,
148     41, 43, 43, 42, 41, 41, 41, 42,
149     43, 43, 43, 44, 44, 44, 46, 47,
150     46, 45, 45, 45, 45, 46, 44, 44,
151     45, 44, 42, 41, 43, 46, 45, 44,
152     45, 45, 45, 46, 46, 46, 45, 44,
153     45, 44, 45, 47, 47, 48, 49, 48,
154     46, 45, 46, 47, 47, 48, 47, 47,
155 };
156
157 static const uint8_t dnxhd_1250_luma_weight[] = {
158      0, 32, 35, 35, 36, 36, 41, 43,
159     32, 34, 35, 36, 37, 39, 43, 47,
160     33, 34, 36, 38, 38, 42, 42, 50,
161     34, 36, 38, 38, 41, 40, 47, 54,
162     35, 38, 39, 40, 39, 45, 49, 58,
163     38, 39, 40, 39, 46, 47, 54, 60,
164     38, 39, 41, 46, 46, 48, 57, 62,
165     40, 41, 44, 45, 49, 54, 63, 63
166 };
167
168 static const uint8_t dnxhd_1250_chroma_weight[] = {
169      0, 32, 35, 36, 40, 42, 51, 51,
170     35, 36, 39, 39, 43, 51, 52, 55,
171     36, 41, 41, 43, 51, 53, 54, 56,
172     43, 44, 45, 50, 54, 54, 55, 57,
173     45, 48, 50, 51, 55, 58, 59, 58,
174     49, 52, 49, 57, 58, 62, 58, 60,
175     51, 51, 56, 58, 62, 61, 59, 62,
176     52, 52, 60, 61, 59, 59, 63, 63
177 };
178
179 static const uint8_t dnxhd_1251_luma_weight[] = {
180      0, 32, 32, 34, 34, 34, 34, 35,
181     35, 35, 36, 37, 36, 36, 35, 36,
182     38, 38, 38, 38, 38, 38, 38, 38,
183     38, 38, 39, 41, 44, 43, 41, 40,
184     40, 40, 40, 39, 40, 41, 40, 39,
185     40, 43, 46, 46, 44, 44, 44, 42,
186     41, 43, 46, 48, 50, 55, 58, 53,
187     48, 50, 55, 58, 61, 62, 62, 62,
188 };
189
190 static const uint8_t dnxhd_1251_chroma_weight[] = {
191      0, 32, 35, 36, 36, 35, 36, 39,
192     41, 43, 45, 44, 41, 39, 40, 42,
193     43, 43, 45, 48, 48, 48, 50, 50,
194     50, 51, 51, 51, 51, 52, 53, 54,
195     51, 49, 51, 52, 52, 56, 57, 55,
196     54, 54, 55, 56, 55, 58, 58, 58,
197     60, 61, 62, 62, 59, 57, 58, 58,
198     61, 59, 59, 59, 61, 62, 62, 62,
199 };
200
201 static const uint8_t dnxhd_1252_luma_weight[] = {
202       0,  32,  34, 35, 36, 36, 36, 37,
203      36,  37,  39, 40, 41, 40, 40, 40,
204      41,  41,  42, 41, 41, 43, 44, 44,
205      45,  46,  48, 55, 60, 57, 52, 50,
206      49,  49,  52, 52, 53, 55, 58, 62,
207      65,  73,  82, 82, 80, 78, 73, 68,
208      71,  82,  90, 90, 88, 87, 90, 95,
209     100, 107, 103, 97, 95, 93, 99, 99,
210 };
211 static const uint8_t dnxhd_1252_chroma_weight[] = {
212       0,  32,  35,  36,  37,  37,  38,  40,
213      42,  46,  49,  50,  50,  49,  49,  53,
214      56,  56,  57,  58,  60,  62,  64,  65,
215      63,  64,  64,  65,  66,  65,  67,  71,
216      72,  74,  74,  74,  74,  77,  81,  78,
217      72,  73,  82,  85,  89,  88,  84,  80,
218      90, 100,  90,  90,  88,  87,  90,  95,
219     114, 128, 125, 129, 134, 125, 116, 116,
220 };
221
222 static const uint8_t dnxhd_1237_dc_codes[12] = {
223     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
224 };
225
226 static const uint8_t dnxhd_1237_dc_bits[12] = {
227     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
228 };
229
230 static const uint16_t dnxhd_1237_ac_codes[257] = {
231         0,     1,     4,     5,    12,    26,    27,    56,
232        57,    58,    59,   120,   121,   244,   245,   246,
233       247,   248,   498,   499,   500,   501,   502,  1006,
234      1007,  1008,  1009,  1010,  1011,  2024,  2025,  2026,
235      2027,  2028,  2029,  2030,  2031,  4064,  4065,  4066,
236      4067,  4068,  4069,  4070,  4071,  4072,  4073,  8148,
237      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
238      8157,  8158, 16318, 16319, 16320, 16321, 16322, 16323,
239     16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331,
240     16332, 16333, 32668, 32669, 32670, 32671, 32672, 32673,
241     32674, 32675, 32676, 32677, 32678, 32679, 32680, 32681,
242     32682, 32683, 32684, 65370, 65371, 65372, 65373, 65374,
243     65375, 65376, 65377, 65378, 65379, 65380, 65381, 65382,
244     65383, 65384, 65385, 65386, 65387, 65388, 65389, 65390,
245     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
246     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
247     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
248     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
249     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
250     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
251     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
252     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
253     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
254     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
255     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
256     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
257     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
258     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
259     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
260     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
261     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
262     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
263     65535,
264 };
265
266 static const uint8_t dnxhd_1237_ac_bits[257] = {
267      2,  2,  3,  3,  4,  5,  5,  6,  6,  6,  6,  7,  7,  8,  8,  8,
268      8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
269     11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
270     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
271     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
272     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
273     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
274     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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,
284 };
285
286 static const uint8_t dnxhd_1237_ac_level[257] = {
287       3,  3,  5,  0,  7,  9,  5, 11, 13, 15,  7, 17, 19, 21, 23, 25,
288       9, 11, 27, 29, 31, 33, 13, 35, 37, 39, 41, 43, 15, 45, 47, 49,
289      51, 53, 55, 17, 19, 57, 59, 61, 63, 65, 67, 69, 21, 23, 25, 71,
290      73, 75, 77, 79, 81, 83, 27, 29, 31, 33, 85, 87, 89, 91, 93, 95,
291      97, 99,101,103,105, 35, 37, 39, 41, 43,107,109,111,113,115,117,
292     119,121,123,129,  3, 45, 47, 49, 51, 53, 55,125,127,  5,  7,  9,
293      11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
294      43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
295      75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
296     107,109,111,113,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
297      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
298      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
299     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
300      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
301      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
302      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
303     129,
304 };
305
306 static const uint8_t dnxhd_1237_ac_flags[257] = {
307     0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0,
308     2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0,
309     0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
310     0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
311     0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
312     0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1,
313     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
314     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2,
317     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
318     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
319     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
320     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
321     3, 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,
324 };
325
326 static const uint16_t dnxhd_1237_run_codes[62] = {
327        0,    4,   10,   11,   24,   25,   26,   54,
328       55,   56,   57,   58,  118,  119,  240,  482,
329      483,  484,  485,  486,  487,  488,  489,  490,
330      491,  492,  493,  494,  990,  991,  992,  993,
331      994,  995,  996,  997,  998,  999, 1000, 1001,
332     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
333     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
334     1018, 1019, 1020, 1021, 1022, 1023,
335 };
336
337 static const uint8_t dnxhd_1237_run_bits[62] = {
338      1,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  6,  7,  7,  8,  9,
339      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
340     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
341     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
342 };
343
344 static const uint8_t dnxhd_1237_run[62] = {
345      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
346     17, 18, 19, 20, 21, 53, 57, 58, 59, 60, 61, 62, 22, 23, 24, 25,
347     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
348     42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56,
349 };
350
351 static const uint8_t dnxhd_1238_dc_codes[12] = {
352     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
353 };
354
355 static const uint8_t dnxhd_1238_dc_bits[12] = {
356     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
357 };
358
359 static const uint16_t dnxhd_1238_ac_codes[257] = {
360         0,     1,     4,    10,    11,    24,    25,    26,
361        54,    55,    56,    57,   116,   117,   118,   119,
362       240,   241,   242,   243,   244,   245,   492,   493,
363       494,   495,   496,   497,   498,   499,  1000,  1001,
364      1002,  1003,  1004,  1005,  1006,  1007,  1008,  2018,
365      2019,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
366      2027,  4056,  4057,  4058,  4059,  4060,  4061,  4062,
367      4063,  4064,  4065,  4066,  4067,  4068,  4069,  8140,
368      8141,  8142,  8143,  8144,  8145,  8146,  8147,  8148,
369      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
370     16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321,
371     16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329,
372     16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337,
373     16338, 32678, 32679, 32680, 32681, 32682, 32683, 32684,
374     32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692,
375     32693, 32694, 32695, 32696, 32697, 32698, 32699, 32700,
376     32701, 32702, 32703, 32704, 32705, 65412, 65413, 65414,
377     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
378     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
379     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
380     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
381     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
382     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
383     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
384     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
385     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
386     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
387     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
388     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
389     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
390     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
391     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
392     65535,
393 };
394
395 static const uint8_t dnxhd_1238_ac_bits[257] = {
396      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
397      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
398     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
399     11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
400     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
401     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
402     14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
403     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
404     15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
405     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
406     16, 16, 16, 16, 16, 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,
413 };
414
415 static const uint8_t dnxhd_1238_ac_level[257] = {
416       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
417      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 15, 47, 49,
418      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 21,
419      23, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 25, 27, 29, 99,
420     101,103,105,107,109,111,113,115,117,119,121,123, 31, 33, 35, 37,
421     125,127,129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27,
422      29, 31, 33, 39, 41, 43, 45, 47, 49, 35, 37, 39, 41, 43, 45, 47,
423      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 81, 51,
424      53, 55, 57, 59, 61, 77, 79, 83, 85, 87, 89, 91, 93, 95, 97, 99,
425     101,103,105,107,109,111,113,115,117,119,121,123,125,127,129, 63,
426      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
427      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
428     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
429      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
430      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
431      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
432     129,
433 }; /* 0 is EOB */
434
435 static const uint8_t dnxhd_1238_ac_flags[257] = {
436     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
437     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
438     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
439     2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
440     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
441     0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
442     1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
443     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
444     2, 2, 2, 2, 2, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
447     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
448     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
449     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
450     3, 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,
453 };
454
455 static const uint8_t dnxhd_1238_ac_index_flag[257] = {
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     { 1237, 1920, 1080, 0, 606208, 606208, 4, 8, 3,
957       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
958       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
959       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
960       dnxhd_1237_ac_flags,
961       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
962       { 115, 120, 145, 240, 290 } },
963     { 1238, 1920, 1080, 0, 917504, 917504, 4, 8, 4,
964       dnxhd_1238_luma_weight, dnxhd_1238_chroma_weight,
965       dnxhd_1238_dc_codes, dnxhd_1238_dc_bits,
966       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
967       dnxhd_1238_ac_flags,
968       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1238_run,
969       { 175, 185, 220, 365, 440 } },
970     { 1241, 1920, 1080, 1, 917504, 458752, 6, 10, 4,
971       dnxhd_1241_luma_weight, dnxhd_1241_chroma_weight,
972       dnxhd_1235_1241_dc_codes, dnxhd_1235_1241_dc_bits,
973       dnxhd_1235_1241_ac_codes, dnxhd_1235_1241_ac_bits, dnxhd_1235_1241_ac_level,
974       dnxhd_1235_1241_ac_flags,
975       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1235_1241_run,
976       { 185, 220 } },
977     { 1242, 1920, 1080, 1, 606208, 303104, 4, 8, 3,
978       dnxhd_1242_luma_weight, dnxhd_1242_chroma_weight,
979       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
980       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
981       dnxhd_1237_ac_flags,
982       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
983       { 120, 145 } },
984     { 1243, 1920, 1080, 1, 917504, 458752, 4, 8, 4,
985       dnxhd_1243_luma_weight, dnxhd_1243_chroma_weight,
986       dnxhd_1238_dc_codes, dnxhd_1238_dc_bits,
987       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
988       dnxhd_1238_ac_flags,
989       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1238_run,
990       { 185, 220 } },
991     { 1250, 1280,  720, 0, 458752, 458752, 6, 10, 4,
992       dnxhd_1250_luma_weight, dnxhd_1250_chroma_weight,
993       dnxhd_1250_dc_codes, dnxhd_1250_dc_bits,
994       dnxhd_1250_ac_codes, dnxhd_1250_ac_bits, dnxhd_1250_ac_level,
995       dnxhd_1250_ac_flags,
996       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
997       { 90, 180, 220 } },
998     { 1251, 1280,  720, 0, 458752, 458752, 4, 8, 4,
999       dnxhd_1251_luma_weight, dnxhd_1251_chroma_weight,
1000       dnxhd_1251_dc_codes, dnxhd_1251_dc_bits,
1001       dnxhd_1251_ac_codes, dnxhd_1251_ac_bits, dnxhd_1251_ac_level,
1002       dnxhd_1251_ac_flags,
1003       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1004       { 90, 110, 175, 220 } },
1005     { 1252, 1280,  720, 0, 303104, 303104, 4, 8, 5,
1006       dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight,
1007       dnxhd_1252_dc_codes, dnxhd_1252_dc_bits,
1008       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
1009       dnxhd_1252_ac_flags,
1010       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1011       { 60, 75, 115, 145 } },
1012     { 1253, 1920, 1080, 0, 188416, 188416, 4, 8, 3,
1013       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
1014       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1015       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
1016       dnxhd_1237_ac_flags,
1017       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
1018       { 36, 45, 75, 90 } },
1019 };
1020
1021 int ff_dnxhd_get_cid_table(int cid)
1022 {
1023     int i;
1024     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
1025         if (ff_dnxhd_cid_table[i].cid == cid)
1026             return i;
1027     return -1;
1028 }
1029
1030 int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
1031 {
1032     int i, j;
1033     int mbs = avctx->bit_rate/1000000;
1034     if (!mbs)
1035         return 0;
1036     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
1037         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
1038         if (cid->width == avctx->width && cid->height == avctx->height &&
1039             cid->interlaced == !!(avctx->flags & CODEC_FLAG_INTERLACED_DCT) &&
1040             cid->bit_depth == bit_depth) {
1041             for (j = 0; j < sizeof(cid->bit_rates); j++) {
1042                 if (cid->bit_rates[j] == mbs)
1043                     return cid->cid;
1044             }
1045         }
1046     }
1047     return 0;
1048 }