Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * pixel format descriptor
3
 * Copyright (c) 2009 Michael Niedermayer 
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 
23
#include 
24
 
25
#include "avassert.h"
26
#include "common.h"
27
#include "pixfmt.h"
28
#include "pixdesc.h"
29
#include "internal.h"
30
#include "intreadwrite.h"
31
#include "avstring.h"
32
 
33
void av_read_image_line(uint16_t *dst,
34
                        const uint8_t *data[4], const int linesize[4],
35
                        const AVPixFmtDescriptor *desc,
36
                        int x, int y, int c, int w,
37
                        int read_pal_component)
38
{
39
    AVComponentDescriptor comp = desc->comp[c];
40
    int plane = comp.plane;
41
    int depth = comp.depth_minus1 + 1;
42
    int mask  = (1 << depth) - 1;
43
    int shift = comp.shift;
44
    int step  = comp.step_minus1 + 1;
45
    int flags = desc->flags;
46
 
47
    if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
48
        int skip = x * step + comp.offset_plus1 - 1;
49
        const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
50
        int shift = 8 - depth - (skip & 7);
51
 
52
        while (w--) {
53
            int val = (*p >> shift) & mask;
54
            if (read_pal_component)
55
                val = data[1][4*val + c];
56
            shift -= step;
57
            p -= shift >> 3;
58
            shift &= 7;
59
            *dst++ = val;
60
        }
61
    } else {
62
        const uint8_t *p = data[plane] + y * linesize[plane] +
63
                           x * step + comp.offset_plus1 - 1;
64
        int is_8bit = shift + depth <= 8;
65
 
66
        if (is_8bit)
67
            p += !!(flags & AV_PIX_FMT_FLAG_BE);
68
 
69
        while (w--) {
70
            int val = is_8bit ? *p :
71
                flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
72
            val = (val >> shift) & mask;
73
            if (read_pal_component)
74
                val = data[1][4 * val + c];
75
            p += step;
76
            *dst++ = val;
77
        }
78
    }
79
}
80
 
81
void av_write_image_line(const uint16_t *src,
82
                         uint8_t *data[4], const int linesize[4],
83
                         const AVPixFmtDescriptor *desc,
84
                         int x, int y, int c, int w)
85
{
86
    AVComponentDescriptor comp = desc->comp[c];
87
    int plane = comp.plane;
88
    int depth = comp.depth_minus1 + 1;
89
    int step  = comp.step_minus1 + 1;
90
    int flags = desc->flags;
91
 
92
    if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
93
        int skip = x * step + comp.offset_plus1 - 1;
94
        uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
95
        int shift = 8 - depth - (skip & 7);
96
 
97
        while (w--) {
98
            *p |= *src++ << shift;
99
            shift -= step;
100
            p -= shift >> 3;
101
            shift &= 7;
102
        }
103
    } else {
104
        int shift = comp.shift;
105
        uint8_t *p = data[plane] + y * linesize[plane] +
106
                     x * step + comp.offset_plus1 - 1;
107
 
108
        if (shift + depth <= 8) {
109
            p += !!(flags & AV_PIX_FMT_FLAG_BE);
110
            while (w--) {
111
                *p |= (*src++ << shift);
112
                p += step;
113
            }
114
        } else {
115
            while (w--) {
116
                if (flags & AV_PIX_FMT_FLAG_BE) {
117
                    uint16_t val = AV_RB16(p) | (*src++ << shift);
118
                    AV_WB16(p, val);
119
                } else {
120
                    uint16_t val = AV_RL16(p) | (*src++ << shift);
121
                    AV_WL16(p, val);
122
                }
123
                p += step;
124
            }
125
        }
126
    }
127
}
128
 
129
#if !FF_API_PIX_FMT_DESC
130
static
131
#endif
132
const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
133
    [AV_PIX_FMT_YUV420P] = {
134
        .name = "yuv420p",
135
        .nb_components = 3,
136
        .log2_chroma_w = 1,
137
        .log2_chroma_h = 1,
138
        .comp = {
139
            { 0, 0, 1, 0, 7 },        /* Y */
140
            { 1, 0, 1, 0, 7 },        /* U */
141
            { 2, 0, 1, 0, 7 },        /* V */
142
        },
143
        .flags = AV_PIX_FMT_FLAG_PLANAR,
144
    },
145
    [AV_PIX_FMT_YUYV422] = {
146
        .name = "yuyv422",
147
        .nb_components = 3,
148
        .log2_chroma_w = 1,
149
        .log2_chroma_h = 0,
150
        .comp = {
151
            { 0, 1, 1, 0, 7 },        /* Y */
152
            { 0, 3, 2, 0, 7 },        /* U */
153
            { 0, 3, 4, 0, 7 },        /* V */
154
        },
155
    },
156
    [AV_PIX_FMT_RGB24] = {
157
        .name = "rgb24",
158
        .nb_components = 3,
159
        .log2_chroma_w = 0,
160
        .log2_chroma_h = 0,
161
        .comp = {
162
            { 0, 2, 1, 0, 7 },        /* R */
163
            { 0, 2, 2, 0, 7 },        /* G */
164
            { 0, 2, 3, 0, 7 },        /* B */
165
        },
166
        .flags = AV_PIX_FMT_FLAG_RGB,
167
    },
168
    [AV_PIX_FMT_BGR24] = {
169
        .name = "bgr24",
170
        .nb_components = 3,
171
        .log2_chroma_w = 0,
172
        .log2_chroma_h = 0,
173
        .comp = {
174
            { 0, 2, 3, 0, 7 },        /* R */
175
            { 0, 2, 2, 0, 7 },        /* G */
176
            { 0, 2, 1, 0, 7 },        /* B */
177
        },
178
        .flags = AV_PIX_FMT_FLAG_RGB,
179
    },
180
    [AV_PIX_FMT_YUV422P] = {
181
        .name = "yuv422p",
182
        .nb_components = 3,
183
        .log2_chroma_w = 1,
184
        .log2_chroma_h = 0,
185
        .comp = {
186
            { 0, 0, 1, 0, 7 },        /* Y */
187
            { 1, 0, 1, 0, 7 },        /* U */
188
            { 2, 0, 1, 0, 7 },        /* V */
189
        },
190
        .flags = AV_PIX_FMT_FLAG_PLANAR,
191
    },
192
    [AV_PIX_FMT_YUV444P] = {
193
        .name = "yuv444p",
194
        .nb_components = 3,
195
        .log2_chroma_w = 0,
196
        .log2_chroma_h = 0,
197
        .comp = {
198
            { 0, 0, 1, 0, 7 },        /* Y */
199
            { 1, 0, 1, 0, 7 },        /* U */
200
            { 2, 0, 1, 0, 7 },        /* V */
201
        },
202
        .flags = AV_PIX_FMT_FLAG_PLANAR,
203
    },
204
    [AV_PIX_FMT_YUV410P] = {
205
        .name = "yuv410p",
206
        .nb_components = 3,
207
        .log2_chroma_w = 2,
208
        .log2_chroma_h = 2,
209
        .comp = {
210
            { 0, 0, 1, 0, 7 },        /* Y */
211
            { 1, 0, 1, 0, 7 },        /* U */
212
            { 2, 0, 1, 0, 7 },        /* V */
213
        },
214
        .flags = AV_PIX_FMT_FLAG_PLANAR,
215
    },
216
    [AV_PIX_FMT_YUV411P] = {
217
        .name = "yuv411p",
218
        .nb_components = 3,
219
        .log2_chroma_w = 2,
220
        .log2_chroma_h = 0,
221
        .comp = {
222
            { 0, 0, 1, 0, 7 },        /* Y */
223
            { 1, 0, 1, 0, 7 },        /* U */
224
            { 2, 0, 1, 0, 7 },        /* V */
225
        },
226
        .flags = AV_PIX_FMT_FLAG_PLANAR,
227
    },
228
    [AV_PIX_FMT_YUVJ411P] = {
229
        .name = "yuvj411p",
230
        .nb_components = 3,
231
        .log2_chroma_w = 2,
232
        .log2_chroma_h = 0,
233
        .comp = {
234
            { 0, 0, 1, 0, 7 },        /* Y */
235
            { 1, 0, 1, 0, 7 },        /* U */
236
            { 2, 0, 1, 0, 7 },        /* V */
237
        },
238
        .flags = AV_PIX_FMT_FLAG_PLANAR,
239
    },
240
    [AV_PIX_FMT_GRAY8] = {
241
        .name = "gray",
242
        .nb_components = 1,
243
        .log2_chroma_w = 0,
244
        .log2_chroma_h = 0,
245
        .comp = {
246
            { 0, 0, 1, 0, 7 },        /* Y */
247
        },
248
        .flags = AV_PIX_FMT_FLAG_PSEUDOPAL,
249
    },
250
    [AV_PIX_FMT_MONOWHITE] = {
251
        .name = "monow",
252
        .nb_components = 1,
253
        .log2_chroma_w = 0,
254
        .log2_chroma_h = 0,
255
        .comp = {
256
            { 0, 0, 1, 0, 0 },        /* Y */
257
        },
258
        .flags = AV_PIX_FMT_FLAG_BITSTREAM,
259
    },
260
    [AV_PIX_FMT_MONOBLACK] = {
261
        .name = "monob",
262
        .nb_components = 1,
263
        .log2_chroma_w = 0,
264
        .log2_chroma_h = 0,
265
        .comp = {
266
            { 0, 0, 1, 7, 0 },        /* Y */
267
        },
268
        .flags = AV_PIX_FMT_FLAG_BITSTREAM,
269
    },
270
    [AV_PIX_FMT_PAL8] = {
271
        .name = "pal8",
272
        .nb_components = 1,
273
        .log2_chroma_w = 0,
274
        .log2_chroma_h = 0,
275
        .comp = {
276
            { 0, 0, 1, 0, 7 },
277
        },
278
        .flags = AV_PIX_FMT_FLAG_PAL,
279
    },
