FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavcodec/dnxhddata.c
Date: 2022-07-04 19:11:22
Exec Total Coverage
Lines: 38 59 64.4%
Branches: 26 50 52.0%

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