]> git.sesse.net Git - ffmpeg/blob - libavutil/pixdesc.c
Merge commit '3559fb97c459c88b4f1d0eef80d55933d3b7fabe'
[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
1742 FF_DISABLE_DEPRECATION_WARNINGS
1743 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1744 {
1745     enum AVPixelFormat pix_fmt;
1746
1747     for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1748         if (av_pix_fmt_descriptors[pix_fmt].name &&
1749             !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1750             return pix_fmt;
1751
1752     return AV_PIX_FMT_NONE;
1753 }
1754
1755 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
1756 {
1757     return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1758         av_pix_fmt_descriptors[pix_fmt].name : NULL;
1759 }
1760
1761 #if HAVE_BIGENDIAN
1762 #   define X_NE(be, le) be
1763 #else
1764 #   define X_NE(be, le) le
1765 #endif
1766
1767 enum AVPixelFormat av_get_pix_fmt(const char *name)
1768 {
1769     enum AVPixelFormat pix_fmt;
1770
1771     if (!strcmp(name, "rgb32"))
1772         name = X_NE("argb", "bgra");
1773     else if (!strcmp(name, "bgr32"))
1774         name = X_NE("abgr", "rgba");
1775
1776     pix_fmt = get_pix_fmt_internal(name);
1777     if (pix_fmt == AV_PIX_FMT_NONE) {
1778         char name2[32];
1779
1780         snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1781         pix_fmt = get_pix_fmt_internal(name2);
1782     }
1783     return pix_fmt;
1784 }
1785
1786 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1787 {
1788     int c, bits = 0;
1789     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1790
1791     for (c = 0; c < pixdesc->nb_components; c++) {
1792         int s = c == 1 || c == 2 ? 0 : log2_pixels;
1793         bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1794     }
1795
1796     return bits >> log2_pixels;
1797 }
1798
1799 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1800 {
1801     int c, bits = 0;
1802     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1803     int steps[4] = {0};
1804
1805     for (c = 0; c < pixdesc->nb_components; c++) {
1806         const AVComponentDescriptor *comp = &pixdesc->comp[c];
1807         int s = c == 1 || c == 2 ? 0 : log2_pixels;
1808         steps[comp->plane] = (comp->step_minus1 + 1) << s;
1809     }
1810     for (c = 0; c < 4; c++)
1811         bits += steps[c];
1812
1813     if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
1814         bits *= 8;
1815
1816     return bits >> log2_pixels;
1817 }
1818
1819 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1820 {
1821     /* print header */
1822     if (pix_fmt < 0) {
1823        snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1824     } else {
1825         const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1826         snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1827                  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1828     }
1829
1830     return buf;
1831 }
1832
1833 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
1834 {
1835     if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1836         return NULL;
1837     return &av_pix_fmt_descriptors[pix_fmt];
1838 }
1839
1840 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
1841 {
1842     if (!prev)
1843         return &av_pix_fmt_descriptors[0];
1844     while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1845         prev++;
1846         if (prev->name)
1847             return prev;
1848     }
1849     return NULL;
1850 }
1851
1852 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
1853 {
1854     if (desc < av_pix_fmt_descriptors ||
1855         desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1856         return AV_PIX_FMT_NONE;
1857
1858     return desc - av_pix_fmt_descriptors;
1859 }
1860 FF_ENABLE_DEPRECATION_WARNINGS
1861
1862 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
1863                                      int *h_shift, int *v_shift)
1864 {
1865     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1866     if (!desc)
1867         return AVERROR(ENOSYS);
1868     *h_shift = desc->log2_chroma_w;
1869     *v_shift = desc->log2_chroma_h;
1870
1871     return 0;
1872 }
1873
1874 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
1875 {
1876     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1877     int i, planes[4] = { 0 }, ret = 0;
1878
1879     if (!desc)
1880         return AVERROR(EINVAL);
1881
1882     for (i = 0; i < desc->nb_components; i++)
1883         planes[desc->comp[i].plane] = 1;
1884     for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
1885         ret += planes[i];
1886     return ret;
1887 }
1888
1889 void ff_check_pixfmt_descriptors(void){
1890     int i, j;
1891
1892     for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
1893         const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
1894         uint8_t fill[4][8+6+3] = {{0}};
1895         uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
1896         int linesize[4] = {0,0,0,0};
1897         uint16_t tmp[2];
1898
1899         if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
1900             continue;
1901 //         av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
1902         av_assert0(d->log2_chroma_w <= 3);
1903         av_assert0(d->log2_chroma_h <= 3);
1904         av_assert0(d->nb_components <= 4);
1905         av_assert0(d->name && d->name[0]);
1906         av_assert0((d->nb_components==4 || d->nb_components==2) == !!(d->flags & AV_PIX_FMT_FLAG_ALPHA));
1907         av_assert2(av_get_pix_fmt(d->name) == i);
1908
1909         for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
1910             const AVComponentDescriptor *c = &d->comp[j];
1911             if(j>=d->nb_components) {
1912                 av_assert0(!c->plane && !c->step_minus1 && !c->offset_plus1 && !c->shift && !c->depth_minus1);
1913                 continue;
1914             }
1915             if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
1916                 av_assert0(c->step_minus1 >= c->depth_minus1);
1917             } else {
1918                 av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
1919             }
1920             av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
1921             av_assert0(tmp[0] == 0 && tmp[1] == 0);
1922             tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
1923             av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
1924         }
1925     }
1926 }
1927
1928
1929 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
1930 {
1931     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1932     char name[16];
1933     int i;
1934
1935     if (!desc || strlen(desc->name) < 2)
1936         return AV_PIX_FMT_NONE;
1937     av_strlcpy(name, desc->name, sizeof(name));
1938     i = strlen(name) - 2;
1939     if (strcmp(name + i, "be") && strcmp(name + i, "le"))
1940         return AV_PIX_FMT_NONE;
1941
1942     name[i] ^= 'b' ^ 'l';
1943
1944     return get_pix_fmt_internal(name);
1945 }