280
    [AV_PIX_FMT_YUVJ420P] = {
281
        .name = "yuvj420p",
282
        .nb_components = 3,
283
        .log2_chroma_w = 1,
284
        .log2_chroma_h = 1,
285
        .comp = {
286
            { 0, 0, 1, 0, 7 },        /* Y */
287
            { 1, 0, 1, 0, 7 },        /* U */
288
            { 2, 0, 1, 0, 7 },        /* V */
289
        },
290
        .flags = AV_PIX_FMT_FLAG_PLANAR,
291
    },
292
    [AV_PIX_FMT_YUVJ422P] = {
293
        .name = "yuvj422p",
294
        .nb_components = 3,
295
        .log2_chroma_w = 1,
296
        .log2_chroma_h = 0,
297
        .comp = {
298
            { 0, 0, 1, 0, 7 },        /* Y */
299
            { 1, 0, 1, 0, 7 },        /* U */
300
            { 2, 0, 1, 0, 7 },        /* V */
301
        },
302
        .flags = AV_PIX_FMT_FLAG_PLANAR,
303
    },
304
    [AV_PIX_FMT_YUVJ444P] = {
305
        .name = "yuvj444p",
306
        .nb_components = 3,
307
        .log2_chroma_w = 0,
308
        .log2_chroma_h = 0,
309
        .comp = {
310
            { 0, 0, 1, 0, 7 },        /* Y */
311
            { 1, 0, 1, 0, 7 },        /* U */
312
            { 2, 0, 1, 0, 7 },        /* V */
313
        },
314
        .flags = AV_PIX_FMT_FLAG_PLANAR,
315
    },
316
    [AV_PIX_FMT_XVMC_MPEG2_MC] = {
317
        .name = "xvmcmc",
318
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
319
    },
320
    [AV_PIX_FMT_XVMC_MPEG2_IDCT] = {
321
        .name = "xvmcidct",
322
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
323
    },
324
    [AV_PIX_FMT_UYVY422] = {
325
        .name = "uyvy422",
326
        .nb_components = 3,
327
        .log2_chroma_w = 1,
328
        .log2_chroma_h = 0,
329
        .comp = {
330
            { 0, 1, 2, 0, 7 },        /* Y */
331
            { 0, 3, 1, 0, 7 },        /* U */
332
            { 0, 3, 3, 0, 7 },        /* V */
333
        },
334
    },
335
    [AV_PIX_FMT_UYYVYY411] = {
336
        .name = "uyyvyy411",
337
        .nb_components = 3,
338
        .log2_chroma_w = 2,
339
        .log2_chroma_h = 0,
340
        .comp = {
341
            { 0, 3, 2, 0, 7 },        /* Y */
342
            { 0, 5, 1, 0, 7 },        /* U */
343
            { 0, 5, 4, 0, 7 },        /* V */
344
        },
345
    },
346
    [AV_PIX_FMT_BGR8] = {
347
        .name = "bgr8",
348
        .nb_components = 3,
349
        .log2_chroma_w = 0,
350
        .log2_chroma_h = 0,
351
        .comp = {
352
            { 0, 0, 1, 0, 2 },        /* R */
353
            { 0, 0, 1, 3, 2 },        /* G */
354
            { 0, 0, 1, 6, 1 },        /* B */
355
        },
356
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
357
    },
358
    [AV_PIX_FMT_BGR4] = {
359
        .name = "bgr4",
360
        .nb_components = 3,
361
        .log2_chroma_w = 0,
362
        .log2_chroma_h = 0,
363
        .comp = {
364
            { 0, 3, 4, 0, 0 },        /* R */
365
            { 0, 3, 2, 0, 1 },        /* G */
366
            { 0, 3, 1, 0, 0 },        /* B */
367
        },
368
        .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
369
    },
370
    [AV_PIX_FMT_BGR4_BYTE] = {
371
        .name = "bgr4_byte",
372
        .nb_components = 3,
373
        .log2_chroma_w = 0,
374
        .log2_chroma_h = 0,
375
        .comp = {
376
            { 0, 0, 1, 0, 0 },        /* R */
377
            { 0, 0, 1, 1, 1 },        /* G */
378
            { 0, 0, 1, 3, 0 },        /* B */
379
        },
380
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
381
    },
382
    [AV_PIX_FMT_RGB8] = {
383
        .name = "rgb8",
384
        .nb_components = 3,
385
        .log2_chroma_w = 0,
386
        .log2_chroma_h = 0,
387
        .comp = {
388
            { 0, 0, 1, 6, 1 },        /* R */
389
            { 0, 0, 1, 3, 2 },        /* G */
390
            { 0, 0, 1, 0, 2 },        /* B */
391
        },
392
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
393
    },
394
    [AV_PIX_FMT_RGB4] = {
395
        .name = "rgb4",
396
        .nb_components = 3,
397
        .log2_chroma_w = 0,
398
        .log2_chroma_h = 0,
399
        .comp = {
400
            { 0, 3, 1, 0, 0 },        /* R */
401
            { 0, 3, 2, 0, 1 },        /* G */
402
            { 0, 3, 4, 0, 0 },        /* B */
403
        },
404
        .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
405
    },
406
    [AV_PIX_FMT_RGB4_BYTE] = {
407
        .name = "rgb4_byte",
408
        .nb_components = 3,
409
        .log2_chroma_w = 0,
410
        .log2_chroma_h = 0,
411
        .comp = {
412
            { 0, 0, 1, 3, 0 },        /* R */
413
            { 0, 0, 1, 1, 1 },        /* G */
414
            { 0, 0, 1, 0, 0 },        /* B */
415
        },
416
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
417
    },
418
    [AV_PIX_FMT_NV12] = {
419
        .name = "nv12",
420
        .nb_components = 3,
421
        .log2_chroma_w = 1,
422
        .log2_chroma_h = 1,
423
        .comp = {
424
            { 0, 0, 1, 0, 7 },        /* Y */
425
            { 1, 1, 1, 0, 7 },        /* U */
426
            { 1, 1, 2, 0, 7 },        /* V */
427
        },
428
        .flags = AV_PIX_FMT_FLAG_PLANAR,
429
    },
430
    [AV_PIX_FMT_NV21] = {
431
        .name = "nv21",
432
        .nb_components = 3,
433
        .log2_chroma_w = 1,
434
        .log2_chroma_h = 1,
435
        .comp = {
436
            { 0, 0, 1, 0, 7 },        /* Y */
437
            { 1, 1, 2, 0, 7 },        /* U */
438
            { 1, 1, 1, 0, 7 },        /* V */
439
        },
440
        .flags = AV_PIX_FMT_FLAG_PLANAR,
441
    },
442
    [AV_PIX_FMT_ARGB] = {
443
        .name = "argb",
444
        .nb_components = 4,
445
        .log2_chroma_w = 0,
446
        .log2_chroma_h = 0,
447
        .comp = {
448
            { 0, 3, 2, 0, 7 },        /* R */
449
            { 0, 3, 3, 0, 7 },        /* G */
450
            { 0, 3, 4, 0, 7 },        /* B */
451
            { 0, 3, 1, 0, 7 },        /* A */
452
        },
453
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
454
    },
455
    [AV_PIX_FMT_RGBA] = {
456
        .name = "rgba",
457
        .nb_components = 4,
458
        .log2_chroma_w = 0,
459
        .log2_chroma_h = 0,
460
        .comp = {
461
            { 0, 3, 1, 0, 7 },        /* R */
462
            { 0, 3, 2, 0, 7 },        /* G */
463
            { 0, 3, 3, 0, 7 },        /* B */
464
            { 0, 3, 4, 0, 7 },        /* A */
465
        },
466
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
467
    },
468
    [AV_PIX_FMT_ABGR] = {
469
        .name = "abgr",
470
        .nb_components = 4,
471
        .log2_chroma_w = 0,
472
        .log2_chroma_h = 0,
473
        .comp = {
474
            { 0, 3, 4, 0, 7 },        /* R */
475
            { 0, 3, 3, 0, 7 },        /* G */
476
            { 0, 3, 2, 0, 7 },        /* B */
477
            { 0, 3, 1, 0, 7 },        /* A */
478
        },
479
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
480
    },
481
    [AV_PIX_FMT_BGRA] = {
482
        .name = "bgra",
483
        .nb_components = 4,
484
        .log2_chroma_w = 0,
485
        .log2_chroma_h = 0,
486
        .comp = {
487
            { 0, 3, 3, 0, 7 },        /* R */
488
            { 0, 3, 2, 0, 7 },        /* G */
489
            { 0, 3, 1, 0, 7 },        /* B */
490
            { 0, 3, 4, 0, 7 },        /* A */
491
        },
492
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
493
    },
494
    [AV_PIX_FMT_0RGB] = {
495
        .name = "0rgb",
496
        .nb_components= 3,
497
        .log2_chroma_w= 0,
498
        .log2_chroma_h= 0,
499
        .comp = {
500
            { 0, 3, 2, 0, 7 },        /* R */
501
            { 0, 3, 3, 0, 7 },        /* G */
502
            { 0, 3, 4, 0, 7 },        /* B */
503
        },
504
        .flags = AV_PIX_FMT_FLAG_RGB,
505
    },
506
    [AV_PIX_FMT_RGB0] = {
507
        .name = "rgb0",
508
        .nb_components= 3,
509
        .log2_chroma_w= 0,
510
        .log2_chroma_h= 0,
511
        .comp = {
512
            { 0, 3, 1, 0, 7 },        /* R */
513
            { 0, 3, 2, 0, 7 },        /* G */
514
            { 0, 3, 3, 0, 7 },        /* B */
515
        },
516
        .flags = AV_PIX_FMT_FLAG_RGB,
517
    },
518
    [AV_PIX_FMT_0BGR] = {
519
        .name = "0bgr",
520
        .nb_components= 3,
521
        .log2_chroma_w= 0,
522
        .log2_chroma_h= 0,
523
        .comp = {
524
            { 0, 3, 4, 0, 7 },        /* R */
525
            { 0, 3, 3, 0, 7 },        /* G */
526
            { 0, 3, 2, 0, 7 },        /* B */
527
        },
528
        .flags = AV_PIX_FMT_FLAG_RGB,
529
    },
