2 * pixel format descriptor
3 * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of FFmpeg.
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.
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.
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
30 #include "intreadwrite.h"
34 void av_read_image_line(uint16_t *dst,
35 const uint8_t *data[4], const int linesize[4],
36 const AVPixFmtDescriptor *desc,
37 int x, int y, int c, int w,
38 int read_pal_component)
40 AVComponentDescriptor comp = desc->comp[c];
41 int plane = comp.plane;
42 int depth = comp.depth_minus1 + 1;
43 int mask = (1 << depth) - 1;
44 int shift = comp.shift;
45 int step = comp.step_minus1 + 1;
46 int flags = desc->flags;
48 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
49 int skip = x * step + comp.offset_plus1 - 1;
50 const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
51 int shift = 8 - depth - (skip & 7);
54 int val = (*p >> shift) & mask;
55 if (read_pal_component)
56 val = data[1][4*val + c];
63 const uint8_t *p = data[plane] + y * linesize[plane] +
64 x * step + comp.offset_plus1 - 1;
65 int is_8bit = shift + depth <= 8;
68 p += !!(flags & AV_PIX_FMT_FLAG_BE);
71 int val = is_8bit ? *p :
72 flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
73 val = (val >> shift) & mask;
74 if (read_pal_component)
75 val = data[1][4 * val + c];
82 void av_write_image_line(const uint16_t *src,
83 uint8_t *data[4], const int linesize[4],
84 const AVPixFmtDescriptor *desc,
85 int x, int y, int c, int w)
87 AVComponentDescriptor comp = desc->comp[c];
88 int plane = comp.plane;
89 int depth = comp.depth_minus1 + 1;
90 int step = comp.step_minus1 + 1;
91 int flags = desc->flags;
93 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
94 int skip = x * step + comp.offset_plus1 - 1;
95 uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
96 int shift = 8 - depth - (skip & 7);
99 *p |= *src++ << shift;
105 int shift = comp.shift;
106 uint8_t *p = data[plane] + y * linesize[plane] +
107 x * step + comp.offset_plus1 - 1;
109 if (shift + depth <= 8) {
110 p += !!(flags & AV_PIX_FMT_FLAG_BE);
112 *p |= (*src++ << shift);
117 if (flags & AV_PIX_FMT_FLAG_BE) {
118 uint16_t val = AV_RB16(p) | (*src++ << shift);
121 uint16_t val = AV_RL16(p) | (*src++ << shift);
130 #if !FF_API_PIX_FMT_DESC
133 const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
134 [AV_PIX_FMT_YUV420P] = {
140 { 0, 0, 1, 0, 7 }, /* Y */
141 { 1, 0, 1, 0, 7 }, /* U */
142 { 2, 0, 1, 0, 7 }, /* V */
144 .flags = AV_PIX_FMT_FLAG_PLANAR,
146 [AV_PIX_FMT_YUYV422] = {
152 { 0, 1, 1, 0, 7 }, /* Y */
153 { 0, 3, 2, 0, 7 }, /* U */
154 { 0, 3, 4, 0, 7 }, /* V */
157 [AV_PIX_FMT_RGB24] = {
163 { 0, 2, 1, 0, 7 }, /* R */
164 { 0, 2, 2, 0, 7 }, /* G */
165 { 0, 2, 3, 0, 7 }, /* B */
167 .flags = AV_PIX_FMT_FLAG_RGB,
169 [AV_PIX_FMT_BGR24] = {
175 { 0, 2, 3, 0, 7 }, /* R */
176 { 0, 2, 2, 0, 7 }, /* G */
177 { 0, 2, 1, 0, 7 }, /* B */
179 .flags = AV_PIX_FMT_FLAG_RGB,
181 [AV_PIX_FMT_YUV422P] = {
187 { 0, 0, 1, 0, 7 }, /* Y */
188 { 1, 0, 1, 0, 7 }, /* U */
189 { 2, 0, 1, 0, 7 }, /* V */
191 .flags = AV_PIX_FMT_FLAG_PLANAR,
193 [AV_PIX_FMT_YUV444P] = {
199 { 0, 0, 1, 0, 7 }, /* Y */
200 { 1, 0, 1, 0, 7 }, /* U */
201 { 2, 0, 1, 0, 7 }, /* V */
203 .flags = AV_PIX_FMT_FLAG_PLANAR,
205 [AV_PIX_FMT_YUV410P] = {
211 { 0, 0, 1, 0, 7 }, /* Y */
212 { 1, 0, 1, 0, 7 }, /* U */
213 { 2, 0, 1, 0, 7 }, /* V */
215 .flags = AV_PIX_FMT_FLAG_PLANAR,
217 [AV_PIX_FMT_YUV411P] = {
223 { 0, 0, 1, 0, 7 }, /* Y */
224 { 1, 0, 1, 0, 7 }, /* U */
225 { 2, 0, 1, 0, 7 }, /* V */
227 .flags = AV_PIX_FMT_FLAG_PLANAR,
229 [AV_PIX_FMT_YUVJ411P] = {
235 { 0, 0, 1, 0, 7 }, /* Y */
236 { 1, 0, 1, 0, 7 }, /* U */
237 { 2, 0, 1, 0, 7 }, /* V */
239 .flags = AV_PIX_FMT_FLAG_PLANAR,
241 [AV_PIX_FMT_GRAY8] = {
247 { 0, 0, 1, 0, 7 }, /* Y */
249 .flags = AV_PIX_FMT_FLAG_PSEUDOPAL,
251 [AV_PIX_FMT_MONOWHITE] = {
257 { 0, 0, 1, 0, 0 }, /* Y */
259 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
261 [AV_PIX_FMT_MONOBLACK] = {
267 { 0, 0, 1, 7, 0 }, /* Y */
269 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
271 [AV_PIX_FMT_PAL8] = {
279 .flags = AV_PIX_FMT_FLAG_PAL,
281 [AV_PIX_FMT_YUVJ420P] = {
287 { 0, 0, 1, 0, 7 }, /* Y */
288 { 1, 0, 1, 0, 7 }, /* U */
289 { 2, 0, 1, 0, 7 }, /* V */
291 .flags = AV_PIX_FMT_FLAG_PLANAR,
293 [AV_PIX_FMT_YUVJ422P] = {
299 { 0, 0, 1, 0, 7 }, /* Y */
300 { 1, 0, 1, 0, 7 }, /* U */
301 { 2, 0, 1, 0, 7 }, /* V */
303 .flags = AV_PIX_FMT_FLAG_PLANAR,
305 [AV_PIX_FMT_YUVJ444P] = {
311 { 0, 0, 1, 0, 7 }, /* Y */
312 { 1, 0, 1, 0, 7 }, /* U */
313 { 2, 0, 1, 0, 7 }, /* V */
315 .flags = AV_PIX_FMT_FLAG_PLANAR,
318 [AV_PIX_FMT_XVMC_MPEG2_MC] = {
320 .flags = AV_PIX_FMT_FLAG_HWACCEL,
322 [AV_PIX_FMT_XVMC_MPEG2_IDCT] = {
324 .flags = AV_PIX_FMT_FLAG_HWACCEL,
326 #endif /* FF_API_XVMC */
328 [AV_PIX_FMT_XVMC] = {
330 .flags = AV_PIX_FMT_FLAG_HWACCEL,
332 #endif /* !FF_API_XVMC */
333 [AV_PIX_FMT_UYVY422] = {
339 { 0, 1, 2, 0, 7 }, /* Y */
340 { 0, 3, 1, 0, 7 }, /* U */
341 { 0, 3, 3, 0, 7 }, /* V */
344 [AV_PIX_FMT_UYYVYY411] = {
350 { 0, 3, 2, 0, 7 }, /* Y */
351 { 0, 5, 1, 0, 7 }, /* U */
352 { 0, 5, 4, 0, 7 }, /* V */
355 [AV_PIX_FMT_BGR8] = {
361 { 0, 0, 1, 0, 2 }, /* R */
362 { 0, 0, 1, 3, 2 }, /* G */
363 { 0, 0, 1, 6, 1 }, /* B */
365 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
367 [AV_PIX_FMT_BGR4] = {
373 { 0, 3, 4, 0, 0 }, /* R */
374 { 0, 3, 2, 0, 1 }, /* G */
375 { 0, 3, 1, 0, 0 }, /* B */
377 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
379 [AV_PIX_FMT_BGR4_BYTE] = {
385 { 0, 0, 1, 0, 0 }, /* R */
386 { 0, 0, 1, 1, 1 }, /* G */
387 { 0, 0, 1, 3, 0 }, /* B */
389 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
391 [AV_PIX_FMT_RGB8] = {
397 { 0, 0, 1, 6, 1 }, /* R */
398 { 0, 0, 1, 3, 2 }, /* G */
399 { 0, 0, 1, 0, 2 }, /* B */
401 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
403 [AV_PIX_FMT_RGB4] = {
409 { 0, 3, 1, 0, 0 }, /* R */
410 { 0, 3, 2, 0, 1 }, /* G */
411 { 0, 3, 4, 0, 0 }, /* B */
413 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
415 [AV_PIX_FMT_RGB4_BYTE] = {
421 { 0, 0, 1, 3, 0 }, /* R */
422 { 0, 0, 1, 1, 1 }, /* G */
423 { 0, 0, 1, 0, 0 }, /* B */
425 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
427 [AV_PIX_FMT_NV12] = {
433 { 0, 0, 1, 0, 7 }, /* Y */
434 { 1, 1, 1, 0, 7 }, /* U */
435 { 1, 1, 2, 0, 7 }, /* V */
437 .flags = AV_PIX_FMT_FLAG_PLANAR,
439 [AV_PIX_FMT_NV21] = {
445 { 0, 0, 1, 0, 7 }, /* Y */
446 { 1, 1, 2, 0, 7 }, /* U */
447 { 1, 1, 1, 0, 7 }, /* V */
449 .flags = AV_PIX_FMT_FLAG_PLANAR,
451 [AV_PIX_FMT_ARGB] = {
457 { 0, 3, 2, 0, 7 }, /* R */
458 { 0, 3, 3, 0, 7 }, /* G */
459 { 0, 3, 4, 0, 7 }, /* B */
460 { 0, 3, 1, 0, 7 }, /* A */
462 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
464 [AV_PIX_FMT_RGBA] = {
470 { 0, 3, 1, 0, 7 }, /* R */
471 { 0, 3, 2, 0, 7 }, /* G */
472 { 0, 3, 3, 0, 7 }, /* B */
473 { 0, 3, 4, 0, 7 }, /* A */
475 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
477 [AV_PIX_FMT_ABGR] = {
483 { 0, 3, 4, 0, 7 }, /* R */
484 { 0, 3, 3, 0, 7 }, /* G */
485 { 0, 3, 2, 0, 7 }, /* B */
486 { 0, 3, 1, 0, 7 }, /* A */
488 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
490 [AV_PIX_FMT_BGRA] = {
496 { 0, 3, 3, 0, 7 }, /* R */
497 { 0, 3, 2, 0, 7 }, /* G */
498 { 0, 3, 1, 0, 7 }, /* B */
499 { 0, 3, 4, 0, 7 }, /* A */
501 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
503 [AV_PIX_FMT_0RGB] = {
509 { 0, 3, 2, 0, 7 }, /* R */
510 { 0, 3, 3, 0, 7 }, /* G */
511 { 0, 3, 4, 0, 7 }, /* B */
513 .flags = AV_PIX_FMT_FLAG_RGB,
515 [AV_PIX_FMT_RGB0] = {
521 { 0, 3, 1, 0, 7 }, /* R */
522 { 0, 3, 2, 0, 7 }, /* G */
523 { 0, 3, 3, 0, 7 }, /* B */
525 .flags = AV_PIX_FMT_FLAG_RGB,
527 [AV_PIX_FMT_0BGR] = {
533 { 0, 3, 4, 0, 7 }, /* R */
534 { 0, 3, 3, 0, 7 }, /* G */
535 { 0, 3, 2, 0, 7 }, /* B */
537 .flags = AV_PIX_FMT_FLAG_RGB,
539 [AV_PIX_FMT_BGR0] = {
545 { 0, 3, 3, 0, 7 }, /* R */
546 { 0, 3, 2, 0, 7 }, /* G */
547 { 0, 3, 1, 0, 7 }, /* B */
549 .flags = AV_PIX_FMT_FLAG_RGB,
551 [AV_PIX_FMT_GRAY16BE] = {
557 { 0, 1, 1, 0, 15 }, /* Y */
559 .flags = AV_PIX_FMT_FLAG_BE,
561 [AV_PIX_FMT_GRAY16LE] = {
567 { 0, 1, 1, 0, 15 }, /* Y */
570 [AV_PIX_FMT_YUV440P] = {
576 { 0, 0, 1, 0, 7 }, /* Y */
577 { 1, 0, 1, 0, 7 }, /* U */
578 { 2, 0, 1, 0, 7 }, /* V */
580 .flags = AV_PIX_FMT_FLAG_PLANAR,
582 [AV_PIX_FMT_YUVJ440P] = {
588 { 0, 0, 1, 0, 7 }, /* Y */
589 { 1, 0, 1, 0, 7 }, /* U */
590 { 2, 0, 1, 0, 7 }, /* V */
592 .flags = AV_PIX_FMT_FLAG_PLANAR,
594 [AV_PIX_FMT_YUVA420P] = {
600 { 0, 0, 1, 0, 7 }, /* Y */
601 { 1, 0, 1, 0, 7 }, /* U */
602 { 2, 0, 1, 0, 7 }, /* V */
603 { 3, 0, 1, 0, 7 }, /* A */
605 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
607 [AV_PIX_FMT_YUVA422P] = {
613 { 0, 0, 1, 0, 7 }, /* Y */
614 { 1, 0, 1, 0, 7 }, /* U */
615 { 2, 0, 1, 0, 7 }, /* V */
616 { 3, 0, 1, 0, 7 }, /* A */
618 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
620 [AV_PIX_FMT_YUVA444P] = {
626 { 0, 0, 1, 0, 7 }, /* Y */
627 { 1, 0, 1, 0, 7 }, /* U */
628 { 2, 0, 1, 0, 7 }, /* V */
629 { 3, 0, 1, 0, 7 }, /* A */
631 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
633 [AV_PIX_FMT_YUVA420P9BE] = {
634 .name = "yuva420p9be",
639 { 0, 1, 1, 0, 8 }, /* Y */
640 { 1, 1, 1, 0, 8 }, /* U */
641 { 2, 1, 1, 0, 8 }, /* V */
642 { 3, 1, 1, 0, 8 }, /* A */
644 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
646 [AV_PIX_FMT_YUVA420P9LE] = {
647 .name = "yuva420p9le",
652 { 0, 1, 1, 0, 8 }, /* Y */
653 { 1, 1, 1, 0, 8 }, /* U */
654 { 2, 1, 1, 0, 8 }, /* V */
655 { 3, 1, 1, 0, 8 }, /* A */
657 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
659 [AV_PIX_FMT_YUVA422P9BE] = {
660 .name = "yuva422p9be",
665 { 0, 1, 1, 0, 8 }, /* Y */
666 { 1, 1, 1, 0, 8 }, /* U */
667 { 2, 1, 1, 0, 8 }, /* V */
668 { 3, 1, 1, 0, 8 }, /* A */
670 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
672 [AV_PIX_FMT_YUVA422P9LE] = {
673 .name = "yuva422p9le",
678 { 0, 1, 1, 0, 8 }, /* Y */
679 { 1, 1, 1, 0, 8 }, /* U */
680 { 2, 1, 1, 0, 8 }, /* V */
681 { 3, 1, 1, 0, 8 }, /* A */
683 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
685 [AV_PIX_FMT_YUVA444P9BE] = {
686 .name = "yuva444p9be",
691 { 0, 1, 1, 0, 8 }, /* Y */
692 { 1, 1, 1, 0, 8 }, /* U */
693 { 2, 1, 1, 0, 8 }, /* V */
694 { 3, 1, 1, 0, 8 }, /* A */
696 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
698 [AV_PIX_FMT_YUVA444P9LE] = {
699 .name = "yuva444p9le",
704 { 0, 1, 1, 0, 8 }, /* Y */
705 { 1, 1, 1, 0, 8 }, /* U */
706 { 2, 1, 1, 0, 8 }, /* V */
707 { 3, 1, 1, 0, 8 }, /* A */
709 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
711 [AV_PIX_FMT_YUVA420P10BE] = {
712 .name = "yuva420p10be",
717 { 0, 1, 1, 0, 9 }, /* Y */
718 { 1, 1, 1, 0, 9 }, /* U */
719 { 2, 1, 1, 0, 9 }, /* V */
720 { 3, 1, 1, 0, 9 }, /* A */
722 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
724 [AV_PIX_FMT_YUVA420P10LE] = {
725 .name = "yuva420p10le",
730 { 0, 1, 1, 0, 9 }, /* Y */
731 { 1, 1, 1, 0, 9 }, /* U */
732 { 2, 1, 1, 0, 9 }, /* V */
733 { 3, 1, 1, 0, 9 }, /* A */
735 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
737 [AV_PIX_FMT_YUVA422P10BE] = {
738 .name = "yuva422p10be",
743 { 0, 1, 1, 0, 9 }, /* Y */
744 { 1, 1, 1, 0, 9 }, /* U */
745 { 2, 1, 1, 0, 9 }, /* V */
746 { 3, 1, 1, 0, 9 }, /* A */
748 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
750 [AV_PIX_FMT_YUVA422P10LE] = {
751 .name = "yuva422p10le",
756 { 0, 1, 1, 0, 9 }, /* Y */
757 { 1, 1, 1, 0, 9 }, /* U */
758 { 2, 1, 1, 0, 9 }, /* V */
759 { 3, 1, 1, 0, 9 }, /* A */
761 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
763 [AV_PIX_FMT_YUVA444P10BE] = {
764 .name = "yuva444p10be",
769 { 0, 1, 1, 0, 9 }, /* Y */
770 { 1, 1, 1, 0, 9 }, /* U */
771 { 2, 1, 1, 0, 9 }, /* V */
772 { 3, 1, 1, 0, 9 }, /* A */
774 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
776 [AV_PIX_FMT_YUVA444P10LE] = {
777 .name = "yuva444p10le",
782 { 0, 1, 1, 0, 9 }, /* Y */
783 { 1, 1, 1, 0, 9 }, /* U */
784 { 2, 1, 1, 0, 9 }, /* V */
785 { 3, 1, 1, 0, 9 }, /* A */
787 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
789 [AV_PIX_FMT_YUVA420P16BE] = {
790 .name = "yuva420p16be",
795 { 0, 1, 1, 0, 15 }, /* Y */
796 { 1, 1, 1, 0, 15 }, /* U */
797 { 2, 1, 1, 0, 15 }, /* V */
798 { 3, 1, 1, 0, 15 }, /* A */
800 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
802 [AV_PIX_FMT_YUVA420P16LE] = {
803 .name = "yuva420p16le",
808 { 0, 1, 1, 0, 15 }, /* Y */
809 { 1, 1, 1, 0, 15 }, /* U */
810 { 2, 1, 1, 0, 15 }, /* V */
811 { 3, 1, 1, 0, 15 }, /* A */
813 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
815 [AV_PIX_FMT_YUVA422P16BE] = {
816 .name = "yuva422p16be",
821 { 0, 1, 1, 0, 15 }, /* Y */
822 { 1, 1, 1, 0, 15 }, /* U */
823 { 2, 1, 1, 0, 15 }, /* V */
824 { 3, 1, 1, 0, 15 }, /* A */
826 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
828 [AV_PIX_FMT_YUVA422P16LE] = {
829 .name = "yuva422p16le",
834 { 0, 1, 1, 0, 15 }, /* Y */
835 { 1, 1, 1, 0, 15 }, /* U */
836 { 2, 1, 1, 0, 15 }, /* V */
837 { 3, 1, 1, 0, 15 }, /* A */
839 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
841 [AV_PIX_FMT_YUVA444P16BE] = {
842 .name = "yuva444p16be",
847 { 0, 1, 1, 0, 15 }, /* Y */
848 { 1, 1, 1, 0, 15 }, /* U */
849 { 2, 1, 1, 0, 15 }, /* V */
850 { 3, 1, 1, 0, 15 }, /* A */
852 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
854 [AV_PIX_FMT_YUVA444P16LE] = {
855 .name = "yuva444p16le",
860 { 0, 1, 1, 0, 15 }, /* Y */
861 { 1, 1, 1, 0, 15 }, /* U */
862 { 2, 1, 1, 0, 15 }, /* V */
863 { 3, 1, 1, 0, 15 }, /* A */
865 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
868 [AV_PIX_FMT_VDPAU_H264] = {
869 .name = "vdpau_h264",
872 .flags = AV_PIX_FMT_FLAG_HWACCEL,
874 [AV_PIX_FMT_VDPAU_MPEG1] = {
875 .name = "vdpau_mpeg1",
878 .flags = AV_PIX_FMT_FLAG_HWACCEL,
880 [AV_PIX_FMT_VDPAU_MPEG2] = {
881 .name = "vdpau_mpeg2",
884 .flags = AV_PIX_FMT_FLAG_HWACCEL,
886 [AV_PIX_FMT_VDPAU_WMV3] = {
887 .name = "vdpau_wmv3",
890 .flags = AV_PIX_FMT_FLAG_HWACCEL,
892 [AV_PIX_FMT_VDPAU_VC1] = {
896 .flags = AV_PIX_FMT_FLAG_HWACCEL,
898 [AV_PIX_FMT_VDPAU_MPEG4] = {
899 .name = "vdpau_mpeg4",
902 .flags = AV_PIX_FMT_FLAG_HWACCEL,
905 [AV_PIX_FMT_RGB48BE] = {
911 { 0, 5, 1, 0, 15 }, /* R */
912 { 0, 5, 3, 0, 15 }, /* G */
913 { 0, 5, 5, 0, 15 }, /* B */
915 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
917 [AV_PIX_FMT_RGB48LE] = {
923 { 0, 5, 1, 0, 15 }, /* R */
924 { 0, 5, 3, 0, 15 }, /* G */
925 { 0, 5, 5, 0, 15 }, /* B */
927 .flags = AV_PIX_FMT_FLAG_RGB,
929 [AV_PIX_FMT_RGBA64BE] = {
935 { 0, 7, 1, 0, 15 }, /* R */
936 { 0, 7, 3, 0, 15 }, /* G */
937 { 0, 7, 5, 0, 15 }, /* B */
938 { 0, 7, 7, 0, 15 }, /* A */
940 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
942 [AV_PIX_FMT_RGBA64LE] = {
948 { 0, 7, 1, 0, 15 }, /* R */
949 { 0, 7, 3, 0, 15 }, /* G */
950 { 0, 7, 5, 0, 15 }, /* B */
951 { 0, 7, 7, 0, 15 }, /* A */
953 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
955 [AV_PIX_FMT_RGB565BE] = {
961 { 0, 1, 0, 3, 4 }, /* R */
962 { 0, 1, 1, 5, 5 }, /* G */
963 { 0, 1, 1, 0, 4 }, /* B */
965 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
967 [AV_PIX_FMT_RGB565LE] = {
973 { 0, 1, 2, 3, 4 }, /* R */
974 { 0, 1, 1, 5, 5 }, /* G */
975 { 0, 1, 1, 0, 4 }, /* B */
977 .flags = AV_PIX_FMT_FLAG_RGB,
979 [AV_PIX_FMT_RGB555BE] = {
985 { 0, 1, 0, 2, 4 }, /* R */
986 { 0, 1, 1, 5, 4 }, /* G */
987 { 0, 1, 1, 0, 4 }, /* B */
989 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
991 [AV_PIX_FMT_RGB555LE] = {
997 { 0, 1, 2, 2, 4 }, /* R */
998 { 0, 1, 1, 5, 4 }, /* G */
999 { 0, 1, 1, 0, 4 }, /* B */
1001 .flags = AV_PIX_FMT_FLAG_RGB,
1003 [AV_PIX_FMT_RGB444BE] = {
1009 { 0, 1, 0, 0, 3 }, /* R */
1010 { 0, 1, 1, 4, 3 }, /* G */
1011 { 0, 1, 1, 0, 3 }, /* B */
1013 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1015 [AV_PIX_FMT_RGB444LE] = {
1021 { 0, 1, 2, 0, 3 }, /* R */
1022 { 0, 1, 1, 4, 3 }, /* G */
1023 { 0, 1, 1, 0, 3 }, /* B */
1025 .flags = AV_PIX_FMT_FLAG_RGB,
1027 [AV_PIX_FMT_BGR48BE] = {
1033 { 0, 5, 5, 0, 15 }, /* R */
1034 { 0, 5, 3, 0, 15 }, /* G */
1035 { 0, 5, 1, 0, 15 }, /* B */
1037 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1039 [AV_PIX_FMT_BGR48LE] = {
1045 { 0, 5, 5, 0, 15 }, /* R */
1046 { 0, 5, 3, 0, 15 }, /* G */
1047 { 0, 5, 1, 0, 15 }, /* B */
1049 .flags = AV_PIX_FMT_FLAG_RGB,
1051 [AV_PIX_FMT_BGRA64BE] = {
1057 { 0, 7, 5, 0, 15 }, /* R */
1058 { 0, 7, 3, 0, 15 }, /* G */
1059 { 0, 7, 1, 0, 15 }, /* B */
1060 { 0, 7, 7, 0, 15 }, /* A */
1062 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1064 [AV_PIX_FMT_BGRA64LE] = {
1070 { 0, 7, 5, 0, 15 }, /* R */
1071 { 0, 7, 3, 0, 15 }, /* G */
1072 { 0, 7, 1, 0, 15 }, /* B */
1073 { 0, 7, 7, 0, 15 }, /* A */
1075 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1077 [AV_PIX_FMT_BGR565BE] = {
1083 { 0, 1, 1, 0, 4 }, /* R */
1084 { 0, 1, 1, 5, 5 }, /* G */
1085 { 0, 1, 0, 3, 4 }, /* B */
1087 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1089 [AV_PIX_FMT_BGR565LE] = {
1095 { 0, 1, 1, 0, 4 }, /* R */
1096 { 0, 1, 1, 5, 5 }, /* G */
1097 { 0, 1, 2, 3, 4 }, /* B */
1099 .flags = AV_PIX_FMT_FLAG_RGB,
1101 [AV_PIX_FMT_BGR555BE] = {
1107 { 0, 1, 1, 0, 4 }, /* R */
1108 { 0, 1, 1, 5, 4 }, /* G */
1109 { 0, 1, 0, 2, 4 }, /* B */
1111 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1113 [AV_PIX_FMT_BGR555LE] = {
1119 { 0, 1, 1, 0, 4 }, /* R */
1120 { 0, 1, 1, 5, 4 }, /* G */
1121 { 0, 1, 2, 2, 4 }, /* B */
1123 .flags = AV_PIX_FMT_FLAG_RGB,
1125 [AV_PIX_FMT_BGR444BE] = {
1131 { 0, 1, 1, 0, 3 }, /* R */
1132 { 0, 1, 1, 4, 3 }, /* G */
1133 { 0, 1, 0, 0, 3 }, /* B */
1135 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1137 [AV_PIX_FMT_BGR444LE] = {
1143 { 0, 1, 1, 0, 3 }, /* R */
1144 { 0, 1, 1, 4, 3 }, /* G */
1145 { 0, 1, 2, 0, 3 }, /* B */
1147 .flags = AV_PIX_FMT_FLAG_RGB,
1149 [AV_PIX_FMT_VAAPI_MOCO] = {
1150 .name = "vaapi_moco",
1153 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1155 [AV_PIX_FMT_VAAPI_IDCT] = {
1156 .name = "vaapi_idct",
1159 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1161 [AV_PIX_FMT_VAAPI_VLD] = {
1162 .name = "vaapi_vld",
1165 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1167 [AV_PIX_FMT_YUV420P9LE] = {
1168 .name = "yuv420p9le",
1173 { 0, 1, 1, 0, 8 }, /* Y */
1174 { 1, 1, 1, 0, 8 }, /* U */
1175 { 2, 1, 1, 0, 8 }, /* V */
1177 .flags = AV_PIX_FMT_FLAG_PLANAR,
1179 [AV_PIX_FMT_YUV420P9BE] = {
1180 .name = "yuv420p9be",
1185 { 0, 1, 1, 0, 8 }, /* Y */
1186 { 1, 1, 1, 0, 8 }, /* U */
1187 { 2, 1, 1, 0, 8 }, /* V */
1189 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1191 [AV_PIX_FMT_YUV420P10LE] = {
1192 .name = "yuv420p10le",
1197 { 0, 1, 1, 0, 9 }, /* Y */
1198 { 1, 1, 1, 0, 9 }, /* U */
1199 { 2, 1, 1, 0, 9 }, /* V */
1201 .flags = AV_PIX_FMT_FLAG_PLANAR,
1203 [AV_PIX_FMT_YUV420P10BE] = {
1204 .name = "yuv420p10be",
1209 { 0, 1, 1, 0, 9 }, /* Y */
1210 { 1, 1, 1, 0, 9 }, /* U */
1211 { 2, 1, 1, 0, 9 }, /* V */
1213 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1215 [AV_PIX_FMT_YUV420P12LE] = {
1216 .name = "yuv420p12le",
1221 { 0, 1, 1, 0, 11 }, /* Y */
1222 { 1, 1, 1, 0, 11 }, /* U */
1223 { 2, 1, 1, 0, 11 }, /* V */
1225 .flags = AV_PIX_FMT_FLAG_PLANAR,
1227 [AV_PIX_FMT_YUV420P12BE] = {
1228 .name = "yuv420p12be",
1233 { 0, 1, 1, 0, 11 }, /* Y */
1234 { 1, 1, 1, 0, 11 }, /* U */
1235 { 2, 1, 1, 0, 11 }, /* V */
1237 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1239 [AV_PIX_FMT_YUV420P14LE] = {
1240 .name = "yuv420p14le",
1245 { 0, 1, 1, 0, 13 }, /* Y */
1246 { 1, 1, 1, 0, 13 }, /* U */
1247 { 2, 1, 1, 0, 13 }, /* V */
1249 .flags = AV_PIX_FMT_FLAG_PLANAR,
1251 [AV_PIX_FMT_YUV420P14BE] = {
1252 .name = "yuv420p14be",
1257 { 0, 1, 1, 0, 13 }, /* Y */
1258 { 1, 1, 1, 0, 13 }, /* U */
1259 { 2, 1, 1, 0, 13 }, /* V */
1261 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1263 [AV_PIX_FMT_YUV420P16LE] = {
1264 .name = "yuv420p16le",
1269 { 0, 1, 1, 0, 15 }, /* Y */
1270 { 1, 1, 1, 0, 15 }, /* U */
1271 { 2, 1, 1, 0, 15 }, /* V */
1273 .flags = AV_PIX_FMT_FLAG_PLANAR,
1275 [AV_PIX_FMT_YUV420P16BE] = {
1276 .name = "yuv420p16be",
1281 { 0, 1, 1, 0, 15 }, /* Y */
1282 { 1, 1, 1, 0, 15 }, /* U */
1283 { 2, 1, 1, 0, 15 }, /* V */
1285 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1287 [AV_PIX_FMT_YUV422P9LE] = {
1288 .name = "yuv422p9le",
1293 { 0, 1, 1, 0, 8 }, /* Y */
1294 { 1, 1, 1, 0, 8 }, /* U */
1295 { 2, 1, 1, 0, 8 }, /* V */
1297 .flags = AV_PIX_FMT_FLAG_PLANAR,
1299 [AV_PIX_FMT_YUV422P9BE] = {
1300 .name = "yuv422p9be",
1305 { 0, 1, 1, 0, 8 }, /* Y */
1306 { 1, 1, 1, 0, 8 }, /* U */
1307 { 2, 1, 1, 0, 8 }, /* V */
1309 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1311 [AV_PIX_FMT_YUV422P10LE] = {
1312 .name = "yuv422p10le",
1317 { 0, 1, 1, 0, 9 }, /* Y */
1318 { 1, 1, 1, 0, 9 }, /* U */
1319 { 2, 1, 1, 0, 9 }, /* V */
1321 .flags = AV_PIX_FMT_FLAG_PLANAR,
1323 [AV_PIX_FMT_YUV422P10BE] = {
1324 .name = "yuv422p10be",
1329 { 0, 1, 1, 0, 9 }, /* Y */
1330 { 1, 1, 1, 0, 9 }, /* U */
1331 { 2, 1, 1, 0, 9 }, /* V */
1333 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1335 [AV_PIX_FMT_YUV422P12LE] = {
1336 .name = "yuv422p12le",
1341 { 0, 1, 1, 0, 11 }, /* Y */
1342 { 1, 1, 1, 0, 11 }, /* U */
1343 { 2, 1, 1, 0, 11 }, /* V */
1345 .flags = AV_PIX_FMT_FLAG_PLANAR,
1347 [AV_PIX_FMT_YUV422P12BE] = {
1348 .name = "yuv422p12be",
1353 { 0, 1, 1, 0, 11 }, /* Y */
1354 { 1, 1, 1, 0, 11 }, /* U */
1355 { 2, 1, 1, 0, 11 }, /* V */
1357 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1359 [AV_PIX_FMT_YUV422P14LE] = {
1360 .name = "yuv422p14le",
1365 { 0, 1, 1, 0, 13 }, /* Y */
1366 { 1, 1, 1, 0, 13 }, /* U */
1367 { 2, 1, 1, 0, 13 }, /* V */
1369 .flags = AV_PIX_FMT_FLAG_PLANAR,
1371 [AV_PIX_FMT_YUV422P14BE] = {
1372 .name = "yuv422p14be",
1377 { 0, 1, 1, 0, 13 }, /* Y */
1378 { 1, 1, 1, 0, 13 }, /* U */
1379 { 2, 1, 1, 0, 13 }, /* V */
1381 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1383 [AV_PIX_FMT_YUV422P16LE] = {
1384 .name = "yuv422p16le",
1389 { 0, 1, 1, 0, 15 }, /* Y */
1390 { 1, 1, 1, 0, 15 }, /* U */
1391 { 2, 1, 1, 0, 15 }, /* V */
1393 .flags = AV_PIX_FMT_FLAG_PLANAR,
1395 [AV_PIX_FMT_YUV422P16BE] = {
1396 .name = "yuv422p16be",
1401 { 0, 1, 1, 0, 15 }, /* Y */
1402 { 1, 1, 1, 0, 15 }, /* U */
1403 { 2, 1, 1, 0, 15 }, /* V */
1405 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1407 [AV_PIX_FMT_YUV444P16LE] = {
1408 .name = "yuv444p16le",
1413 { 0, 1, 1, 0, 15 }, /* Y */
1414 { 1, 1, 1, 0, 15 }, /* U */
1415 { 2, 1, 1, 0, 15 }, /* V */
1417 .flags = AV_PIX_FMT_FLAG_PLANAR,
1419 [AV_PIX_FMT_YUV444P16BE] = {
1420 .name = "yuv444p16be",
1425 { 0, 1, 1, 0, 15 }, /* Y */
1426 { 1, 1, 1, 0, 15 }, /* U */
1427 { 2, 1, 1, 0, 15 }, /* V */
1429 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1431 [AV_PIX_FMT_YUV444P10LE] = {
1432 .name = "yuv444p10le",
1437 { 0, 1, 1, 0, 9 }, /* Y */
1438 { 1, 1, 1, 0, 9 }, /* U */
1439 { 2, 1, 1, 0, 9 }, /* V */
1441 .flags = AV_PIX_FMT_FLAG_PLANAR,
1443 [AV_PIX_FMT_YUV444P10BE] = {
1444 .name = "yuv444p10be",
1449 { 0, 1, 1, 0, 9 }, /* Y */
1450 { 1, 1, 1, 0, 9 }, /* U */
1451 { 2, 1, 1, 0, 9 }, /* V */
1453 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1455 [AV_PIX_FMT_YUV444P9LE] = {
1456 .name = "yuv444p9le",
1461 { 0, 1, 1, 0, 8 }, /* Y */
1462 { 1, 1, 1, 0, 8 }, /* U */
1463 { 2, 1, 1, 0, 8 }, /* V */
1465 .flags = AV_PIX_FMT_FLAG_PLANAR,
1467 [AV_PIX_FMT_YUV444P9BE] = {
1468 .name = "yuv444p9be",
1473 { 0, 1, 1, 0, 8 }, /* Y */
1474 { 1, 1, 1, 0, 8 }, /* U */
1475 { 2, 1, 1, 0, 8 }, /* V */
1477 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1479 [AV_PIX_FMT_YUV444P12LE] = {
1480 .name = "yuv444p12le",
1485 { 0, 1, 1, 0, 11 }, /* Y */
1486 { 1, 1, 1, 0, 11 }, /* U */
1487 { 2, 1, 1, 0, 11 }, /* V */
1489 .flags = AV_PIX_FMT_FLAG_PLANAR,
1491 [AV_PIX_FMT_YUV444P12BE] = {
1492 .name = "yuv444p12be",
1497 { 0, 1, 1, 0, 11 }, /* Y */
1498 { 1, 1, 1, 0, 11 }, /* U */
1499 { 2, 1, 1, 0, 11 }, /* V */
1501 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1503 [AV_PIX_FMT_YUV444P14LE] = {
1504 .name = "yuv444p14le",
1509 { 0, 1, 1, 0, 13 }, /* Y */
1510 { 1, 1, 1, 0, 13 }, /* U */
1511 { 2, 1, 1, 0, 13 }, /* V */
1513 .flags = AV_PIX_FMT_FLAG_PLANAR,
1515 [AV_PIX_FMT_YUV444P14BE] = {
1516 .name = "yuv444p14be",
1521 { 0, 1, 1, 0, 13 }, /* Y */
1522 { 1, 1, 1, 0, 13 }, /* U */
1523 { 2, 1, 1, 0, 13 }, /* V */
1525 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1527 [AV_PIX_FMT_DXVA2_VLD] = {
1528 .name = "dxva2_vld",
1531 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1533 [AV_PIX_FMT_VDA_VLD] = {
1537 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1539 [AV_PIX_FMT_GRAY8A] = {
1543 { 0, 1, 1, 0, 7 }, /* Y */
1544 { 0, 1, 2, 0, 7 }, /* A */
1546 .flags = AV_PIX_FMT_FLAG_ALPHA,
1548 [AV_PIX_FMT_GBRP] = {
1554 { 2, 0, 1, 0, 7 }, /* R */
1555 { 0, 0, 1, 0, 7 }, /* G */
1556 { 1, 0, 1, 0, 7 }, /* B */
1558 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1560 [AV_PIX_FMT_GBRP9LE] = {
1566 { 2, 1, 1, 0, 8 }, /* R */
1567 { 0, 1, 1, 0, 8 }, /* G */
1568 { 1, 1, 1, 0, 8 }, /* B */
1570 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1572 [AV_PIX_FMT_GBRP9BE] = {
1578 { 2, 1, 1, 0, 8 }, /* R */
1579 { 0, 1, 1, 0, 8 }, /* G */
1580 { 1, 1, 1, 0, 8 }, /* B */
1582 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1584 [AV_PIX_FMT_GBRP10LE] = {
1590 { 2, 1, 1, 0, 9 }, /* R */
1591 { 0, 1, 1, 0, 9 }, /* G */
1592 { 1, 1, 1, 0, 9 }, /* B */
1594 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1596 [AV_PIX_FMT_GBRP10BE] = {
1602 { 2, 1, 1, 0, 9 }, /* R */
1603 { 0, 1, 1, 0, 9 }, /* G */
1604 { 1, 1, 1, 0, 9 }, /* B */
1606 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1608 [AV_PIX_FMT_GBRP12LE] = {
1614 { 2, 1, 1, 0, 11 }, /* R */
1615 { 0, 1, 1, 0, 11 }, /* G */
1616 { 1, 1, 1, 0, 11 }, /* B */
1618 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1620 [AV_PIX_FMT_GBRP12BE] = {
1626 { 2, 1, 1, 0, 11 }, /* R */
1627 { 0, 1, 1, 0, 11 }, /* G */
1628 { 1, 1, 1, 0, 11 }, /* B */
1630 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1632 [AV_PIX_FMT_GBRP14LE] = {
1638 { 2, 1, 1, 0, 13 }, /* R */
1639 { 0, 1, 1, 0, 13 }, /* G */
1640 { 1, 1, 1, 0, 13 }, /* B */
1642 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1644 [AV_PIX_FMT_GBRP14BE] = {
1650 { 2, 1, 1, 0, 13 }, /* R */
1651 { 0, 1, 1, 0, 13 }, /* G */
1652 { 1, 1, 1, 0, 13 }, /* B */
1654 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1656 [AV_PIX_FMT_GBRP16LE] = {
1662 { 2, 1, 1, 0, 15 }, /* R */
1663 { 0, 1, 1, 0, 15 }, /* G */
1664 { 1, 1, 1, 0, 15 }, /* B */
1666 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1668 [AV_PIX_FMT_GBRP16BE] = {
1674 { 2, 1, 1, 0, 15 }, /* R */
1675 { 0, 1, 1, 0, 15 }, /* G */
1676 { 1, 1, 1, 0, 15 }, /* B */
1678 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1680 [AV_PIX_FMT_GBRAP] = {
1686 { 2, 0, 1, 0, 7 }, /* R */
1687 { 0, 0, 1, 0, 7 }, /* G */
1688 { 1, 0, 1, 0, 7 }, /* B */
1689 { 3, 0, 1, 0, 7 }, /* A */
1691 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1693 [AV_PIX_FMT_GBRAP16LE] = {
1694 .name = "gbrap16le",
1699 { 2, 1, 1, 0, 15 }, /* R */
1700 { 0, 1, 1, 0, 15 }, /* G */
1701 { 1, 1, 1, 0, 15 }, /* B */
1702 { 3, 1, 1, 0, 15 }, /* A */
1704 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1706 [AV_PIX_FMT_GBRAP16BE] = {
1707 .name = "gbrap16be",
1712 { 2, 1, 1, 0, 15 }, /* R */
1713 { 0, 1, 1, 0, 15 }, /* G */
1714 { 1, 1, 1, 0, 15 }, /* B */
1715 { 3, 1, 1, 0, 15 }, /* A */
1717 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1719 [AV_PIX_FMT_VDPAU] = {
1723 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1725 [AV_PIX_FMT_XYZ12LE] = {
1731 { 0, 5, 1, 4, 11 }, /* X */
1732 { 0, 5, 3, 4, 11 }, /* Y */
1733 { 0, 5, 5, 4, 11 }, /* Z */
1735 /*.flags = -- not used*/
1737 [AV_PIX_FMT_XYZ12BE] = {
1743 { 0, 5, 1, 4, 11 }, /* X */
1744 { 0, 5, 3, 4, 11 }, /* Y */
1745 { 0, 5, 5, 4, 11 }, /* Z */
1747 .flags = AV_PIX_FMT_FLAG_BE,
1750 #define BAYER8_DESC_COMMON \
1751 .nb_components= 3, \
1752 .log2_chroma_w= 0, \
1753 .log2_chroma_h= 0, \
1760 #define BAYER16_DESC_COMMON \
1761 .nb_components= 3, \
1762 .log2_chroma_w= 0, \
1763 .log2_chroma_h= 0, \
1770 [AV_PIX_FMT_BAYER_BGGR8] = {
1771 .name = "bayer_bggr8",
1773 .flags = AV_PIX_FMT_FLAG_RGB,
1775 [AV_PIX_FMT_BAYER_BGGR16LE] = {
1776 .name = "bayer_bggr16le",
1778 .flags = AV_PIX_FMT_FLAG_RGB,
1780 [AV_PIX_FMT_BAYER_BGGR16BE] = {
1781 .name = "bayer_bggr16be",
1783 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1785 [AV_PIX_FMT_BAYER_RGGB8] = {
1786 .name = "bayer_rggb8",
1788 .flags = AV_PIX_FMT_FLAG_RGB,
1790 [AV_PIX_FMT_BAYER_RGGB16LE] = {
1791 .name = "bayer_rggb16le",
1793 .flags = AV_PIX_FMT_FLAG_RGB,
1795 [AV_PIX_FMT_BAYER_RGGB16BE] = {
1796 .name = "bayer_rggb16be",
1798 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1800 [AV_PIX_FMT_BAYER_GBRG8] = {
1801 .name = "bayer_gbrg8",
1803 .flags = AV_PIX_FMT_FLAG_RGB,
1805 [AV_PIX_FMT_BAYER_GBRG16LE] = {
1806 .name = "bayer_gbrg16le",
1808 .flags = AV_PIX_FMT_FLAG_RGB,
1810 [AV_PIX_FMT_BAYER_GBRG16BE] = {
1811 .name = "bayer_gbrg16be",
1813 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1815 [AV_PIX_FMT_BAYER_GRBG8] = {
1816 .name = "bayer_grbg8",
1818 .flags = AV_PIX_FMT_FLAG_RGB,
1820 [AV_PIX_FMT_BAYER_GRBG16LE] = {
1821 .name = "bayer_grbg16le",
1823 .flags = AV_PIX_FMT_FLAG_RGB,
1825 [AV_PIX_FMT_BAYER_GRBG16BE] = {
1826 .name = "bayer_grbg16be",
1828 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1830 [AV_PIX_FMT_NV16] = {
1836 { 0, 0, 1, 0, 7 }, /* Y */
1837 { 1, 1, 1, 0, 7 }, /* U */
1838 { 1, 1, 2, 0, 7 }, /* V */
1840 .flags = AV_PIX_FMT_FLAG_PLANAR,
1842 [AV_PIX_FMT_NV20LE] = {
1848 { 0, 1, 1, 0, 9 }, /* Y */
1849 { 1, 3, 1, 0, 9 }, /* U */
1850 { 1, 3, 3, 0, 9 }, /* V */
1852 .flags = AV_PIX_FMT_FLAG_PLANAR,
1854 [AV_PIX_FMT_NV20BE] = {
1860 { 0, 1, 1, 0, 9 }, /* Y */
1861 { 1, 3, 1, 0, 9 }, /* U */
1862 { 1, 3, 3, 0, 9 }, /* V */
1864 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
1868 FF_DISABLE_DEPRECATION_WARNINGS
1869 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1871 enum AVPixelFormat pix_fmt;
1873 for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1874 if (av_pix_fmt_descriptors[pix_fmt].name &&
1875 !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1878 return AV_PIX_FMT_NONE;
1881 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
1883 return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1884 av_pix_fmt_descriptors[pix_fmt].name : NULL;
1888 # define X_NE(be, le) be
1890 # define X_NE(be, le) le
1893 enum AVPixelFormat av_get_pix_fmt(const char *name)
1895 enum AVPixelFormat pix_fmt;
1897 if (!strcmp(name, "rgb32"))
1898 name = X_NE("argb", "bgra");
1899 else if (!strcmp(name, "bgr32"))
1900 name = X_NE("abgr", "rgba");
1902 pix_fmt = get_pix_fmt_internal(name);
1903 if (pix_fmt == AV_PIX_FMT_NONE) {
1906 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1907 pix_fmt = get_pix_fmt_internal(name2);
1912 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1915 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1917 for (c = 0; c < pixdesc->nb_components; c++) {
1918 int s = c == 1 || c == 2 ? 0 : log2_pixels;
1919 bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1922 return bits >> log2_pixels;
1925 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1928 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1931 for (c = 0; c < pixdesc->nb_components; c++) {
1932 const AVComponentDescriptor *comp = &pixdesc->comp[c];
1933 int s = c == 1 || c == 2 ? 0 : log2_pixels;
1934 steps[comp->plane] = (comp->step_minus1 + 1) << s;
1936 for (c = 0; c < 4; c++)
1939 if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
1942 return bits >> log2_pixels;
1945 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1949 snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1951 const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1952 snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1953 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1959 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
1961 if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1963 return &av_pix_fmt_descriptors[pix_fmt];
1966 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
1969 return &av_pix_fmt_descriptors[0];
1970 while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1978 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
1980 if (desc < av_pix_fmt_descriptors ||
1981 desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1982 return AV_PIX_FMT_NONE;
1984 return desc - av_pix_fmt_descriptors;
1986 FF_ENABLE_DEPRECATION_WARNINGS
1988 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
1989 int *h_shift, int *v_shift)
1991 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
1993 return AVERROR(ENOSYS);
1994 *h_shift = desc->log2_chroma_w;
1995 *v_shift = desc->log2_chroma_h;
2000 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
2002 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2003 int i, planes[4] = { 0 }, ret = 0;
2006 return AVERROR(EINVAL);
2008 for (i = 0; i < desc->nb_components; i++)
2009 planes[desc->comp[i].plane] = 1;
2010 for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
2015 void ff_check_pixfmt_descriptors(void){
2018 for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
2019 const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
2020 uint8_t fill[4][8+6+3] = {{0}};
2021 uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2022 int linesize[4] = {0,0,0,0};
2025 if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2027 // av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2028 av_assert0(d->log2_chroma_w <= 3);
2029 av_assert0(d->log2_chroma_h <= 3);
2030 av_assert0(d->nb_components <= 4);
2031 av_assert0(d->name && d->name[0]);
2032 av_assert0((d->nb_components==4 || d->nb_components==2) == !!(d->flags & AV_PIX_FMT_FLAG_ALPHA));
2033 av_assert2(av_get_pix_fmt(d->name) == i);
2035 for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
2036 const AVComponentDescriptor *c = &d->comp[j];
2037 if(j>=d->nb_components) {
2038 av_assert0(!c->plane && !c->step_minus1 && !c->offset_plus1 && !c->shift && !c->depth_minus1);
2041 if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2042 av_assert0(c->step_minus1 >= c->depth_minus1);
2044 av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
2046 if (!strncmp(d->name, "bayer_", 6))
2048 av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2049 av_assert0(tmp[0] == 0 && tmp[1] == 0);
2050 tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
2051 av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2057 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2059 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2063 if (!desc || strlen(desc->name) < 2)
2064 return AV_PIX_FMT_NONE;
2065 av_strlcpy(name, desc->name, sizeof(name));
2066 i = strlen(name) - 2;
2067 if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2068 return AV_PIX_FMT_NONE;
2070 name[i] ^= 'b' ^ 'l';
2072 return get_pix_fmt_internal(name);