FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/dnxhddata.c
Date: 2021-09-26 18:22:30
Exec Total Coverage
Lines: 42 64 65.6%
Branches: 27 52 51.9%

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