530
    [AV_PIX_FMT_BGR0] = {
531
        .name = "bgr0",
532
        .nb_components= 3,
533
        .log2_chroma_w= 0,
534
        .log2_chroma_h= 0,
535
        .comp = {
536
            { 0, 3, 3, 0, 7 },        /* R */
537
            { 0, 3, 2, 0, 7 },        /* G */
538
            { 0, 3, 1, 0, 7 },        /* B */
539
        },
540
        .flags = AV_PIX_FMT_FLAG_RGB,
541
    },
542
    [AV_PIX_FMT_GRAY16BE] = {
543
        .name = "gray16be",
544
        .nb_components = 1,
545
        .log2_chroma_w = 0,
546
        .log2_chroma_h = 0,
547
        .comp = {
548
            { 0, 1, 1, 0, 15 },       /* Y */
549
        },
550
        .flags = AV_PIX_FMT_FLAG_BE,
551
    },
552
    [AV_PIX_FMT_GRAY16LE] = {
553
        .name = "gray16le",
554
        .nb_components = 1,
555
        .log2_chroma_w = 0,
556
        .log2_chroma_h = 0,
557
        .comp = {
558
            { 0, 1, 1, 0, 15 },       /* Y */
559
        },
560
    },
561
    [AV_PIX_FMT_YUV440P] = {
562
        .name = "yuv440p",
563
        .nb_components = 3,
564
        .log2_chroma_w = 0,
565
        .log2_chroma_h = 1,
566
        .comp = {
567
            { 0, 0, 1, 0, 7 },        /* Y */
568
            { 1, 0, 1, 0, 7 },        /* U */
569
            { 2, 0, 1, 0, 7 },        /* V */
570
        },
571
        .flags = AV_PIX_FMT_FLAG_PLANAR,
572
    },
573
    [AV_PIX_FMT_YUVJ440P] = {
574
        .name = "yuvj440p",
575
        .nb_components = 3,
576
        .log2_chroma_w = 0,
577
        .log2_chroma_h = 1,
578
        .comp = {
579
            { 0, 0, 1, 0, 7 },        /* Y */
580
            { 1, 0, 1, 0, 7 },        /* U */
581
            { 2, 0, 1, 0, 7 },        /* V */
582
        },
583
        .flags = AV_PIX_FMT_FLAG_PLANAR,
584
    },
585
    [AV_PIX_FMT_YUVA420P] = {
586
        .name = "yuva420p",
587
        .nb_components = 4,
588
        .log2_chroma_w = 1,
589
        .log2_chroma_h = 1,
590
        .comp = {
591
            { 0, 0, 1, 0, 7 },        /* Y */
592
            { 1, 0, 1, 0, 7 },        /* U */
593
            { 2, 0, 1, 0, 7 },        /* V */
594
            { 3, 0, 1, 0, 7 },        /* A */
595
        },
596
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
597
    },
598
    [AV_PIX_FMT_YUVA422P] = {
599
        .name = "yuva422p",
600
        .nb_components = 4,
601
        .log2_chroma_w = 1,
602
        .log2_chroma_h = 0,
603
        .comp = {
604
            { 0, 0, 1, 0, 7 },        /* Y */
605
            { 1, 0, 1, 0, 7 },        /* U */
606
            { 2, 0, 1, 0, 7 },        /* V */
607
            { 3, 0, 1, 0, 7 },        /* A */
608
        },
609
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
610
    },
611
    [AV_PIX_FMT_YUVA444P] = {
612
        .name = "yuva444p",
613
        .nb_components = 4,
614
        .log2_chroma_w = 0,
615
        .log2_chroma_h = 0,
616
        .comp = {
617
            { 0, 0, 1, 0, 7 },        /* Y */
618
            { 1, 0, 1, 0, 7 },        /* U */
619
            { 2, 0, 1, 0, 7 },        /* V */
620
            { 3, 0, 1, 0, 7 },        /* A */
621
        },
622
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
623
    },
624
    [AV_PIX_FMT_YUVA420P9BE] = {
625
        .name = "yuva420p9be",
626
        .nb_components = 4,
627
        .log2_chroma_w = 1,
628
        .log2_chroma_h = 1,
629
        .comp = {
630
            { 0, 1, 1, 0, 8 },        /* Y */
631
            { 1, 1, 1, 0, 8 },        /* U */
632
            { 2, 1, 1, 0, 8 },        /* V */
633
            { 3, 1, 1, 0, 8 },        /* A */
634
        },
635
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
636
    },
637
    [AV_PIX_FMT_YUVA420P9LE] = {
638
        .name = "yuva420p9le",
639
        .nb_components = 4,
640
        .log2_chroma_w = 1,
641
        .log2_chroma_h = 1,
642
        .comp = {
643
            { 0, 1, 1, 0, 8 },        /* Y */
644
            { 1, 1, 1, 0, 8 },        /* U */
645
            { 2, 1, 1, 0, 8 },        /* V */
646
            { 3, 1, 1, 0, 8 },        /* A */
647
        },
648
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
649
    },
650
    [AV_PIX_FMT_YUVA422P9BE] = {
651
        .name = "yuva422p9be",
652
        .nb_components = 4,
653
        .log2_chroma_w = 1,
654
        .log2_chroma_h = 0,
655
        .comp = {
656
            { 0, 1, 1, 0, 8 },        /* Y */
657
            { 1, 1, 1, 0, 8 },        /* U */
658
            { 2, 1, 1, 0, 8 },        /* V */
659
            { 3, 1, 1, 0, 8 },        /* A */
660
        },
661
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
662
    },
663
    [AV_PIX_FMT_YUVA422P9LE] = {
664
        .name = "yuva422p9le",
665
        .nb_components = 4,
666
        .log2_chroma_w = 1,
667
        .log2_chroma_h = 0,
668
        .comp = {
669
            { 0, 1, 1, 0, 8 },        /* Y */
670
            { 1, 1, 1, 0, 8 },        /* U */
671
            { 2, 1, 1, 0, 8 },        /* V */
672
            { 3, 1, 1, 0, 8 },        /* A */
673
        },
674
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
675
    },
676
    [AV_PIX_FMT_YUVA444P9BE] = {
677
        .name = "yuva444p9be",
678
        .nb_components = 4,
679
        .log2_chroma_w = 0,
680
        .log2_chroma_h = 0,
681
        .comp = {
682
            { 0, 1, 1, 0, 8 },        /* Y */
683
            { 1, 1, 1, 0, 8 },        /* U */
684
            { 2, 1, 1, 0, 8 },        /* V */
685
            { 3, 1, 1, 0, 8 },        /* A */
686
        },
687
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
688
    },
689
    [AV_PIX_FMT_YUVA444P9LE] = {
690
        .name = "yuva444p9le",
691
        .nb_components = 4,
692
        .log2_chroma_w = 0,
693
        .log2_chroma_h = 0,
694
        .comp = {
695
            { 0, 1, 1, 0, 8 },        /* Y */
696
            { 1, 1, 1, 0, 8 },        /* U */
697
            { 2, 1, 1, 0, 8 },        /* V */
698
            { 3, 1, 1, 0, 8 },        /* A */
699
        },
700
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
701
    },
702
    [AV_PIX_FMT_YUVA420P10BE] = {
703
        .name = "yuva420p10be",
704
        .nb_components = 4,
705
        .log2_chroma_w = 1,
706
        .log2_chroma_h = 1,
707
        .comp = {
708
            { 0, 1, 1, 0, 9 },        /* Y */
709
            { 1, 1, 1, 0, 9 },        /* U */
710
            { 2, 1, 1, 0, 9 },        /* V */
711
            { 3, 1, 1, 0, 9 },        /* A */
712
        },
713
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
714
    },
715
    [AV_PIX_FMT_YUVA420P10LE] = {
716
        .name = "yuva420p10le",
717
        .nb_components = 4,
718
        .log2_chroma_w = 1,
719
        .log2_chroma_h = 1,
720
        .comp = {
721
            { 0, 1, 1, 0, 9 },        /* Y */
722
            { 1, 1, 1, 0, 9 },        /* U */
723
            { 2, 1, 1, 0, 9 },        /* V */
724
            { 3, 1, 1, 0, 9 },        /* A */
725
        },
726
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
727
    },
728
    [AV_PIX_FMT_YUVA422P10BE] = {
729
        .name = "yuva422p10be",
730
        .nb_components = 4,
731
        .log2_chroma_w = 1,
732
        .log2_chroma_h = 0,
733
        .comp = {
734
            { 0, 1, 1, 0, 9 },        /* Y */
735
            { 1, 1, 1, 0, 9 },        /* U */
736
            { 2, 1, 1, 0, 9 },        /* V */
737
            { 3, 1, 1, 0, 9 },        /* A */
738
        },
739
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
740
    },
741
    [AV_PIX_FMT_YUVA422P10LE] = {
742
        .name = "yuva422p10le",
743
        .nb_components = 4,
744
        .log2_chroma_w = 1,
745
        .log2_chroma_h = 0,
746
        .comp = {
747
            { 0, 1, 1, 0, 9 },        /* Y */
748
            { 1, 1, 1, 0, 9 },        /* U */
749
            { 2, 1, 1, 0, 9 },        /* V */
750
            { 3, 1, 1, 0, 9 },        /* A */
751
        },
752
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
753
    },
754
    [AV_PIX_FMT_YUVA444P10BE] = {
755
        .name = "yuva444p10be",
756
        .nb_components = 4,
757
        .log2_chroma_w = 0,
758
        .log2_chroma_h = 0,
759
        .comp = {
760
            { 0, 1, 1, 0, 9 },        /* Y */
761
            { 1, 1, 1, 0, 9 },        /* U */
762
            { 2, 1, 1, 0, 9 },        /* V */
763
            { 3, 1, 1, 0, 9 },        /* A */
764
        },
765
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
766
    },
767
    [AV_PIX_FMT_YUVA444P10LE] = {
768
        .name = "yuva444p10le",
769
        .nb_components = 4,
770
        .log2_chroma_w = 0,
771
        .log2_chroma_h = 0,
772
        .comp = {
773
            { 0, 1, 1, 0, 9 },        /* Y */
774
            { 1, 1, 1, 0, 9 },        /* U */
775
            { 2, 1, 1, 0, 9 },        /* V */
776
            { 3, 1, 1, 0, 9 },        /* A */
777
        },
778
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
779
    },
