Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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