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