780
    [AV_PIX_FMT_YUVA420P16BE] = {
781
        .name = "yuva420p16be",
782
        .nb_components = 4,
783
        .log2_chroma_w = 1,
784
        .log2_chroma_h = 1,
785
        .comp = {
786
            { 0, 1, 1, 0, 15 },        /* Y */
787
            { 1, 1, 1, 0, 15 },        /* U */
788
            { 2, 1, 1, 0, 15 },        /* V */
789
            { 3, 1, 1, 0, 15 },        /* A */
790
        },
791
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
792
    },
793
    [AV_PIX_FMT_YUVA420P16LE] = {
794
        .name = "yuva420p16le",
795
        .nb_components = 4,
796
        .log2_chroma_w = 1,
797
        .log2_chroma_h = 1,
798
        .comp = {
799
            { 0, 1, 1, 0, 15 },        /* Y */
800
            { 1, 1, 1, 0, 15 },        /* U */
801
            { 2, 1, 1, 0, 15 },        /* V */
802
            { 3, 1, 1, 0, 15 },        /* A */
803
        },
804
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
805
    },
806
    [AV_PIX_FMT_YUVA422P16BE] = {
807
        .name = "yuva422p16be",
808
        .nb_components = 4,
809
        .log2_chroma_w = 1,
810
        .log2_chroma_h = 0,
811
        .comp = {
812
            { 0, 1, 1, 0, 15 },        /* Y */
813
            { 1, 1, 1, 0, 15 },        /* U */
814
            { 2, 1, 1, 0, 15 },        /* V */
815
            { 3, 1, 1, 0, 15 },        /* A */
816
        },
817
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
818
    },
819
    [AV_PIX_FMT_YUVA422P16LE] = {
820
        .name = "yuva422p16le",
821
        .nb_components = 4,
822
        .log2_chroma_w = 1,
823
        .log2_chroma_h = 0,
824
        .comp = {
825
            { 0, 1, 1, 0, 15 },        /* Y */
826
            { 1, 1, 1, 0, 15 },        /* U */
827
            { 2, 1, 1, 0, 15 },        /* V */
828
            { 3, 1, 1, 0, 15 },        /* A */
829
        },
830
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
831
    },
832
    [AV_PIX_FMT_YUVA444P16BE] = {
833
        .name = "yuva444p16be",
834
        .nb_components = 4,
835
        .log2_chroma_w = 0,
836
        .log2_chroma_h = 0,
837
        .comp = {
838
            { 0, 1, 1, 0, 15 },        /* Y */
839
            { 1, 1, 1, 0, 15 },        /* U */
840
            { 2, 1, 1, 0, 15 },        /* V */
841
            { 3, 1, 1, 0, 15 },        /* A */
842
        },
843
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
844
    },
845
    [AV_PIX_FMT_YUVA444P16LE] = {
846
        .name = "yuva444p16le",
847
        .nb_components = 4,
848
        .log2_chroma_w = 0,
849
        .log2_chroma_h = 0,
850
        .comp = {
851
            { 0, 1, 1, 0, 15 },        /* Y */
852
            { 1, 1, 1, 0, 15 },        /* U */
853
            { 2, 1, 1, 0, 15 },        /* V */
854
            { 3, 1, 1, 0, 15 },        /* A */
855
        },
856
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
857
    },
858
#if FF_API_VDPAU
859
    [AV_PIX_FMT_VDPAU_H264] = {
860
        .name = "vdpau_h264",
861
        .log2_chroma_w = 1,
862
        .log2_chroma_h = 1,
863
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
864
    },
865
    [AV_PIX_FMT_VDPAU_MPEG1] = {
866
        .name = "vdpau_mpeg1",
867
        .log2_chroma_w = 1,
868
        .log2_chroma_h = 1,
869
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
870
    },
871
    [AV_PIX_FMT_VDPAU_MPEG2] = {
872
        .name = "vdpau_mpeg2",
873
        .log2_chroma_w = 1,
874
        .log2_chroma_h = 1,
875
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
876
    },
877
    [AV_PIX_FMT_VDPAU_WMV3] = {
878
        .name = "vdpau_wmv3",
879
        .log2_chroma_w = 1,
880
        .log2_chroma_h = 1,
881
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
882
    },
883
    [AV_PIX_FMT_VDPAU_VC1] = {
884
        .name = "vdpau_vc1",
885
        .log2_chroma_w = 1,
886
        .log2_chroma_h = 1,
887
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
888
    },
889
    [AV_PIX_FMT_VDPAU_MPEG4] = {
890
        .name = "vdpau_mpeg4",
891
        .log2_chroma_w = 1,
892
        .log2_chroma_h = 1,
893
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
894
    },
895
#endif
896
    [AV_PIX_FMT_RGB48BE] = {
897
        .name = "rgb48be",
898
        .nb_components = 3,
899
        .log2_chroma_w = 0,
900
        .log2_chroma_h = 0,
901
        .comp = {
902
            { 0, 5, 1, 0, 15 },       /* R */
903
            { 0, 5, 3, 0, 15 },       /* G */
904
            { 0, 5, 5, 0, 15 },       /* B */
905
        },
906
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
907
    },
908
    [AV_PIX_FMT_RGB48LE] = {
909
        .name = "rgb48le",
910
        .nb_components = 3,
911
        .log2_chroma_w = 0,
912
        .log2_chroma_h = 0,
913
        .comp = {
914
            { 0, 5, 1, 0, 15 },       /* R */
915
            { 0, 5, 3, 0, 15 },       /* G */
916
            { 0, 5, 5, 0, 15 },       /* B */
917
        },
918
        .flags = AV_PIX_FMT_FLAG_RGB,
919
    },
920
    [AV_PIX_FMT_RGBA64BE] = {
921
        .name = "rgba64be",
922
        .nb_components= 4,
923
        .log2_chroma_w= 0,
924
        .log2_chroma_h= 0,
925
        .comp = {
926
            { 0, 7, 1, 0, 15 },       /* R */
927
            { 0, 7, 3, 0, 15 },       /* G */
928
            { 0, 7, 5, 0, 15 },       /* B */
929
            { 0, 7, 7, 0, 15 },       /* A */
930
        },
931
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
932
    },
933
    [AV_PIX_FMT_RGBA64LE] = {
934
        .name = "rgba64le",
935
        .nb_components= 4,
936
        .log2_chroma_w= 0,
937
        .log2_chroma_h= 0,
938
        .comp = {
939
            { 0, 7, 1, 0, 15 },       /* R */
940
            { 0, 7, 3, 0, 15 },       /* G */
941
            { 0, 7, 5, 0, 15 },       /* B */
942
            { 0, 7, 7, 0, 15 },       /* A */
943
        },
944
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
945
    },
946
    [AV_PIX_FMT_RGB565BE] = {
947
        .name = "rgb565be",
948
        .nb_components = 3,
949
        .log2_chroma_w = 0,
950
        .log2_chroma_h = 0,
951
        .comp = {
952
            { 0, 1, 0, 3, 4 },        /* R */
953
            { 0, 1, 1, 5, 5 },        /* G */
954
            { 0, 1, 1, 0, 4 },        /* B */
955
        },
956
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
957
    },
958
    [AV_PIX_FMT_RGB565LE] = {
959
        .name = "rgb565le",
960
        .nb_components = 3,
961
        .log2_chroma_w = 0,
962
        .log2_chroma_h = 0,
963
        .comp = {
964
            { 0, 1, 2, 3, 4 },        /* R */
965
            { 0, 1, 1, 5, 5 },        /* G */
966
            { 0, 1, 1, 0, 4 },        /* B */
967
        },
968
        .flags = AV_PIX_FMT_FLAG_RGB,
969
    },
970
    [AV_PIX_FMT_RGB555BE] = {
971
        .name = "rgb555be",
972
        .nb_components = 3,
973
        .log2_chroma_w = 0,
974
        .log2_chroma_h = 0,
975
        .comp = {
976
            { 0, 1, 0, 2, 4 },        /* R */
977
            { 0, 1, 1, 5, 4 },        /* G */
978
            { 0, 1, 1, 0, 4 },        /* B */
979
        },
980
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
981
    },
982
    [AV_PIX_FMT_RGB555LE] = {
983
        .name = "rgb555le",
984
        .nb_components = 3,
985
        .log2_chroma_w = 0,
986
        .log2_chroma_h = 0,
987
        .comp = {
988
            { 0, 1, 2, 2, 4 },        /* R */
989
            { 0, 1, 1, 5, 4 },        /* G */
990
            { 0, 1, 1, 0, 4 },        /* B */
991
        },
992
        .flags = AV_PIX_FMT_FLAG_RGB,
993
    },
994
    [AV_PIX_FMT_RGB444BE] = {
995
        .name = "rgb444be",
996
        .nb_components = 3,
997
        .log2_chroma_w = 0,
998
        .log2_chroma_h = 0,
999
        .comp = {
1000
            { 0, 1, 0, 0, 3 },        /* R */
1001
            { 0, 1, 1, 4, 3 },        /* G */
1002
            { 0, 1, 1, 0, 3 },        /* B */
1003
        },
1004
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1005
    },
1006
    [AV_PIX_FMT_RGB444LE] = {
1007
        .name = "rgb444le",
1008
        .nb_components = 3,
1009
        .log2_chroma_w = 0,
1010
        .log2_chroma_h = 0,
1011
        .comp = {
1012
            { 0, 1, 2, 0, 3 },        /* R */
1013
            { 0, 1, 1, 4, 3 },        /* G */
1014
            { 0, 1, 1, 0, 3 },        /* B */
1015
        },
1016
        .flags = AV_PIX_FMT_FLAG_RGB,
1017
    },
1018
    [AV_PIX_FMT_BGR48BE] = {
1019
        .name = "bgr48be",
1020
        .nb_components = 3,
1021
        .log2_chroma_w = 0,
1022
        .log2_chroma_h = 0,
1023
        .comp = {
1024
            { 0, 5, 5, 0, 15 },       /* R */
1025
            { 0, 5, 3, 0, 15 },       /* G */
1026
            { 0, 5, 1, 0, 15 },       /* B */
1027
        },
1028
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1029
    },
