GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/dnxhddata.c Lines: 42 64 65.6 %
Date: 2019-11-22 03:34:36 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
const CIDEntry ff_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
int ff_dnxhd_get_cid_table(int cid)
1079
{
1080
    int i;
1081
14332
    for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
1082
14332
        if (ff_dnxhd_cid_table[i].cid == cid)
1083
902
            return i;
1084
    return -1;
1085
}
1086
1087
422
int avpriv_dnxhd_get_frame_size(int cid)
1088
{
1089
422
    int i = ff_dnxhd_get_cid_table(cid);
1090
422
    if (i<0)
1091
        return i;
1092
422
    return ff_dnxhd_cid_table[i].frame_size;
1093
}
1094
1095
258
int avpriv_dnxhd_get_hr_frame_size(int cid, int w, int h)
1096
{
1097
258
    int result, i = ff_dnxhd_get_cid_table(cid);
1098
1099
258
    if (i < 0)
1100
        return i;
1101
1102
258
    result = ((h + 15) / 16) * ((w + 15) / 16) * (int64_t)ff_dnxhd_cid_table[i].packet_scale.num / ff_dnxhd_cid_table[i].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
    int i = ff_dnxhd_get_cid_table(cid);
1111
1
    if (i < 0)
1112
        return i;
1113
1
    return ff_dnxhd_cid_table[i].flags & DNXHD_INTERLACED ? 1 : 0;
1114
}
1115
1116
40
static int dnxhd_find_hr_cid(AVCodecContext *avctx)
1117
{
1118

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
73
    if (avctx->profile != FF_PROFILE_DNXHD)
1139
40
        return dnxhd_find_hr_cid(avctx);
1140
1141
33
    if (!mbs)
1142
        return 0;
1143
248
    for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
1144
248
        const CIDEntry *cid = &ff_dnxhd_cid_table[i];
1145
248
        int interlaced = cid->flags & DNXHD_INTERLACED ? 1 : 0;
1146

248
        if (cid->width == avctx->width && cid->height == avctx->height &&
1147
97
            interlaced == !!(avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) &&
1148

61
            !(cid->flags & DNXHD_444) && cid->bit_depth == bit_depth) {
1149
35
            if (avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL &&
1150
35
                cid->flags & DNXHD_MBAFF) {
1151
                av_log(avctx, AV_LOG_WARNING, "Profile selected is experimental\n");
1152
                continue;
1153
            }
1154
45
            for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
1155
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(ff_dnxhd_cid_table); i++) {
1167
        const CIDEntry *cid = &ff_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
}