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