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