]> git.sesse.net Git - ffmpeg/blob - libavcodec/dnxhddata.c
Merge remote-tracking branch 'qatar/master'
[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 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 uint16_t dnxhd_1235_1238_1241_run_codes[62] = {
456        0,    4,   10,   11,   24,   25,   26,   27,
457       56,   57,   58,   59,  120,  242,  486,  487,
458      488,  489,  980,  981,  982,  983,  984,  985,
459      986,  987,  988,  989,  990,  991,  992,  993,
460      994,  995,  996,  997,  998,  999, 1000, 1001,
461     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
462     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
463     1018, 1019, 1020, 1021, 1022, 1023,
464 };
465
466 static const uint8_t dnxhd_1235_1238_1241_run_bits[62] = {
467      1,  3,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  8,  9,  9,
468      9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
469     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
470     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
471 };
472
473 static const uint8_t dnxhd_1238_run[62] = {
474      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
475     20, 21, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
476     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
477     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
478 };
479
480 static const uint8_t dnxhd_1235_1241_dc_codes[14] = {
481     10, 62, 11, 12, 13, 0, 1, 2, 3, 4, 14, 30, 126, 127,
482 };
483
484 static const uint8_t dnxhd_1235_1241_dc_bits[14] = {
485     4, 6, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 7, 7,
486 };
487
488 static const uint16_t dnxhd_1235_1241_ac_codes[257] = {
489         0,     1,     4,    10,    11,    24,    25,    26,
490        54,    55,    56,    57,   116,   117,   118,   119,
491       240,   241,   242,   243,   244,   245,   492,   493,
492       494,   495,   496,   497,   498,   998,   999,  1000,
493      1001,  1002,  1003,  1004,  1005,  1006,  1007,  2016,
494      2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
495      2025,  2026,  4054,  4055,  4056,  4057,  4058,  4059,
496      4060,  4061,  4062,  4063,  4064,  4065,  4066,  4067,
497      4068,  4069,  8140,  8141,  8142,  8143,  8144,  8145,
498      8146,  8147,  8148,  8149,  8150,  8151,  8152,  8153,
499      8154,  8155,  8156,  8157, 16316, 16317, 16318, 16319,
500     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
501     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
502     16336, 16337, 32676, 32677, 32678, 32679, 32680, 32681,
503     32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689,
504     32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697,
505     32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705,
506     32706, 32707, 32708, 65418, 65419, 65420, 65421, 65422,
507     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
508     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
509     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
510     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
511     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
512     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
513     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
514     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
515     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
516     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
517     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
518     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
519     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
520     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
521     65535,
522 };
523
524 static const uint8_t dnxhd_1235_1241_ac_bits[257] = {
525      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
526      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
527     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
528     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
529     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
530     13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
531     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
532     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
533     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
534     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
535     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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,
542 };
543
544 static const uint8_t dnxhd_1235_1241_ac_level[257] = {
545       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
546      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 15, 45, 47, 49,
547      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 77,
548      21, 23, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101, 25, 27,
549      29, 31,103,105,107,109,111,113,115,117,119,121,123,125,127,  3,
550      33, 35, 37, 39,129,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25,
551      27, 29, 31, 33, 35, 41, 43, 45, 47, 49, 37, 39, 41, 43, 45, 47,
552      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
553      81, 83, 85, 51, 53, 55, 57, 59, 61, 63, 65, 87, 89, 91, 93, 95,
554      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
555     129, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
556      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
557     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
558      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
559      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
560      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
561     129,
562 };
563
564 static const uint8_t dnxhd_1235_1241_ac_flags[257] = {
565     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
566     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0,
567     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
568     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
569     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
570     2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
571     1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
572     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
573     1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
574     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
575     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
576     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
577     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
578     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
579     3, 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,
582 };
583
584 static const uint8_t dnxhd_1235_1241_run[62] = {
585      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
586     18, 20, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
587     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
588     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
589 };
590
591 static const uint8_t dnxhd_1250_dc_codes[14] = {
592     10, 62, 11, 12, 13, 0, 1, 2, 3, 4, 14, 30, 126, 127
593 };
594 static const uint8_t dnxhd_1250_dc_bits[14] = {
595     4, 6, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 7, 7
596 };
597 static const uint16_t dnxhd_1250_ac_codes[257] = {
598         0,     1,     4,    10,    11,    24,    25,    26,
599        54,    55,    56,    57,   116,   117,   118,   119,
600       240,   241,   242,   243,   244,   245,   492,   493,
601       494,   495,   496,   497,   498,   998,   999,  1000,
602      1001,  1002,  1003,  1004,  1005,  1006,  2014,  2015,
603      2016,  2017,  2018,  2019,  2020,  2021,  2022,  2023,
604      2024,  2025,  4052,  4053,  4054,  4055,  4056,  4057,
605      4058,  4059,  4060,  4061,  4062,  4063,  4064,  4065,
606      4066,  4067,  8136,  8137,  8138,  8139,  8140,  8141,
607      8142,  8143,  8144,  8145,  8146,  8147,  8148,  8149,
608      8150,  8151,  8152,  8153,  8154,  8155,  8156, 16314,
609     16315, 16316, 16317, 16318, 16319, 16320, 16321, 16322,
610     16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330,
611     16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338,
612     32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685,
613     32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693,
614     32694, 32695, 32696, 32697, 32698, 32699, 32700, 32701,
615     32702, 32703, 32704, 32705, 32706, 32707, 32708, 32709,
616     32710, 32711, 32712, 65426, 65427, 65428, 65429, 65430,
617     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
618     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
619     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
620     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
621     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
622     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
623     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
624     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
625     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
626     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
627     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
628     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
629     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
630     65535
631 };
632 static const uint8_t dnxhd_1250_ac_bits[257] = {
633      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
634      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
635     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
636     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
637     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
638     13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
639     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
640     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
641     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
642     15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
643     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
644     16, 16, 16, 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
650 };
651 static const uint8_t dnxhd_1250_ac_level[257] = {
652       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
653      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 47, 49, 51,
654      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
655      19, 21, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105, 23,
656      25, 27,107,109,111,113,115,117,119,121,123,125,127,129,  3,  5,
657       7,  9, 11, 29, 31, 33, 35, 13, 15, 17, 19, 21, 23, 25, 27, 29,
658      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 37, 39, 41, 43,
659      55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
660      87, 89, 91, 93, 95, 97, 99,101,103,105,107,111,113, 45, 47, 49,
661      51, 53, 55,109,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
662      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
663      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
664     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
665      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
666      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
667      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
668     129
669 };
670 static const uint8_t dnxhd_1250_ac_flags[257] = {
671     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
672     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
673     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
674     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
675     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
676     1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
677     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
678     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
679     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
680     2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
681     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
682     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
683     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
684     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
685     3, 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,
688 };
689 static const uint16_t dnxhd_1250_run_codes[62] = {
690        0,    4,    5,   12,   26,   27,   28,   58,
691      118,  119,  120,  242,  486,  487,  976,  977,
692      978,  979,  980,  981,  982,  983,  984,  985,
693      986,  987,  988,  989,  990,  991,  992,  993,
694      994,  995,  996,  997,  998,  999, 1000, 1001,
695     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
696     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
697     1018, 1019, 1020, 1021, 1022, 1023
698 };
699 static const uint8_t dnxhd_1250_run_bits[62] = {
700      1,  3,  3,  4,  5,  5,  5,  6,  7,  7,  7,  8,  9,  9, 10, 10,
701     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
702     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
703     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
704 };
705 static const uint8_t dnxhd_1250_run[62] = {
706      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
707     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
708     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
709     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62
710 };
711
712 static const uint8_t dnxhd_1251_dc_codes[12] = {
713     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
714 };
715
716 static const uint8_t dnxhd_1251_dc_bits[12] = {
717     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
718 };
719
720 static const uint16_t dnxhd_1251_ac_codes[257] = {
721         0,     1,     4,    10,    11,    24,    25,    26,
722        54,    55,    56,    57,   116,   117,   118,   119,
723       240,   241,   242,   243,   244,   245,   492,   493,
724       494,   495,   496,   497,   996,   997,   998,   999,
725      1000,  1001,  1002,  1003,  1004,  1005,  2012,  2013,
726      2014,  2015,  2016,  2017,  2018,  2019,  2020,  2021,
727      2022,  2023,  2024,  2025,  4052,  4053,  4054,  4055,
728      4056,  4057,  4058,  4059,  4060,  4061,  4062,  4063,
729      4064,  4065,  4066,  8134,  8135,  8136,  8137,  8138,
730      8139,  8140,  8141,  8142,  8143,  8144,  8145,  8146,
731      8147,  8148,  8149,  8150,  8151,  8152,  8153,  8154,
732      8155,  8156, 16314, 16315, 16316, 16317, 16318, 16319,
733     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
734     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
735     16336, 16337, 16338, 16339, 32680, 32681, 32682, 32683,
736     32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691,
737     32692, 32693, 32694, 32695, 32696, 32697, 32698, 32699,
738     32700, 32701, 32702, 32703, 32704, 32705, 32706, 32707,
739     32708, 32709, 32710, 32711, 32712, 32713, 32714, 65430,
740     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
741     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
742     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
743     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
744     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
745     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
746     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
747     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
748     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
749     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
750     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
751     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
752     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
753     65535,
754 };
755
756 static const uint8_t dnxhd_1251_ac_bits[257] = {
757      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
758      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
759     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
760     11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
761     12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
762     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
763     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
764     14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
765     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
766     15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
767     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
768     16, 16, 16, 16, 16, 16, 16, 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,
774 };
775
776 static const uint8_t dnxhd_1251_ac_level[257] = {
777       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
778      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 45, 47, 49, 51,
779      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
780      81, 19, 21, 23, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
781      25, 27, 29,107,109,111,113,115,117,119,121,123,125,127,129,  3,
782       5,  7,  9, 11, 13, 15, 17, 31, 33, 35, 19, 21, 23, 25, 27, 29,
783      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 37,
784      39, 41, 43, 45, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83,
785      85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,111,113,115,
786     117, 47, 49, 51, 53, 55, 57,119,121,123,125,127,129, 59, 61, 63,
787      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
788      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
789     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
790      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
791      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
792      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
793     129,
794 };
795
796 static const uint8_t dnxhd_1251_ac_flags[257] = {
797     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
798     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
799     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
800     0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
801     2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
802     1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
803     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
804     2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
805     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
806     1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2,
807     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
808     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
809     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
810     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
811     3, 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,
814 };
815
816 static const uint16_t dnxhd_1251_run_codes[62] = {
817        0,    4,    5,   12,   26,   27,   28,   58,
818      118,  119,  120,  242,  486,  487,  976,  977,
819      978,  979,  980,  981,  982,  983,  984,  985,
820      986,  987,  988,  989,  990,  991,  992,  993,
821      994,  995,  996,  997,  998,  999, 1000, 1001,
822     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
823     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
824     1018, 1019, 1020, 1021, 1022, 1023,
825 };
826
827 static const uint8_t dnxhd_1251_run_bits[62] = {
828      1,  3,  3,  4,  5,  5,  5,  6,  7,  7,  7,  8,  9,  9, 10, 10,
829     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
830     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
831     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
832 };
833
834 static const uint8_t dnxhd_1251_run[62] = {
835      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
836     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
837     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
838     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
839 };
840
841 static const uint8_t dnxhd_1252_dc_codes[12] = {
842     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
843 };
844
845 static const uint8_t dnxhd_1252_dc_bits[12] = {
846     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
847 };
848
849 static const uint16_t dnxhd_1252_ac_codes[257] = {
850         0,     1,     4,    10,    11,    12,    26,    27,
851        56,    57,    58,   118,   119,   120,   242,   243,
852       244,   245,   246,   247,   496,   497,   498,   499,
853       500,  1002,  1003,  1004,  1005,  1006,  1007,  1008,
854      1009,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
855      2027,  2028,  2029,  4060,  4061,  4062,  4063,  4064,
856      4065,  4066,  4067,  4068,  4069,  4070,  4071,  8144,
857      8145,  8146,  8147,  8148,  8149,  8150,  8151,  8152,
858      8153,  8154,  8155,  8156,  8157,  8158, 16318, 16319,
859     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
860     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
861     32672, 32673, 32674, 32675, 32676, 32677, 32678, 32679,
862     32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687,
863     32688, 32689, 32690, 32691, 32692, 32693, 32694, 65390,
864     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
865     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
866     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
867     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
868     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
869     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
870     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
871     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
872     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
873     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
874     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
875     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
876     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
877     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
878     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
879     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
880     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
881     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
882     65535,
883 };
884
885 static const uint8_t dnxhd_1252_ac_bits[257] = {
886      2,  2,  3,  4,  4,  4,  5,  5,  6,  6,  6,  7,  7,  7,  8,  8,
887      8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10,
888     10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
889     12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
890     13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
891     14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
892     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
893     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
894     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 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,
903 };
904
905 static const uint8_t dnxhd_1252_ac_level[257] = {
906       3,  3,  5,  7,  5,  0,  9, 11, 13, 15,  7, 17, 19, 21, 23, 25,
907      27, 29,  9, 11, 31, 33, 35, 37, 13, 39, 41, 43, 45, 47, 49, 15,
908      17, 51, 53, 55, 57, 59, 61, 63, 65, 19, 21, 67, 69, 71, 73, 75,
909      77, 79, 81, 83, 23, 25, 27, 85, 87, 89, 91, 93, 95, 97, 99,101,
910     103,105,107, 29, 31, 33,109,111,113,115,117,119,121,123,125,127,
911     129,  3,  5,  7, 35, 37, 39, 41,  9, 11, 13, 15, 17, 19, 21, 23,
912      25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 43, 45, 47, 49, 51, 45,
913      47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
914      79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,
915     111,113,115,117,119,121,123,125,127,129, 53, 55, 57, 59, 61, 63,
916      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
917      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
918     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
919      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
920      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
921      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
922     129,
923 };
924
925 static const uint8_t dnxhd_1252_ac_flags[257] = {
926     0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
927     0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
928     2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0,
929     0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
930     0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
931     0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
932     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1,
933     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
934     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
935     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
936     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
937     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
938     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
939     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
940     3, 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,
943 };
944
945 const CIDEntry ff_dnxhd_cid_table[] = {
946     { 1235, 1920, 1080, 0, 917504, 917504, 6, 10, 4,
947       dnxhd_1235_luma_weight, dnxhd_1235_chroma_weight,
948       dnxhd_1235_1241_dc_codes, dnxhd_1235_1241_dc_bits,
949       dnxhd_1235_1241_ac_codes, dnxhd_1235_1241_ac_bits, dnxhd_1235_1241_ac_level,
950       dnxhd_1235_1241_ac_flags,
951       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1235_1241_run,
952       { 175, 185, 365, 440 } },
953     { 1237, 1920, 1080, 0, 606208, 606208, 4, 8, 3,
954       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
955       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
956       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
957       dnxhd_1237_ac_flags,
958       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
959       { 115, 120, 145, 240, 290 } },
960     { 1238, 1920, 1080, 0, 917504, 917504, 4, 8, 4,
961       dnxhd_1238_luma_weight, dnxhd_1238_chroma_weight,
962       dnxhd_1238_dc_codes, dnxhd_1238_dc_bits,
963       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
964       dnxhd_1238_ac_flags,
965       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1238_run,
966       { 175, 185, 220, 365, 440 } },
967     { 1241, 1920, 1080, 1, 917504, 458752, 6, 10, 4,
968       dnxhd_1241_luma_weight, dnxhd_1241_chroma_weight,
969       dnxhd_1235_1241_dc_codes, dnxhd_1235_1241_dc_bits,
970       dnxhd_1235_1241_ac_codes, dnxhd_1235_1241_ac_bits, dnxhd_1235_1241_ac_level,
971       dnxhd_1235_1241_ac_flags,
972       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1235_1241_run,
973       { 185, 220 } },
974     { 1242, 1920, 1080, 1, 606208, 303104, 4, 8, 3,
975       dnxhd_1242_luma_weight, dnxhd_1242_chroma_weight,
976       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
977       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
978       dnxhd_1237_ac_flags,
979       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
980       { 120, 145 } },
981     { 1243, 1920, 1080, 1, 917504, 458752, 4, 8, 4,
982       dnxhd_1243_luma_weight, dnxhd_1243_chroma_weight,
983       dnxhd_1238_dc_codes, dnxhd_1238_dc_bits,
984       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
985       dnxhd_1238_ac_flags,
986       dnxhd_1235_1238_1241_run_codes, dnxhd_1235_1238_1241_run_bits, dnxhd_1238_run,
987       { 185, 220 } },
988     { 1250, 1280,  720, 0, 458752, 458752, 6, 10, 4,
989       dnxhd_1250_luma_weight, dnxhd_1250_chroma_weight,
990       dnxhd_1250_dc_codes, dnxhd_1250_dc_bits,
991       dnxhd_1250_ac_codes, dnxhd_1250_ac_bits, dnxhd_1250_ac_level,
992       dnxhd_1250_ac_flags,
993       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
994       { 90, 180, 220 } },
995     { 1251, 1280,  720, 0, 458752, 458752, 4, 8, 4,
996       dnxhd_1251_luma_weight, dnxhd_1251_chroma_weight,
997       dnxhd_1251_dc_codes, dnxhd_1251_dc_bits,
998       dnxhd_1251_ac_codes, dnxhd_1251_ac_bits, dnxhd_1251_ac_level,
999       dnxhd_1251_ac_flags,
1000       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1001       { 90, 110, 175, 220 } },
1002     { 1252, 1280,  720, 0, 303104, 303104, 4, 8, 5,
1003       dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight,
1004       dnxhd_1252_dc_codes, dnxhd_1252_dc_bits,
1005       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
1006       dnxhd_1252_ac_flags,
1007       dnxhd_1251_run_codes, dnxhd_1251_run_bits, dnxhd_1251_run,
1008       { 60, 75, 115, 145 } },
1009     { 1253, 1920, 1080, 0, 188416, 188416, 4, 8, 3,
1010       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
1011       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
1012       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
1013       dnxhd_1237_ac_flags,
1014       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
1015       { 36, 45, 75, 90 } },
1016 };
1017
1018 int ff_dnxhd_get_cid_table(int cid)
1019 {
1020     int i;
1021     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
1022         if (ff_dnxhd_cid_table[i].cid == cid)
1023             return i;
1024     return -1;
1025 }
1026
1027 int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
1028 {
1029     int i, j;
1030     int mbs = avctx->bit_rate/1000000;
1031     if (!mbs)
1032         return 0;
1033     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
1034         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
1035         if (cid->width == avctx->width && cid->height == avctx->height &&
1036             cid->interlaced == !!(avctx->flags & CODEC_FLAG_INTERLACED_DCT) &&
1037             cid->bit_depth == bit_depth) {
1038             for (j = 0; j < sizeof(cid->bit_rates); j++) {
1039                 if (cid->bit_rates[j] == mbs)
1040                     return cid->cid;
1041             }
1042         }
1043     }
1044     return 0;
1045 }