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