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