1030
    [AV_PIX_FMT_BGR48LE] = {
1031
        .name = "bgr48le",
1032
        .nb_components = 3,
1033
        .log2_chroma_w = 0,
1034
        .log2_chroma_h = 0,
1035
        .comp = {
1036
            { 0, 5, 5, 0, 15 },       /* R */
1037
            { 0, 5, 3, 0, 15 },       /* G */
1038
            { 0, 5, 1, 0, 15 },       /* B */
1039
        },
1040
        .flags = AV_PIX_FMT_FLAG_RGB,
1041
    },
1042
    [AV_PIX_FMT_BGRA64BE] = {
1043
        .name = "bgra64be",
1044
        .nb_components= 4,
1045
        .log2_chroma_w= 0,
1046
        .log2_chroma_h= 0,
1047
        .comp = {
1048
            { 0, 7, 5, 0, 15 },       /* R */
1049
            { 0, 7, 3, 0, 15 },       /* G */
1050
            { 0, 7, 1, 0, 15 },       /* B */
1051
            { 0, 7, 7, 0, 15 },       /* A */
1052
        },
1053
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1054
    },
1055
    [AV_PIX_FMT_BGRA64LE] = {
1056
        .name = "bgra64le",
1057
        .nb_components= 4,
1058
        .log2_chroma_w= 0,
1059
        .log2_chroma_h= 0,
1060
        .comp = {
1061
            { 0, 7, 5, 0, 15 },       /* R */
1062
            { 0, 7, 3, 0, 15 },       /* G */
1063
            { 0, 7, 1, 0, 15 },       /* B */
1064
            { 0, 7, 7, 0, 15 },       /* A */
1065
        },
1066
        .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1067
    },
1068
    [AV_PIX_FMT_BGR565BE] = {
1069
        .name = "bgr565be",
1070
        .nb_components = 3,
1071
        .log2_chroma_w = 0,
1072
        .log2_chroma_h = 0,
1073
        .comp = {
1074
            { 0, 1, 1, 0, 4 },        /* R */
1075
            { 0, 1, 1, 5, 5 },        /* G */
1076
            { 0, 1, 0, 3, 4 },        /* B */
1077
        },
1078
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1079
    },
1080
    [AV_PIX_FMT_BGR565LE] = {
1081
        .name = "bgr565le",
1082
        .nb_components = 3,
1083
        .log2_chroma_w = 0,
1084
        .log2_chroma_h = 0,
1085
        .comp = {
1086
            { 0, 1, 1, 0, 4 },        /* R */
1087
            { 0, 1, 1, 5, 5 },        /* G */
1088
            { 0, 1, 2, 3, 4 },        /* B */
1089
        },
1090
        .flags = AV_PIX_FMT_FLAG_RGB,
1091
    },
1092
    [AV_PIX_FMT_BGR555BE] = {
1093
        .name = "bgr555be",
1094
        .nb_components = 3,
1095
        .log2_chroma_w = 0,
1096
        .log2_chroma_h = 0,
1097
        .comp = {
1098
            { 0, 1, 1, 0, 4 },       /* R */
1099
            { 0, 1, 1, 5, 4 },       /* G */
1100
            { 0, 1, 0, 2, 4 },       /* B */
1101
        },
1102
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1103
     },
1104
    [AV_PIX_FMT_BGR555LE] = {
1105
        .name = "bgr555le",
1106
        .nb_components = 3,
1107
        .log2_chroma_w = 0,
1108
        .log2_chroma_h = 0,
1109
        .comp = {
1110
            { 0, 1, 1, 0, 4 },        /* R */
1111
            { 0, 1, 1, 5, 4 },        /* G */
1112
            { 0, 1, 2, 2, 4 },        /* B */
1113
        },
1114
        .flags = AV_PIX_FMT_FLAG_RGB,
1115
    },
1116
    [AV_PIX_FMT_BGR444BE] = {
1117
        .name = "bgr444be",
1118
        .nb_components = 3,
1119
        .log2_chroma_w = 0,
1120
        .log2_chroma_h = 0,
1121
        .comp = {
1122
            { 0, 1, 1, 0, 3 },       /* R */
1123
            { 0, 1, 1, 4, 3 },       /* G */
1124
            { 0, 1, 0, 0, 3 },       /* B */
1125
        },
1126
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1127
     },
1128
    [AV_PIX_FMT_BGR444LE] = {
1129
        .name = "bgr444le",
1130
        .nb_components = 3,
1131
        .log2_chroma_w = 0,
1132
        .log2_chroma_h = 0,
1133
        .comp = {
1134
            { 0, 1, 1, 0, 3 },        /* R */
1135
            { 0, 1, 1, 4, 3 },        /* G */
1136
            { 0, 1, 2, 0, 3 },        /* B */
1137
        },
1138
        .flags = AV_PIX_FMT_FLAG_RGB,
1139
    },
1140
    [AV_PIX_FMT_VAAPI_MOCO] = {
1141
        .name = "vaapi_moco",
1142
        .log2_chroma_w = 1,
1143
        .log2_chroma_h = 1,
1144
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1145
    },
1146
    [AV_PIX_FMT_VAAPI_IDCT] = {
1147
        .name = "vaapi_idct",
1148
        .log2_chroma_w = 1,
1149
        .log2_chroma_h = 1,
1150
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1151
    },
1152
    [AV_PIX_FMT_VAAPI_VLD] = {
1153
        .name = "vaapi_vld",
1154
        .log2_chroma_w = 1,
1155
        .log2_chroma_h = 1,
1156
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1157
    },
1158
    [AV_PIX_FMT_YUV420P9LE] = {
1159
        .name = "yuv420p9le",
1160
        .nb_components = 3,
1161
        .log2_chroma_w = 1,
1162
        .log2_chroma_h = 1,
1163
        .comp = {
1164
            { 0, 1, 1, 0, 8 },        /* Y */
1165
            { 1, 1, 1, 0, 8 },        /* U */
1166
            { 2, 1, 1, 0, 8 },        /* V */
1167
        },
1168
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1169
    },
1170
    [AV_PIX_FMT_YUV420P9BE] = {
1171
        .name = "yuv420p9be",
1172
        .nb_components = 3,
1173
        .log2_chroma_w = 1,
1174
        .log2_chroma_h = 1,
1175
        .comp = {
1176
            { 0, 1, 1, 0, 8 },        /* Y */
1177
            { 1, 1, 1, 0, 8 },        /* U */
1178
            { 2, 1, 1, 0, 8 },        /* V */
1179
        },
1180
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1181
    },
1182
    [AV_PIX_FMT_YUV420P10LE] = {
1183
        .name = "yuv420p10le",
1184
        .nb_components = 3,
1185
        .log2_chroma_w = 1,
1186
        .log2_chroma_h = 1,
1187
        .comp = {
1188
            { 0, 1, 1, 0, 9 },        /* Y */
1189
            { 1, 1, 1, 0, 9 },        /* U */
1190
            { 2, 1, 1, 0, 9 },        /* V */
1191
        },
1192
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1193
    },
1194
    [AV_PIX_FMT_YUV420P10BE] = {
1195
        .name = "yuv420p10be",
1196
        .nb_components = 3,
1197
        .log2_chroma_w = 1,
1198
        .log2_chroma_h = 1,
1199
        .comp = {
1200
            { 0, 1, 1, 0, 9 },        /* Y */
1201
            { 1, 1, 1, 0, 9 },        /* U */
1202
            { 2, 1, 1, 0, 9 },        /* V */
1203
        },
1204
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1205
    },
1206
    [AV_PIX_FMT_YUV420P12LE] = {
1207
        .name = "yuv420p12le",
1208
        .nb_components = 3,
1209
        .log2_chroma_w = 1,
1210
        .log2_chroma_h = 1,
1211
        .comp = {
1212
            { 0, 1, 1, 0, 11 },        /* Y */
1213
            { 1, 1, 1, 0, 11 },        /* U */
1214
            { 2, 1, 1, 0, 11 },        /* V */
1215
        },
1216
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1217
    },
1218
    [AV_PIX_FMT_YUV420P12BE] = {
1219
        .name = "yuv420p12be",
1220
        .nb_components = 3,
1221
        .log2_chroma_w = 1,
1222
        .log2_chroma_h = 1,
1223
        .comp = {
1224
            { 0, 1, 1, 0, 11 },        /* Y */
1225
            { 1, 1, 1, 0, 11 },        /* U */
1226
            { 2, 1, 1, 0, 11 },        /* V */
1227
        },
1228
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1229
    },
1230
    [AV_PIX_FMT_YUV420P14LE] = {
1231
        .name = "yuv420p14le",
1232
        .nb_components = 3,
1233
        .log2_chroma_w = 1,
1234
        .log2_chroma_h = 1,
1235
        .comp = {
1236
            { 0, 1, 1, 0, 13 },        /* Y */
1237
            { 1, 1, 1, 0, 13 },        /* U */
1238
            { 2, 1, 1, 0, 13 },        /* V */
1239
        },
1240
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1241
    },
1242
    [AV_PIX_FMT_YUV420P14BE] = {
1243
        .name = "yuv420p14be",
1244
        .nb_components = 3,
1245
        .log2_chroma_w = 1,
1246
        .log2_chroma_h = 1,
1247
        .comp = {
1248
            { 0, 1, 1, 0, 13 },        /* Y */
1249
            { 1, 1, 1, 0, 13 },        /* U */
1250
            { 2, 1, 1, 0, 13 },        /* V */
1251
        },
1252
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1253
    },
1254
    [AV_PIX_FMT_YUV420P16LE] = {
1255
        .name = "yuv420p16le",
1256
        .nb_components = 3,
1257
        .log2_chroma_w = 1,
1258
        .log2_chroma_h = 1,
1259
        .comp = {
1260
            { 0, 1, 1, 0, 15 },        /* Y */
1261
            { 1, 1, 1, 0, 15 },        /* U */
1262
            { 2, 1, 1, 0, 15 },        /* V */
1263
        },
1264
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1265
    },
