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