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