1266
    [AV_PIX_FMT_YUV420P16BE] = {
1267
        .name = "yuv420p16be",
1268
        .nb_components = 3,
1269
        .log2_chroma_w = 1,
1270
        .log2_chroma_h = 1,
1271
        .comp = {
1272
            { 0, 1, 1, 0, 15 },        /* Y */
1273
            { 1, 1, 1, 0, 15 },        /* U */
1274
            { 2, 1, 1, 0, 15 },        /* V */
1275
        },
1276
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1277
    },
1278
    [AV_PIX_FMT_YUV422P9LE] = {
1279
        .name = "yuv422p9le",
1280
        .nb_components = 3,
1281
        .log2_chroma_w = 1,
1282
        .log2_chroma_h = 0,
1283
        .comp = {
1284
            { 0, 1, 1, 0, 8 },        /* Y */
1285
            { 1, 1, 1, 0, 8 },        /* U */
1286
            { 2, 1, 1, 0, 8 },        /* V */
1287
        },
1288
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1289
    },
1290
    [AV_PIX_FMT_YUV422P9BE] = {
1291
        .name = "yuv422p9be",
1292
        .nb_components = 3,
1293
        .log2_chroma_w = 1,
1294
        .log2_chroma_h = 0,
1295
        .comp = {
1296
            { 0, 1, 1, 0, 8 },        /* Y */
1297
            { 1, 1, 1, 0, 8 },        /* U */
1298
            { 2, 1, 1, 0, 8 },        /* V */
1299
        },
1300
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1301
    },
1302
    [AV_PIX_FMT_YUV422P10LE] = {
1303
        .name = "yuv422p10le",
1304
        .nb_components = 3,
1305
        .log2_chroma_w = 1,
1306
        .log2_chroma_h = 0,
1307
        .comp = {
1308
            { 0, 1, 1, 0, 9 },        /* Y */
1309
            { 1, 1, 1, 0, 9 },        /* U */
1310
            { 2, 1, 1, 0, 9 },        /* V */
1311
        },
1312
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1313
    },
1314
    [AV_PIX_FMT_YUV422P10BE] = {
1315
        .name = "yuv422p10be",
1316
        .nb_components = 3,
1317
        .log2_chroma_w = 1,
1318
        .log2_chroma_h = 0,
1319
        .comp = {
1320
            { 0, 1, 1, 0, 9 },        /* Y */
1321
            { 1, 1, 1, 0, 9 },        /* U */
1322
            { 2, 1, 1, 0, 9 },        /* V */
1323
        },
1324
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1325
    },
1326
    [AV_PIX_FMT_YUV422P12LE] = {
1327
        .name = "yuv422p12le",
1328
        .nb_components = 3,
1329
        .log2_chroma_w = 1,
1330
        .log2_chroma_h = 0,
1331
        .comp = {
1332
            { 0, 1, 1, 0, 11 },        /* Y */
1333
            { 1, 1, 1, 0, 11 },        /* U */
1334
            { 2, 1, 1, 0, 11 },        /* V */
1335
        },
1336
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1337
    },
1338
    [AV_PIX_FMT_YUV422P12BE] = {
1339
        .name = "yuv422p12be",
1340
        .nb_components = 3,
1341
        .log2_chroma_w = 1,
1342
        .log2_chroma_h = 0,
1343
        .comp = {
1344
            { 0, 1, 1, 0, 11 },        /* Y */
1345
            { 1, 1, 1, 0, 11 },        /* U */
1346
            { 2, 1, 1, 0, 11 },        /* V */
1347
        },
1348
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1349
    },
1350
    [AV_PIX_FMT_YUV422P14LE] = {
1351
        .name = "yuv422p14le",
1352
        .nb_components = 3,
1353
        .log2_chroma_w = 1,
1354
        .log2_chroma_h = 0,
1355
        .comp = {
1356
            { 0, 1, 1, 0, 13 },        /* Y */
1357
            { 1, 1, 1, 0, 13 },        /* U */
1358
            { 2, 1, 1, 0, 13 },        /* V */
1359
        },
1360
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1361
    },
1362
    [AV_PIX_FMT_YUV422P14BE] = {
1363
        .name = "yuv422p14be",
1364
        .nb_components = 3,
1365
        .log2_chroma_w = 1,
1366
        .log2_chroma_h = 0,
1367
        .comp = {
1368
            { 0, 1, 1, 0, 13 },        /* Y */
1369
            { 1, 1, 1, 0, 13 },        /* U */
1370
            { 2, 1, 1, 0, 13 },        /* V */
1371
        },
1372
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1373
    },
1374
    [AV_PIX_FMT_YUV422P16LE] = {
1375
        .name = "yuv422p16le",
1376
        .nb_components = 3,
1377
        .log2_chroma_w = 1,
1378
        .log2_chroma_h = 0,
1379
        .comp = {
1380
            { 0, 1, 1, 0, 15 },        /* Y */
1381
            { 1, 1, 1, 0, 15 },        /* U */
1382
            { 2, 1, 1, 0, 15 },        /* V */
1383
        },
1384
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1385
    },
1386
    [AV_PIX_FMT_YUV422P16BE] = {
1387
        .name = "yuv422p16be",
1388
        .nb_components = 3,
1389
        .log2_chroma_w = 1,
1390
        .log2_chroma_h = 0,
1391
        .comp = {
1392
            { 0, 1, 1, 0, 15 },        /* Y */
1393
            { 1, 1, 1, 0, 15 },        /* U */
1394
            { 2, 1, 1, 0, 15 },        /* V */
1395
        },
1396
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1397
    },
1398
    [AV_PIX_FMT_YUV444P16LE] = {
1399
        .name = "yuv444p16le",
1400
        .nb_components = 3,
1401
        .log2_chroma_w = 0,
1402
        .log2_chroma_h = 0,
1403
        .comp = {
1404
            { 0, 1, 1, 0, 15 },        /* Y */
1405
            { 1, 1, 1, 0, 15 },        /* U */
1406
            { 2, 1, 1, 0, 15 },        /* V */
1407
        },
1408
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1409
    },
1410
    [AV_PIX_FMT_YUV444P16BE] = {
1411
        .name = "yuv444p16be",
1412
        .nb_components = 3,
1413
        .log2_chroma_w = 0,
1414
        .log2_chroma_h = 0,
1415
        .comp = {
1416
            { 0, 1, 1, 0, 15 },        /* Y */
1417
            { 1, 1, 1, 0, 15 },        /* U */
1418
            { 2, 1, 1, 0, 15 },        /* V */
1419
        },
1420
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1421
    },
1422
    [AV_PIX_FMT_YUV444P10LE] = {
1423
        .name = "yuv444p10le",
1424
        .nb_components = 3,
1425
        .log2_chroma_w = 0,
1426
        .log2_chroma_h = 0,
1427
        .comp = {
1428
            { 0, 1, 1, 0, 9 },        /* Y */
1429
            { 1, 1, 1, 0, 9 },        /* U */
1430
            { 2, 1, 1, 0, 9 },        /* V */
1431
        },
1432
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1433
    },
1434
    [AV_PIX_FMT_YUV444P10BE] = {
1435
        .name = "yuv444p10be",
1436
        .nb_components = 3,
1437
        .log2_chroma_w = 0,
1438
        .log2_chroma_h = 0,
1439
        .comp = {
1440
            { 0, 1, 1, 0, 9 },        /* Y */
1441
            { 1, 1, 1, 0, 9 },        /* U */
1442
            { 2, 1, 1, 0, 9 },        /* V */
1443
        },
1444
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1445
    },
1446
    [AV_PIX_FMT_YUV444P9LE] = {
1447
        .name = "yuv444p9le",
1448
        .nb_components = 3,
1449
        .log2_chroma_w = 0,
1450
        .log2_chroma_h = 0,
1451
        .comp = {
1452
            { 0, 1, 1, 0, 8 },        /* Y */
1453
            { 1, 1, 1, 0, 8 },        /* U */
1454
            { 2, 1, 1, 0, 8 },        /* V */
1455
        },
1456
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1457
    },
1458
    [AV_PIX_FMT_YUV444P9BE] = {
1459
        .name = "yuv444p9be",
1460
        .nb_components = 3,
1461
        .log2_chroma_w = 0,
1462
        .log2_chroma_h = 0,
1463
        .comp = {
1464
            { 0, 1, 1, 0, 8 },        /* Y */
1465
            { 1, 1, 1, 0, 8 },        /* U */
1466
            { 2, 1, 1, 0, 8 },        /* V */
1467
        },
1468
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1469
    },
1470
    [AV_PIX_FMT_YUV444P12LE] = {
1471
        .name = "yuv444p12le",
1472
        .nb_components = 3,
1473
        .log2_chroma_w = 0,
1474
        .log2_chroma_h = 0,
1475
        .comp = {
1476
            { 0, 1, 1, 0, 11 },        /* Y */
1477
            { 1, 1, 1, 0, 11 },        /* U */
1478
            { 2, 1, 1, 0, 11 },        /* V */
1479
        },
1480
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1481
    },
1482
    [AV_PIX_FMT_YUV444P12BE] = {
1483
        .name = "yuv444p12be",
1484
        .nb_components = 3,
1485
        .log2_chroma_w = 0,
1486
        .log2_chroma_h = 0,
1487
        .comp = {
1488
            { 0, 1, 1, 0, 11 },        /* Y */
1489
            { 1, 1, 1, 0, 11 },        /* U */
1490
            { 2, 1, 1, 0, 11 },        /* V */
1491
        },
1492
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1493
    },
1494
    [AV_PIX_FMT_YUV444P14LE] = {
1495
        .name = "yuv444p14le",
1496
        .nb_components = 3,
1497
        .log2_chroma_w = 0,
1498
        .log2_chroma_h = 0,
1499
        .comp = {
1500
            { 0, 1, 1, 0, 13 },        /* Y */
1501
            { 1, 1, 1, 0, 13 },        /* U */
1502
            { 2, 1, 1, 0, 13 },        /* V */
1503
        },
1504
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1505
    },
1506
    [AV_PIX_FMT_YUV444P14BE] = {
1507
        .name = "yuv444p14be",
1508
        .nb_components = 3,
1509
        .log2_chroma_w = 0,
1510
        .log2_chroma_h = 0,
1511
        .comp = {
1512
            { 0, 1, 1, 0, 13 },        /* Y */
1513
            { 1, 1, 1, 0, 13 },        /* U */
1514
            { 2, 1, 1, 0, 13 },        /* V */
1515
        },
1516
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1517
    },
