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