]> git.sesse.net Git - ffmpeg/blob - libavutil/pixdesc.c
Merge commit '15748773bf33c110e6e2e9526c7ba5478274c74c'
[ffmpeg] / libavutil / pixdesc.c
1 /*
2  * pixel format descriptor
3  * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
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 <stdio.h>
23 #include <string.h>
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<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); 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; j<FF_ARRAY_ELEMS(d->comp); 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 }