1518
    [AV_PIX_FMT_DXVA2_VLD] = {
1519
        .name = "dxva2_vld",
1520
        .log2_chroma_w = 1,
1521
        .log2_chroma_h = 1,
1522
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1523
    },
1524
    [AV_PIX_FMT_VDA_VLD] = {
1525
        .name = "vda_vld",
1526
        .log2_chroma_w = 1,
1527
        .log2_chroma_h = 1,
1528
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1529
    },
1530
    [AV_PIX_FMT_GRAY8A] = {
1531
        .name = "gray8a",
1532
        .nb_components = 2,
1533
        .comp = {
1534
            { 0, 1, 1, 0, 7 },        /* Y */
1535
            { 0, 1, 2, 0, 7 },        /* A */
1536
        },
1537
        .flags = AV_PIX_FMT_FLAG_ALPHA,
1538
    },
1539
    [AV_PIX_FMT_GBRP] = {
1540
        .name = "gbrp",
1541
        .nb_components = 3,
1542
        .log2_chroma_w = 0,
1543
        .log2_chroma_h = 0,
1544
        .comp = {
1545
            { 2, 0, 1, 0, 7 },        /* R */
1546
            { 0, 0, 1, 0, 7 },        /* G */
1547
            { 1, 0, 1, 0, 7 },        /* B */
1548
        },
1549
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1550
    },
1551
    [AV_PIX_FMT_GBRP9LE] = {
1552
        .name = "gbrp9le",
1553
        .nb_components = 3,
1554
        .log2_chroma_w = 0,
1555
        .log2_chroma_h = 0,
1556
        .comp = {
1557
            { 2, 1, 1, 0, 8 },        /* R */
1558
            { 0, 1, 1, 0, 8 },        /* G */
1559
            { 1, 1, 1, 0, 8 },        /* B */
1560
        },
1561
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1562
    },
1563
    [AV_PIX_FMT_GBRP9BE] = {
1564
        .name = "gbrp9be",
1565
        .nb_components = 3,
1566
        .log2_chroma_w = 0,
1567
        .log2_chroma_h = 0,
1568
        .comp = {
1569
            { 2, 1, 1, 0, 8 },        /* R */
1570
            { 0, 1, 1, 0, 8 },        /* G */
1571
            { 1, 1, 1, 0, 8 },        /* B */
1572
        },
1573
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1574
    },
1575
    [AV_PIX_FMT_GBRP10LE] = {
1576
        .name = "gbrp10le",
1577
        .nb_components = 3,
1578
        .log2_chroma_w = 0,
1579
        .log2_chroma_h = 0,
1580
        .comp = {
1581
            { 2, 1, 1, 0, 9 },        /* R */
1582
            { 0, 1, 1, 0, 9 },        /* G */
1583
            { 1, 1, 1, 0, 9 },        /* B */
1584
        },
1585
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1586
    },
1587
    [AV_PIX_FMT_GBRP10BE] = {
1588
        .name = "gbrp10be",
1589
        .nb_components = 3,
1590
        .log2_chroma_w = 0,
1591
        .log2_chroma_h = 0,
1592
        .comp = {
1593
            { 2, 1, 1, 0, 9 },        /* R */
1594
            { 0, 1, 1, 0, 9 },        /* G */
1595
            { 1, 1, 1, 0, 9 },        /* B */
1596
        },
1597
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1598
    },
1599
    [AV_PIX_FMT_GBRP12LE] = {
1600
        .name = "gbrp12le",
1601
        .nb_components = 3,
1602
        .log2_chroma_w = 0,
1603
        .log2_chroma_h = 0,
1604
        .comp = {
1605
            { 2, 1, 1, 0, 11 },        /* R */
1606
            { 0, 1, 1, 0, 11 },        /* G */
1607
            { 1, 1, 1, 0, 11 },        /* B */
1608
        },
1609
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1610
    },
1611
    [AV_PIX_FMT_GBRP12BE] = {
1612
        .name = "gbrp12be",
1613
        .nb_components = 3,
1614
        .log2_chroma_w = 0,
1615
        .log2_chroma_h = 0,
1616
        .comp = {
1617
            { 2, 1, 1, 0, 11 },        /* R */
1618
            { 0, 1, 1, 0, 11 },        /* G */
1619
            { 1, 1, 1, 0, 11 },        /* B */
1620
        },
1621
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1622
    },
1623
    [AV_PIX_FMT_GBRP14LE] = {
1624
        .name = "gbrp14le",
1625
        .nb_components = 3,
1626
        .log2_chroma_w = 0,
1627
        .log2_chroma_h = 0,
1628
        .comp = {
1629
            { 2, 1, 1, 0, 13 },        /* R */
1630
            { 0, 1, 1, 0, 13 },        /* G */
1631
            { 1, 1, 1, 0, 13 },        /* B */
1632
        },
1633
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1634
    },
1635
    [AV_PIX_FMT_GBRP14BE] = {
1636
        .name = "gbrp14be",
1637
        .nb_components = 3,
1638
        .log2_chroma_w = 0,
1639
        .log2_chroma_h = 0,
1640
        .comp = {
1641
            { 2, 1, 1, 0, 13 },        /* R */
1642
            { 0, 1, 1, 0, 13 },        /* G */
1643
            { 1, 1, 1, 0, 13 },        /* B */
1644
        },
1645
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1646
    },
1647
    [AV_PIX_FMT_GBRP16LE] = {
1648
        .name = "gbrp16le",
1649
        .nb_components = 3,
1650
        .log2_chroma_w = 0,
1651
        .log2_chroma_h = 0,
1652
        .comp = {
1653
            { 2, 1, 1, 0, 15 },       /* R */
1654
            { 0, 1, 1, 0, 15 },       /* G */
1655
            { 1, 1, 1, 0, 15 },       /* B */
1656
        },
1657
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1658
    },
1659
    [AV_PIX_FMT_GBRP16BE] = {
1660
        .name = "gbrp16be",
1661
        .nb_components = 3,
1662
        .log2_chroma_w = 0,
1663
        .log2_chroma_h = 0,
1664
        .comp = {
1665
            { 2, 1, 1, 0, 15 },       /* R */
1666
            { 0, 1, 1, 0, 15 },       /* G */
1667
            { 1, 1, 1, 0, 15 },       /* B */
1668
        },
1669
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1670
    },
1671
    [AV_PIX_FMT_GBRAP] = {
1672
        .name = "gbrap",
1673
        .nb_components = 4,
1674
        .log2_chroma_w = 0,
1675
        .log2_chroma_h = 0,
1676
        .comp = {
1677
            { 2, 0, 1, 0, 7 },        /* R */
1678
            { 0, 0, 1, 0, 7 },        /* G */
1679
            { 1, 0, 1, 0, 7 },        /* B */
1680
            { 3, 0, 1, 0, 7 },        /* A */
1681
        },
1682
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1683
    },
1684
    [AV_PIX_FMT_GBRAP16LE] = {
1685
        .name = "gbrap16le",
1686
        .nb_components = 4,
1687
        .log2_chroma_w = 0,
1688
        .log2_chroma_h = 0,
1689
        .comp = {
1690
            { 2, 1, 1, 0, 15 },       /* R */
1691
            { 0, 1, 1, 0, 15 },       /* G */
1692
            { 1, 1, 1, 0, 15 },       /* B */
1693
            { 3, 1, 1, 0, 15 },       /* A */
1694
        },
1695
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1696
    },
1697
    [AV_PIX_FMT_GBRAP16BE] = {
1698
        .name = "gbrap16be",
1699
        .nb_components = 4,
1700
        .log2_chroma_w = 0,
1701
        .log2_chroma_h = 0,
1702
        .comp = {
1703
            { 2, 1, 1, 0, 15 },       /* R */
1704
            { 0, 1, 1, 0, 15 },       /* G */
1705
            { 1, 1, 1, 0, 15 },       /* B */
1706
            { 3, 1, 1, 0, 15 },       /* A */
1707
        },
1708
        .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1709
    },
1710
    [AV_PIX_FMT_VDPAU] = {
1711
        .name = "vdpau",
1712
        .log2_chroma_w = 1,
1713
        .log2_chroma_h = 1,
1714
        .flags = AV_PIX_FMT_FLAG_HWACCEL,
1715
    },
1716
    [AV_PIX_FMT_XYZ12LE] = {
1717
        .name = "xyz12le",
1718
        .nb_components = 3,
1719
        .log2_chroma_w = 0,
1720
        .log2_chroma_h = 0,
1721
        .comp = {
1722
            { 0, 5, 1, 4, 11 },       /* X */
1723
            { 0, 5, 3, 4, 11 },       /* Y */
1724
            { 0, 5, 5, 4, 11 },       /* Z */
1725
      },
1726
      /*.flags = -- not used*/
1727
    },
1728
    [AV_PIX_FMT_XYZ12BE] = {
1729
        .name = "xyz12be",
1730
        .nb_components = 3,
1731
        .log2_chroma_w = 0,
1732
        .log2_chroma_h = 0,
1733
        .comp = {
1734
            { 0, 5, 1, 4, 11 },       /* X */
1735
            { 0, 5, 3, 4, 11 },       /* Y */
1736
            { 0, 5, 5, 4, 11 },       /* Z */
1737
       },
1738
        .flags = AV_PIX_FMT_FLAG_BE,
1739
    },
1740
 
1741
#define BAYER8_DESC_COMMON \
1742
        .nb_components= 3, \
1743
        .log2_chroma_w= 0, \
1744
        .log2_chroma_h= 0, \
1745
        .comp = {          \
1746
            {0,0,0,0,1},   \
1747
            {0,0,0,0,3},   \
1748
            {0,0,0,0,1},   \
1749
        },                 \
1750
 
1751
#define BAYER16_DESC_COMMON \
1752
        .nb_components= 3, \
1753
        .log2_chroma_w= 0, \
1754
        .log2_chroma_h= 0, \
1755
        .comp = {          \
1756
            {0,1,0,0, 3},  \
1757
            {0,1,0,0, 7},  \
1758
            {0,1,0,0, 3},  \
1759
        },                 \
