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