]> git.sesse.net Git - ffmpeg/blob - libavutil/pixdesc.c
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavutil / pixdesc.c
1 /*
2  * pixel format descriptor
3  * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #include <stdio.h>
23 #include <string.h>
24 #include "pixfmt.h"
25 #include "pixdesc.h"
26
27 #include "intreadwrite.h"
28
29 void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4],
30                         const AVPixFmtDescriptor *desc, int x, int y, int c, int w,
31                         int read_pal_component)
32 {
33     AVComponentDescriptor comp = desc->comp[c];
34     int plane = comp.plane;
35     int depth = comp.depth_minus1 + 1;
36     int mask  = (1 << depth) - 1;
37     int shift = comp.shift;
38     int step  = comp.step_minus1 + 1;
39     int flags = desc->flags;
40
41     if (flags & PIX_FMT_BITSTREAM) {
42         int skip = x * step + comp.offset_plus1 - 1;
43         const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
44         int shift = 8 - depth - (skip & 7);
45
46         while (w--) {
47             int val = (*p >> shift) & mask;
48             if (read_pal_component)
49                 val = data[1][4*val + c];
50             shift -= step;
51             p -= shift >> 3;
52             shift &= 7;
53             *dst++ = val;
54         }
55     } else {
56         const uint8_t *p = data[plane] + y * linesize[plane] + x * step + comp.offset_plus1 - 1;
57         int is_8bit = shift + depth <= 8;
58
59         if (is_8bit)
60             p += !!(flags & PIX_FMT_BE);
61
62         while (w--) {
63             int val = is_8bit ? *p :
64                 flags & PIX_FMT_BE ? AV_RB16(p) : AV_RL16(p);
65             val = (val >> shift) & mask;
66             if (read_pal_component)
67                 val = data[1][4 * val + c];
68             p += step;
69             *dst++ = val;
70         }
71     }
72 }
73
74 void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
75                          const AVPixFmtDescriptor *desc, int x, int y, int c, int w)
76 {
77     AVComponentDescriptor comp = desc->comp[c];
78     int plane = comp.plane;
79     int depth = comp.depth_minus1 + 1;
80     int step  = comp.step_minus1 + 1;
81     int flags = desc->flags;
82
83     if (flags & PIX_FMT_BITSTREAM) {
84         int skip = x * step + comp.offset_plus1 - 1;
85         uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
86         int shift = 8 - depth - (skip & 7);
87
88         while (w--) {
89             *p |= *src++ << shift;
90             shift -= step;
91             p -= shift >> 3;
92             shift &= 7;
93         }
94     } else {
95         int shift = comp.shift;
96         uint8_t *p = data[plane] + y * linesize[plane] + x * step + comp.offset_plus1 - 1;
97
98         if (shift + depth <= 8) {
99             p += !!(flags & PIX_FMT_BE);
100             while (w--) {
101                 *p |= (*src++ << shift);
102                 p += step;
103             }
104         } else {
105             while (w--) {
106                 if (flags & PIX_FMT_BE) {
107                     uint16_t val = AV_RB16(p) | (*src++ << shift);
108                     AV_WB16(p, val);
109                 } else {
110                     uint16_t val = AV_RL16(p) | (*src++ << shift);
111                     AV_WL16(p, val);
112                 }
113                 p += step;
114             }
115         }
116     }
117 }
118
119 const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
120     [PIX_FMT_YUV420P] = {
121         .name = "yuv420p",
122         .nb_components = 3,
123         .log2_chroma_w = 1,
124         .log2_chroma_h = 1,
125         .comp = {
126             { 0, 0, 1, 0, 7 },        /* Y */
127             { 1, 0, 1, 0, 7 },        /* U */
128             { 2, 0, 1, 0, 7 },        /* V */
129         },
130         .flags = PIX_FMT_PLANAR,
131     },
132     [PIX_FMT_YUYV422] = {
133         .name = "yuyv422",
134         .nb_components = 3,
135         .log2_chroma_w = 1,
136         .log2_chroma_h = 0,
137         .comp = {
138             { 0, 1, 1, 0, 7 },        /* Y */
139             { 0, 3, 2, 0, 7 },        /* U */
140             { 0, 3, 4, 0, 7 },        /* V */
141         },
142     },
143     [PIX_FMT_RGB24] = {
144         .name = "rgb24",
145         .nb_components = 3,
146         .log2_chroma_w = 0,
147         .log2_chroma_h = 0,
148         .comp = {
149             { 0, 2, 1, 0, 7 },        /* R */
150             { 0, 2, 2, 0, 7 },        /* G */
151             { 0, 2, 3, 0, 7 },        /* B */
152         },
153         .flags = PIX_FMT_RGB,
154     },
155     [PIX_FMT_BGR24] = {
156         .name = "bgr24",
157         .nb_components = 3,
158         .log2_chroma_w = 0,
159         .log2_chroma_h = 0,
160         .comp = {
161             { 0, 2, 1, 0, 7 },        /* B */
162             { 0, 2, 2, 0, 7 },        /* G */
163             { 0, 2, 3, 0, 7 },        /* R */
164         },
165         .flags = PIX_FMT_RGB,
166     },
167     [PIX_FMT_YUV422P] = {
168         .name = "yuv422p",
169         .nb_components = 3,
170         .log2_chroma_w = 1,
171         .log2_chroma_h = 0,
172         .comp = {
173             { 0, 0, 1, 0, 7 },        /* Y */
174             { 1, 0, 1, 0, 7 },        /* U */
175             { 2, 0, 1, 0, 7 },        /* V */
176         },
177         .flags = PIX_FMT_PLANAR,
178     },
179     [PIX_FMT_YUV444P] = {
180         .name = "yuv444p",
181         .nb_components = 3,
182         .log2_chroma_w = 0,
183         .log2_chroma_h = 0,
184         .comp = {
185             { 0, 0, 1, 0, 7 },        /* Y */
186             { 1, 0, 1, 0, 7 },        /* U */
187             { 2, 0, 1, 0, 7 },        /* V */
188         },
189         .flags = PIX_FMT_PLANAR,
190     },
191     [PIX_FMT_YUV410P] = {
192         .name = "yuv410p",
193         .nb_components = 3,
194         .log2_chroma_w = 2,
195         .log2_chroma_h = 2,
196         .comp = {
197             { 0, 0, 1, 0, 7 },        /* Y */
198             { 1, 0, 1, 0, 7 },        /* U */
199             { 2, 0, 1, 0, 7 },        /* V */
200         },
201         .flags = PIX_FMT_PLANAR,
202     },
203     [PIX_FMT_YUV411P] = {
204         .name = "yuv411p",
205         .nb_components = 3,
206         .log2_chroma_w = 2,
207         .log2_chroma_h = 0,
208         .comp = {
209             { 0, 0, 1, 0, 7 },        /* Y */
210             { 1, 0, 1, 0, 7 },        /* U */
211             { 2, 0, 1, 0, 7 },        /* V */
212         },
213         .flags = PIX_FMT_PLANAR,
214     },
215     [PIX_FMT_GRAY8] = {
216         .name = "gray",
217         .nb_components = 1,
218         .log2_chroma_w = 0,
219         .log2_chroma_h = 0,
220         .comp = {
221             { 0, 0, 1, 0, 7 },        /* Y */
222         },
223     },
224     [PIX_FMT_MONOWHITE] = {
225         .name = "monow",
226         .nb_components = 1,
227         .log2_chroma_w = 0,
228         .log2_chroma_h = 0,
229         .comp = {
230             { 0, 0, 1, 0, 0 },        /* Y */
231         },
232         .flags = PIX_FMT_BITSTREAM,
233     },
234     [PIX_FMT_MONOBLACK] = {
235         .name = "monob",
236         .nb_components = 1,
237         .log2_chroma_w = 0,
238         .log2_chroma_h = 0,
239         .comp = {
240             { 0, 0, 1, 7, 0 },        /* Y */
241         },
242         .flags = PIX_FMT_BITSTREAM,
243     },
244     [PIX_FMT_PAL8] = {
245         .name = "pal8",
246         .nb_components = 1,
247         .log2_chroma_w = 0,
248         .log2_chroma_h = 0,
249         .comp = {
250             { 0, 0, 1, 0, 7 },
251         },
252         .flags = PIX_FMT_PAL,
253     },
254     [PIX_FMT_YUVJ420P] = {
255         .name = "yuvj420p",
256         .nb_components = 3,
257         .log2_chroma_w = 1,
258         .log2_chroma_h = 1,
259         .comp = {
260             { 0, 0, 1, 0, 7 },        /* Y */
261             { 1, 0, 1, 0, 7 },        /* U */
262             { 2, 0, 1, 0, 7 },        /* V */
263         },
264         .flags = PIX_FMT_PLANAR,
265     },
266     [PIX_FMT_YUVJ422P] = {
267         .name = "yuvj422p",
268         .nb_components = 3,
269         .log2_chroma_w = 1,
270         .log2_chroma_h = 0,
271         .comp = {
272             { 0, 0, 1, 0, 7 },        /* Y */
273             { 1, 0, 1, 0, 7 },        /* U */
274             { 2, 0, 1, 0, 7 },        /* V */
275         },
276         .flags = PIX_FMT_PLANAR,
277     },
278     [PIX_FMT_YUVJ444P] = {
279         .name = "yuvj444p",
280         .nb_components = 3,
281         .log2_chroma_w = 0,
282         .log2_chroma_h = 0,
283         .comp = {
284             { 0, 0, 1, 0, 7 },        /* Y */
285             { 1, 0, 1, 0, 7 },        /* U */
286             { 2, 0, 1, 0, 7 },        /* V */
287         },
288         .flags = PIX_FMT_PLANAR,
289     },
290     [PIX_FMT_XVMC_MPEG2_MC] = {
291         .name = "xvmcmc",
292         .flags = PIX_FMT_HWACCEL,
293     },
294     [PIX_FMT_XVMC_MPEG2_IDCT] = {
295         .name = "xvmcidct",
296         .flags = PIX_FMT_HWACCEL,
297     },
298     [PIX_FMT_UYVY422] = {
299         .name = "uyvy422",
300         .nb_components = 3,
301         .log2_chroma_w = 1,
302         .log2_chroma_h = 0,
303         .comp = {
304             { 0, 1, 2, 0, 7 },        /* Y */
305             { 0, 3, 1, 0, 7 },        /* U */
306             { 0, 3, 3, 0, 7 },        /* V */
307         },
308     },
309     [PIX_FMT_UYYVYY411] = {
310         .name = "uyyvyy411",
311         .nb_components = 3,
312         .log2_chroma_w = 2,
313         .log2_chroma_h = 0,
314         .comp = {
315             { 0, 3, 2, 0, 7 },        /* Y */
316             { 0, 5, 1, 0, 7 },        /* U */
317             { 0, 5, 4, 0, 7 },        /* V */
318         },
319     },
320     [PIX_FMT_BGR8] = {
321         .name = "bgr8",
322         .nb_components = 3,
323         .log2_chroma_w = 0,
324         .log2_chroma_h = 0,
325         .comp = {
326             { 0, 0, 1, 6, 1 },        /* B */
327             { 0, 0, 1, 3, 2 },        /* G */
328             { 0, 0, 1, 0, 2 },        /* R */
329         },
330         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
331     },
332     [PIX_FMT_BGR4] = {
333         .name = "bgr4",
334         .nb_components = 3,
335         .log2_chroma_w = 0,
336         .log2_chroma_h = 0,
337         .comp = {
338             { 0, 3, 1, 0, 0 },        /* B */
339             { 0, 3, 2, 0, 1 },        /* G */
340             { 0, 3, 4, 0, 0 },        /* R */
341         },
342         .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
343     },
344     [PIX_FMT_BGR4_BYTE] = {
345         .name = "bgr4_byte",
346         .nb_components = 3,
347         .log2_chroma_w = 0,
348         .log2_chroma_h = 0,
349         .comp = {
350             { 0, 0, 1, 3, 0 },        /* B */
351             { 0, 0, 1, 1, 1 },        /* G */
352             { 0, 0, 1, 0, 0 },        /* R */
353         },
354         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
355     },
356     [PIX_FMT_RGB8] = {
357         .name = "rgb8",
358         .nb_components = 3,
359         .log2_chroma_w = 0,
360         .log2_chroma_h = 0,
361         .comp = {
362             { 0, 0, 1, 6, 1 },        /* R */
363             { 0, 0, 1, 3, 2 },        /* G */
364             { 0, 0, 1, 0, 2 },        /* B */
365         },
366         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
367     },
368     [PIX_FMT_RGB4] = {
369         .name = "rgb4",
370         .nb_components = 3,
371         .log2_chroma_w = 0,
372         .log2_chroma_h = 0,
373         .comp = {
374             { 0, 3, 1, 0, 0 },        /* R */
375             { 0, 3, 2, 0, 1 },        /* G */
376             { 0, 3, 4, 0, 0 },        /* B */
377         },
378         .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
379     },
380     [PIX_FMT_RGB4_BYTE] = {
381         .name = "rgb4_byte",
382         .nb_components = 3,
383         .log2_chroma_w = 0,
384         .log2_chroma_h = 0,
385         .comp = {
386             { 0, 0, 1, 3, 0 },        /* R */
387             { 0, 0, 1, 1, 1 },        /* G */
388             { 0, 0, 1, 0, 0 },        /* B */
389         },
390         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
391     },
392     [PIX_FMT_NV12] = {
393         .name = "nv12",
394         .nb_components = 3,
395         .log2_chroma_w = 1,
396         .log2_chroma_h = 1,
397         .comp = {
398             { 0, 0, 1, 0, 7 },        /* Y */
399             { 1, 1, 1, 0, 7 },        /* U */
400             { 1, 1, 2, 0, 7 },        /* V */
401         },
402         .flags = PIX_FMT_PLANAR,
403     },
404     [PIX_FMT_NV21] = {
405         .name = "nv21",
406         .nb_components = 3,
407         .log2_chroma_w = 1,
408         .log2_chroma_h = 1,
409         .comp = {
410             { 0, 0, 1, 0, 7 },        /* Y */
411             { 1, 1, 1, 0, 7 },        /* V */
412             { 1, 1, 2, 0, 7 },        /* U */
413         },
414         .flags = PIX_FMT_PLANAR,
415     },
416     [PIX_FMT_ARGB] = {
417         .name = "argb",
418         .nb_components = 4,
419         .log2_chroma_w = 0,
420         .log2_chroma_h = 0,
421         .comp = {
422             { 0, 3, 1, 0, 7 },        /* A */
423             { 0, 3, 2, 0, 7 },        /* R */
424             { 0, 3, 3, 0, 7 },        /* G */
425             { 0, 3, 4, 0, 7 },        /* B */
426         },
427         .flags = PIX_FMT_RGB,
428     },
429     [PIX_FMT_RGBA] = {
430         .name = "rgba",
431         .nb_components = 4,
432         .log2_chroma_w = 0,
433         .log2_chroma_h = 0,
434         .comp = {
435             { 0, 3, 1, 0, 7 },        /* R */
436             { 0, 3, 2, 0, 7 },        /* G */
437             { 0, 3, 3, 0, 7 },        /* B */
438             { 0, 3, 4, 0, 7 },        /* A */
439         },
440         .flags = PIX_FMT_RGB,
441     },
442     [PIX_FMT_ABGR] = {
443         .name = "abgr",
444         .nb_components = 4,
445         .log2_chroma_w = 0,
446         .log2_chroma_h = 0,
447         .comp = {
448             { 0, 3, 1, 0, 7 },        /* A */
449             { 0, 3, 2, 0, 7 },        /* B */
450             { 0, 3, 3, 0, 7 },        /* G */
451             { 0, 3, 4, 0, 7 },        /* R */
452         },
453         .flags = PIX_FMT_RGB,
454     },
455     [PIX_FMT_BGRA] = {
456         .name = "bgra",
457         .nb_components = 4,
458         .log2_chroma_w = 0,
459         .log2_chroma_h = 0,
460         .comp = {
461             { 0, 3, 1, 0, 7 },        /* B */
462             { 0, 3, 2, 0, 7 },        /* G */
463             { 0, 3, 3, 0, 7 },        /* R */
464             { 0, 3, 4, 0, 7 },        /* A */
465         },
466         .flags = PIX_FMT_RGB,
467     },
468     [PIX_FMT_0RGB] = {
469         .name = "0rgb",
470         .nb_components= 3,
471         .log2_chroma_w= 0,
472         .log2_chroma_h= 0,
473         .comp = {
474             { 0, 3, 2, 0, 7 },        /* R */
475             { 0, 3, 3, 0, 7 },        /* G */
476             { 0, 3, 4, 0, 7 },        /* B */
477         },
478         .flags = PIX_FMT_RGB,
479     },
480     [PIX_FMT_RGB0] = {
481         .name = "rgb0",
482         .nb_components= 3,
483         .log2_chroma_w= 0,
484         .log2_chroma_h= 0,
485         .comp = {
486             { 0, 3, 1, 0, 7 },        /* R */
487             { 0, 3, 2, 0, 7 },        /* G */
488             { 0, 3, 3, 0, 7 },        /* B */
489             { 0, 3, 4, 0, 7 },        /* A */
490         },
491         .flags = PIX_FMT_RGB,
492     },
493     [PIX_FMT_0BGR] = {
494         .name = "0bgr",
495         .nb_components= 3,
496         .log2_chroma_w= 0,
497         .log2_chroma_h= 0,
498         .comp = {
499             { 0, 3, 2, 0, 7 },        /* B */
500             { 0, 3, 3, 0, 7 },        /* G */
501             { 0, 3, 4, 0, 7 },        /* R */
502         },
503         .flags = PIX_FMT_RGB,
504     },
505     [PIX_FMT_BGR0] = {
506         .name = "bgr0",
507         .nb_components= 3,
508         .log2_chroma_w= 0,
509         .log2_chroma_h= 0,
510         .comp = {
511             { 0, 3, 1, 0, 7 },        /* B */
512             { 0, 3, 2, 0, 7 },        /* G */
513             { 0, 3, 3, 0, 7 },        /* R */
514             { 0, 3, 4, 0, 7 },        /* A */
515         },
516         .flags = PIX_FMT_RGB,
517     },
518     [PIX_FMT_GRAY16BE] = {
519         .name = "gray16be",
520         .nb_components = 1,
521         .log2_chroma_w = 0,
522         .log2_chroma_h = 0,
523         .comp = {
524             { 0, 1, 1, 0, 15 },       /* Y */
525         },
526         .flags = PIX_FMT_BE,
527     },
528     [PIX_FMT_GRAY16LE] = {
529         .name = "gray16le",
530         .nb_components = 1,
531         .log2_chroma_w = 0,
532         .log2_chroma_h = 0,
533         .comp = {
534             { 0, 1, 1, 0, 15 },       /* Y */
535         },
536     },
537     [PIX_FMT_YUV440P] = {
538         .name = "yuv440p",
539         .nb_components = 3,
540         .log2_chroma_w = 0,
541         .log2_chroma_h = 1,
542         .comp = {
543             { 0, 0, 1, 0, 7 },        /* Y */
544             { 1, 0, 1, 0, 7 },        /* U */
545             { 2, 0, 1, 0, 7 },        /* V */
546         },
547         .flags = PIX_FMT_PLANAR,
548     },
549     [PIX_FMT_YUVJ440P] = {
550         .name = "yuvj440p",
551         .nb_components = 3,
552         .log2_chroma_w = 0,
553         .log2_chroma_h = 1,
554         .comp = {
555             { 0, 0, 1, 0, 7 },        /* Y */
556             { 1, 0, 1, 0, 7 },        /* U */
557             { 2, 0, 1, 0, 7 },        /* V */
558         },
559         .flags = PIX_FMT_PLANAR,
560     },
561     [PIX_FMT_YUVA420P] = {
562         .name = "yuva420p",
563         .nb_components = 4,
564         .log2_chroma_w = 1,
565         .log2_chroma_h = 1,
566         .comp = {
567             { 0, 0, 1, 0, 7 },        /* Y */
568             { 1, 0, 1, 0, 7 },        /* U */
569             { 2, 0, 1, 0, 7 },        /* V */
570             { 3, 0, 1, 0, 7 },        /* A */
571         },
572         .flags = PIX_FMT_PLANAR,
573     },
574     [PIX_FMT_YUVA444P] = {
575         .name = "yuva444p",
576         .nb_components = 4,
577         .log2_chroma_w = 0,
578         .log2_chroma_h = 0,
579         .comp = {
580             { 0, 0, 1, 0, 7 },        /* Y */
581             { 1, 0, 1, 0, 7 },        /* U */
582             { 2, 0, 1, 0, 7 },        /* V */
583             { 3, 0, 1, 0, 7 },        /* A */
584         },
585         .flags = PIX_FMT_PLANAR,
586     },
587     [PIX_FMT_VDPAU_H264] = {
588         .name = "vdpau_h264",
589         .log2_chroma_w = 1,
590         .log2_chroma_h = 1,
591         .flags = PIX_FMT_HWACCEL,
592     },
593     [PIX_FMT_VDPAU_MPEG1] = {
594         .name = "vdpau_mpeg1",
595         .log2_chroma_w = 1,
596         .log2_chroma_h = 1,
597         .flags = PIX_FMT_HWACCEL,
598     },
599     [PIX_FMT_VDPAU_MPEG2] = {
600         .name = "vdpau_mpeg2",
601         .log2_chroma_w = 1,
602         .log2_chroma_h = 1,
603         .flags = PIX_FMT_HWACCEL,
604     },
605     [PIX_FMT_VDPAU_WMV3] = {
606         .name = "vdpau_wmv3",
607         .log2_chroma_w = 1,
608         .log2_chroma_h = 1,
609         .flags = PIX_FMT_HWACCEL,
610     },
611     [PIX_FMT_VDPAU_VC1] = {
612         .name = "vdpau_vc1",
613         .log2_chroma_w = 1,
614         .log2_chroma_h = 1,
615         .flags = PIX_FMT_HWACCEL,
616     },
617     [PIX_FMT_VDPAU_MPEG4] = {
618         .name = "vdpau_mpeg4",
619         .log2_chroma_w = 1,
620         .log2_chroma_h = 1,
621         .flags = PIX_FMT_HWACCEL,
622     },
623     [PIX_FMT_RGB48BE] = {
624         .name = "rgb48be",
625         .nb_components = 3,
626         .log2_chroma_w = 0,
627         .log2_chroma_h = 0,
628         .comp = {
629             { 0, 5, 1, 0, 15 },       /* R */
630             { 0, 5, 3, 0, 15 },       /* G */
631             { 0, 5, 5, 0, 15 },       /* B */
632         },
633         .flags = PIX_FMT_RGB | PIX_FMT_BE,
634     },
635     [PIX_FMT_RGB48LE] = {
636         .name = "rgb48le",
637         .nb_components = 3,
638         .log2_chroma_w = 0,
639         .log2_chroma_h = 0,
640         .comp = {
641             { 0, 5, 1, 0, 15 },       /* R */
642             { 0, 5, 3, 0, 15 },       /* G */
643             { 0, 5, 5, 0, 15 },       /* B */
644         },
645         .flags = PIX_FMT_RGB,
646     },
647     [PIX_FMT_RGBA64BE] = {
648         .name = "rgba64be",
649         .nb_components= 4,
650         .log2_chroma_w= 0,
651         .log2_chroma_h= 0,
652         .comp = {
653             { 0, 7, 1, 0, 15 },       /* R */
654             { 0, 7, 3, 0, 15 },       /* G */
655             { 0, 7, 5, 0, 15 },       /* B */
656             { 0, 7, 7, 0, 15 },       /* A */
657         },
658         .flags = PIX_FMT_RGB | PIX_FMT_BE,
659     },
660     [PIX_FMT_RGBA64LE] = {
661         .name = "rgba64le",
662         .nb_components= 4,
663         .log2_chroma_w= 0,
664         .log2_chroma_h= 0,
665         .comp = {
666             { 0, 7, 1, 0, 15 },       /* R */
667             { 0, 7, 3, 0, 15 },       /* G */
668             { 0, 7, 5, 0, 15 },       /* B */
669             { 0, 7, 7, 0, 15 },       /* B */
670         },
671         .flags = PIX_FMT_RGB,
672     },
673     [PIX_FMT_RGB565BE] = {
674         .name = "rgb565be",
675         .nb_components = 3,
676         .log2_chroma_w = 0,
677         .log2_chroma_h = 0,
678         .comp = {
679             { 0, 1, 0, 3, 4 },        /* R */
680             { 0, 1, 1, 5, 5 },        /* G */
681             { 0, 1, 1, 0, 4 },        /* B */
682         },
683         .flags = PIX_FMT_BE | PIX_FMT_RGB,
684     },
685     [PIX_FMT_RGB565LE] = {
686         .name = "rgb565le",
687         .nb_components = 3,
688         .log2_chroma_w = 0,
689         .log2_chroma_h = 0,
690         .comp = {
691             { 0, 1, 2, 3, 4 },        /* R */
692             { 0, 1, 1, 5, 5 },        /* G */
693             { 0, 1, 1, 0, 4 },        /* B */
694         },
695         .flags = PIX_FMT_RGB,
696     },
697     [PIX_FMT_RGB555BE] = {
698         .name = "rgb555be",
699         .nb_components = 3,
700         .log2_chroma_w = 0,
701         .log2_chroma_h = 0,
702         .comp = {
703             { 0, 1, 0, 2, 4 },        /* R */
704             { 0, 1, 1, 5, 4 },        /* G */
705             { 0, 1, 1, 0, 4 },        /* B */
706         },
707         .flags = PIX_FMT_BE | PIX_FMT_RGB,
708     },
709     [PIX_FMT_RGB555LE] = {
710         .name = "rgb555le",
711         .nb_components = 3,
712         .log2_chroma_w = 0,
713         .log2_chroma_h = 0,
714         .comp = {
715             { 0, 1, 2, 2, 4 },        /* R */
716             { 0, 1, 1, 5, 4 },        /* G */
717             { 0, 1, 1, 0, 4 },        /* B */
718         },
719         .flags = PIX_FMT_RGB,
720     },
721     [PIX_FMT_RGB444BE] = {
722         .name = "rgb444be",
723         .nb_components = 3,
724         .log2_chroma_w = 0,
725         .log2_chroma_h = 0,
726         .comp = {
727             { 0, 1, 0, 0, 3 },        /* R */
728             { 0, 1, 1, 4, 3 },        /* G */
729             { 0, 1, 1, 0, 3 },        /* B */
730         },
731         .flags = PIX_FMT_BE | PIX_FMT_RGB,
732     },
733     [PIX_FMT_RGB444LE] = {
734         .name = "rgb444le",
735         .nb_components = 3,
736         .log2_chroma_w = 0,
737         .log2_chroma_h = 0,
738         .comp = {
739             { 0, 1, 2, 0, 3 },        /* R */
740             { 0, 1, 1, 4, 3 },        /* G */
741             { 0, 1, 1, 0, 3 },        /* B */
742         },
743         .flags = PIX_FMT_RGB,
744     },
745     [PIX_FMT_BGR48BE] = {
746         .name = "bgr48be",
747         .nb_components = 3,
748         .log2_chroma_w = 0,
749         .log2_chroma_h = 0,
750         .comp = {
751             { 0, 5, 1, 0, 15 },       /* B */
752             { 0, 5, 3, 0, 15 },       /* G */
753             { 0, 5, 5, 0, 15 },       /* R */
754         },
755         .flags = PIX_FMT_BE | PIX_FMT_RGB,
756     },
757     [PIX_FMT_BGR48LE] = {
758         .name = "bgr48le",
759         .nb_components = 3,
760         .log2_chroma_w = 0,
761         .log2_chroma_h = 0,
762         .comp = {
763             { 0, 5, 1, 0, 15 },       /* B */
764             { 0, 5, 3, 0, 15 },       /* G */
765             { 0, 5, 5, 0, 15 },       /* R */
766         },
767         .flags = PIX_FMT_RGB,
768     },
769     [PIX_FMT_BGRA64BE] = {
770         .name = "bgra64be",
771         .nb_components= 4,
772         .log2_chroma_w= 0,
773         .log2_chroma_h= 0,
774         .comp = {
775             { 0, 7, 1, 0, 15 },       /* B */
776             { 0, 7, 3, 0, 15 },       /* G */
777             { 0, 7, 5, 0, 15 },       /* R */
778             { 0, 7, 7, 0, 15 },       /* A */
779         },
780         .flags = PIX_FMT_BE,
781     },
782     [PIX_FMT_BGRA64LE] = {
783         .name = "bgra64le",
784         .nb_components= 4,
785         .log2_chroma_w= 0,
786         .log2_chroma_h= 0,
787         .comp = {
788             { 0, 7, 1, 0, 15 },       /* B */
789             { 0, 7, 3, 0, 15 },       /* G */
790             { 0, 7, 5, 0, 15 },       /* R */
791             { 0, 7, 7, 0, 15 },       /* A */
792         },
793     },
794     [PIX_FMT_BGR565BE] = {
795         .name = "bgr565be",
796         .nb_components = 3,
797         .log2_chroma_w = 0,
798         .log2_chroma_h = 0,
799         .comp = {
800             { 0, 1, 0, 3, 4 },        /* B */
801             { 0, 1, 1, 5, 5 },        /* G */
802             { 0, 1, 1, 0, 4 },        /* R */
803         },
804         .flags = PIX_FMT_BE | PIX_FMT_RGB,
805     },
806     [PIX_FMT_BGR565LE] = {
807         .name = "bgr565le",
808         .nb_components = 3,
809         .log2_chroma_w = 0,
810         .log2_chroma_h = 0,
811         .comp = {
812             { 0, 1, 2, 3, 4 },        /* B */
813             { 0, 1, 1, 5, 5 },        /* G */
814             { 0, 1, 1, 0, 4 },        /* R */
815         },
816         .flags = PIX_FMT_RGB,
817     },
818     [PIX_FMT_BGR555BE] = {
819         .name = "bgr555be",
820         .nb_components = 3,
821         .log2_chroma_w = 0,
822         .log2_chroma_h = 0,
823         .comp = {
824             { 0, 1, 0, 2, 4 },       /* B */
825             { 0, 1, 1, 5, 4 },       /* G */
826             { 0, 1, 1, 0, 4 },       /* R */
827         },
828         .flags = PIX_FMT_BE | PIX_FMT_RGB,
829      },
830     [PIX_FMT_BGR555LE] = {
831         .name = "bgr555le",
832         .nb_components = 3,
833         .log2_chroma_w = 0,
834         .log2_chroma_h = 0,
835         .comp = {
836             { 0, 1, 2, 2, 4 },        /* B */
837             { 0, 1, 1, 5, 4 },        /* G */
838             { 0, 1, 1, 0, 4 },        /* R */
839         },
840         .flags = PIX_FMT_RGB,
841     },
842     [PIX_FMT_BGR444BE] = {
843         .name = "bgr444be",
844         .nb_components = 3,
845         .log2_chroma_w = 0,
846         .log2_chroma_h = 0,
847         .comp = {
848             { 0, 1, 0, 0, 3 },       /* B */
849             { 0, 1, 1, 4, 3 },       /* G */
850             { 0, 1, 1, 0, 3 },       /* R */
851         },
852         .flags = PIX_FMT_BE | PIX_FMT_RGB,
853      },
854     [PIX_FMT_BGR444LE] = {
855         .name = "bgr444le",
856         .nb_components = 3,
857         .log2_chroma_w = 0,
858         .log2_chroma_h = 0,
859         .comp = {
860             { 0, 1, 2, 0, 3 },        /* B */
861             { 0, 1, 1, 4, 3 },        /* G */
862             { 0, 1, 1, 0, 3 },        /* R */
863         },
864         .flags = PIX_FMT_RGB,
865     },
866     [PIX_FMT_VAAPI_MOCO] = {
867         .name = "vaapi_moco",
868         .log2_chroma_w = 1,
869         .log2_chroma_h = 1,
870         .flags = PIX_FMT_HWACCEL,
871     },
872     [PIX_FMT_VAAPI_IDCT] = {
873         .name = "vaapi_idct",
874         .log2_chroma_w = 1,
875         .log2_chroma_h = 1,
876         .flags = PIX_FMT_HWACCEL,
877     },
878     [PIX_FMT_VAAPI_VLD] = {
879         .name = "vaapi_vld",
880         .log2_chroma_w = 1,
881         .log2_chroma_h = 1,
882         .flags = PIX_FMT_HWACCEL,
883     },
884     [PIX_FMT_VDA_VLD] = {
885         .name = "vda_vld",
886         .log2_chroma_w = 1,
887         .log2_chroma_h = 1,
888         .flags = PIX_FMT_HWACCEL,
889     },
890     [PIX_FMT_YUV420P9LE] = {
891         .name = "yuv420p9le",
892         .nb_components = 3,
893         .log2_chroma_w = 1,
894         .log2_chroma_h = 1,
895         .comp = {
896             { 0, 1, 1, 0, 8 },        /* Y */
897             { 1, 1, 1, 0, 8 },        /* U */
898             { 2, 1, 1, 0, 8 },        /* V */
899         },
900         .flags = PIX_FMT_PLANAR,
901     },
902     [PIX_FMT_YUV420P9BE] = {
903         .name = "yuv420p9be",
904         .nb_components = 3,
905         .log2_chroma_w = 1,
906         .log2_chroma_h = 1,
907         .comp = {
908             { 0, 1, 1, 0, 8 },        /* Y */
909             { 1, 1, 1, 0, 8 },        /* U */
910             { 2, 1, 1, 0, 8 },        /* V */
911         },
912         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
913     },
914     [PIX_FMT_YUV420P10LE] = {
915         .name = "yuv420p10le",
916         .nb_components = 3,
917         .log2_chroma_w = 1,
918         .log2_chroma_h = 1,
919         .comp = {
920             { 0, 1, 1, 0, 9 },        /* Y */
921             { 1, 1, 1, 0, 9 },        /* U */
922             { 2, 1, 1, 0, 9 },        /* V */
923         },
924         .flags = PIX_FMT_PLANAR,
925     },
926     [PIX_FMT_YUV420P10BE] = {
927         .name = "yuv420p10be",
928         .nb_components = 3,
929         .log2_chroma_w = 1,
930         .log2_chroma_h = 1,
931         .comp = {
932             { 0, 1, 1, 0, 9 },        /* Y */
933             { 1, 1, 1, 0, 9 },        /* U */
934             { 2, 1, 1, 0, 9 },        /* V */
935         },
936         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
937     },
938     [PIX_FMT_YUV420P16LE] = {
939         .name = "yuv420p16le",
940         .nb_components = 3,
941         .log2_chroma_w = 1,
942         .log2_chroma_h = 1,
943         .comp = {
944             { 0, 1, 1, 0, 15 },        /* Y */
945             { 1, 1, 1, 0, 15 },        /* U */
946             { 2, 1, 1, 0, 15 },        /* V */
947         },
948         .flags = PIX_FMT_PLANAR,
949     },
950     [PIX_FMT_YUV420P16BE] = {
951         .name = "yuv420p16be",
952         .nb_components = 3,
953         .log2_chroma_w = 1,
954         .log2_chroma_h = 1,
955         .comp = {
956             { 0, 1, 1, 0, 15 },        /* Y */
957             { 1, 1, 1, 0, 15 },        /* U */
958             { 2, 1, 1, 0, 15 },        /* V */
959         },
960         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
961     },
962     [PIX_FMT_YUV422P9LE] = {
963         .name = "yuv422p9le",
964         .nb_components = 3,
965         .log2_chroma_w = 1,
966         .log2_chroma_h = 0,
967         .comp = {
968             { 0, 1, 1, 0, 8 },        /* Y */
969             { 1, 1, 1, 0, 8 },        /* U */
970             { 2, 1, 1, 0, 8 },        /* V */
971         },
972         .flags = PIX_FMT_PLANAR,
973     },
974     [PIX_FMT_YUV422P9BE] = {
975         .name = "yuv422p9be",
976         .nb_components = 3,
977         .log2_chroma_w = 1,
978         .log2_chroma_h = 0,
979         .comp = {
980             { 0, 1, 1, 0, 8 },        /* Y */
981             { 1, 1, 1, 0, 8 },        /* U */
982             { 2, 1, 1, 0, 8 },        /* V */
983         },
984         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
985     },
986     [PIX_FMT_YUV422P10LE] = {
987         .name = "yuv422p10le",
988         .nb_components = 3,
989         .log2_chroma_w = 1,
990         .log2_chroma_h = 0,
991         .comp = {
992             { 0, 1, 1, 0, 9 },        /* Y */
993             { 1, 1, 1, 0, 9 },        /* U */
994             { 2, 1, 1, 0, 9 },        /* V */
995         },
996         .flags = PIX_FMT_PLANAR,
997     },
998     [PIX_FMT_YUV422P10BE] = {
999         .name = "yuv422p10be",
1000         .nb_components = 3,
1001         .log2_chroma_w = 1,
1002         .log2_chroma_h = 0,
1003         .comp = {
1004             { 0, 1, 1, 0, 9 },        /* Y */
1005             { 1, 1, 1, 0, 9 },        /* U */
1006             { 2, 1, 1, 0, 9 },        /* V */
1007         },
1008         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1009     },
1010     [PIX_FMT_YUV422P16LE] = {
1011         .name = "yuv422p16le",
1012         .nb_components = 3,
1013         .log2_chroma_w = 1,
1014         .log2_chroma_h = 0,
1015         .comp = {
1016             { 0, 1, 1, 0, 15 },        /* Y */
1017             { 1, 1, 1, 0, 15 },        /* U */
1018             { 2, 1, 1, 0, 15 },        /* V */
1019         },
1020         .flags = PIX_FMT_PLANAR,
1021     },
1022     [PIX_FMT_YUV422P16BE] = {
1023         .name = "yuv422p16be",
1024         .nb_components = 3,
1025         .log2_chroma_w = 1,
1026         .log2_chroma_h = 0,
1027         .comp = {
1028             { 0, 1, 1, 0, 15 },        /* Y */
1029             { 1, 1, 1, 0, 15 },        /* U */
1030             { 2, 1, 1, 0, 15 },        /* V */
1031         },
1032         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1033     },
1034     [PIX_FMT_YUV444P16LE] = {
1035         .name = "yuv444p16le",
1036         .nb_components = 3,
1037         .log2_chroma_w = 0,
1038         .log2_chroma_h = 0,
1039         .comp = {
1040             { 0, 1, 1, 0, 15 },        /* Y */
1041             { 1, 1, 1, 0, 15 },        /* U */
1042             { 2, 1, 1, 0, 15 },        /* V */
1043         },
1044         .flags = PIX_FMT_PLANAR,
1045     },
1046     [PIX_FMT_YUV444P16BE] = {
1047         .name = "yuv444p16be",
1048         .nb_components = 3,
1049         .log2_chroma_w = 0,
1050         .log2_chroma_h = 0,
1051         .comp = {
1052             { 0, 1, 1, 0, 15 },        /* Y */
1053             { 1, 1, 1, 0, 15 },        /* U */
1054             { 2, 1, 1, 0, 15 },        /* V */
1055         },
1056         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1057     },
1058     [PIX_FMT_YUV444P10LE] = {
1059         .name = "yuv444p10le",
1060         .nb_components = 3,
1061         .log2_chroma_w = 0,
1062         .log2_chroma_h = 0,
1063         .comp = {
1064             { 0, 1, 1, 0, 9 },        /* Y */
1065             { 1, 1, 1, 0, 9 },        /* U */
1066             { 2, 1, 1, 0, 9 },        /* V */
1067         },
1068         .flags = PIX_FMT_PLANAR,
1069     },
1070     [PIX_FMT_YUV444P10BE] = {
1071         .name = "yuv444p10be",
1072         .nb_components = 3,
1073         .log2_chroma_w = 0,
1074         .log2_chroma_h = 0,
1075         .comp = {
1076             { 0, 1, 1, 0, 9 },        /* Y */
1077             { 1, 1, 1, 0, 9 },        /* U */
1078             { 2, 1, 1, 0, 9 },        /* V */
1079         },
1080         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1081     },
1082     [PIX_FMT_YUV444P9LE] = {
1083         .name = "yuv444p9le",
1084         .nb_components = 3,
1085         .log2_chroma_w = 0,
1086         .log2_chroma_h = 0,
1087         .comp = {
1088             { 0, 1, 1, 0, 8 },        /* Y */
1089             { 1, 1, 1, 0, 8 },        /* U */
1090             { 2, 1, 1, 0, 8 },        /* V */
1091         },
1092         .flags = PIX_FMT_PLANAR,
1093     },
1094     [PIX_FMT_YUV444P9BE] = {
1095         .name = "yuv444p9be",
1096         .nb_components = 3,
1097         .log2_chroma_w = 0,
1098         .log2_chroma_h = 0,
1099         .comp = {
1100             { 0, 1, 1, 0, 8 },        /* Y */
1101             { 1, 1, 1, 0, 8 },        /* U */
1102             { 2, 1, 1, 0, 8 },        /* V */
1103         },
1104         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
1105     },
1106     [PIX_FMT_DXVA2_VLD] = {
1107         .name = "dxva2_vld",
1108         .log2_chroma_w = 1,
1109         .log2_chroma_h = 1,
1110         .flags = PIX_FMT_HWACCEL,
1111     },
1112     [PIX_FMT_VDA_VLD] = {
1113         .name = "vda_vld",
1114         .log2_chroma_w = 1,
1115         .log2_chroma_h = 1,
1116         .flags = PIX_FMT_HWACCEL,
1117     },
1118     [PIX_FMT_GRAY8A] = {
1119         .name = "gray8a",
1120         .nb_components = 2,
1121         .comp = {
1122             { 0, 1, 1, 0, 7 },        /* Y */
1123             { 0, 1, 2, 0, 7 },        /* A */
1124         },
1125     },
1126     [PIX_FMT_GBR24P] = {
1127         .name = "gbr24p",
1128         .nb_components= 3,
1129         .comp = {
1130             { 1, 0, 1, 0, 7 },        /* B */
1131             { 0, 0, 1, 0, 7 },        /* G */
1132             { 2, 0, 1, 0, 7 },        /* R */
1133         },
1134         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1135     },
1136     [PIX_FMT_GBRP] = {
1137         .name = "gbrp",
1138         .nb_components = 3,
1139         .log2_chroma_w = 0,
1140         .log2_chroma_h = 0,
1141         .comp = {
1142             { 0, 0, 1, 0, 7 },        /* G */
1143             { 1, 0, 1, 0, 7 },        /* B */
1144             { 2, 0, 1, 0, 7 },        /* R */
1145         },
1146         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1147     },
1148     [PIX_FMT_GBRP9LE] = {
1149         .name = "gbrp9le",
1150         .nb_components = 3,
1151         .log2_chroma_w = 0,
1152         .log2_chroma_h = 0,
1153         .comp = {
1154             { 0, 1, 1, 0, 8 },        /* G */
1155             { 1, 1, 1, 0, 8 },        /* B */
1156             { 2, 1, 1, 0, 8 },        /* R */
1157         },
1158         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1159     },
1160     [PIX_FMT_GBRP9BE] = {
1161         .name = "gbrp9be",
1162         .nb_components = 3,
1163         .log2_chroma_w = 0,
1164         .log2_chroma_h = 0,
1165         .comp = {
1166             { 0, 1, 1, 0, 8 },        /* G */
1167             { 1, 1, 1, 0, 8 },        /* B */
1168             { 2, 1, 1, 0, 8 },        /* R */
1169         },
1170         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1171     },
1172     [PIX_FMT_GBRP10LE] = {
1173         .name = "gbrp10le",
1174         .nb_components = 3,
1175         .log2_chroma_w = 0,
1176         .log2_chroma_h = 0,
1177         .comp = {
1178             { 0, 1, 1, 0, 9 },        /* G */
1179             { 1, 1, 1, 0, 9 },        /* B */
1180             { 2, 1, 1, 0, 9 },        /* R */
1181         },
1182         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1183     },
1184     [PIX_FMT_GBRP10BE] = {
1185         .name = "gbrp10be",
1186         .nb_components = 3,
1187         .log2_chroma_w = 0,
1188         .log2_chroma_h = 0,
1189         .comp = {
1190             { 0, 1, 1, 0, 9 },        /* G */
1191             { 1, 1, 1, 0, 9 },        /* B */
1192             { 2, 1, 1, 0, 9 },        /* R */
1193         },
1194         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1195     },
1196     [PIX_FMT_GBRP16LE] = {
1197         .name = "gbrp16le",
1198         .nb_components = 3,
1199         .log2_chroma_w = 0,
1200         .log2_chroma_h = 0,
1201         .comp = {
1202             { 0, 1, 1, 0, 15 },       /* G */
1203             { 1, 1, 1, 0, 15 },       /* B */
1204             { 2, 1, 1, 0, 15 },       /* R */
1205         },
1206         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
1207     },
1208     [PIX_FMT_GBRP16BE] = {
1209         .name = "gbrp16be",
1210         .nb_components = 3,
1211         .log2_chroma_w = 0,
1212         .log2_chroma_h = 0,
1213         .comp = {
1214             { 0, 1, 1, 0, 15 },       /* G */
1215             { 1, 1, 1, 0, 15 },       /* B */
1216             { 2, 1, 1, 0, 15 },       /* R */
1217         },
1218         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
1219     },
1220 };
1221
1222 static enum PixelFormat get_pix_fmt_internal(const char *name)
1223 {
1224     enum PixelFormat pix_fmt;
1225
1226     for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
1227         if (av_pix_fmt_descriptors[pix_fmt].name &&
1228             !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1229             return pix_fmt;
1230
1231     return PIX_FMT_NONE;
1232 }
1233
1234 const char *av_get_pix_fmt_name(enum PixelFormat pix_fmt)
1235 {
1236     return (unsigned)pix_fmt < PIX_FMT_NB ?
1237         av_pix_fmt_descriptors[pix_fmt].name : NULL;
1238 }
1239
1240 #if HAVE_BIGENDIAN
1241 #   define X_NE(be, le) be
1242 #else
1243 #   define X_NE(be, le) le
1244 #endif
1245
1246 enum PixelFormat av_get_pix_fmt(const char *name)
1247 {
1248     enum PixelFormat pix_fmt;
1249
1250     if (!strcmp(name, "rgb32"))
1251         name = X_NE("argb", "bgra");
1252     else if (!strcmp(name, "bgr32"))
1253         name = X_NE("abgr", "rgba");
1254
1255     pix_fmt = get_pix_fmt_internal(name);
1256     if (pix_fmt == PIX_FMT_NONE) {
1257         char name2[32];
1258
1259         snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1260         pix_fmt = get_pix_fmt_internal(name2);
1261     }
1262     return pix_fmt;
1263 }
1264
1265 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1266 {
1267     int c, bits = 0;
1268     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1269
1270     for (c = 0; c < pixdesc->nb_components; c++) {
1271         int s = c == 1 || c == 2 ? 0 : log2_pixels;
1272         bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1273     }
1274
1275     return bits >> log2_pixels;
1276 }
1277
1278 char *av_get_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt)
1279 {
1280     /* print header */
1281     if (pix_fmt < 0) {
1282        snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1283     } else {
1284         const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1285         snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1286                  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1287     }
1288
1289     return buf;
1290 }