1760
 
1761
    [AV_PIX_FMT_BAYER_BGGR8] = {
1762
        .name = "bayer_bggr8",
1763
        BAYER8_DESC_COMMON
1764
    },
1765
    [AV_PIX_FMT_BAYER_BGGR16LE] = {
1766
        .name = "bayer_bggr16le",
1767
        BAYER16_DESC_COMMON
1768
    },
1769
    [AV_PIX_FMT_BAYER_BGGR16BE] = {
1770
        .name = "bayer_bggr16be",
1771
        BAYER16_DESC_COMMON
1772
    },
1773
    [AV_PIX_FMT_BAYER_RGGB8] = {
1774
        .name = "bayer_rggb8",
1775
        BAYER8_DESC_COMMON
1776
    },
1777
    [AV_PIX_FMT_BAYER_RGGB16LE] = {
1778
        .name = "bayer_rggb16le",
1779
        BAYER16_DESC_COMMON
1780
    },
1781
    [AV_PIX_FMT_BAYER_RGGB16BE] = {
1782
        .name = "bayer_rggb16be",
1783
        BAYER16_DESC_COMMON
1784
    },
1785
    [AV_PIX_FMT_BAYER_GBRG8] = {
1786
        .name = "bayer_gbrg8",
1787
        BAYER8_DESC_COMMON
1788
    },
1789
    [AV_PIX_FMT_BAYER_GBRG16LE] = {
1790
        .name = "bayer_gbrg16le",
1791
        BAYER16_DESC_COMMON
1792
    },
1793
    [AV_PIX_FMT_BAYER_GBRG16BE] = {
1794
        .name = "bayer_gbrg16be",
1795
        BAYER16_DESC_COMMON
1796
    },
1797
    [AV_PIX_FMT_BAYER_GRBG8] = {
1798
        .name = "bayer_grbg8",
1799
        BAYER8_DESC_COMMON
1800
    },
1801
    [AV_PIX_FMT_BAYER_GRBG16LE] = {
1802
        .name = "bayer_grbg16le",
1803
        BAYER16_DESC_COMMON
1804
    },
1805
    [AV_PIX_FMT_BAYER_GRBG16BE] = {
1806
        .name = "bayer_grbg16be",
1807
        BAYER16_DESC_COMMON
1808
    },
1809
    [AV_PIX_FMT_NV16] = {
1810
        .name = "nv16",
1811
        .nb_components = 3,
1812
        .log2_chroma_w = 1,
1813
        .log2_chroma_h = 0,
1814
        .comp = {
1815
            { 0, 0, 1, 0, 7 },        /* Y */
1816
            { 1, 1, 1, 0, 7 },        /* U */
1817
            { 1, 1, 2, 0, 7 },        /* V */
1818
        },
1819
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1820
    },
1821
    [AV_PIX_FMT_NV20LE] = {
1822
        .name = "nv20le",
1823
        .nb_components = 3,
1824
        .log2_chroma_w = 1,
1825
        .log2_chroma_h = 0,
1826
        .comp = {
1827
            { 0, 1, 1, 0, 9 },        /* Y */
1828
            { 1, 3, 1, 0, 9 },        /* U */
1829
            { 1, 3, 3, 0, 9 },        /* V */
1830
        },
1831
        .flags = AV_PIX_FMT_FLAG_PLANAR,
1832
    },
1833
    [AV_PIX_FMT_NV20BE] = {
1834
        .name = "nv20be",
1835
        .nb_components = 3,
1836
        .log2_chroma_w = 1,
1837
        .log2_chroma_h = 0,
1838
        .comp = {
1839
            { 0, 1, 1, 0, 9 },        /* Y */
1840
            { 1, 3, 1, 0, 9 },        /* U */
1841
            { 1, 3, 3, 0, 9 },        /* V */
1842
        },
1843
        .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
1844
    },
1845
};
1846
 
1847
FF_DISABLE_DEPRECATION_WARNINGS
1848
static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1849
{
1850
    enum AVPixelFormat pix_fmt;
1851
 
1852
    for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1853
        if (av_pix_fmt_descriptors[pix_fmt].name &&
1854
            !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1855
            return pix_fmt;
1856
 
1857
    return AV_PIX_FMT_NONE;
1858
}
1859
 
1860
const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
1861
{
1862
    return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1863
        av_pix_fmt_descriptors[pix_fmt].name : NULL;
1864
}
1865
 
1866
#if HAVE_BIGENDIAN
1867
#   define X_NE(be, le) be
1868
#else
1869
#   define X_NE(be, le) le
1870
#endif
1871
 
1872
enum AVPixelFormat av_get_pix_fmt(const char *name)
1873
{
1874
    enum AVPixelFormat pix_fmt;
1875
 
1876
    if (!strcmp(name, "rgb32"))
1877
        name = X_NE("argb", "bgra");
1878
    else if (!strcmp(name, "bgr32"))
1879
        name = X_NE("abgr", "rgba");
1880
 
1881
    pix_fmt = get_pix_fmt_internal(name);
1882
    if (pix_fmt == AV_PIX_FMT_NONE) {
1883
        char name2[32];
1884
 
1885
        snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1886
        pix_fmt = get_pix_fmt_internal(name2);
1887
    }
1888
    return pix_fmt;
1889
}
1890
 
1891
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1892
{
1893
    int c, bits = 0;
1894
    int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1895
 
1896
    for (c = 0; c < pixdesc->nb_components; c++) {
1897
        int s = c == 1 || c == 2 ? 0 : log2_pixels;
1898
        bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1899
    }
1900
 
1901
    return bits >> log2_pixels;
1902
}
1903
 
1904
int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1905
{
1906
    int c, bits = 0;
1907
    int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1908
    int steps[4] = {0};
1909
 
1910
    for (c = 0; c < pixdesc->nb_components; c++) {
1911
        const AVComponentDescriptor *comp = &pixdesc->comp[c];
1912
        int s = c == 1 || c == 2 ? 0 : log2_pixels;
1913
        steps[comp->plane] = (comp->step_minus1 + 1) << s;
1914
    }
1915
    for (c = 0; c < 4; c++)
1916
        bits += steps[c];
1917
 
1918
    if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
1919
        bits *= 8;
1920
 
1921
    return bits >> log2_pixels;
1922
}
1923
 
1924
char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1925
{
1926
    /* print header */
1927
    if (pix_fmt < 0) {
1928
       snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1929
    } else {
1930
        const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1931
        snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1932
                 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1933
    }
1934
 
1935
    return buf;
1936
}
1937
 
1938
const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
1939
{
1940
    if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1941
        return NULL;
1942
    return &av_pix_fmt_descriptors[pix_fmt];
1943
}
1944
 
1945
const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
1946
{
1947
    if (!prev)
1948
        return &av_pix_fmt_descriptors[0];
1949
    while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1950
        prev++;
1951
        if (prev->name)
1952
            return prev;
1953
    }
1954
    return NULL;
1955
}
1956
 
1957
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
1958
{
1959
    if (desc < av_pix_fmt_descriptors ||
1960
        desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1961
        return AV_PIX_FMT_NONE;
1962
 
1963
    return desc - av_pix_fmt_descriptors;
1964
}
1965
FF_ENABLE_DEPRECATION_WARNINGS
1966
 
1967
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
1968
                                     int *h_shift, int *v_shift)
1969
{
1970
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1971
    if (!desc)
1972
        return AVERROR(ENOSYS);
1973
    *h_shift = desc->log2_chroma_w;
1974
    *v_shift = desc->log2_chroma_h;
1975
 
1976
    return 0;
1977
}
1978
 
1979
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
1980
{
1981
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1982
    int i, planes[4] = { 0 }, ret = 0;
1983
 
1984
    if (!desc)
1985
        return AVERROR(EINVAL);
1986
 
1987
    for (i = 0; i < desc->nb_components; i++)
1988
        planes[desc->comp[i].plane] = 1;
1989
    for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
1990
        ret += planes[i];
1991
    return ret;
1992
}
1993
 
1994
void ff_check_pixfmt_descriptors(void){
1995
    int i, j;
1996
 
1997
    for (i=0; i
1998
        const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
1999
        uint8_t fill[4][8+6+3] = {{0}};
2000
        uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2001
        int linesize[4] = {0,0,0,0};
2002
        uint16_t tmp[2];
2003
 
2004
        if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2005
            continue;
2006
//         av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2007
        av_assert0(d->log2_chroma_w <= 3);
2008
        av_assert0(d->log2_chroma_h <= 3);
2009
        av_assert0(d->nb_components <= 4);
2010
        av_assert0(d->name && d->name[0]);
2011
        av_assert0((d->nb_components==4 || d->nb_components==2) == !!(d->flags & AV_PIX_FMT_FLAG_ALPHA));
2012
        av_assert2(av_get_pix_fmt(d->name) == i);
2013
 
2014
        for (j=0; jcomp); j++) {
2015
            const AVComponentDescriptor *c = &d->comp[j];
2016
            if(j>=d->nb_components) {
2017
                av_assert0(!c->plane && !c->step_minus1 && !c->offset_plus1 && !c->shift && !c->depth_minus1);
2018
                continue;
2019
            }
2020
            if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2021
                av_assert0(c->step_minus1 >= c->depth_minus1);
2022
            } else {
2023
                av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
2024
            }
2025
            if (!strncmp(d->name, "bayer_", 6))
2026
                continue;
2027
            av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2028
            av_assert0(tmp[0] == 0 && tmp[1] == 0);
2029
            tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
2030
            av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2031
        }
2032
    }
2033
}
2034
 
2035
 
2036
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2037
{
2038
    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2039
    char name[16];
2040
    int i;
2041
 
2042
    if (!desc || strlen(desc->name) < 2)
2043
        return AV_PIX_FMT_NONE;
2044
    av_strlcpy(name, desc->name, sizeof(name));
2045
    i = strlen(name) - 2;
2046
    if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2047
        return AV_PIX_FMT_NONE;
2048
 
2049
    name[i] ^= 'b' ^ 'l';
2050
 
2051
    return get_pix_fmt_internal(name);
2052
}