]> git.sesse.net Git - ffmpeg/blob - libavutil/pixdesc.c
a4ab93c975b83b8f8b7184d322fddd56eaebdafb
[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 "avstring.h"
27 #include "common.h"
28 #include "pixfmt.h"
29 #include "pixdesc.h"
30 #include "internal.h"
31 #include "intreadwrite.h"
32 #include "version.h"
33
34 void av_read_image_line2(void *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                         int dst_element_size)
40 {
41     AVComponentDescriptor comp = desc->comp[c];
42     int plane = comp.plane;
43     int depth = comp.depth;
44     unsigned mask  = (1ULL << depth) - 1;
45     int shift = comp.shift;
46     int step  = comp.step;
47     int flags = desc->flags;
48     uint16_t *dst16 = dst;
49     uint32_t *dst32 = dst;
50
51     if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
52         int skip = x * step + comp.offset;
53         const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
54         int shift = 8 - depth - (skip & 7);
55
56         while (w--) {
57             int val = (*p >> shift) & mask;
58             if (read_pal_component)
59                 val = data[1][4*val + c];
60             shift -= step;
61             p -= shift >> 3;
62             shift &= 7;
63             if (dst_element_size == 4) *dst32++ = val;
64             else                       *dst16++ = val;
65         }
66     } else {
67         const uint8_t *p = data[plane] + y * linesize[plane] +
68                            x * step + comp.offset;
69         int is_8bit = shift + depth <= 8;
70         int is_16bit= shift + depth <=16;
71
72         if (is_8bit)
73             p += !!(flags & AV_PIX_FMT_FLAG_BE);
74
75         while (w--) {
76             unsigned val;
77             if     (is_8bit)  val = *p;
78             else if(is_16bit) val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
79             else              val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB32(p) : AV_RL32(p);
80             val = (val >> shift) & mask;
81             if (read_pal_component)
82                 val = data[1][4 * val + c];
83             p += step;
84             if (dst_element_size == 4) *dst32++ = val;
85             else                       *dst16++ = val;
86         }
87     }
88 }
89
90 void av_read_image_line(uint16_t *dst,
91                         const uint8_t *data[4], const int linesize[4],
92                         const AVPixFmtDescriptor *desc,
93                         int x, int y, int c, int w,
94                         int read_pal_component)
95 {
96     av_read_image_line2(dst, data, linesize, desc,x, y, c, w,
97                         read_pal_component,
98                         2);
99 }
100
101 void av_write_image_line2(const void *src,
102                          uint8_t *data[4], const int linesize[4],
103                          const AVPixFmtDescriptor *desc,
104                          int x, int y, int c, int w, int src_element_size)
105 {
106     AVComponentDescriptor comp = desc->comp[c];
107     int plane = comp.plane;
108     int depth = comp.depth;
109     int step  = comp.step;
110     int flags = desc->flags;
111     const uint32_t *src32 = src;
112     const uint16_t *src16 = src;
113
114     if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
115         int skip = x * step + comp.offset;
116         uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
117         int shift = 8 - depth - (skip & 7);
118
119         while (w--) {
120             *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift;
121             shift -= step;
122             p -= shift >> 3;
123             shift &= 7;
124         }
125     } else {
126         int shift = comp.shift;
127         uint8_t *p = data[plane] + y * linesize[plane] +
128                      x * step + comp.offset;
129
130         if (shift + depth <= 8) {
131             p += !!(flags & AV_PIX_FMT_FLAG_BE);
132             while (w--) {
133                 *p |= ((src_element_size == 4 ? *src32++ : *src16++) << shift);
134                 p += step;
135             }
136         } else {
137             while (w--) {
138                 unsigned s = (src_element_size == 4 ? *src32++ : *src16++);
139                 if (shift + depth <= 16) {
140                     if (flags & AV_PIX_FMT_FLAG_BE) {
141                         uint16_t val = AV_RB16(p) | (s << shift);
142                         AV_WB16(p, val);
143                     } else {
144                         uint16_t val = AV_RL16(p) | (s << shift);
145                         AV_WL16(p, val);
146                     }
147                 } else {
148                     if (flags & AV_PIX_FMT_FLAG_BE) {
149                         uint32_t val = AV_RB32(p) | (s << shift);
150                         AV_WB32(p, val);
151                     } else {
152                         uint32_t val = AV_RL32(p) | (s << shift);
153                         AV_WL32(p, val);
154                     }
155                 }
156                 p += step;
157             }
158         }
159     }
160 }
161
162 void av_write_image_line(const uint16_t *src,
163                          uint8_t *data[4], const int linesize[4],
164                          const AVPixFmtDescriptor *desc,
165                          int x, int y, int c, int w)
166 {
167     av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2);
168 }
169
170 #if FF_API_PLUS1_MINUS1
171 FF_DISABLE_DEPRECATION_WARNINGS
172 #endif
173 static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
174     [AV_PIX_FMT_YUV420P] = {
175         .name = "yuv420p",
176         .nb_components = 3,
177         .log2_chroma_w = 1,
178         .log2_chroma_h = 1,
179         .comp = {
180             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
181             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
182             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
183         },
184         .flags = AV_PIX_FMT_FLAG_PLANAR,
185     },
186     [AV_PIX_FMT_YUYV422] = {
187         .name = "yuyv422",
188         .nb_components = 3,
189         .log2_chroma_w = 1,
190         .log2_chroma_h = 0,
191         .comp = {
192             { 0, 2, 0, 0, 8, 1, 7, 1 },        /* Y */
193             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* U */
194             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* V */
195         },
196     },
197     [AV_PIX_FMT_YVYU422] = {
198         .name = "yvyu422",
199         .nb_components = 3,
200         .log2_chroma_w = 1,
201         .log2_chroma_h = 0,
202         .comp = {
203             { 0, 2, 0, 0, 8, 1, 7, 1 },        /* Y */
204             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* U */
205             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* V */
206         },
207     },
208     [AV_PIX_FMT_Y210LE] = {
209         .name = "y210le",
210         .nb_components = 3,
211         .log2_chroma_w = 1,
212         .log2_chroma_h = 0,
213         .comp = {
214             { 0, 4, 0, 6, 10, 3, 9, 1 },        /* Y */
215             { 0, 8, 2, 6, 10, 7, 9, 3 },        /* U */
216             { 0, 8, 6, 6, 10, 7, 9, 7 },        /* V */
217         },
218     },
219     [AV_PIX_FMT_Y210BE] = {
220         .name = "y210be",
221         .nb_components = 3,
222         .log2_chroma_w = 1,
223         .log2_chroma_h = 0,
224         .comp = {
225             { 0, 4, 0, 6, 10, 3, 9, 1 },        /* Y */
226             { 0, 8, 2, 6, 10, 7, 9, 3 },        /* U */
227             { 0, 8, 6, 6, 10, 7, 9, 7 },        /* V */
228         },
229         .flags = AV_PIX_FMT_FLAG_BE,
230     },
231     [AV_PIX_FMT_RGB24] = {
232         .name = "rgb24",
233         .nb_components = 3,
234         .log2_chroma_w = 0,
235         .log2_chroma_h = 0,
236         .comp = {
237             { 0, 3, 0, 0, 8, 2, 7, 1 },        /* R */
238             { 0, 3, 1, 0, 8, 2, 7, 2 },        /* G */
239             { 0, 3, 2, 0, 8, 2, 7, 3 },        /* B */
240         },
241         .flags = AV_PIX_FMT_FLAG_RGB,
242     },
243     [AV_PIX_FMT_BGR24] = {
244         .name = "bgr24",
245         .nb_components = 3,
246         .log2_chroma_w = 0,
247         .log2_chroma_h = 0,
248         .comp = {
249             { 0, 3, 2, 0, 8, 2, 7, 3 },        /* R */
250             { 0, 3, 1, 0, 8, 2, 7, 2 },        /* G */
251             { 0, 3, 0, 0, 8, 2, 7, 1 },        /* B */
252         },
253         .flags = AV_PIX_FMT_FLAG_RGB,
254     },
255     [AV_PIX_FMT_X2RGB10LE] = {
256         .name = "x2rgb10le",
257         .nb_components= 3,
258         .log2_chroma_w= 0,
259         .log2_chroma_h= 0,
260         .comp = {
261             { 0, 4, 2, 4, 10, 3, 9, 2 },       /* R */
262             { 0, 4, 1, 2, 10, 3, 9, 3 },       /* G */
263             { 0, 4, 0, 0, 10, 3, 9, 4 },       /* B */
264         },
265         .flags = AV_PIX_FMT_FLAG_RGB,
266     },
267     [AV_PIX_FMT_X2RGB10BE] = {
268         .name = "x2rgb10be",
269         .nb_components= 3,
270         .log2_chroma_w= 0,
271         .log2_chroma_h= 0,
272         .comp = {
273             { 0, 4, 0, 4, 10, 3, 9, 2 },       /* R */
274             { 0, 4, 1, 2, 10, 3, 9, 3 },       /* G */
275             { 0, 4, 2, 0, 10, 3, 9, 4 },       /* B */
276         },
277         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
278     },
279     [AV_PIX_FMT_YUV422P] = {
280         .name = "yuv422p",
281         .nb_components = 3,
282         .log2_chroma_w = 1,
283         .log2_chroma_h = 0,
284         .comp = {
285             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
286             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
287             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
288         },
289         .flags = AV_PIX_FMT_FLAG_PLANAR,
290     },
291     [AV_PIX_FMT_YUV444P] = {
292         .name = "yuv444p",
293         .nb_components = 3,
294         .log2_chroma_w = 0,
295         .log2_chroma_h = 0,
296         .comp = {
297             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
298             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
299             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
300         },
301         .flags = AV_PIX_FMT_FLAG_PLANAR,
302     },
303     [AV_PIX_FMT_YUV410P] = {
304         .name = "yuv410p",
305         .nb_components = 3,
306         .log2_chroma_w = 2,
307         .log2_chroma_h = 2,
308         .comp = {
309             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
310             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
311             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
312         },
313         .flags = AV_PIX_FMT_FLAG_PLANAR,
314     },
315     [AV_PIX_FMT_YUV411P] = {
316         .name = "yuv411p",
317         .nb_components = 3,
318         .log2_chroma_w = 2,
319         .log2_chroma_h = 0,
320         .comp = {
321             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
322             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
323             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
324         },
325         .flags = AV_PIX_FMT_FLAG_PLANAR,
326     },
327     [AV_PIX_FMT_YUVJ411P] = {
328         .name = "yuvj411p",
329         .nb_components = 3,
330         .log2_chroma_w = 2,
331         .log2_chroma_h = 0,
332         .comp = {
333             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
334             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
335             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
336         },
337         .flags = AV_PIX_FMT_FLAG_PLANAR,
338     },
339     [AV_PIX_FMT_GRAY8] = {
340         .name = "gray",
341         .nb_components = 1,
342         .log2_chroma_w = 0,
343         .log2_chroma_h = 0,
344         .comp = {
345             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
346         },
347         .flags = FF_PSEUDOPAL,
348         .alias = "gray8,y8",
349     },
350     [AV_PIX_FMT_MONOWHITE] = {
351         .name = "monow",
352         .nb_components = 1,
353         .log2_chroma_w = 0,
354         .log2_chroma_h = 0,
355         .comp = {
356             { 0, 1, 0, 0, 1, 0, 0, 1 },        /* Y */
357         },
358         .flags = AV_PIX_FMT_FLAG_BITSTREAM,
359     },
360     [AV_PIX_FMT_MONOBLACK] = {
361         .name = "monob",
362         .nb_components = 1,
363         .log2_chroma_w = 0,
364         .log2_chroma_h = 0,
365         .comp = {
366             { 0, 1, 0, 7, 1, 0, 0, 1 },        /* Y */
367         },
368         .flags = AV_PIX_FMT_FLAG_BITSTREAM,
369     },
370     [AV_PIX_FMT_PAL8] = {
371         .name = "pal8",
372         .nb_components = 1,
373         .log2_chroma_w = 0,
374         .log2_chroma_h = 0,
375         .comp = {
376             { 0, 1, 0, 0, 8, 0, 7, 1 },
377         },
378         .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA,
379     },
380     [AV_PIX_FMT_YUVJ420P] = {
381         .name = "yuvj420p",
382         .nb_components = 3,
383         .log2_chroma_w = 1,
384         .log2_chroma_h = 1,
385         .comp = {
386             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
387             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
388             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
389         },
390         .flags = AV_PIX_FMT_FLAG_PLANAR,
391     },
392     [AV_PIX_FMT_YUVJ422P] = {
393         .name = "yuvj422p",
394         .nb_components = 3,
395         .log2_chroma_w = 1,
396         .log2_chroma_h = 0,
397         .comp = {
398             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
399             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
400             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
401         },
402         .flags = AV_PIX_FMT_FLAG_PLANAR,
403     },
404     [AV_PIX_FMT_YUVJ444P] = {
405         .name = "yuvj444p",
406         .nb_components = 3,
407         .log2_chroma_w = 0,
408         .log2_chroma_h = 0,
409         .comp = {
410             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
411             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
412             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
413         },
414         .flags = AV_PIX_FMT_FLAG_PLANAR,
415     },
416     [AV_PIX_FMT_XVMC] = {
417         .name = "xvmc",
418         .flags = AV_PIX_FMT_FLAG_HWACCEL,
419     },
420     [AV_PIX_FMT_UYVY422] = {
421         .name = "uyvy422",
422         .nb_components = 3,
423         .log2_chroma_w = 1,
424         .log2_chroma_h = 0,
425         .comp = {
426             { 0, 2, 1, 0, 8, 1, 7, 2 },        /* Y */
427             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* U */
428             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* V */
429         },
430     },
431     [AV_PIX_FMT_UYYVYY411] = {
432         .name = "uyyvyy411",
433         .nb_components = 3,
434         .log2_chroma_w = 2,
435         .log2_chroma_h = 0,
436         .comp = {
437             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* Y */
438             { 0, 6, 0, 0, 8, 5, 7, 1 },        /* U */
439             { 0, 6, 3, 0, 8, 5, 7, 4 },        /* V */
440         },
441     },
442     [AV_PIX_FMT_BGR8] = {
443         .name = "bgr8",
444         .nb_components = 3,
445         .log2_chroma_w = 0,
446         .log2_chroma_h = 0,
447         .comp = {
448             { 0, 1, 0, 0, 3, 0, 2, 1 },        /* R */
449             { 0, 1, 0, 3, 3, 0, 2, 1 },        /* G */
450             { 0, 1, 0, 6, 2, 0, 1, 1 },        /* B */
451         },
452         .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
453     },
454     [AV_PIX_FMT_BGR4] = {
455         .name = "bgr4",
456         .nb_components = 3,
457         .log2_chroma_w = 0,
458         .log2_chroma_h = 0,
459         .comp = {
460             { 0, 4, 3, 0, 1, 3, 0, 4 },        /* R */
461             { 0, 4, 1, 0, 2, 3, 1, 2 },        /* G */
462             { 0, 4, 0, 0, 1, 3, 0, 1 },        /* B */
463         },
464         .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
465     },
466     [AV_PIX_FMT_BGR4_BYTE] = {
467         .name = "bgr4_byte",
468         .nb_components = 3,
469         .log2_chroma_w = 0,
470         .log2_chroma_h = 0,
471         .comp = {
472             { 0, 1, 0, 0, 1, 0, 0, 1 },        /* R */
473             { 0, 1, 0, 1, 2, 0, 1, 1 },        /* G */
474             { 0, 1, 0, 3, 1, 0, 0, 1 },        /* B */
475         },
476         .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
477     },
478     [AV_PIX_FMT_RGB8] = {
479         .name = "rgb8",
480         .nb_components = 3,
481         .log2_chroma_w = 0,
482         .log2_chroma_h = 0,
483         .comp = {
484             { 0, 1, 0, 6, 2, 0, 1, 1 },        /* R */
485             { 0, 1, 0, 3, 3, 0, 2, 1 },        /* G */
486             { 0, 1, 0, 0, 3, 0, 2, 1 },        /* B */
487         },
488         .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
489     },
490     [AV_PIX_FMT_RGB4] = {
491         .name = "rgb4",
492         .nb_components = 3,
493         .log2_chroma_w = 0,
494         .log2_chroma_h = 0,
495         .comp = {
496             { 0, 4, 0, 0, 1, 3, 0, 1 },        /* R */
497             { 0, 4, 1, 0, 2, 3, 1, 2 },        /* G */
498             { 0, 4, 3, 0, 1, 3, 0, 4 },        /* B */
499         },
500         .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
501     },
502     [AV_PIX_FMT_RGB4_BYTE] = {
503         .name = "rgb4_byte",
504         .nb_components = 3,
505         .log2_chroma_w = 0,
506         .log2_chroma_h = 0,
507         .comp = {
508             { 0, 1, 0, 3, 1, 0, 0, 1 },        /* R */
509             { 0, 1, 0, 1, 2, 0, 1, 1 },        /* G */
510             { 0, 1, 0, 0, 1, 0, 0, 1 },        /* B */
511         },
512         .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
513     },
514     [AV_PIX_FMT_NV12] = {
515         .name = "nv12",
516         .nb_components = 3,
517         .log2_chroma_w = 1,
518         .log2_chroma_h = 1,
519         .comp = {
520             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
521             { 1, 2, 0, 0, 8, 1, 7, 1 },        /* U */
522             { 1, 2, 1, 0, 8, 1, 7, 2 },        /* V */
523         },
524         .flags = AV_PIX_FMT_FLAG_PLANAR,
525     },
526     [AV_PIX_FMT_NV21] = {
527         .name = "nv21",
528         .nb_components = 3,
529         .log2_chroma_w = 1,
530         .log2_chroma_h = 1,
531         .comp = {
532             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
533             { 1, 2, 1, 0, 8, 1, 7, 2 },        /* U */
534             { 1, 2, 0, 0, 8, 1, 7, 1 },        /* V */
535         },
536         .flags = AV_PIX_FMT_FLAG_PLANAR,
537     },
538     [AV_PIX_FMT_ARGB] = {
539         .name = "argb",
540         .nb_components = 4,
541         .log2_chroma_w = 0,
542         .log2_chroma_h = 0,
543         .comp = {
544             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* R */
545             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* G */
546             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* B */
547             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* A */
548         },
549         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
550     },
551     [AV_PIX_FMT_RGBA] = {
552         .name = "rgba",
553         .nb_components = 4,
554         .log2_chroma_w = 0,
555         .log2_chroma_h = 0,
556         .comp = {
557             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* R */
558             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* G */
559             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* B */
560             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* A */
561         },
562         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
563     },
564     [AV_PIX_FMT_ABGR] = {
565         .name = "abgr",
566         .nb_components = 4,
567         .log2_chroma_w = 0,
568         .log2_chroma_h = 0,
569         .comp = {
570             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* R */
571             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* G */
572             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* B */
573             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* A */
574         },
575         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
576     },
577     [AV_PIX_FMT_BGRA] = {
578         .name = "bgra",
579         .nb_components = 4,
580         .log2_chroma_w = 0,
581         .log2_chroma_h = 0,
582         .comp = {
583             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* R */
584             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* G */
585             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* B */
586             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* A */
587         },
588         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
589     },
590     [AV_PIX_FMT_0RGB] = {
591         .name = "0rgb",
592         .nb_components= 3,
593         .log2_chroma_w= 0,
594         .log2_chroma_h= 0,
595         .comp = {
596             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* R */
597             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* G */
598             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* B */
599         },
600         .flags = AV_PIX_FMT_FLAG_RGB,
601     },
602     [AV_PIX_FMT_RGB0] = {
603         .name = "rgb0",
604         .nb_components= 3,
605         .log2_chroma_w= 0,
606         .log2_chroma_h= 0,
607         .comp = {
608             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* R */
609             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* G */
610             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* B */
611         },
612         .flags = AV_PIX_FMT_FLAG_RGB,
613     },
614     [AV_PIX_FMT_0BGR] = {
615         .name = "0bgr",
616         .nb_components= 3,
617         .log2_chroma_w= 0,
618         .log2_chroma_h= 0,
619         .comp = {
620             { 0, 4, 3, 0, 8, 3, 7, 4 },        /* R */
621             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* G */
622             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* B */
623         },
624         .flags = AV_PIX_FMT_FLAG_RGB,
625     },
626     [AV_PIX_FMT_BGR0] = {
627         .name = "bgr0",
628         .nb_components= 3,
629         .log2_chroma_w= 0,
630         .log2_chroma_h= 0,
631         .comp = {
632             { 0, 4, 2, 0, 8, 3, 7, 3 },        /* R */
633             { 0, 4, 1, 0, 8, 3, 7, 2 },        /* G */
634             { 0, 4, 0, 0, 8, 3, 7, 1 },        /* B */
635         },
636         .flags = AV_PIX_FMT_FLAG_RGB,
637     },
638     [AV_PIX_FMT_GRAY9BE] = {
639         .name = "gray9be",
640         .nb_components = 1,
641         .log2_chroma_w = 0,
642         .log2_chroma_h = 0,
643         .comp = {
644             { 0, 2, 0, 0, 9, 1, 8, 1 },       /* Y */
645         },
646         .flags = AV_PIX_FMT_FLAG_BE,
647         .alias = "y9be",
648     },
649     [AV_PIX_FMT_GRAY9LE] = {
650         .name = "gray9le",
651         .nb_components = 1,
652         .log2_chroma_w = 0,
653         .log2_chroma_h = 0,
654         .comp = {
655             { 0, 2, 0, 0, 9, 1, 8, 1 },       /* Y */
656         },
657         .alias = "y9le",
658     },
659     [AV_PIX_FMT_GRAY10BE] = {
660         .name = "gray10be",
661         .nb_components = 1,
662         .log2_chroma_w = 0,
663         .log2_chroma_h = 0,
664         .comp = {
665             { 0, 2, 0, 0, 10, 1, 9, 1 },       /* Y */
666         },
667         .flags = AV_PIX_FMT_FLAG_BE,
668         .alias = "y10be",
669     },
670     [AV_PIX_FMT_GRAY10LE] = {
671         .name = "gray10le",
672         .nb_components = 1,
673         .log2_chroma_w = 0,
674         .log2_chroma_h = 0,
675         .comp = {
676             { 0, 2, 0, 0, 10, 1, 9, 1 },       /* Y */
677         },
678         .alias = "y10le",
679     },
680     [AV_PIX_FMT_GRAY12BE] = {
681         .name = "gray12be",
682         .nb_components = 1,
683         .log2_chroma_w = 0,
684         .log2_chroma_h = 0,
685         .comp = {
686             { 0, 2, 0, 0, 12, 1, 11, 1 },       /* Y */
687         },
688         .flags = AV_PIX_FMT_FLAG_BE,
689         .alias = "y12be",
690     },
691     [AV_PIX_FMT_GRAY12LE] = {
692         .name = "gray12le",
693         .nb_components = 1,
694         .log2_chroma_w = 0,
695         .log2_chroma_h = 0,
696         .comp = {
697             { 0, 2, 0, 0, 12, 1, 11, 1 },       /* Y */
698         },
699         .alias = "y12le",
700     },
701     [AV_PIX_FMT_GRAY14BE] = {
702         .name = "gray14be",
703         .nb_components = 1,
704         .log2_chroma_w = 0,
705         .log2_chroma_h = 0,
706         .comp = {
707             { 0, 2, 0, 0, 14, 1, 13, 1 },       /* Y */
708         },
709         .flags = AV_PIX_FMT_FLAG_BE,
710         .alias = "y14be",
711     },
712     [AV_PIX_FMT_GRAY14LE] = {
713         .name = "gray14le",
714         .nb_components = 1,
715         .log2_chroma_w = 0,
716         .log2_chroma_h = 0,
717         .comp = {
718             { 0, 2, 0, 0, 14, 1, 13, 1 },       /* Y */
719         },
720         .alias = "y14le",
721     },
722     [AV_PIX_FMT_GRAY16BE] = {
723         .name = "gray16be",
724         .nb_components = 1,
725         .log2_chroma_w = 0,
726         .log2_chroma_h = 0,
727         .comp = {
728             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* Y */
729         },
730         .flags = AV_PIX_FMT_FLAG_BE,
731         .alias = "y16be",
732     },
733     [AV_PIX_FMT_GRAY16LE] = {
734         .name = "gray16le",
735         .nb_components = 1,
736         .log2_chroma_w = 0,
737         .log2_chroma_h = 0,
738         .comp = {
739             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* Y */
740         },
741         .alias = "y16le",
742     },
743     [AV_PIX_FMT_YUV440P] = {
744         .name = "yuv440p",
745         .nb_components = 3,
746         .log2_chroma_w = 0,
747         .log2_chroma_h = 1,
748         .comp = {
749             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
750             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
751             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
752         },
753         .flags = AV_PIX_FMT_FLAG_PLANAR,
754     },
755     [AV_PIX_FMT_YUVJ440P] = {
756         .name = "yuvj440p",
757         .nb_components = 3,
758         .log2_chroma_w = 0,
759         .log2_chroma_h = 1,
760         .comp = {
761             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
762             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
763             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
764         },
765         .flags = AV_PIX_FMT_FLAG_PLANAR,
766     },
767     [AV_PIX_FMT_YUV440P10LE] = {
768         .name = "yuv440p10le",
769         .nb_components = 3,
770         .log2_chroma_w = 0,
771         .log2_chroma_h = 1,
772         .comp = {
773             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
774             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
775             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
776         },
777         .flags = AV_PIX_FMT_FLAG_PLANAR,
778     },
779     [AV_PIX_FMT_YUV440P10BE] = {
780         .name = "yuv440p10be",
781         .nb_components = 3,
782         .log2_chroma_w = 0,
783         .log2_chroma_h = 1,
784         .comp = {
785             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
786             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
787             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
788         },
789         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
790     },
791     [AV_PIX_FMT_YUV440P12LE] = {
792         .name = "yuv440p12le",
793         .nb_components = 3,
794         .log2_chroma_w = 0,
795         .log2_chroma_h = 1,
796         .comp = {
797             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
798             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
799             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
800         },
801         .flags = AV_PIX_FMT_FLAG_PLANAR,
802     },
803     [AV_PIX_FMT_YUV440P12BE] = {
804         .name = "yuv440p12be",
805         .nb_components = 3,
806         .log2_chroma_w = 0,
807         .log2_chroma_h = 1,
808         .comp = {
809             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
810             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
811             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
812         },
813         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
814     },
815     [AV_PIX_FMT_YUVA420P] = {
816         .name = "yuva420p",
817         .nb_components = 4,
818         .log2_chroma_w = 1,
819         .log2_chroma_h = 1,
820         .comp = {
821             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
822             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
823             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
824             { 3, 1, 0, 0, 8, 0, 7, 1 },        /* A */
825         },
826         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
827     },
828     [AV_PIX_FMT_YUVA422P] = {
829         .name = "yuva422p",
830         .nb_components = 4,
831         .log2_chroma_w = 1,
832         .log2_chroma_h = 0,
833         .comp = {
834             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
835             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
836             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
837             { 3, 1, 0, 0, 8, 0, 7, 1 },        /* A */
838         },
839         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
840     },
841     [AV_PIX_FMT_YUVA444P] = {
842         .name = "yuva444p",
843         .nb_components = 4,
844         .log2_chroma_w = 0,
845         .log2_chroma_h = 0,
846         .comp = {
847             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
848             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* U */
849             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* V */
850             { 3, 1, 0, 0, 8, 0, 7, 1 },        /* A */
851         },
852         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
853     },
854     [AV_PIX_FMT_YUVA420P9BE] = {
855         .name = "yuva420p9be",
856         .nb_components = 4,
857         .log2_chroma_w = 1,
858         .log2_chroma_h = 1,
859         .comp = {
860             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
861             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
862             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
863             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
864         },
865         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
866     },
867     [AV_PIX_FMT_YUVA420P9LE] = {
868         .name = "yuva420p9le",
869         .nb_components = 4,
870         .log2_chroma_w = 1,
871         .log2_chroma_h = 1,
872         .comp = {
873             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
874             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
875             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
876             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
877         },
878         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
879     },
880     [AV_PIX_FMT_YUVA422P9BE] = {
881         .name = "yuva422p9be",
882         .nb_components = 4,
883         .log2_chroma_w = 1,
884         .log2_chroma_h = 0,
885         .comp = {
886             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
887             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
888             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
889             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
890         },
891         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
892     },
893     [AV_PIX_FMT_YUVA422P9LE] = {
894         .name = "yuva422p9le",
895         .nb_components = 4,
896         .log2_chroma_w = 1,
897         .log2_chroma_h = 0,
898         .comp = {
899             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
900             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
901             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
902             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
903         },
904         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
905     },
906     [AV_PIX_FMT_YUVA444P9BE] = {
907         .name = "yuva444p9be",
908         .nb_components = 4,
909         .log2_chroma_w = 0,
910         .log2_chroma_h = 0,
911         .comp = {
912             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
913             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
914             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
915             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
916         },
917         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
918     },
919     [AV_PIX_FMT_YUVA444P9LE] = {
920         .name = "yuva444p9le",
921         .nb_components = 4,
922         .log2_chroma_w = 0,
923         .log2_chroma_h = 0,
924         .comp = {
925             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
926             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
927             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
928             { 3, 2, 0, 0, 9, 1, 8, 1 },        /* A */
929         },
930         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
931     },
932     [AV_PIX_FMT_YUVA420P10BE] = {
933         .name = "yuva420p10be",
934         .nb_components = 4,
935         .log2_chroma_w = 1,
936         .log2_chroma_h = 1,
937         .comp = {
938             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
939             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
940             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
941             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
942         },
943         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
944     },
945     [AV_PIX_FMT_YUVA420P10LE] = {
946         .name = "yuva420p10le",
947         .nb_components = 4,
948         .log2_chroma_w = 1,
949         .log2_chroma_h = 1,
950         .comp = {
951             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
952             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
953             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
954             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
955         },
956         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
957     },
958     [AV_PIX_FMT_YUVA422P10BE] = {
959         .name = "yuva422p10be",
960         .nb_components = 4,
961         .log2_chroma_w = 1,
962         .log2_chroma_h = 0,
963         .comp = {
964             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
965             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
966             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
967             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
968         },
969         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
970     },
971     [AV_PIX_FMT_YUVA422P10LE] = {
972         .name = "yuva422p10le",
973         .nb_components = 4,
974         .log2_chroma_w = 1,
975         .log2_chroma_h = 0,
976         .comp = {
977             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
978             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
979             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
980             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
981         },
982         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
983     },
984     [AV_PIX_FMT_YUVA444P10BE] = {
985         .name = "yuva444p10be",
986         .nb_components = 4,
987         .log2_chroma_w = 0,
988         .log2_chroma_h = 0,
989         .comp = {
990             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
991             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
992             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
993             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
994         },
995         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
996     },
997     [AV_PIX_FMT_YUVA444P10LE] = {
998         .name = "yuva444p10le",
999         .nb_components = 4,
1000         .log2_chroma_w = 0,
1001         .log2_chroma_h = 0,
1002         .comp = {
1003             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1004             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1005             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1006             { 3, 2, 0, 0, 10, 1, 9, 1 },        /* A */
1007         },
1008         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1009     },
1010     [AV_PIX_FMT_YUVA420P16BE] = {
1011         .name = "yuva420p16be",
1012         .nb_components = 4,
1013         .log2_chroma_w = 1,
1014         .log2_chroma_h = 1,
1015         .comp = {
1016             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1017             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1018             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1019             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1020         },
1021         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1022     },
1023     [AV_PIX_FMT_YUVA420P16LE] = {
1024         .name = "yuva420p16le",
1025         .nb_components = 4,
1026         .log2_chroma_w = 1,
1027         .log2_chroma_h = 1,
1028         .comp = {
1029             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1030             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1031             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1032             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1033         },
1034         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1035     },
1036     [AV_PIX_FMT_YUVA422P16BE] = {
1037         .name = "yuva422p16be",
1038         .nb_components = 4,
1039         .log2_chroma_w = 1,
1040         .log2_chroma_h = 0,
1041         .comp = {
1042             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1043             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1044             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1045             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1046         },
1047         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1048     },
1049     [AV_PIX_FMT_YUVA422P16LE] = {
1050         .name = "yuva422p16le",
1051         .nb_components = 4,
1052         .log2_chroma_w = 1,
1053         .log2_chroma_h = 0,
1054         .comp = {
1055             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1056             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1057             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1058             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1059         },
1060         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1061     },
1062     [AV_PIX_FMT_YUVA444P16BE] = {
1063         .name = "yuva444p16be",
1064         .nb_components = 4,
1065         .log2_chroma_w = 0,
1066         .log2_chroma_h = 0,
1067         .comp = {
1068             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1069             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1070             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1071             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1072         },
1073         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1074     },
1075     [AV_PIX_FMT_YUVA444P16LE] = {
1076         .name = "yuva444p16le",
1077         .nb_components = 4,
1078         .log2_chroma_w = 0,
1079         .log2_chroma_h = 0,
1080         .comp = {
1081             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1082             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1083             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1084             { 3, 2, 0, 0, 16, 1, 15, 1 },        /* A */
1085         },
1086         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1087     },
1088     [AV_PIX_FMT_RGB48BE] = {
1089         .name = "rgb48be",
1090         .nb_components = 3,
1091         .log2_chroma_w = 0,
1092         .log2_chroma_h = 0,
1093         .comp = {
1094             { 0, 6, 0, 0, 16, 5, 15, 1 },       /* R */
1095             { 0, 6, 2, 0, 16, 5, 15, 3 },       /* G */
1096             { 0, 6, 4, 0, 16, 5, 15, 5 },       /* B */
1097         },
1098         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
1099     },
1100     [AV_PIX_FMT_RGB48LE] = {
1101         .name = "rgb48le",
1102         .nb_components = 3,
1103         .log2_chroma_w = 0,
1104         .log2_chroma_h = 0,
1105         .comp = {
1106             { 0, 6, 0, 0, 16, 5, 15, 1 },       /* R */
1107             { 0, 6, 2, 0, 16, 5, 15, 3 },       /* G */
1108             { 0, 6, 4, 0, 16, 5, 15, 5 },       /* B */
1109         },
1110         .flags = AV_PIX_FMT_FLAG_RGB,
1111     },
1112     [AV_PIX_FMT_RGBA64BE] = {
1113         .name = "rgba64be",
1114         .nb_components = 4,
1115         .log2_chroma_w = 0,
1116         .log2_chroma_h = 0,
1117         .comp = {
1118             { 0, 8, 0, 0, 16, 7, 15, 1 },       /* R */
1119             { 0, 8, 2, 0, 16, 7, 15, 3 },       /* G */
1120             { 0, 8, 4, 0, 16, 7, 15, 5 },       /* B */
1121             { 0, 8, 6, 0, 16, 7, 15, 7 },       /* A */
1122         },
1123         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1124     },
1125     [AV_PIX_FMT_RGBA64LE] = {
1126         .name = "rgba64le",
1127         .nb_components = 4,
1128         .log2_chroma_w = 0,
1129         .log2_chroma_h = 0,
1130         .comp = {
1131             { 0, 8, 0, 0, 16, 7, 15, 1 },       /* R */
1132             { 0, 8, 2, 0, 16, 7, 15, 3 },       /* G */
1133             { 0, 8, 4, 0, 16, 7, 15, 5 },       /* B */
1134             { 0, 8, 6, 0, 16, 7, 15, 7 },       /* A */
1135         },
1136         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1137     },
1138     [AV_PIX_FMT_RGB565BE] = {
1139         .name = "rgb565be",
1140         .nb_components = 3,
1141         .log2_chroma_w = 0,
1142         .log2_chroma_h = 0,
1143         .comp = {
1144             { 0, 2, -1, 3, 5, 1, 4, 0 },        /* R */
1145             { 0, 2,  0, 5, 6, 1, 5, 1 },        /* G */
1146             { 0, 2,  0, 0, 5, 1, 4, 1 },        /* B */
1147         },
1148         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1149     },
1150     [AV_PIX_FMT_RGB565LE] = {
1151         .name = "rgb565le",
1152         .nb_components = 3,
1153         .log2_chroma_w = 0,
1154         .log2_chroma_h = 0,
1155         .comp = {
1156             { 0, 2, 1, 3, 5, 1, 4, 2 },        /* R */
1157             { 0, 2, 0, 5, 6, 1, 5, 1 },        /* G */
1158             { 0, 2, 0, 0, 5, 1, 4, 1 },        /* B */
1159         },
1160         .flags = AV_PIX_FMT_FLAG_RGB,
1161     },
1162     [AV_PIX_FMT_RGB555BE] = {
1163         .name = "rgb555be",
1164         .nb_components = 3,
1165         .log2_chroma_w = 0,
1166         .log2_chroma_h = 0,
1167         .comp = {
1168             { 0, 2, -1, 2, 5, 1, 4, 0 },        /* R */
1169             { 0, 2,  0, 5, 5, 1, 4, 1 },        /* G */
1170             { 0, 2,  0, 0, 5, 1, 4, 1 },        /* B */
1171         },
1172         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1173     },
1174     [AV_PIX_FMT_RGB555LE] = {
1175         .name = "rgb555le",
1176         .nb_components = 3,
1177         .log2_chroma_w = 0,
1178         .log2_chroma_h = 0,
1179         .comp = {
1180             { 0, 2, 1, 2, 5, 1, 4, 2 },        /* R */
1181             { 0, 2, 0, 5, 5, 1, 4, 1 },        /* G */
1182             { 0, 2, 0, 0, 5, 1, 4, 1 },        /* B */
1183         },
1184         .flags = AV_PIX_FMT_FLAG_RGB,
1185     },
1186     [AV_PIX_FMT_RGB444BE] = {
1187         .name = "rgb444be",
1188         .nb_components = 3,
1189         .log2_chroma_w = 0,
1190         .log2_chroma_h = 0,
1191         .comp = {
1192             { 0, 2, -1, 0, 4, 1, 3, 0 },        /* R */
1193             { 0, 2,  0, 4, 4, 1, 3, 1 },        /* G */
1194             { 0, 2,  0, 0, 4, 1, 3, 1 },        /* B */
1195         },
1196         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1197     },
1198     [AV_PIX_FMT_RGB444LE] = {
1199         .name = "rgb444le",
1200         .nb_components = 3,
1201         .log2_chroma_w = 0,
1202         .log2_chroma_h = 0,
1203         .comp = {
1204             { 0, 2, 1, 0, 4, 1, 3, 2 },        /* R */
1205             { 0, 2, 0, 4, 4, 1, 3, 1 },        /* G */
1206             { 0, 2, 0, 0, 4, 1, 3, 1 },        /* B */
1207         },
1208         .flags = AV_PIX_FMT_FLAG_RGB,
1209     },
1210     [AV_PIX_FMT_BGR48BE] = {
1211         .name = "bgr48be",
1212         .nb_components = 3,
1213         .log2_chroma_w = 0,
1214         .log2_chroma_h = 0,
1215         .comp = {
1216             { 0, 6, 4, 0, 16, 5, 15, 5 },       /* R */
1217             { 0, 6, 2, 0, 16, 5, 15, 3 },       /* G */
1218             { 0, 6, 0, 0, 16, 5, 15, 1 },       /* B */
1219         },
1220         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1221     },
1222     [AV_PIX_FMT_BGR48LE] = {
1223         .name = "bgr48le",
1224         .nb_components = 3,
1225         .log2_chroma_w = 0,
1226         .log2_chroma_h = 0,
1227         .comp = {
1228             { 0, 6, 4, 0, 16, 5, 15, 5 },       /* R */
1229             { 0, 6, 2, 0, 16, 5, 15, 3 },       /* G */
1230             { 0, 6, 0, 0, 16, 5, 15, 1 },       /* B */
1231         },
1232         .flags = AV_PIX_FMT_FLAG_RGB,
1233     },
1234     [AV_PIX_FMT_BGRA64BE] = {
1235         .name = "bgra64be",
1236         .nb_components = 4,
1237         .log2_chroma_w = 0,
1238         .log2_chroma_h = 0,
1239         .comp = {
1240             { 0, 8, 4, 0, 16, 7, 15, 5 },       /* R */
1241             { 0, 8, 2, 0, 16, 7, 15, 3 },       /* G */
1242             { 0, 8, 0, 0, 16, 7, 15, 1 },       /* B */
1243             { 0, 8, 6, 0, 16, 7, 15, 7 },       /* A */
1244         },
1245         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1246     },
1247     [AV_PIX_FMT_BGRA64LE] = {
1248         .name = "bgra64le",
1249         .nb_components = 4,
1250         .log2_chroma_w = 0,
1251         .log2_chroma_h = 0,
1252         .comp = {
1253             { 0, 8, 4, 0, 16, 7, 15, 5 },       /* R */
1254             { 0, 8, 2, 0, 16, 7, 15, 3 },       /* G */
1255             { 0, 8, 0, 0, 16, 7, 15, 1 },       /* B */
1256             { 0, 8, 6, 0, 16, 7, 15, 7 },       /* A */
1257         },
1258         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1259     },
1260     [AV_PIX_FMT_BGR565BE] = {
1261         .name = "bgr565be",
1262         .nb_components = 3,
1263         .log2_chroma_w = 0,
1264         .log2_chroma_h = 0,
1265         .comp = {
1266             { 0, 2,  0, 0, 5, 1, 4, 1 },        /* R */
1267             { 0, 2,  0, 5, 6, 1, 5, 1 },        /* G */
1268             { 0, 2, -1, 3, 5, 1, 4, 0 },        /* B */
1269         },
1270         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1271     },
1272     [AV_PIX_FMT_BGR565LE] = {
1273         .name = "bgr565le",
1274         .nb_components = 3,
1275         .log2_chroma_w = 0,
1276         .log2_chroma_h = 0,
1277         .comp = {
1278             { 0, 2, 0, 0, 5, 1, 4, 1 },        /* R */
1279             { 0, 2, 0, 5, 6, 1, 5, 1 },        /* G */
1280             { 0, 2, 1, 3, 5, 1, 4, 2 },        /* B */
1281         },
1282         .flags = AV_PIX_FMT_FLAG_RGB,
1283     },
1284     [AV_PIX_FMT_BGR555BE] = {
1285         .name = "bgr555be",
1286         .nb_components = 3,
1287         .log2_chroma_w = 0,
1288         .log2_chroma_h = 0,
1289         .comp = {
1290             { 0, 2,  0, 0, 5, 1, 4, 1 },       /* R */
1291             { 0, 2,  0, 5, 5, 1, 4, 1 },       /* G */
1292             { 0, 2, -1, 2, 5, 1, 4, 0 },       /* B */
1293         },
1294         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1295      },
1296     [AV_PIX_FMT_BGR555LE] = {
1297         .name = "bgr555le",
1298         .nb_components = 3,
1299         .log2_chroma_w = 0,
1300         .log2_chroma_h = 0,
1301         .comp = {
1302             { 0, 2, 0, 0, 5, 1, 4, 1 },        /* R */
1303             { 0, 2, 0, 5, 5, 1, 4, 1 },        /* G */
1304             { 0, 2, 1, 2, 5, 1, 4, 2 },        /* B */
1305         },
1306         .flags = AV_PIX_FMT_FLAG_RGB,
1307     },
1308     [AV_PIX_FMT_BGR444BE] = {
1309         .name = "bgr444be",
1310         .nb_components = 3,
1311         .log2_chroma_w = 0,
1312         .log2_chroma_h = 0,
1313         .comp = {
1314             { 0, 2,  0, 0, 4, 1, 3, 1 },       /* R */
1315             { 0, 2,  0, 4, 4, 1, 3, 1 },       /* G */
1316             { 0, 2, -1, 0, 4, 1, 3, 0 },       /* B */
1317         },
1318         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1319      },
1320     [AV_PIX_FMT_BGR444LE] = {
1321         .name = "bgr444le",
1322         .nb_components = 3,
1323         .log2_chroma_w = 0,
1324         .log2_chroma_h = 0,
1325         .comp = {
1326             { 0, 2, 0, 0, 4, 1, 3, 1 },        /* R */
1327             { 0, 2, 0, 4, 4, 1, 3, 1 },        /* G */
1328             { 0, 2, 1, 0, 4, 1, 3, 2 },        /* B */
1329         },
1330         .flags = AV_PIX_FMT_FLAG_RGB,
1331     },
1332     [AV_PIX_FMT_VAAPI] = {
1333         .name = "vaapi",
1334         .log2_chroma_w = 1,
1335         .log2_chroma_h = 1,
1336         .flags = AV_PIX_FMT_FLAG_HWACCEL,
1337     },
1338     [AV_PIX_FMT_YUV420P9LE] = {
1339         .name = "yuv420p9le",
1340         .nb_components = 3,
1341         .log2_chroma_w = 1,
1342         .log2_chroma_h = 1,
1343         .comp = {
1344             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1345             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1346             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1347         },
1348         .flags = AV_PIX_FMT_FLAG_PLANAR,
1349     },
1350     [AV_PIX_FMT_YUV420P9BE] = {
1351         .name = "yuv420p9be",
1352         .nb_components = 3,
1353         .log2_chroma_w = 1,
1354         .log2_chroma_h = 1,
1355         .comp = {
1356             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1357             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1358             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1359         },
1360         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1361     },
1362     [AV_PIX_FMT_YUV420P10LE] = {
1363         .name = "yuv420p10le",
1364         .nb_components = 3,
1365         .log2_chroma_w = 1,
1366         .log2_chroma_h = 1,
1367         .comp = {
1368             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1369             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1370             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1371         },
1372         .flags = AV_PIX_FMT_FLAG_PLANAR,
1373     },
1374     [AV_PIX_FMT_YUV420P10BE] = {
1375         .name = "yuv420p10be",
1376         .nb_components = 3,
1377         .log2_chroma_w = 1,
1378         .log2_chroma_h = 1,
1379         .comp = {
1380             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1381             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1382             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1383         },
1384         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1385     },
1386     [AV_PIX_FMT_YUV420P12LE] = {
1387         .name = "yuv420p12le",
1388         .nb_components = 3,
1389         .log2_chroma_w = 1,
1390         .log2_chroma_h = 1,
1391         .comp = {
1392             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1393             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1394             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1395         },
1396         .flags = AV_PIX_FMT_FLAG_PLANAR,
1397     },
1398     [AV_PIX_FMT_YUV420P12BE] = {
1399         .name = "yuv420p12be",
1400         .nb_components = 3,
1401         .log2_chroma_w = 1,
1402         .log2_chroma_h = 1,
1403         .comp = {
1404             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1405             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1406             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1407         },
1408         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1409     },
1410     [AV_PIX_FMT_YUV420P14LE] = {
1411         .name = "yuv420p14le",
1412         .nb_components = 3,
1413         .log2_chroma_w = 1,
1414         .log2_chroma_h = 1,
1415         .comp = {
1416             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1417             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1418             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1419         },
1420         .flags = AV_PIX_FMT_FLAG_PLANAR,
1421     },
1422     [AV_PIX_FMT_YUV420P14BE] = {
1423         .name = "yuv420p14be",
1424         .nb_components = 3,
1425         .log2_chroma_w = 1,
1426         .log2_chroma_h = 1,
1427         .comp = {
1428             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1429             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1430             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1431         },
1432         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1433     },
1434     [AV_PIX_FMT_YUV420P16LE] = {
1435         .name = "yuv420p16le",
1436         .nb_components = 3,
1437         .log2_chroma_w = 1,
1438         .log2_chroma_h = 1,
1439         .comp = {
1440             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1441             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1442             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1443         },
1444         .flags = AV_PIX_FMT_FLAG_PLANAR,
1445     },
1446     [AV_PIX_FMT_YUV420P16BE] = {
1447         .name = "yuv420p16be",
1448         .nb_components = 3,
1449         .log2_chroma_w = 1,
1450         .log2_chroma_h = 1,
1451         .comp = {
1452             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1453             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1454             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1455         },
1456         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1457     },
1458     [AV_PIX_FMT_YUV422P9LE] = {
1459         .name = "yuv422p9le",
1460         .nb_components = 3,
1461         .log2_chroma_w = 1,
1462         .log2_chroma_h = 0,
1463         .comp = {
1464             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1465             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1466             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1467         },
1468         .flags = AV_PIX_FMT_FLAG_PLANAR,
1469     },
1470     [AV_PIX_FMT_YUV422P9BE] = {
1471         .name = "yuv422p9be",
1472         .nb_components = 3,
1473         .log2_chroma_w = 1,
1474         .log2_chroma_h = 0,
1475         .comp = {
1476             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1477             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1478             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1479         },
1480         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1481     },
1482     [AV_PIX_FMT_YUV422P10LE] = {
1483         .name = "yuv422p10le",
1484         .nb_components = 3,
1485         .log2_chroma_w = 1,
1486         .log2_chroma_h = 0,
1487         .comp = {
1488             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1489             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1490             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1491         },
1492         .flags = AV_PIX_FMT_FLAG_PLANAR,
1493     },
1494     [AV_PIX_FMT_YUV422P10BE] = {
1495         .name = "yuv422p10be",
1496         .nb_components = 3,
1497         .log2_chroma_w = 1,
1498         .log2_chroma_h = 0,
1499         .comp = {
1500             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1501             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1502             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1503         },
1504         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1505     },
1506     [AV_PIX_FMT_YUV422P12LE] = {
1507         .name = "yuv422p12le",
1508         .nb_components = 3,
1509         .log2_chroma_w = 1,
1510         .log2_chroma_h = 0,
1511         .comp = {
1512             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1513             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1514             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1515         },
1516         .flags = AV_PIX_FMT_FLAG_PLANAR,
1517     },
1518     [AV_PIX_FMT_YUV422P12BE] = {
1519         .name = "yuv422p12be",
1520         .nb_components = 3,
1521         .log2_chroma_w = 1,
1522         .log2_chroma_h = 0,
1523         .comp = {
1524             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1525             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1526             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1527         },
1528         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1529     },
1530     [AV_PIX_FMT_YUV422P14LE] = {
1531         .name = "yuv422p14le",
1532         .nb_components = 3,
1533         .log2_chroma_w = 1,
1534         .log2_chroma_h = 0,
1535         .comp = {
1536             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1537             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1538             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1539         },
1540         .flags = AV_PIX_FMT_FLAG_PLANAR,
1541     },
1542     [AV_PIX_FMT_YUV422P14BE] = {
1543         .name = "yuv422p14be",
1544         .nb_components = 3,
1545         .log2_chroma_w = 1,
1546         .log2_chroma_h = 0,
1547         .comp = {
1548             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1549             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1550             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1551         },
1552         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1553     },
1554     [AV_PIX_FMT_YUV422P16LE] = {
1555         .name = "yuv422p16le",
1556         .nb_components = 3,
1557         .log2_chroma_w = 1,
1558         .log2_chroma_h = 0,
1559         .comp = {
1560             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1561             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1562             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1563         },
1564         .flags = AV_PIX_FMT_FLAG_PLANAR,
1565     },
1566     [AV_PIX_FMT_YUV422P16BE] = {
1567         .name = "yuv422p16be",
1568         .nb_components = 3,
1569         .log2_chroma_w = 1,
1570         .log2_chroma_h = 0,
1571         .comp = {
1572             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1573             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1574             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1575         },
1576         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1577     },
1578     [AV_PIX_FMT_YUV444P16LE] = {
1579         .name = "yuv444p16le",
1580         .nb_components = 3,
1581         .log2_chroma_w = 0,
1582         .log2_chroma_h = 0,
1583         .comp = {
1584             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1585             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1586             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1587         },
1588         .flags = AV_PIX_FMT_FLAG_PLANAR,
1589     },
1590     [AV_PIX_FMT_YUV444P16BE] = {
1591         .name = "yuv444p16be",
1592         .nb_components = 3,
1593         .log2_chroma_w = 0,
1594         .log2_chroma_h = 0,
1595         .comp = {
1596             { 0, 2, 0, 0, 16, 1, 15, 1 },        /* Y */
1597             { 1, 2, 0, 0, 16, 1, 15, 1 },        /* U */
1598             { 2, 2, 0, 0, 16, 1, 15, 1 },        /* V */
1599         },
1600         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1601     },
1602     [AV_PIX_FMT_YUV444P10LE] = {
1603         .name = "yuv444p10le",
1604         .nb_components = 3,
1605         .log2_chroma_w = 0,
1606         .log2_chroma_h = 0,
1607         .comp = {
1608             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1609             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1610             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1611         },
1612         .flags = AV_PIX_FMT_FLAG_PLANAR,
1613     },
1614     [AV_PIX_FMT_YUV444P10BE] = {
1615         .name = "yuv444p10be",
1616         .nb_components = 3,
1617         .log2_chroma_w = 0,
1618         .log2_chroma_h = 0,
1619         .comp = {
1620             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
1621             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* U */
1622             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* V */
1623         },
1624         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1625     },
1626     [AV_PIX_FMT_YUV444P9LE] = {
1627         .name = "yuv444p9le",
1628         .nb_components = 3,
1629         .log2_chroma_w = 0,
1630         .log2_chroma_h = 0,
1631         .comp = {
1632             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1633             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1634             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1635         },
1636         .flags = AV_PIX_FMT_FLAG_PLANAR,
1637     },
1638     [AV_PIX_FMT_YUV444P9BE] = {
1639         .name = "yuv444p9be",
1640         .nb_components = 3,
1641         .log2_chroma_w = 0,
1642         .log2_chroma_h = 0,
1643         .comp = {
1644             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* Y */
1645             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* U */
1646             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* V */
1647         },
1648         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1649     },
1650     [AV_PIX_FMT_YUV444P12LE] = {
1651         .name = "yuv444p12le",
1652         .nb_components = 3,
1653         .log2_chroma_w = 0,
1654         .log2_chroma_h = 0,
1655         .comp = {
1656             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1657             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1658             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1659         },
1660         .flags = AV_PIX_FMT_FLAG_PLANAR,
1661     },
1662     [AV_PIX_FMT_YUV444P12BE] = {
1663         .name = "yuv444p12be",
1664         .nb_components = 3,
1665         .log2_chroma_w = 0,
1666         .log2_chroma_h = 0,
1667         .comp = {
1668             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
1669             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
1670             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
1671         },
1672         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1673     },
1674     [AV_PIX_FMT_YUV444P14LE] = {
1675         .name = "yuv444p14le",
1676         .nb_components = 3,
1677         .log2_chroma_w = 0,
1678         .log2_chroma_h = 0,
1679         .comp = {
1680             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1681             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1682             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1683         },
1684         .flags = AV_PIX_FMT_FLAG_PLANAR,
1685     },
1686     [AV_PIX_FMT_YUV444P14BE] = {
1687         .name = "yuv444p14be",
1688         .nb_components = 3,
1689         .log2_chroma_w = 0,
1690         .log2_chroma_h = 0,
1691         .comp = {
1692             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* Y */
1693             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* U */
1694             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* V */
1695         },
1696         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1697     },
1698     [AV_PIX_FMT_D3D11VA_VLD] = {
1699         .name = "d3d11va_vld",
1700         .log2_chroma_w = 1,
1701         .log2_chroma_h = 1,
1702         .flags = AV_PIX_FMT_FLAG_HWACCEL,
1703     },
1704     [AV_PIX_FMT_DXVA2_VLD] = {
1705         .name = "dxva2_vld",
1706         .log2_chroma_w = 1,
1707         .log2_chroma_h = 1,
1708         .flags = AV_PIX_FMT_FLAG_HWACCEL,
1709     },
1710     [AV_PIX_FMT_YA8] = {
1711         .name = "ya8",
1712         .nb_components = 2,
1713         .comp = {
1714             { 0, 2, 0, 0, 8, 1, 7, 1 },        /* Y */
1715             { 0, 2, 1, 0, 8, 1, 7, 2 },        /* A */
1716         },
1717         .flags = AV_PIX_FMT_FLAG_ALPHA,
1718         .alias = "gray8a",
1719     },
1720     [AV_PIX_FMT_YA16LE] = {
1721         .name = "ya16le",
1722         .nb_components = 2,
1723         .comp = {
1724             { 0, 4, 0, 0, 16, 3, 15, 1 },        /* Y */
1725             { 0, 4, 2, 0, 16, 3, 15, 3 },        /* A */
1726         },
1727         .flags = AV_PIX_FMT_FLAG_ALPHA,
1728     },
1729     [AV_PIX_FMT_YA16BE] = {
1730         .name = "ya16be",
1731         .nb_components = 2,
1732         .comp = {
1733             { 0, 4, 0, 0, 16, 3, 15, 1 },        /* Y */
1734             { 0, 4, 2, 0, 16, 3, 15, 3 },        /* A */
1735         },
1736         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
1737     },
1738     [AV_PIX_FMT_VIDEOTOOLBOX] = {
1739         .name = "videotoolbox_vld",
1740         .flags = AV_PIX_FMT_FLAG_HWACCEL,
1741     },
1742     [AV_PIX_FMT_GBRP] = {
1743         .name = "gbrp",
1744         .nb_components = 3,
1745         .log2_chroma_w = 0,
1746         .log2_chroma_h = 0,
1747         .comp = {
1748             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* R */
1749             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* G */
1750             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* B */
1751         },
1752         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1753     },
1754     [AV_PIX_FMT_GBRP9LE] = {
1755         .name = "gbrp9le",
1756         .nb_components = 3,
1757         .log2_chroma_w = 0,
1758         .log2_chroma_h = 0,
1759         .comp = {
1760             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* R */
1761             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* G */
1762             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* B */
1763         },
1764         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1765     },
1766     [AV_PIX_FMT_GBRP9BE] = {
1767         .name = "gbrp9be",
1768         .nb_components = 3,
1769         .log2_chroma_w = 0,
1770         .log2_chroma_h = 0,
1771         .comp = {
1772             { 2, 2, 0, 0, 9, 1, 8, 1 },        /* R */
1773             { 0, 2, 0, 0, 9, 1, 8, 1 },        /* G */
1774             { 1, 2, 0, 0, 9, 1, 8, 1 },        /* B */
1775         },
1776         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1777     },
1778     [AV_PIX_FMT_GBRP10LE] = {
1779         .name = "gbrp10le",
1780         .nb_components = 3,
1781         .log2_chroma_w = 0,
1782         .log2_chroma_h = 0,
1783         .comp = {
1784             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* R */
1785             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* G */
1786             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* B */
1787         },
1788         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1789     },
1790     [AV_PIX_FMT_GBRP10BE] = {
1791         .name = "gbrp10be",
1792         .nb_components = 3,
1793         .log2_chroma_w = 0,
1794         .log2_chroma_h = 0,
1795         .comp = {
1796             { 2, 2, 0, 0, 10, 1, 9, 1 },        /* R */
1797             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* G */
1798             { 1, 2, 0, 0, 10, 1, 9, 1 },        /* B */
1799         },
1800         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1801     },
1802     [AV_PIX_FMT_GBRP12LE] = {
1803         .name = "gbrp12le",
1804         .nb_components = 3,
1805         .log2_chroma_w = 0,
1806         .log2_chroma_h = 0,
1807         .comp = {
1808             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* R */
1809             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* G */
1810             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* B */
1811         },
1812         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1813     },
1814     [AV_PIX_FMT_GBRP12BE] = {
1815         .name = "gbrp12be",
1816         .nb_components = 3,
1817         .log2_chroma_w = 0,
1818         .log2_chroma_h = 0,
1819         .comp = {
1820             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* R */
1821             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* G */
1822             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* B */
1823         },
1824         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1825     },
1826     [AV_PIX_FMT_GBRP14LE] = {
1827         .name = "gbrp14le",
1828         .nb_components = 3,
1829         .log2_chroma_w = 0,
1830         .log2_chroma_h = 0,
1831         .comp = {
1832             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* R */
1833             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* G */
1834             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* B */
1835         },
1836         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1837     },
1838     [AV_PIX_FMT_GBRP14BE] = {
1839         .name = "gbrp14be",
1840         .nb_components = 3,
1841         .log2_chroma_w = 0,
1842         .log2_chroma_h = 0,
1843         .comp = {
1844             { 2, 2, 0, 0, 14, 1, 13, 1 },        /* R */
1845             { 0, 2, 0, 0, 14, 1, 13, 1 },        /* G */
1846             { 1, 2, 0, 0, 14, 1, 13, 1 },        /* B */
1847         },
1848         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1849     },
1850     [AV_PIX_FMT_GBRP16LE] = {
1851         .name = "gbrp16le",
1852         .nb_components = 3,
1853         .log2_chroma_w = 0,
1854         .log2_chroma_h = 0,
1855         .comp = {
1856             { 2, 2, 0, 0, 16, 1, 15, 1 },       /* R */
1857             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* G */
1858             { 1, 2, 0, 0, 16, 1, 15, 1 },       /* B */
1859         },
1860         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1861     },
1862     [AV_PIX_FMT_GBRP16BE] = {
1863         .name = "gbrp16be",
1864         .nb_components = 3,
1865         .log2_chroma_w = 0,
1866         .log2_chroma_h = 0,
1867         .comp = {
1868             { 2, 2, 0, 0, 16, 1, 15, 1 },       /* R */
1869             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* G */
1870             { 1, 2, 0, 0, 16, 1, 15, 1 },       /* B */
1871         },
1872         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1873     },
1874     [AV_PIX_FMT_GBRAP] = {
1875         .name = "gbrap",
1876         .nb_components = 4,
1877         .log2_chroma_w = 0,
1878         .log2_chroma_h = 0,
1879         .comp = {
1880             { 2, 1, 0, 0, 8, 0, 7, 1 },        /* R */
1881             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* G */
1882             { 1, 1, 0, 0, 8, 0, 7, 1 },        /* B */
1883             { 3, 1, 0, 0, 8, 0, 7, 1 },        /* A */
1884         },
1885         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1886                  AV_PIX_FMT_FLAG_ALPHA,
1887     },
1888     [AV_PIX_FMT_GBRAP16LE] = {
1889         .name = "gbrap16le",
1890         .nb_components = 4,
1891         .log2_chroma_w = 0,
1892         .log2_chroma_h = 0,
1893         .comp = {
1894             { 2, 2, 0, 0, 16, 1, 15, 1 },       /* R */
1895             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* G */
1896             { 1, 2, 0, 0, 16, 1, 15, 1 },       /* B */
1897             { 3, 2, 0, 0, 16, 1, 15, 1 },       /* A */
1898         },
1899         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1900                  AV_PIX_FMT_FLAG_ALPHA,
1901     },
1902     [AV_PIX_FMT_GBRAP16BE] = {
1903         .name = "gbrap16be",
1904         .nb_components = 4,
1905         .log2_chroma_w = 0,
1906         .log2_chroma_h = 0,
1907         .comp = {
1908             { 2, 2, 0, 0, 16, 1, 15, 1 },       /* R */
1909             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* G */
1910             { 1, 2, 0, 0, 16, 1, 15, 1 },       /* B */
1911             { 3, 2, 0, 0, 16, 1, 15, 1 },       /* A */
1912         },
1913         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
1914                  AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1915     },
1916     [AV_PIX_FMT_VDPAU] = {
1917         .name = "vdpau",
1918         .log2_chroma_w = 1,
1919         .log2_chroma_h = 1,
1920         .flags = AV_PIX_FMT_FLAG_HWACCEL,
1921     },
1922     [AV_PIX_FMT_XYZ12LE] = {
1923         .name = "xyz12le",
1924         .nb_components = 3,
1925         .log2_chroma_w = 0,
1926         .log2_chroma_h = 0,
1927         .comp = {
1928             { 0, 6, 0, 4, 12, 5, 11, 1 },       /* X */
1929             { 0, 6, 2, 4, 12, 5, 11, 3 },       /* Y */
1930             { 0, 6, 4, 4, 12, 5, 11, 5 },       /* Z */
1931       },
1932       /*.flags = -- not used*/
1933     },
1934     [AV_PIX_FMT_XYZ12BE] = {
1935         .name = "xyz12be",
1936         .nb_components = 3,
1937         .log2_chroma_w = 0,
1938         .log2_chroma_h = 0,
1939         .comp = {
1940             { 0, 6, 0, 4, 12, 5, 11, 1 },       /* X */
1941             { 0, 6, 2, 4, 12, 5, 11, 3 },       /* Y */
1942             { 0, 6, 4, 4, 12, 5, 11, 5 },       /* Z */
1943        },
1944         .flags = AV_PIX_FMT_FLAG_BE,
1945     },
1946
1947 #define BAYER8_DESC_COMMON \
1948         .nb_components= 3, \
1949         .log2_chroma_w= 0, \
1950         .log2_chroma_h= 0, \
1951         .comp = {          \
1952             {0,1,0,0,2,0,1,1},\
1953             {0,1,0,0,4,0,3,1},\
1954             {0,1,0,0,2,0,1,1},\
1955         },                 \
1956
1957 #define BAYER16_DESC_COMMON \
1958         .nb_components= 3, \
1959         .log2_chroma_w= 0, \
1960         .log2_chroma_h= 0, \
1961         .comp = {          \
1962             {0,2,0,0,4,1,3,1},\
1963             {0,2,0,0,8,1,7,1},\
1964             {0,2,0,0,4,1,3,1},\
1965         },                 \
1966
1967     [AV_PIX_FMT_BAYER_BGGR8] = {
1968         .name = "bayer_bggr8",
1969         BAYER8_DESC_COMMON
1970         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1971     },
1972     [AV_PIX_FMT_BAYER_BGGR16LE] = {
1973         .name = "bayer_bggr16le",
1974         BAYER16_DESC_COMMON
1975         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1976     },
1977     [AV_PIX_FMT_BAYER_BGGR16BE] = {
1978         .name = "bayer_bggr16be",
1979         BAYER16_DESC_COMMON
1980         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1981     },
1982     [AV_PIX_FMT_BAYER_RGGB8] = {
1983         .name = "bayer_rggb8",
1984         BAYER8_DESC_COMMON
1985         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1986     },
1987     [AV_PIX_FMT_BAYER_RGGB16LE] = {
1988         .name = "bayer_rggb16le",
1989         BAYER16_DESC_COMMON
1990         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1991     },
1992     [AV_PIX_FMT_BAYER_RGGB16BE] = {
1993         .name = "bayer_rggb16be",
1994         BAYER16_DESC_COMMON
1995         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1996     },
1997     [AV_PIX_FMT_BAYER_GBRG8] = {
1998         .name = "bayer_gbrg8",
1999         BAYER8_DESC_COMMON
2000         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2001     },
2002     [AV_PIX_FMT_BAYER_GBRG16LE] = {
2003         .name = "bayer_gbrg16le",
2004         BAYER16_DESC_COMMON
2005         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2006     },
2007     [AV_PIX_FMT_BAYER_GBRG16BE] = {
2008         .name = "bayer_gbrg16be",
2009         BAYER16_DESC_COMMON
2010         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2011     },
2012     [AV_PIX_FMT_BAYER_GRBG8] = {
2013         .name = "bayer_grbg8",
2014         BAYER8_DESC_COMMON
2015         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2016     },
2017     [AV_PIX_FMT_BAYER_GRBG16LE] = {
2018         .name = "bayer_grbg16le",
2019         BAYER16_DESC_COMMON
2020         .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2021     },
2022     [AV_PIX_FMT_BAYER_GRBG16BE] = {
2023         .name = "bayer_grbg16be",
2024         BAYER16_DESC_COMMON
2025         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2026     },
2027     [AV_PIX_FMT_NV16] = {
2028         .name = "nv16",
2029         .nb_components = 3,
2030         .log2_chroma_w = 1,
2031         .log2_chroma_h = 0,
2032         .comp = {
2033             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
2034             { 1, 2, 0, 0, 8, 1, 7, 1 },        /* U */
2035             { 1, 2, 1, 0, 8, 1, 7, 2 },        /* V */
2036         },
2037         .flags = AV_PIX_FMT_FLAG_PLANAR,
2038     },
2039     [AV_PIX_FMT_NV20LE] = {
2040         .name = "nv20le",
2041         .nb_components = 3,
2042         .log2_chroma_w = 1,
2043         .log2_chroma_h = 0,
2044         .comp = {
2045             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
2046             { 1, 4, 0, 0, 10, 3, 9, 1 },        /* U */
2047             { 1, 4, 2, 0, 10, 3, 9, 3 },        /* V */
2048         },
2049         .flags = AV_PIX_FMT_FLAG_PLANAR,
2050     },
2051     [AV_PIX_FMT_NV20BE] = {
2052         .name = "nv20be",
2053         .nb_components = 3,
2054         .log2_chroma_w = 1,
2055         .log2_chroma_h = 0,
2056         .comp = {
2057             { 0, 2, 0, 0, 10, 1, 9, 1 },        /* Y */
2058             { 1, 4, 0, 0, 10, 3, 9, 1 },        /* U */
2059             { 1, 4, 2, 0, 10, 3, 9, 3 },        /* V */
2060         },
2061         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2062     },
2063     [AV_PIX_FMT_QSV] = {
2064         .name = "qsv",
2065         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2066     },
2067     [AV_PIX_FMT_MEDIACODEC] = {
2068         .name = "mediacodec",
2069         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2070     },
2071     [AV_PIX_FMT_MMAL] = {
2072         .name = "mmal",
2073         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2074     },
2075     [AV_PIX_FMT_CUDA] = {
2076         .name = "cuda",
2077         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2078     },
2079     [AV_PIX_FMT_AYUV64LE] = {
2080         .name = "ayuv64le",
2081         .nb_components = 4,
2082         .log2_chroma_w = 0,
2083         .log2_chroma_h = 0,
2084         .comp = {
2085             { 0, 8, 2, 0, 16, 7, 15, 3 },        /* Y */
2086             { 0, 8, 4, 0, 16, 7, 15, 5 },        /* U */
2087             { 0, 8, 6, 0, 16, 7, 15, 7 },        /* V */
2088             { 0, 8, 0, 0, 16, 7, 15, 1 },        /* A */
2089         },
2090         .flags = AV_PIX_FMT_FLAG_ALPHA,
2091     },
2092     [AV_PIX_FMT_AYUV64BE] = {
2093         .name = "ayuv64be",
2094         .nb_components = 4,
2095         .log2_chroma_w = 0,
2096         .log2_chroma_h = 0,
2097         .comp = {
2098             { 0, 8, 2, 0, 16, 7, 15, 3 },        /* Y */
2099             { 0, 8, 4, 0, 16, 7, 15, 5 },        /* U */
2100             { 0, 8, 6, 0, 16, 7, 15, 7 },        /* V */
2101             { 0, 8, 0, 0, 16, 7, 15, 1 },        /* A */
2102         },
2103         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
2104     },
2105     [AV_PIX_FMT_P010LE] = {
2106         .name = "p010le",
2107         .nb_components = 3,
2108         .log2_chroma_w = 1,
2109         .log2_chroma_h = 1,
2110         .comp = {
2111             { 0, 2, 0, 6, 10, 1, 9, 1 },        /* Y */
2112             { 1, 4, 0, 6, 10, 3, 9, 1 },        /* U */
2113             { 1, 4, 2, 6, 10, 3, 9, 3 },        /* V */
2114         },
2115         .flags = AV_PIX_FMT_FLAG_PLANAR,
2116     },
2117     [AV_PIX_FMT_P010BE] = {
2118         .name = "p010be",
2119         .nb_components = 3,
2120         .log2_chroma_w = 1,
2121         .log2_chroma_h = 1,
2122         .comp = {
2123             { 0, 2, 0, 6, 10, 1, 9, 1 },        /* Y */
2124             { 1, 4, 0, 6, 10, 3, 9, 1 },        /* U */
2125             { 1, 4, 2, 6, 10, 3, 9, 3 },        /* V */
2126         },
2127         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2128     },
2129     [AV_PIX_FMT_P016LE] = {
2130         .name = "p016le",
2131         .nb_components = 3,
2132         .log2_chroma_w = 1,
2133         .log2_chroma_h = 1,
2134         .comp = {
2135             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* Y */
2136             { 1, 4, 0, 0, 16, 3, 15, 1 },       /* U */
2137             { 1, 4, 2, 0, 16, 3, 15, 3 },       /* V */
2138         },
2139         .flags = AV_PIX_FMT_FLAG_PLANAR,
2140     },
2141     [AV_PIX_FMT_P016BE] = {
2142         .name = "p016be",
2143         .nb_components = 3,
2144         .log2_chroma_w = 1,
2145         .log2_chroma_h = 1,
2146         .comp = {
2147             { 0, 2, 0, 0, 16, 1, 15, 1 },       /* Y */
2148             { 1, 4, 0, 0, 16, 3, 15, 1 },       /* U */
2149             { 1, 4, 2, 0, 16, 3, 15, 3 },       /* V */
2150         },
2151         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2152     },
2153     [AV_PIX_FMT_GBRAP12LE] = {
2154         .name = "gbrap12le",
2155         .nb_components = 4,
2156         .log2_chroma_w = 0,
2157         .log2_chroma_h = 0,
2158         .comp = {
2159             { 2, 2, 0, 0, 12, 1, 11, 1 },       /* R */
2160             { 0, 2, 0, 0, 12, 1, 11, 1 },       /* G */
2161             { 1, 2, 0, 0, 12, 1, 11, 1 },       /* B */
2162             { 3, 2, 0, 0, 12, 1, 11, 1 },       /* A */
2163         },
2164         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2165                  AV_PIX_FMT_FLAG_ALPHA,
2166     },
2167     [AV_PIX_FMT_GBRAP12BE] = {
2168         .name = "gbrap12be",
2169         .nb_components = 4,
2170         .log2_chroma_w = 0,
2171         .log2_chroma_h = 0,
2172         .comp = {
2173             { 2, 2, 0, 0, 12, 1, 11, 1 },       /* R */
2174             { 0, 2, 0, 0, 12, 1, 11, 1 },       /* G */
2175             { 1, 2, 0, 0, 12, 1, 11, 1 },       /* B */
2176             { 3, 2, 0, 0, 12, 1, 11, 1 },       /* A */
2177         },
2178         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2179                  AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2180     },
2181     [AV_PIX_FMT_GBRAP10LE] = {
2182         .name = "gbrap10le",
2183         .nb_components = 4,
2184         .log2_chroma_w = 0,
2185         .log2_chroma_h = 0,
2186         .comp = {
2187             { 2, 2, 0, 0, 10, 1, 9, 1 },       /* R */
2188             { 0, 2, 0, 0, 10, 1, 9, 1 },       /* G */
2189             { 1, 2, 0, 0, 10, 1, 9, 1 },       /* B */
2190             { 3, 2, 0, 0, 10, 1, 9, 1 },       /* A */
2191         },
2192         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2193                  AV_PIX_FMT_FLAG_ALPHA,
2194     },
2195     [AV_PIX_FMT_GBRAP10BE] = {
2196         .name = "gbrap10be",
2197         .nb_components = 4,
2198         .log2_chroma_w = 0,
2199         .log2_chroma_h = 0,
2200         .comp = {
2201             { 2, 2, 0, 0, 10, 1, 9, 1 },       /* R */
2202             { 0, 2, 0, 0, 10, 1, 9, 1 },       /* G */
2203             { 1, 2, 0, 0, 10, 1, 9, 1 },       /* B */
2204             { 3, 2, 0, 0, 10, 1, 9, 1 },       /* A */
2205         },
2206         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2207                  AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2208     },
2209     [AV_PIX_FMT_D3D11] = {
2210         .name = "d3d11",
2211         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2212     },
2213     [AV_PIX_FMT_GBRPF32BE] = {
2214         .name = "gbrpf32be",
2215         .nb_components = 3,
2216         .log2_chroma_w = 0,
2217         .log2_chroma_h = 0,
2218         .comp = {
2219             { 2, 4, 0, 0, 32, 3, 31, 1 },        /* R */
2220             { 0, 4, 0, 0, 32, 3, 31, 1 },        /* G */
2221             { 1, 4, 0, 0, 32, 3, 31, 1 },        /* B */
2222         },
2223         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2224                  AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2225     },
2226     [AV_PIX_FMT_GBRPF32LE] = {
2227         .name = "gbrpf32le",
2228         .nb_components = 3,
2229         .log2_chroma_w = 0,
2230         .log2_chroma_h = 0,
2231         .comp = {
2232             { 2, 4, 0, 0, 32, 3, 31, 1 },        /* R */
2233             { 0, 4, 0, 0, 32, 3, 31, 1 },        /* G */
2234             { 1, 4, 0, 0, 32, 3, 31, 1 },        /* B */
2235         },
2236         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB,
2237     },
2238     [AV_PIX_FMT_GBRAPF32BE] = {
2239         .name = "gbrapf32be",
2240         .nb_components = 4,
2241         .log2_chroma_w = 0,
2242         .log2_chroma_h = 0,
2243         .comp = {
2244             { 2, 4, 0, 0, 32, 3, 31, 1 },        /* R */
2245             { 0, 4, 0, 0, 32, 3, 31, 1 },        /* G */
2246             { 1, 4, 0, 0, 32, 3, 31, 1 },        /* B */
2247             { 3, 4, 0, 0, 32, 3, 31, 1 },        /* A */
2248         },
2249         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2250                  AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB |
2251                  AV_PIX_FMT_FLAG_FLOAT,
2252     },
2253     [AV_PIX_FMT_GBRAPF32LE] = {
2254         .name = "gbrapf32le",
2255         .nb_components = 4,
2256         .log2_chroma_w = 0,
2257         .log2_chroma_h = 0,
2258         .comp = {
2259             { 2, 4, 0, 0, 32, 3, 31, 1 },        /* R */
2260             { 0, 4, 0, 0, 32, 3, 31, 1 },        /* G */
2261             { 1, 4, 0, 0, 32, 3, 31, 1 },        /* B */
2262             { 3, 4, 0, 0, 32, 3, 31, 1 },        /* A */
2263         },
2264         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
2265                  AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2266     },
2267     [AV_PIX_FMT_DRM_PRIME] = {
2268         .name = "drm_prime",
2269         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2270     },
2271     [AV_PIX_FMT_OPENCL] = {
2272         .name  = "opencl",
2273         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2274     },
2275     [AV_PIX_FMT_GRAYF32BE] = {
2276         .name = "grayf32be",
2277         .nb_components = 1,
2278         .log2_chroma_w = 0,
2279         .log2_chroma_h = 0,
2280         .comp = {
2281             { 0, 4, 0, 0, 32, 3, 31, 1 },       /* Y */
2282         },
2283         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT,
2284         .alias = "yf32be",
2285     },
2286     [AV_PIX_FMT_GRAYF32LE] = {
2287         .name = "grayf32le",
2288         .nb_components = 1,
2289         .log2_chroma_w = 0,
2290         .log2_chroma_h = 0,
2291         .comp = {
2292             { 0, 4, 0, 0, 32, 3, 31, 1 },       /* Y */
2293         },
2294         .flags = AV_PIX_FMT_FLAG_FLOAT,
2295         .alias = "yf32le",
2296     },
2297     [AV_PIX_FMT_YUVA422P12BE] = {
2298         .name = "yuva422p12be",
2299         .nb_components = 4,
2300         .log2_chroma_w = 1,
2301         .log2_chroma_h = 0,
2302         .comp = {
2303             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
2304             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
2305             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
2306             { 3, 2, 0, 0, 12, 1, 11, 1 },        /* A */
2307         },
2308         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2309     },
2310     [AV_PIX_FMT_YUVA422P12LE] = {
2311         .name = "yuva422p12le",
2312         .nb_components = 4,
2313         .log2_chroma_w = 1,
2314         .log2_chroma_h = 0,
2315         .comp = {
2316             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
2317             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
2318             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
2319             { 3, 2, 0, 0, 12, 1, 11, 1 },        /* A */
2320         },
2321         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2322     },
2323     [AV_PIX_FMT_YUVA444P12BE] = {
2324         .name = "yuva444p12be",
2325         .nb_components = 4,
2326         .log2_chroma_w = 0,
2327         .log2_chroma_h = 0,
2328         .comp = {
2329             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
2330             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
2331             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
2332             { 3, 2, 0, 0, 12, 1, 11, 1 },        /* A */
2333         },
2334         .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2335     },
2336     [AV_PIX_FMT_YUVA444P12LE] = {
2337         .name = "yuva444p12le",
2338         .nb_components = 4,
2339         .log2_chroma_w = 0,
2340         .log2_chroma_h = 0,
2341         .comp = {
2342             { 0, 2, 0, 0, 12, 1, 11, 1 },        /* Y */
2343             { 1, 2, 0, 0, 12, 1, 11, 1 },        /* U */
2344             { 2, 2, 0, 0, 12, 1, 11, 1 },        /* V */
2345             { 3, 2, 0, 0, 12, 1, 11, 1 },        /* A */
2346         },
2347         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2348     },
2349     [AV_PIX_FMT_NV24] = {
2350         .name = "nv24",
2351         .nb_components = 3,
2352         .log2_chroma_w = 0,
2353         .log2_chroma_h = 0,
2354         .comp = {
2355             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
2356             { 1, 2, 0, 0, 8, 1, 7, 1 },        /* U */
2357             { 1, 2, 1, 0, 8, 1, 7, 2 },        /* V */
2358         },
2359         .flags = AV_PIX_FMT_FLAG_PLANAR,
2360     },
2361     [AV_PIX_FMT_NV42] = {
2362         .name = "nv42",
2363         .nb_components = 3,
2364         .log2_chroma_w = 0,
2365         .log2_chroma_h = 0,
2366         .comp = {
2367             { 0, 1, 0, 0, 8, 0, 7, 1 },        /* Y */
2368             { 1, 2, 1, 0, 8, 1, 7, 2 },        /* U */
2369             { 1, 2, 0, 0, 8, 1, 7, 1 },        /* V */
2370         },
2371         .flags = AV_PIX_FMT_FLAG_PLANAR,
2372     },
2373     [AV_PIX_FMT_VULKAN] = {
2374         .name = "vulkan",
2375         .flags = AV_PIX_FMT_FLAG_HWACCEL,
2376     },
2377 };
2378 #if FF_API_PLUS1_MINUS1
2379 FF_ENABLE_DEPRECATION_WARNINGS
2380 #endif
2381
2382 static const char * const color_range_names[] = {
2383     [AVCOL_RANGE_UNSPECIFIED] = "unknown",
2384     [AVCOL_RANGE_MPEG] = "tv",
2385     [AVCOL_RANGE_JPEG] = "pc",
2386 };
2387
2388 static const char * const color_primaries_names[AVCOL_PRI_NB] = {
2389     [AVCOL_PRI_RESERVED0] = "reserved",
2390     [AVCOL_PRI_BT709] = "bt709",
2391     [AVCOL_PRI_UNSPECIFIED] = "unknown",
2392     [AVCOL_PRI_RESERVED] = "reserved",
2393     [AVCOL_PRI_BT470M] = "bt470m",
2394     [AVCOL_PRI_BT470BG] = "bt470bg",
2395     [AVCOL_PRI_SMPTE170M] = "smpte170m",
2396     [AVCOL_PRI_SMPTE240M] = "smpte240m",
2397     [AVCOL_PRI_FILM] = "film",
2398     [AVCOL_PRI_BT2020] = "bt2020",
2399     [AVCOL_PRI_SMPTE428] = "smpte428",
2400     [AVCOL_PRI_SMPTE431] = "smpte431",
2401     [AVCOL_PRI_SMPTE432] = "smpte432",
2402     [AVCOL_PRI_EBU3213] = "ebu3213",
2403 };
2404
2405 static const char * const color_transfer_names[] = {
2406     [AVCOL_TRC_RESERVED0] = "reserved",
2407     [AVCOL_TRC_BT709] = "bt709",
2408     [AVCOL_TRC_UNSPECIFIED] = "unknown",
2409     [AVCOL_TRC_RESERVED] = "reserved",
2410     [AVCOL_TRC_GAMMA22] = "bt470m",
2411     [AVCOL_TRC_GAMMA28] = "bt470bg",
2412     [AVCOL_TRC_SMPTE170M] = "smpte170m",
2413     [AVCOL_TRC_SMPTE240M] = "smpte240m",
2414     [AVCOL_TRC_LINEAR] = "linear",
2415     [AVCOL_TRC_LOG] = "log100",
2416     [AVCOL_TRC_LOG_SQRT] = "log316",
2417     [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
2418     [AVCOL_TRC_BT1361_ECG] = "bt1361e",
2419     [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
2420     [AVCOL_TRC_BT2020_10] = "bt2020-10",
2421     [AVCOL_TRC_BT2020_12] = "bt2020-12",
2422     [AVCOL_TRC_SMPTE2084] = "smpte2084",
2423     [AVCOL_TRC_SMPTE428] = "smpte428",
2424     [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
2425 };
2426
2427 static const char * const color_space_names[] = {
2428     [AVCOL_SPC_RGB] = "gbr",
2429     [AVCOL_SPC_BT709] = "bt709",
2430     [AVCOL_SPC_UNSPECIFIED] = "unknown",
2431     [AVCOL_SPC_RESERVED] = "reserved",
2432     [AVCOL_SPC_FCC] = "fcc",
2433     [AVCOL_SPC_BT470BG] = "bt470bg",
2434     [AVCOL_SPC_SMPTE170M] = "smpte170m",
2435     [AVCOL_SPC_SMPTE240M] = "smpte240m",
2436     [AVCOL_SPC_YCGCO] = "ycgco",
2437     [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
2438     [AVCOL_SPC_BT2020_CL] = "bt2020c",
2439     [AVCOL_SPC_SMPTE2085] = "smpte2085",
2440     [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc",
2441     [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c",
2442     [AVCOL_SPC_ICTCP] = "ictcp",
2443 };
2444
2445 static const char * const chroma_location_names[] = {
2446     [AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
2447     [AVCHROMA_LOC_LEFT] = "left",
2448     [AVCHROMA_LOC_CENTER] = "center",
2449     [AVCHROMA_LOC_TOPLEFT] = "topleft",
2450     [AVCHROMA_LOC_TOP] = "top",
2451     [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
2452     [AVCHROMA_LOC_BOTTOM] = "bottom",
2453 };
2454
2455 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
2456 {
2457     enum AVPixelFormat pix_fmt;
2458
2459     for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
2460         if (av_pix_fmt_descriptors[pix_fmt].name &&
2461             (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
2462              av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
2463             return pix_fmt;
2464
2465     return AV_PIX_FMT_NONE;
2466 }
2467
2468 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
2469 {
2470     return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
2471         av_pix_fmt_descriptors[pix_fmt].name : NULL;
2472 }
2473
2474 #if HAVE_BIGENDIAN
2475 #   define X_NE(be, le) be
2476 #else
2477 #   define X_NE(be, le) le
2478 #endif
2479
2480 enum AVPixelFormat av_get_pix_fmt(const char *name)
2481 {
2482     enum AVPixelFormat pix_fmt;
2483
2484     if (!strcmp(name, "rgb32"))
2485         name = X_NE("argb", "bgra");
2486     else if (!strcmp(name, "bgr32"))
2487         name = X_NE("abgr", "rgba");
2488
2489     pix_fmt = get_pix_fmt_internal(name);
2490     if (pix_fmt == AV_PIX_FMT_NONE) {
2491         char name2[32];
2492
2493         snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
2494         pix_fmt = get_pix_fmt_internal(name2);
2495     }
2496
2497     return pix_fmt;
2498 }
2499
2500 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2501 {
2502     int c, bits = 0;
2503     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2504
2505     for (c = 0; c < pixdesc->nb_components; c++) {
2506         int s = c == 1 || c == 2 ? 0 : log2_pixels;
2507         bits += pixdesc->comp[c].depth << s;
2508     }
2509
2510     return bits >> log2_pixels;
2511 }
2512
2513 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2514 {
2515     int c, bits = 0;
2516     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2517     int steps[4] = {0};
2518
2519     for (c = 0; c < pixdesc->nb_components; c++) {
2520         const AVComponentDescriptor *comp = &pixdesc->comp[c];
2521         int s = c == 1 || c == 2 ? 0 : log2_pixels;
2522         steps[comp->plane] = comp->step << s;
2523     }
2524     for (c = 0; c < 4; c++)
2525         bits += steps[c];
2526
2527     if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
2528         bits *= 8;
2529
2530     return bits >> log2_pixels;
2531 }
2532
2533 char *av_get_pix_fmt_string(char *buf, int buf_size,
2534                             enum AVPixelFormat pix_fmt)
2535 {
2536     /* print header */
2537     if (pix_fmt < 0) {
2538        snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
2539     } else {
2540         const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
2541         snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
2542                  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
2543     }
2544
2545     return buf;
2546 }
2547
2548 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
2549 {
2550     if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
2551         return NULL;
2552     return &av_pix_fmt_descriptors[pix_fmt];
2553 }
2554
2555 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
2556 {
2557     if (!prev)
2558         return &av_pix_fmt_descriptors[0];
2559     while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
2560         prev++;
2561         if (prev->name)
2562             return prev;
2563     }
2564     return NULL;
2565 }
2566
2567 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
2568 {
2569     if (desc < av_pix_fmt_descriptors ||
2570         desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
2571         return AV_PIX_FMT_NONE;
2572
2573     return desc - av_pix_fmt_descriptors;
2574 }
2575
2576 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
2577                                      int *h_shift, int *v_shift)
2578 {
2579     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2580     if (!desc)
2581         return AVERROR(ENOSYS);
2582     *h_shift = desc->log2_chroma_w;
2583     *v_shift = desc->log2_chroma_h;
2584
2585     return 0;
2586 }
2587
2588 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
2589 {
2590     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2591     int i, planes[4] = { 0 }, ret = 0;
2592
2593     if (!desc)
2594         return AVERROR(EINVAL);
2595
2596     for (i = 0; i < desc->nb_components; i++)
2597         planes[desc->comp[i].plane] = 1;
2598     for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
2599         ret += planes[i];
2600     return ret;
2601 }
2602
2603 void ff_check_pixfmt_descriptors(void){
2604     int i, j;
2605
2606     for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
2607         const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
2608         uint8_t fill[4][8+6+3] = {{0}};
2609         uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2610         int linesize[4] = {0,0,0,0};
2611         uint16_t tmp[2];
2612
2613         if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2614             continue;
2615 //         av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2616         av_assert0(d->log2_chroma_w <= 3);
2617         av_assert0(d->log2_chroma_h <= 3);
2618         av_assert0(d->nb_components <= 4);
2619         av_assert0(d->name && d->name[0]);
2620         av_assert2(av_get_pix_fmt(d->name) == i);
2621
2622         for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
2623             const AVComponentDescriptor *c = &d->comp[j];
2624             if(j>=d->nb_components) {
2625                 av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth);
2626                 continue;
2627             }
2628             if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2629                 av_assert0(c->step >= c->depth);
2630             } else {
2631                 av_assert0(8*c->step >= c->depth);
2632             }
2633             if (d->flags & AV_PIX_FMT_FLAG_BAYER)
2634                 continue;
2635             av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2636             av_assert0(tmp[0] == 0 && tmp[1] == 0);
2637             tmp[0] = tmp[1] = (1ULL << c->depth) - 1;
2638             av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2639         }
2640     }
2641 }
2642
2643
2644 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2645 {
2646     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2647     char name[16];
2648     int i;
2649
2650     if (!desc || strlen(desc->name) < 2)
2651         return AV_PIX_FMT_NONE;
2652     av_strlcpy(name, desc->name, sizeof(name));
2653     i = strlen(name) - 2;
2654     if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2655         return AV_PIX_FMT_NONE;
2656
2657     name[i] ^= 'b' ^ 'l';
2658
2659     return get_pix_fmt_internal(name);
2660 }
2661
2662 #define FF_COLOR_NA      -1
2663 #define FF_COLOR_RGB      0 /**< RGB color space */
2664 #define FF_COLOR_GRAY     1 /**< gray color space */
2665 #define FF_COLOR_YUV      2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
2666 #define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
2667 #define FF_COLOR_XYZ      4
2668
2669 #define pixdesc_has_alpha(pixdesc) \
2670     ((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA)
2671
2672
2673 static int get_color_type(const AVPixFmtDescriptor *desc) {
2674     if (desc->flags & AV_PIX_FMT_FLAG_PAL)
2675         return FF_COLOR_RGB;
2676
2677     if(desc->nb_components == 1 || desc->nb_components == 2)
2678         return FF_COLOR_GRAY;
2679
2680     if (desc->name) {
2681         if (av_strstart(desc->name, "yuvj", NULL))
2682             return FF_COLOR_YUV_JPEG;
2683
2684         if (av_strstart(desc->name, "xyz", NULL))
2685             return FF_COLOR_XYZ;
2686     }
2687
2688     if(desc->flags & AV_PIX_FMT_FLAG_RGB)
2689         return  FF_COLOR_RGB;
2690
2691     if(desc->nb_components == 0)
2692         return FF_COLOR_NA;
2693
2694     return FF_COLOR_YUV;
2695 }
2696
2697 static int get_pix_fmt_depth(int *min, int *max, enum AVPixelFormat pix_fmt)
2698 {
2699     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2700     int i;
2701
2702     if (!desc || !desc->nb_components) {
2703         *min = *max = 0;
2704         return AVERROR(EINVAL);
2705     }
2706
2707     *min = INT_MAX, *max = -INT_MAX;
2708     for (i = 0; i < desc->nb_components; i++) {
2709         *min = FFMIN(desc->comp[i].depth, *min);
2710         *max = FFMAX(desc->comp[i].depth, *max);
2711     }
2712     return 0;
2713 }
2714
2715 static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
2716                               enum AVPixelFormat src_pix_fmt,
2717                               unsigned *lossp, unsigned consider)
2718 {
2719     const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt);
2720     const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt);
2721     int src_color, dst_color;
2722     int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth;
2723     int ret, loss, i, nb_components;
2724     int score = INT_MAX - 1;
2725
2726     if (!src_desc || !dst_desc)
2727         return -4;
2728
2729     if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) ||
2730         (dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
2731         if (dst_pix_fmt == src_pix_fmt)
2732             return -1;
2733         else
2734             return -2;
2735     }
2736
2737     /* compute loss */
2738     *lossp = loss = 0;
2739
2740     if (dst_pix_fmt == src_pix_fmt)
2741         return INT_MAX;
2742
2743     if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0)
2744         return -3;
2745     if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0)
2746         return -3;
2747
2748     src_color = get_color_type(src_desc);
2749     dst_color = get_color_type(dst_desc);
2750     if (dst_pix_fmt == AV_PIX_FMT_PAL8)
2751         nb_components = FFMIN(src_desc->nb_components, 4);
2752     else
2753         nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
2754
2755     for (i = 0; i < nb_components; i++) {
2756         int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1);
2757         if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) {
2758             loss |= FF_LOSS_DEPTH;
2759             score -= 65536 >> depth_minus1;
2760         }
2761     }
2762
2763     if (consider & FF_LOSS_RESOLUTION) {
2764         if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) {
2765             loss |= FF_LOSS_RESOLUTION;
2766             score -= 256 << dst_desc->log2_chroma_w;
2767         }
2768         if (dst_desc->log2_chroma_h > src_desc->log2_chroma_h) {
2769             loss |= FF_LOSS_RESOLUTION;
2770             score -= 256 << dst_desc->log2_chroma_h;
2771         }
2772         // don't favor 422 over 420 if downsampling is needed, because 420 has much better support on the decoder side
2773         if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 0 &&
2774             dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 0 ) {
2775             score += 512;
2776         }
2777     }
2778
2779     if(consider & FF_LOSS_COLORSPACE)
2780     switch(dst_color) {
2781     case FF_COLOR_RGB:
2782         if (src_color != FF_COLOR_RGB &&
2783             src_color != FF_COLOR_GRAY)
2784             loss |= FF_LOSS_COLORSPACE;
2785         break;
2786     case FF_COLOR_GRAY:
2787         if (src_color != FF_COLOR_GRAY)
2788             loss |= FF_LOSS_COLORSPACE;
2789         break;
2790     case FF_COLOR_YUV:
2791         if (src_color != FF_COLOR_YUV)
2792             loss |= FF_LOSS_COLORSPACE;
2793         break;
2794     case FF_COLOR_YUV_JPEG:
2795         if (src_color != FF_COLOR_YUV_JPEG &&
2796             src_color != FF_COLOR_YUV &&
2797             src_color != FF_COLOR_GRAY)
2798             loss |= FF_LOSS_COLORSPACE;
2799         break;
2800     default:
2801         /* fail safe test */
2802         if (src_color != dst_color)
2803             loss |= FF_LOSS_COLORSPACE;
2804         break;
2805     }
2806     if(loss & FF_LOSS_COLORSPACE)
2807         score -= (nb_components * 65536) >> FFMIN(dst_desc->comp[0].depth - 1, src_desc->comp[0].depth - 1);
2808
2809     if (dst_color == FF_COLOR_GRAY &&
2810         src_color != FF_COLOR_GRAY && (consider & FF_LOSS_CHROMA)) {
2811         loss |= FF_LOSS_CHROMA;
2812         score -= 2 * 65536;
2813     }
2814     if (!pixdesc_has_alpha(dst_desc) && (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))) {
2815         loss |= FF_LOSS_ALPHA;
2816         score -= 65536;
2817     }
2818     if (dst_pix_fmt == AV_PIX_FMT_PAL8 && (consider & FF_LOSS_COLORQUANT) &&
2819         (src_pix_fmt != AV_PIX_FMT_PAL8 && (src_color != FF_COLOR_GRAY || (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))))) {
2820         loss |= FF_LOSS_COLORQUANT;
2821         score -= 65536;
2822     }
2823
2824     *lossp = loss;
2825     return score;
2826 }
2827
2828 int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt,
2829                             enum AVPixelFormat src_pix_fmt,
2830                             int has_alpha)
2831 {
2832     int loss;
2833     int ret = get_pix_fmt_score(dst_pix_fmt, src_pix_fmt, &loss, has_alpha ? ~0 : ~FF_LOSS_ALPHA);
2834     if (ret < 0)
2835         return ret;
2836     return loss;
2837 }
2838
2839 enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
2840                                              enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
2841 {
2842     enum AVPixelFormat dst_pix_fmt;
2843     int loss1, loss2, loss_mask;
2844     const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1);
2845     const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2);
2846     int score1, score2;
2847
2848     if (!desc1) {
2849         dst_pix_fmt = dst_pix_fmt2;
2850     } else if (!desc2) {
2851         dst_pix_fmt = dst_pix_fmt1;
2852     } else {
2853         loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */
2854         if(!has_alpha)
2855             loss_mask &= ~FF_LOSS_ALPHA;
2856
2857         score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask);
2858         score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask);
2859
2860         if (score1 == score2) {
2861             if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) {
2862                 dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1;
2863             } else {
2864                 dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1;
2865             }
2866         } else {
2867             dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1;
2868         }
2869     }
2870
2871     if (loss_ptr)
2872         *loss_ptr = av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
2873     return dst_pix_fmt;
2874 }
2875
2876 const char *av_color_range_name(enum AVColorRange range)
2877 {
2878     return (unsigned) range < AVCOL_RANGE_NB ?
2879         color_range_names[range] : NULL;
2880 }
2881
2882 int av_color_range_from_name(const char *name)
2883 {
2884     int i;
2885
2886     for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) {
2887         if (av_strstart(name, color_range_names[i], NULL))
2888             return i;
2889     }
2890
2891     return AVERROR(EINVAL);
2892 }
2893
2894 const char *av_color_primaries_name(enum AVColorPrimaries primaries)
2895 {
2896     return (unsigned) primaries < AVCOL_PRI_NB ?
2897         color_primaries_names[primaries] : NULL;
2898 }
2899
2900 int av_color_primaries_from_name(const char *name)
2901 {
2902     int i;
2903
2904     for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) {
2905         if (!color_primaries_names[i])
2906             continue;
2907
2908         if (av_strstart(name, color_primaries_names[i], NULL))
2909             return i;
2910     }
2911
2912     return AVERROR(EINVAL);
2913 }
2914
2915 const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
2916 {
2917     return (unsigned) transfer < AVCOL_TRC_NB ?
2918         color_transfer_names[transfer] : NULL;
2919 }
2920
2921 int av_color_transfer_from_name(const char *name)
2922 {
2923     int i;
2924
2925     for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) {
2926         if (!color_transfer_names[i])
2927             continue;
2928
2929         if (av_strstart(name, color_transfer_names[i], NULL))
2930             return i;
2931     }
2932
2933     return AVERROR(EINVAL);
2934 }
2935
2936 const char *av_color_space_name(enum AVColorSpace space)
2937 {
2938     return (unsigned) space < AVCOL_SPC_NB ?
2939         color_space_names[space] : NULL;
2940 }
2941
2942 int av_color_space_from_name(const char *name)
2943 {
2944     int i;
2945
2946     for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) {
2947         if (!color_space_names[i])
2948             continue;
2949
2950         if (av_strstart(name, color_space_names[i], NULL))
2951             return i;
2952     }
2953
2954     return AVERROR(EINVAL);
2955 }
2956
2957 const char *av_chroma_location_name(enum AVChromaLocation location)
2958 {
2959     return (unsigned) location < AVCHROMA_LOC_NB ?
2960         chroma_location_names[location] : NULL;
2961 }
2962
2963 int av_chroma_location_from_name(const char *name)
2964 {
2965     int i;
2966
2967     for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) {
2968         if (!chroma_location_names[i])
2969             continue;
2970
2971         if (av_strstart(name, chroma_location_names[i], NULL))
2972             return i;
2973     }
2974
2975     return AVERROR(EINVAL);
2976 }