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