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_YVYU422] = {
163 { 0, 1, 1, 0, 7 }, /* Y */
164 { 0, 3, 2, 0, 7 }, /* V */
165 { 0, 3, 4, 0, 7 }, /* U */
168 [AV_PIX_FMT_RGB24] = {
174 { 0, 2, 1, 0, 7 }, /* R */
175 { 0, 2, 2, 0, 7 }, /* G */
176 { 0, 2, 3, 0, 7 }, /* B */
178 .flags = AV_PIX_FMT_FLAG_RGB,
180 [AV_PIX_FMT_BGR24] = {
186 { 0, 2, 3, 0, 7 }, /* R */
187 { 0, 2, 2, 0, 7 }, /* G */
188 { 0, 2, 1, 0, 7 }, /* B */
190 .flags = AV_PIX_FMT_FLAG_RGB,
192 [AV_PIX_FMT_YUV422P] = {
198 { 0, 0, 1, 0, 7 }, /* Y */
199 { 1, 0, 1, 0, 7 }, /* U */
200 { 2, 0, 1, 0, 7 }, /* V */
202 .flags = AV_PIX_FMT_FLAG_PLANAR,
204 [AV_PIX_FMT_YUV444P] = {
210 { 0, 0, 1, 0, 7 }, /* Y */
211 { 1, 0, 1, 0, 7 }, /* U */
212 { 2, 0, 1, 0, 7 }, /* V */
214 .flags = AV_PIX_FMT_FLAG_PLANAR,
216 [AV_PIX_FMT_YUV410P] = {
222 { 0, 0, 1, 0, 7 }, /* Y */
223 { 1, 0, 1, 0, 7 }, /* U */
224 { 2, 0, 1, 0, 7 }, /* V */
226 .flags = AV_PIX_FMT_FLAG_PLANAR,
228 [AV_PIX_FMT_YUV411P] = {
234 { 0, 0, 1, 0, 7 }, /* Y */
235 { 1, 0, 1, 0, 7 }, /* U */
236 { 2, 0, 1, 0, 7 }, /* V */
238 .flags = AV_PIX_FMT_FLAG_PLANAR,
240 [AV_PIX_FMT_YUVJ411P] = {
246 { 0, 0, 1, 0, 7 }, /* Y */
247 { 1, 0, 1, 0, 7 }, /* U */
248 { 2, 0, 1, 0, 7 }, /* V */
250 .flags = AV_PIX_FMT_FLAG_PLANAR,
252 [AV_PIX_FMT_GRAY8] = {
258 { 0, 0, 1, 0, 7 }, /* Y */
260 .flags = AV_PIX_FMT_FLAG_PSEUDOPAL,
262 [AV_PIX_FMT_MONOWHITE] = {
268 { 0, 0, 1, 0, 0 }, /* Y */
270 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
272 [AV_PIX_FMT_MONOBLACK] = {
278 { 0, 0, 1, 7, 0 }, /* Y */
280 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
282 [AV_PIX_FMT_PAL8] = {
290 .flags = AV_PIX_FMT_FLAG_PAL,
292 [AV_PIX_FMT_YUVJ420P] = {
298 { 0, 0, 1, 0, 7 }, /* Y */
299 { 1, 0, 1, 0, 7 }, /* U */
300 { 2, 0, 1, 0, 7 }, /* V */
302 .flags = AV_PIX_FMT_FLAG_PLANAR,
304 [AV_PIX_FMT_YUVJ422P] = {
310 { 0, 0, 1, 0, 7 }, /* Y */
311 { 1, 0, 1, 0, 7 }, /* U */
312 { 2, 0, 1, 0, 7 }, /* V */
314 .flags = AV_PIX_FMT_FLAG_PLANAR,
316 [AV_PIX_FMT_YUVJ444P] = {
322 { 0, 0, 1, 0, 7 }, /* Y */
323 { 1, 0, 1, 0, 7 }, /* U */
324 { 2, 0, 1, 0, 7 }, /* V */
326 .flags = AV_PIX_FMT_FLAG_PLANAR,
329 [AV_PIX_FMT_XVMC_MPEG2_MC] = {
331 .flags = AV_PIX_FMT_FLAG_HWACCEL,
333 [AV_PIX_FMT_XVMC_MPEG2_IDCT] = {
335 .flags = AV_PIX_FMT_FLAG_HWACCEL,
337 #endif /* FF_API_XVMC */
339 [AV_PIX_FMT_XVMC] = {
341 .flags = AV_PIX_FMT_FLAG_HWACCEL,
343 #endif /* !FF_API_XVMC */
344 [AV_PIX_FMT_UYVY422] = {
350 { 0, 1, 2, 0, 7 }, /* Y */
351 { 0, 3, 1, 0, 7 }, /* U */
352 { 0, 3, 3, 0, 7 }, /* V */
355 [AV_PIX_FMT_UYYVYY411] = {
361 { 0, 3, 2, 0, 7 }, /* Y */
362 { 0, 5, 1, 0, 7 }, /* U */
363 { 0, 5, 4, 0, 7 }, /* V */
366 [AV_PIX_FMT_BGR8] = {
372 { 0, 0, 1, 0, 2 }, /* R */
373 { 0, 0, 1, 3, 2 }, /* G */
374 { 0, 0, 1, 6, 1 }, /* B */
376 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
378 [AV_PIX_FMT_BGR4] = {
384 { 0, 3, 4, 0, 0 }, /* R */
385 { 0, 3, 2, 0, 1 }, /* G */
386 { 0, 3, 1, 0, 0 }, /* B */
388 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
390 [AV_PIX_FMT_BGR4_BYTE] = {
396 { 0, 0, 1, 0, 0 }, /* R */
397 { 0, 0, 1, 1, 1 }, /* G */
398 { 0, 0, 1, 3, 0 }, /* B */
400 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
402 [AV_PIX_FMT_RGB8] = {
408 { 0, 0, 1, 6, 1 }, /* R */
409 { 0, 0, 1, 3, 2 }, /* G */
410 { 0, 0, 1, 0, 2 }, /* B */
412 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
414 [AV_PIX_FMT_RGB4] = {
420 { 0, 3, 1, 0, 0 }, /* R */
421 { 0, 3, 2, 0, 1 }, /* G */
422 { 0, 3, 4, 0, 0 }, /* B */
424 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
426 [AV_PIX_FMT_RGB4_BYTE] = {
432 { 0, 0, 1, 3, 0 }, /* R */
433 { 0, 0, 1, 1, 1 }, /* G */
434 { 0, 0, 1, 0, 0 }, /* B */
436 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
438 [AV_PIX_FMT_NV12] = {
444 { 0, 0, 1, 0, 7 }, /* Y */
445 { 1, 1, 1, 0, 7 }, /* U */
446 { 1, 1, 2, 0, 7 }, /* V */
448 .flags = AV_PIX_FMT_FLAG_PLANAR,
450 [AV_PIX_FMT_NV21] = {
456 { 0, 0, 1, 0, 7 }, /* Y */
457 { 1, 1, 2, 0, 7 }, /* U */
458 { 1, 1, 1, 0, 7 }, /* V */
460 .flags = AV_PIX_FMT_FLAG_PLANAR,
462 [AV_PIX_FMT_ARGB] = {
468 { 0, 3, 2, 0, 7 }, /* R */
469 { 0, 3, 3, 0, 7 }, /* G */
470 { 0, 3, 4, 0, 7 }, /* B */
471 { 0, 3, 1, 0, 7 }, /* A */
473 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
475 [AV_PIX_FMT_RGBA] = {
481 { 0, 3, 1, 0, 7 }, /* R */
482 { 0, 3, 2, 0, 7 }, /* G */
483 { 0, 3, 3, 0, 7 }, /* B */
484 { 0, 3, 4, 0, 7 }, /* A */
486 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
488 [AV_PIX_FMT_ABGR] = {
494 { 0, 3, 4, 0, 7 }, /* R */
495 { 0, 3, 3, 0, 7 }, /* G */
496 { 0, 3, 2, 0, 7 }, /* B */
497 { 0, 3, 1, 0, 7 }, /* A */
499 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
501 [AV_PIX_FMT_BGRA] = {
507 { 0, 3, 3, 0, 7 }, /* R */
508 { 0, 3, 2, 0, 7 }, /* G */
509 { 0, 3, 1, 0, 7 }, /* B */
510 { 0, 3, 4, 0, 7 }, /* A */
512 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
514 [AV_PIX_FMT_0RGB] = {
520 { 0, 3, 2, 0, 7 }, /* R */
521 { 0, 3, 3, 0, 7 }, /* G */
522 { 0, 3, 4, 0, 7 }, /* B */
524 .flags = AV_PIX_FMT_FLAG_RGB,
526 [AV_PIX_FMT_RGB0] = {
532 { 0, 3, 1, 0, 7 }, /* R */
533 { 0, 3, 2, 0, 7 }, /* G */
534 { 0, 3, 3, 0, 7 }, /* B */
536 .flags = AV_PIX_FMT_FLAG_RGB,
538 [AV_PIX_FMT_0BGR] = {
544 { 0, 3, 4, 0, 7 }, /* R */
545 { 0, 3, 3, 0, 7 }, /* G */
546 { 0, 3, 2, 0, 7 }, /* B */
548 .flags = AV_PIX_FMT_FLAG_RGB,
550 [AV_PIX_FMT_BGR0] = {
556 { 0, 3, 3, 0, 7 }, /* R */
557 { 0, 3, 2, 0, 7 }, /* G */
558 { 0, 3, 1, 0, 7 }, /* B */
560 .flags = AV_PIX_FMT_FLAG_RGB,
562 [AV_PIX_FMT_GRAY16BE] = {
568 { 0, 1, 1, 0, 15 }, /* Y */
570 .flags = AV_PIX_FMT_FLAG_BE,
572 [AV_PIX_FMT_GRAY16LE] = {
578 { 0, 1, 1, 0, 15 }, /* Y */
581 [AV_PIX_FMT_YUV440P] = {
587 { 0, 0, 1, 0, 7 }, /* Y */
588 { 1, 0, 1, 0, 7 }, /* U */
589 { 2, 0, 1, 0, 7 }, /* V */
591 .flags = AV_PIX_FMT_FLAG_PLANAR,
593 [AV_PIX_FMT_YUVJ440P] = {
599 { 0, 0, 1, 0, 7 }, /* Y */
600 { 1, 0, 1, 0, 7 }, /* U */
601 { 2, 0, 1, 0, 7 }, /* V */
603 .flags = AV_PIX_FMT_FLAG_PLANAR,
605 [AV_PIX_FMT_YUVA420P] = {
611 { 0, 0, 1, 0, 7 }, /* Y */
612 { 1, 0, 1, 0, 7 }, /* U */
613 { 2, 0, 1, 0, 7 }, /* V */
614 { 3, 0, 1, 0, 7 }, /* A */
616 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
618 [AV_PIX_FMT_YUVA422P] = {
624 { 0, 0, 1, 0, 7 }, /* Y */
625 { 1, 0, 1, 0, 7 }, /* U */
626 { 2, 0, 1, 0, 7 }, /* V */
627 { 3, 0, 1, 0, 7 }, /* A */
629 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
631 [AV_PIX_FMT_YUVA444P] = {
637 { 0, 0, 1, 0, 7 }, /* Y */
638 { 1, 0, 1, 0, 7 }, /* U */
639 { 2, 0, 1, 0, 7 }, /* V */
640 { 3, 0, 1, 0, 7 }, /* A */
642 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
644 [AV_PIX_FMT_YUVA420P9BE] = {
645 .name = "yuva420p9be",
650 { 0, 1, 1, 0, 8 }, /* Y */
651 { 1, 1, 1, 0, 8 }, /* U */
652 { 2, 1, 1, 0, 8 }, /* V */
653 { 3, 1, 1, 0, 8 }, /* A */
655 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
657 [AV_PIX_FMT_YUVA420P9LE] = {
658 .name = "yuva420p9le",
663 { 0, 1, 1, 0, 8 }, /* Y */
664 { 1, 1, 1, 0, 8 }, /* U */
665 { 2, 1, 1, 0, 8 }, /* V */
666 { 3, 1, 1, 0, 8 }, /* A */
668 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
670 [AV_PIX_FMT_YUVA422P9BE] = {
671 .name = "yuva422p9be",
676 { 0, 1, 1, 0, 8 }, /* Y */
677 { 1, 1, 1, 0, 8 }, /* U */
678 { 2, 1, 1, 0, 8 }, /* V */
679 { 3, 1, 1, 0, 8 }, /* A */
681 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
683 [AV_PIX_FMT_YUVA422P9LE] = {
684 .name = "yuva422p9le",
689 { 0, 1, 1, 0, 8 }, /* Y */
690 { 1, 1, 1, 0, 8 }, /* U */
691 { 2, 1, 1, 0, 8 }, /* V */
692 { 3, 1, 1, 0, 8 }, /* A */
694 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
696 [AV_PIX_FMT_YUVA444P9BE] = {
697 .name = "yuva444p9be",
702 { 0, 1, 1, 0, 8 }, /* Y */
703 { 1, 1, 1, 0, 8 }, /* U */
704 { 2, 1, 1, 0, 8 }, /* V */
705 { 3, 1, 1, 0, 8 }, /* A */
707 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
709 [AV_PIX_FMT_YUVA444P9LE] = {
710 .name = "yuva444p9le",
715 { 0, 1, 1, 0, 8 }, /* Y */
716 { 1, 1, 1, 0, 8 }, /* U */
717 { 2, 1, 1, 0, 8 }, /* V */
718 { 3, 1, 1, 0, 8 }, /* A */
720 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
722 [AV_PIX_FMT_YUVA420P10BE] = {
723 .name = "yuva420p10be",
728 { 0, 1, 1, 0, 9 }, /* Y */
729 { 1, 1, 1, 0, 9 }, /* U */
730 { 2, 1, 1, 0, 9 }, /* V */
731 { 3, 1, 1, 0, 9 }, /* A */
733 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
735 [AV_PIX_FMT_YUVA420P10LE] = {
736 .name = "yuva420p10le",
741 { 0, 1, 1, 0, 9 }, /* Y */
742 { 1, 1, 1, 0, 9 }, /* U */
743 { 2, 1, 1, 0, 9 }, /* V */
744 { 3, 1, 1, 0, 9 }, /* A */
746 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
748 [AV_PIX_FMT_YUVA422P10BE] = {
749 .name = "yuva422p10be",
754 { 0, 1, 1, 0, 9 }, /* Y */
755 { 1, 1, 1, 0, 9 }, /* U */
756 { 2, 1, 1, 0, 9 }, /* V */
757 { 3, 1, 1, 0, 9 }, /* A */
759 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
761 [AV_PIX_FMT_YUVA422P10LE] = {
762 .name = "yuva422p10le",
767 { 0, 1, 1, 0, 9 }, /* Y */
768 { 1, 1, 1, 0, 9 }, /* U */
769 { 2, 1, 1, 0, 9 }, /* V */
770 { 3, 1, 1, 0, 9 }, /* A */
772 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
774 [AV_PIX_FMT_YUVA444P10BE] = {
775 .name = "yuva444p10be",
780 { 0, 1, 1, 0, 9 }, /* Y */
781 { 1, 1, 1, 0, 9 }, /* U */
782 { 2, 1, 1, 0, 9 }, /* V */
783 { 3, 1, 1, 0, 9 }, /* A */
785 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
787 [AV_PIX_FMT_YUVA444P10LE] = {
788 .name = "yuva444p10le",
793 { 0, 1, 1, 0, 9 }, /* Y */
794 { 1, 1, 1, 0, 9 }, /* U */
795 { 2, 1, 1, 0, 9 }, /* V */
796 { 3, 1, 1, 0, 9 }, /* A */
798 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
800 [AV_PIX_FMT_YUVA420P16BE] = {
801 .name = "yuva420p16be",
806 { 0, 1, 1, 0, 15 }, /* Y */
807 { 1, 1, 1, 0, 15 }, /* U */
808 { 2, 1, 1, 0, 15 }, /* V */
809 { 3, 1, 1, 0, 15 }, /* A */
811 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
813 [AV_PIX_FMT_YUVA420P16LE] = {
814 .name = "yuva420p16le",
819 { 0, 1, 1, 0, 15 }, /* Y */
820 { 1, 1, 1, 0, 15 }, /* U */
821 { 2, 1, 1, 0, 15 }, /* V */
822 { 3, 1, 1, 0, 15 }, /* A */
824 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
826 [AV_PIX_FMT_YUVA422P16BE] = {
827 .name = "yuva422p16be",
832 { 0, 1, 1, 0, 15 }, /* Y */
833 { 1, 1, 1, 0, 15 }, /* U */
834 { 2, 1, 1, 0, 15 }, /* V */
835 { 3, 1, 1, 0, 15 }, /* A */
837 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
839 [AV_PIX_FMT_YUVA422P16LE] = {
840 .name = "yuva422p16le",
845 { 0, 1, 1, 0, 15 }, /* Y */
846 { 1, 1, 1, 0, 15 }, /* U */
847 { 2, 1, 1, 0, 15 }, /* V */
848 { 3, 1, 1, 0, 15 }, /* A */
850 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
852 [AV_PIX_FMT_YUVA444P16BE] = {
853 .name = "yuva444p16be",
858 { 0, 1, 1, 0, 15 }, /* Y */
859 { 1, 1, 1, 0, 15 }, /* U */
860 { 2, 1, 1, 0, 15 }, /* V */
861 { 3, 1, 1, 0, 15 }, /* A */
863 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
865 [AV_PIX_FMT_YUVA444P16LE] = {
866 .name = "yuva444p16le",
871 { 0, 1, 1, 0, 15 }, /* Y */
872 { 1, 1, 1, 0, 15 }, /* U */
873 { 2, 1, 1, 0, 15 }, /* V */
874 { 3, 1, 1, 0, 15 }, /* A */
876 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
879 [AV_PIX_FMT_VDPAU_H264] = {
880 .name = "vdpau_h264",
883 .flags = AV_PIX_FMT_FLAG_HWACCEL,
885 [AV_PIX_FMT_VDPAU_MPEG1] = {
886 .name = "vdpau_mpeg1",
889 .flags = AV_PIX_FMT_FLAG_HWACCEL,
891 [AV_PIX_FMT_VDPAU_MPEG2] = {
892 .name = "vdpau_mpeg2",
895 .flags = AV_PIX_FMT_FLAG_HWACCEL,
897 [AV_PIX_FMT_VDPAU_WMV3] = {
898 .name = "vdpau_wmv3",
901 .flags = AV_PIX_FMT_FLAG_HWACCEL,
903 [AV_PIX_FMT_VDPAU_VC1] = {
907 .flags = AV_PIX_FMT_FLAG_HWACCEL,
909 [AV_PIX_FMT_VDPAU_MPEG4] = {
910 .name = "vdpau_mpeg4",
913 .flags = AV_PIX_FMT_FLAG_HWACCEL,
916 [AV_PIX_FMT_RGB48BE] = {
922 { 0, 5, 1, 0, 15 }, /* R */
923 { 0, 5, 3, 0, 15 }, /* G */
924 { 0, 5, 5, 0, 15 }, /* B */
926 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
928 [AV_PIX_FMT_RGB48LE] = {
934 { 0, 5, 1, 0, 15 }, /* R */
935 { 0, 5, 3, 0, 15 }, /* G */
936 { 0, 5, 5, 0, 15 }, /* B */
938 .flags = AV_PIX_FMT_FLAG_RGB,
940 [AV_PIX_FMT_RGBA64BE] = {
946 { 0, 7, 1, 0, 15 }, /* R */
947 { 0, 7, 3, 0, 15 }, /* G */
948 { 0, 7, 5, 0, 15 }, /* B */
949 { 0, 7, 7, 0, 15 }, /* A */
951 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
953 [AV_PIX_FMT_RGBA64LE] = {
959 { 0, 7, 1, 0, 15 }, /* R */
960 { 0, 7, 3, 0, 15 }, /* G */
961 { 0, 7, 5, 0, 15 }, /* B */
962 { 0, 7, 7, 0, 15 }, /* A */
964 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
966 [AV_PIX_FMT_RGB565BE] = {
972 { 0, 1, 0, 3, 4 }, /* R */
973 { 0, 1, 1, 5, 5 }, /* G */
974 { 0, 1, 1, 0, 4 }, /* B */
976 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
978 [AV_PIX_FMT_RGB565LE] = {
984 { 0, 1, 2, 3, 4 }, /* R */
985 { 0, 1, 1, 5, 5 }, /* G */
986 { 0, 1, 1, 0, 4 }, /* B */
988 .flags = AV_PIX_FMT_FLAG_RGB,
990 [AV_PIX_FMT_RGB555BE] = {
996 { 0, 1, 0, 2, 4 }, /* R */
997 { 0, 1, 1, 5, 4 }, /* G */
998 { 0, 1, 1, 0, 4 }, /* B */
1000 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1002 [AV_PIX_FMT_RGB555LE] = {
1008 { 0, 1, 2, 2, 4 }, /* R */
1009 { 0, 1, 1, 5, 4 }, /* G */
1010 { 0, 1, 1, 0, 4 }, /* B */
1012 .flags = AV_PIX_FMT_FLAG_RGB,
1014 [AV_PIX_FMT_RGB444BE] = {
1020 { 0, 1, 0, 0, 3 }, /* R */
1021 { 0, 1, 1, 4, 3 }, /* G */
1022 { 0, 1, 1, 0, 3 }, /* B */
1024 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1026 [AV_PIX_FMT_RGB444LE] = {
1032 { 0, 1, 2, 0, 3 }, /* R */
1033 { 0, 1, 1, 4, 3 }, /* G */
1034 { 0, 1, 1, 0, 3 }, /* B */
1036 .flags = AV_PIX_FMT_FLAG_RGB,
1038 [AV_PIX_FMT_BGR48BE] = {
1044 { 0, 5, 5, 0, 15 }, /* R */
1045 { 0, 5, 3, 0, 15 }, /* G */
1046 { 0, 5, 1, 0, 15 }, /* B */
1048 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1050 [AV_PIX_FMT_BGR48LE] = {
1056 { 0, 5, 5, 0, 15 }, /* R */
1057 { 0, 5, 3, 0, 15 }, /* G */
1058 { 0, 5, 1, 0, 15 }, /* B */
1060 .flags = AV_PIX_FMT_FLAG_RGB,
1062 [AV_PIX_FMT_BGRA64BE] = {
1068 { 0, 7, 5, 0, 15 }, /* R */
1069 { 0, 7, 3, 0, 15 }, /* G */
1070 { 0, 7, 1, 0, 15 }, /* B */
1071 { 0, 7, 7, 0, 15 }, /* A */
1073 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1075 [AV_PIX_FMT_BGRA64LE] = {
1081 { 0, 7, 5, 0, 15 }, /* R */
1082 { 0, 7, 3, 0, 15 }, /* G */
1083 { 0, 7, 1, 0, 15 }, /* B */
1084 { 0, 7, 7, 0, 15 }, /* A */
1086 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1088 [AV_PIX_FMT_BGR565BE] = {
1094 { 0, 1, 1, 0, 4 }, /* R */
1095 { 0, 1, 1, 5, 5 }, /* G */
1096 { 0, 1, 0, 3, 4 }, /* B */
1098 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1100 [AV_PIX_FMT_BGR565LE] = {
1106 { 0, 1, 1, 0, 4 }, /* R */
1107 { 0, 1, 1, 5, 5 }, /* G */
1108 { 0, 1, 2, 3, 4 }, /* B */
1110 .flags = AV_PIX_FMT_FLAG_RGB,
1112 [AV_PIX_FMT_BGR555BE] = {
1118 { 0, 1, 1, 0, 4 }, /* R */
1119 { 0, 1, 1, 5, 4 }, /* G */
1120 { 0, 1, 0, 2, 4 }, /* B */
1122 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1124 [AV_PIX_FMT_BGR555LE] = {
1130 { 0, 1, 1, 0, 4 }, /* R */
1131 { 0, 1, 1, 5, 4 }, /* G */
1132 { 0, 1, 2, 2, 4 }, /* B */
1134 .flags = AV_PIX_FMT_FLAG_RGB,
1136 [AV_PIX_FMT_BGR444BE] = {
1142 { 0, 1, 1, 0, 3 }, /* R */
1143 { 0, 1, 1, 4, 3 }, /* G */
1144 { 0, 1, 0, 0, 3 }, /* B */
1146 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1148 [AV_PIX_FMT_BGR444LE] = {
1154 { 0, 1, 1, 0, 3 }, /* R */
1155 { 0, 1, 1, 4, 3 }, /* G */
1156 { 0, 1, 2, 0, 3 }, /* B */
1158 .flags = AV_PIX_FMT_FLAG_RGB,
1160 [AV_PIX_FMT_VAAPI_MOCO] = {
1161 .name = "vaapi_moco",
1164 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1166 [AV_PIX_FMT_VAAPI_IDCT] = {
1167 .name = "vaapi_idct",
1170 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1172 [AV_PIX_FMT_VAAPI_VLD] = {
1173 .name = "vaapi_vld",
1176 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1178 [AV_PIX_FMT_YUV420P9LE] = {
1179 .name = "yuv420p9le",
1184 { 0, 1, 1, 0, 8 }, /* Y */
1185 { 1, 1, 1, 0, 8 }, /* U */
1186 { 2, 1, 1, 0, 8 }, /* V */
1188 .flags = AV_PIX_FMT_FLAG_PLANAR,
1190 [AV_PIX_FMT_YUV420P9BE] = {
1191 .name = "yuv420p9be",
1196 { 0, 1, 1, 0, 8 }, /* Y */
1197 { 1, 1, 1, 0, 8 }, /* U */
1198 { 2, 1, 1, 0, 8 }, /* V */
1200 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1202 [AV_PIX_FMT_YUV420P10LE] = {
1203 .name = "yuv420p10le",
1208 { 0, 1, 1, 0, 9 }, /* Y */
1209 { 1, 1, 1, 0, 9 }, /* U */
1210 { 2, 1, 1, 0, 9 }, /* V */
1212 .flags = AV_PIX_FMT_FLAG_PLANAR,
1214 [AV_PIX_FMT_YUV420P10BE] = {
1215 .name = "yuv420p10be",
1220 { 0, 1, 1, 0, 9 }, /* Y */
1221 { 1, 1, 1, 0, 9 }, /* U */
1222 { 2, 1, 1, 0, 9 }, /* V */
1224 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1226 [AV_PIX_FMT_YUV420P12LE] = {
1227 .name = "yuv420p12le",
1232 { 0, 1, 1, 0, 11 }, /* Y */
1233 { 1, 1, 1, 0, 11 }, /* U */
1234 { 2, 1, 1, 0, 11 }, /* V */
1236 .flags = AV_PIX_FMT_FLAG_PLANAR,
1238 [AV_PIX_FMT_YUV420P12BE] = {
1239 .name = "yuv420p12be",
1244 { 0, 1, 1, 0, 11 }, /* Y */
1245 { 1, 1, 1, 0, 11 }, /* U */
1246 { 2, 1, 1, 0, 11 }, /* V */
1248 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1250 [AV_PIX_FMT_YUV420P14LE] = {
1251 .name = "yuv420p14le",
1256 { 0, 1, 1, 0, 13 }, /* Y */
1257 { 1, 1, 1, 0, 13 }, /* U */
1258 { 2, 1, 1, 0, 13 }, /* V */
1260 .flags = AV_PIX_FMT_FLAG_PLANAR,
1262 [AV_PIX_FMT_YUV420P14BE] = {
1263 .name = "yuv420p14be",
1268 { 0, 1, 1, 0, 13 }, /* Y */
1269 { 1, 1, 1, 0, 13 }, /* U */
1270 { 2, 1, 1, 0, 13 }, /* V */
1272 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1274 [AV_PIX_FMT_YUV420P16LE] = {
1275 .name = "yuv420p16le",
1280 { 0, 1, 1, 0, 15 }, /* Y */
1281 { 1, 1, 1, 0, 15 }, /* U */
1282 { 2, 1, 1, 0, 15 }, /* V */
1284 .flags = AV_PIX_FMT_FLAG_PLANAR,
1286 [AV_PIX_FMT_YUV420P16BE] = {
1287 .name = "yuv420p16be",
1292 { 0, 1, 1, 0, 15 }, /* Y */
1293 { 1, 1, 1, 0, 15 }, /* U */
1294 { 2, 1, 1, 0, 15 }, /* V */
1296 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1298 [AV_PIX_FMT_YUV422P9LE] = {
1299 .name = "yuv422p9le",
1304 { 0, 1, 1, 0, 8 }, /* Y */
1305 { 1, 1, 1, 0, 8 }, /* U */
1306 { 2, 1, 1, 0, 8 }, /* V */
1308 .flags = AV_PIX_FMT_FLAG_PLANAR,
1310 [AV_PIX_FMT_YUV422P9BE] = {
1311 .name = "yuv422p9be",
1316 { 0, 1, 1, 0, 8 }, /* Y */
1317 { 1, 1, 1, 0, 8 }, /* U */
1318 { 2, 1, 1, 0, 8 }, /* V */
1320 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1322 [AV_PIX_FMT_YUV422P10LE] = {
1323 .name = "yuv422p10le",
1328 { 0, 1, 1, 0, 9 }, /* Y */
1329 { 1, 1, 1, 0, 9 }, /* U */
1330 { 2, 1, 1, 0, 9 }, /* V */
1332 .flags = AV_PIX_FMT_FLAG_PLANAR,
1334 [AV_PIX_FMT_YUV422P10BE] = {
1335 .name = "yuv422p10be",
1340 { 0, 1, 1, 0, 9 }, /* Y */
1341 { 1, 1, 1, 0, 9 }, /* U */
1342 { 2, 1, 1, 0, 9 }, /* V */
1344 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1346 [AV_PIX_FMT_YUV422P12LE] = {
1347 .name = "yuv422p12le",
1352 { 0, 1, 1, 0, 11 }, /* Y */
1353 { 1, 1, 1, 0, 11 }, /* U */
1354 { 2, 1, 1, 0, 11 }, /* V */
1356 .flags = AV_PIX_FMT_FLAG_PLANAR,
1358 [AV_PIX_FMT_YUV422P12BE] = {
1359 .name = "yuv422p12be",
1364 { 0, 1, 1, 0, 11 }, /* Y */
1365 { 1, 1, 1, 0, 11 }, /* U */
1366 { 2, 1, 1, 0, 11 }, /* V */
1368 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1370 [AV_PIX_FMT_YUV422P14LE] = {
1371 .name = "yuv422p14le",
1376 { 0, 1, 1, 0, 13 }, /* Y */
1377 { 1, 1, 1, 0, 13 }, /* U */
1378 { 2, 1, 1, 0, 13 }, /* V */
1380 .flags = AV_PIX_FMT_FLAG_PLANAR,
1382 [AV_PIX_FMT_YUV422P14BE] = {
1383 .name = "yuv422p14be",
1388 { 0, 1, 1, 0, 13 }, /* Y */
1389 { 1, 1, 1, 0, 13 }, /* U */
1390 { 2, 1, 1, 0, 13 }, /* V */
1392 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1394 [AV_PIX_FMT_YUV422P16LE] = {
1395 .name = "yuv422p16le",
1400 { 0, 1, 1, 0, 15 }, /* Y */
1401 { 1, 1, 1, 0, 15 }, /* U */
1402 { 2, 1, 1, 0, 15 }, /* V */
1404 .flags = AV_PIX_FMT_FLAG_PLANAR,
1406 [AV_PIX_FMT_YUV422P16BE] = {
1407 .name = "yuv422p16be",
1412 { 0, 1, 1, 0, 15 }, /* Y */
1413 { 1, 1, 1, 0, 15 }, /* U */
1414 { 2, 1, 1, 0, 15 }, /* V */
1416 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1418 [AV_PIX_FMT_YUV444P16LE] = {
1419 .name = "yuv444p16le",
1424 { 0, 1, 1, 0, 15 }, /* Y */
1425 { 1, 1, 1, 0, 15 }, /* U */
1426 { 2, 1, 1, 0, 15 }, /* V */
1428 .flags = AV_PIX_FMT_FLAG_PLANAR,
1430 [AV_PIX_FMT_YUV444P16BE] = {
1431 .name = "yuv444p16be",
1436 { 0, 1, 1, 0, 15 }, /* Y */
1437 { 1, 1, 1, 0, 15 }, /* U */
1438 { 2, 1, 1, 0, 15 }, /* V */
1440 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1442 [AV_PIX_FMT_YUV444P10LE] = {
1443 .name = "yuv444p10le",
1448 { 0, 1, 1, 0, 9 }, /* Y */
1449 { 1, 1, 1, 0, 9 }, /* U */
1450 { 2, 1, 1, 0, 9 }, /* V */
1452 .flags = AV_PIX_FMT_FLAG_PLANAR,
1454 [AV_PIX_FMT_YUV444P10BE] = {
1455 .name = "yuv444p10be",
1460 { 0, 1, 1, 0, 9 }, /* Y */
1461 { 1, 1, 1, 0, 9 }, /* U */
1462 { 2, 1, 1, 0, 9 }, /* V */
1464 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1466 [AV_PIX_FMT_YUV444P9LE] = {
1467 .name = "yuv444p9le",
1472 { 0, 1, 1, 0, 8 }, /* Y */
1473 { 1, 1, 1, 0, 8 }, /* U */
1474 { 2, 1, 1, 0, 8 }, /* V */
1476 .flags = AV_PIX_FMT_FLAG_PLANAR,
1478 [AV_PIX_FMT_YUV444P9BE] = {
1479 .name = "yuv444p9be",
1484 { 0, 1, 1, 0, 8 }, /* Y */
1485 { 1, 1, 1, 0, 8 }, /* U */
1486 { 2, 1, 1, 0, 8 }, /* V */
1488 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1490 [AV_PIX_FMT_YUV444P12LE] = {
1491 .name = "yuv444p12le",
1496 { 0, 1, 1, 0, 11 }, /* Y */
1497 { 1, 1, 1, 0, 11 }, /* U */
1498 { 2, 1, 1, 0, 11 }, /* V */
1500 .flags = AV_PIX_FMT_FLAG_PLANAR,
1502 [AV_PIX_FMT_YUV444P12BE] = {
1503 .name = "yuv444p12be",
1508 { 0, 1, 1, 0, 11 }, /* Y */
1509 { 1, 1, 1, 0, 11 }, /* U */
1510 { 2, 1, 1, 0, 11 }, /* V */
1512 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1514 [AV_PIX_FMT_YUV444P14LE] = {
1515 .name = "yuv444p14le",
1520 { 0, 1, 1, 0, 13 }, /* Y */
1521 { 1, 1, 1, 0, 13 }, /* U */
1522 { 2, 1, 1, 0, 13 }, /* V */
1524 .flags = AV_PIX_FMT_FLAG_PLANAR,
1526 [AV_PIX_FMT_YUV444P14BE] = {
1527 .name = "yuv444p14be",
1532 { 0, 1, 1, 0, 13 }, /* Y */
1533 { 1, 1, 1, 0, 13 }, /* U */
1534 { 2, 1, 1, 0, 13 }, /* V */
1536 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1538 [AV_PIX_FMT_DXVA2_VLD] = {
1539 .name = "dxva2_vld",
1542 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1544 [AV_PIX_FMT_VDA_VLD] = {
1548 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1550 [AV_PIX_FMT_GRAY8A] = {
1554 { 0, 1, 1, 0, 7 }, /* Y */
1555 { 0, 1, 2, 0, 7 }, /* A */
1557 .flags = AV_PIX_FMT_FLAG_ALPHA,
1559 [AV_PIX_FMT_GBRP] = {
1565 { 2, 0, 1, 0, 7 }, /* R */
1566 { 0, 0, 1, 0, 7 }, /* G */
1567 { 1, 0, 1, 0, 7 }, /* B */
1569 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1571 [AV_PIX_FMT_GBRP9LE] = {
1577 { 2, 1, 1, 0, 8 }, /* R */
1578 { 0, 1, 1, 0, 8 }, /* G */
1579 { 1, 1, 1, 0, 8 }, /* B */
1581 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1583 [AV_PIX_FMT_GBRP9BE] = {
1589 { 2, 1, 1, 0, 8 }, /* R */
1590 { 0, 1, 1, 0, 8 }, /* G */
1591 { 1, 1, 1, 0, 8 }, /* B */
1593 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1595 [AV_PIX_FMT_GBRP10LE] = {
1601 { 2, 1, 1, 0, 9 }, /* R */
1602 { 0, 1, 1, 0, 9 }, /* G */
1603 { 1, 1, 1, 0, 9 }, /* B */
1605 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1607 [AV_PIX_FMT_GBRP10BE] = {
1613 { 2, 1, 1, 0, 9 }, /* R */
1614 { 0, 1, 1, 0, 9 }, /* G */
1615 { 1, 1, 1, 0, 9 }, /* B */
1617 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1619 [AV_PIX_FMT_GBRP12LE] = {
1625 { 2, 1, 1, 0, 11 }, /* R */
1626 { 0, 1, 1, 0, 11 }, /* G */
1627 { 1, 1, 1, 0, 11 }, /* B */
1629 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1631 [AV_PIX_FMT_GBRP12BE] = {
1637 { 2, 1, 1, 0, 11 }, /* R */
1638 { 0, 1, 1, 0, 11 }, /* G */
1639 { 1, 1, 1, 0, 11 }, /* B */
1641 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1643 [AV_PIX_FMT_GBRP14LE] = {
1649 { 2, 1, 1, 0, 13 }, /* R */
1650 { 0, 1, 1, 0, 13 }, /* G */
1651 { 1, 1, 1, 0, 13 }, /* B */
1653 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1655 [AV_PIX_FMT_GBRP14BE] = {
1661 { 2, 1, 1, 0, 13 }, /* R */
1662 { 0, 1, 1, 0, 13 }, /* G */
1663 { 1, 1, 1, 0, 13 }, /* B */
1665 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1667 [AV_PIX_FMT_GBRP16LE] = {
1673 { 2, 1, 1, 0, 15 }, /* R */
1674 { 0, 1, 1, 0, 15 }, /* G */
1675 { 1, 1, 1, 0, 15 }, /* B */
1677 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1679 [AV_PIX_FMT_GBRP16BE] = {
1685 { 2, 1, 1, 0, 15 }, /* R */
1686 { 0, 1, 1, 0, 15 }, /* G */
1687 { 1, 1, 1, 0, 15 }, /* B */
1689 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1691 [AV_PIX_FMT_GBRAP] = {
1697 { 2, 0, 1, 0, 7 }, /* R */
1698 { 0, 0, 1, 0, 7 }, /* G */
1699 { 1, 0, 1, 0, 7 }, /* B */
1700 { 3, 0, 1, 0, 7 }, /* A */
1702 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1704 [AV_PIX_FMT_GBRAP16LE] = {
1705 .name = "gbrap16le",
1710 { 2, 1, 1, 0, 15 }, /* R */
1711 { 0, 1, 1, 0, 15 }, /* G */
1712 { 1, 1, 1, 0, 15 }, /* B */
1713 { 3, 1, 1, 0, 15 }, /* A */
1715 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1717 [AV_PIX_FMT_GBRAP16BE] = {
1718 .name = "gbrap16be",
1723 { 2, 1, 1, 0, 15 }, /* R */
1724 { 0, 1, 1, 0, 15 }, /* G */
1725 { 1, 1, 1, 0, 15 }, /* B */
1726 { 3, 1, 1, 0, 15 }, /* A */
1728 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1730 [AV_PIX_FMT_VDPAU] = {
1734 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1736 [AV_PIX_FMT_XYZ12LE] = {
1742 { 0, 5, 1, 4, 11 }, /* X */
1743 { 0, 5, 3, 4, 11 }, /* Y */
1744 { 0, 5, 5, 4, 11 }, /* Z */
1746 /*.flags = -- not used*/
1748 [AV_PIX_FMT_XYZ12BE] = {
1754 { 0, 5, 1, 4, 11 }, /* X */
1755 { 0, 5, 3, 4, 11 }, /* Y */
1756 { 0, 5, 5, 4, 11 }, /* Z */
1758 .flags = AV_PIX_FMT_FLAG_BE,
1761 #define BAYER8_DESC_COMMON \
1762 .nb_components= 3, \
1763 .log2_chroma_w= 0, \
1764 .log2_chroma_h= 0, \
1771 #define BAYER16_DESC_COMMON \
1772 .nb_components= 3, \
1773 .log2_chroma_w= 0, \
1774 .log2_chroma_h= 0, \
1781 [AV_PIX_FMT_BAYER_BGGR8] = {
1782 .name = "bayer_bggr8",
1784 .flags = AV_PIX_FMT_FLAG_RGB,
1786 [AV_PIX_FMT_BAYER_BGGR16LE] = {
1787 .name = "bayer_bggr16le",
1789 .flags = AV_PIX_FMT_FLAG_RGB,
1791 [AV_PIX_FMT_BAYER_BGGR16BE] = {
1792 .name = "bayer_bggr16be",
1794 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1796 [AV_PIX_FMT_BAYER_RGGB8] = {
1797 .name = "bayer_rggb8",
1799 .flags = AV_PIX_FMT_FLAG_RGB,
1801 [AV_PIX_FMT_BAYER_RGGB16LE] = {
1802 .name = "bayer_rggb16le",
1804 .flags = AV_PIX_FMT_FLAG_RGB,
1806 [AV_PIX_FMT_BAYER_RGGB16BE] = {
1807 .name = "bayer_rggb16be",
1809 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1811 [AV_PIX_FMT_BAYER_GBRG8] = {
1812 .name = "bayer_gbrg8",
1814 .flags = AV_PIX_FMT_FLAG_RGB,
1816 [AV_PIX_FMT_BAYER_GBRG16LE] = {
1817 .name = "bayer_gbrg16le",
1819 .flags = AV_PIX_FMT_FLAG_RGB,
1821 [AV_PIX_FMT_BAYER_GBRG16BE] = {
1822 .name = "bayer_gbrg16be",
1824 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1826 [AV_PIX_FMT_BAYER_GRBG8] = {
1827 .name = "bayer_grbg8",
1829 .flags = AV_PIX_FMT_FLAG_RGB,
1831 [AV_PIX_FMT_BAYER_GRBG16LE] = {
1832 .name = "bayer_grbg16le",
1834 .flags = AV_PIX_FMT_FLAG_RGB,
1836 [AV_PIX_FMT_BAYER_GRBG16BE] = {
1837 .name = "bayer_grbg16be",
1839 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1841 [AV_PIX_FMT_NV16] = {
1847 { 0, 0, 1, 0, 7 }, /* Y */
1848 { 1, 1, 1, 0, 7 }, /* U */
1849 { 1, 1, 2, 0, 7 }, /* V */
1851 .flags = AV_PIX_FMT_FLAG_PLANAR,
1853 [AV_PIX_FMT_NV20LE] = {
1859 { 0, 1, 1, 0, 9 }, /* Y */
1860 { 1, 3, 1, 0, 9 }, /* U */
1861 { 1, 3, 3, 0, 9 }, /* V */
1863 .flags = AV_PIX_FMT_FLAG_PLANAR,
1865 [AV_PIX_FMT_NV20BE] = {
1871 { 0, 1, 1, 0, 9 }, /* Y */
1872 { 1, 3, 1, 0, 9 }, /* U */
1873 { 1, 3, 3, 0, 9 }, /* V */
1875 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
1879 FF_DISABLE_DEPRECATION_WARNINGS
1880 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
1882 enum AVPixelFormat pix_fmt;
1884 for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
1885 if (av_pix_fmt_descriptors[pix_fmt].name &&
1886 !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
1889 return AV_PIX_FMT_NONE;
1892 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
1894 return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
1895 av_pix_fmt_descriptors[pix_fmt].name : NULL;
1899 # define X_NE(be, le) be
1901 # define X_NE(be, le) le
1904 enum AVPixelFormat av_get_pix_fmt(const char *name)
1906 enum AVPixelFormat pix_fmt;
1908 if (!strcmp(name, "rgb32"))
1909 name = X_NE("argb", "bgra");
1910 else if (!strcmp(name, "bgr32"))
1911 name = X_NE("abgr", "rgba");
1913 pix_fmt = get_pix_fmt_internal(name);
1914 if (pix_fmt == AV_PIX_FMT_NONE) {
1917 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
1918 pix_fmt = get_pix_fmt_internal(name2);
1923 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1926 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1928 for (c = 0; c < pixdesc->nb_components; c++) {
1929 int s = c == 1 || c == 2 ? 0 : log2_pixels;
1930 bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
1933 return bits >> log2_pixels;
1936 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
1939 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
1942 for (c = 0; c < pixdesc->nb_components; c++) {
1943 const AVComponentDescriptor *comp = &pixdesc->comp[c];
1944 int s = c == 1 || c == 2 ? 0 : log2_pixels;
1945 steps[comp->plane] = (comp->step_minus1 + 1) << s;
1947 for (c = 0; c < 4; c++)
1950 if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
1953 return bits >> log2_pixels;
1956 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
1960 snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
1962 const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
1963 snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
1964 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
1970 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
1972 if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
1974 return &av_pix_fmt_descriptors[pix_fmt];
1977 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
1980 return &av_pix_fmt_descriptors[0];
1981 while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
1989 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
1991 if (desc < av_pix_fmt_descriptors ||
1992 desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
1993 return AV_PIX_FMT_NONE;
1995 return desc - av_pix_fmt_descriptors;
1997 FF_ENABLE_DEPRECATION_WARNINGS
1999 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
2000 int *h_shift, int *v_shift)
2002 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2004 return AVERROR(ENOSYS);
2005 *h_shift = desc->log2_chroma_w;
2006 *v_shift = desc->log2_chroma_h;
2011 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
2013 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2014 int i, planes[4] = { 0 }, ret = 0;
2017 return AVERROR(EINVAL);
2019 for (i = 0; i < desc->nb_components; i++)
2020 planes[desc->comp[i].plane] = 1;
2021 for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
2026 void ff_check_pixfmt_descriptors(void){
2029 for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
2030 const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
2031 uint8_t fill[4][8+6+3] = {{0}};
2032 uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2033 int linesize[4] = {0,0,0,0};
2036 if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2038 // av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2039 av_assert0(d->log2_chroma_w <= 3);
2040 av_assert0(d->log2_chroma_h <= 3);
2041 av_assert0(d->nb_components <= 4);
2042 av_assert0(d->name && d->name[0]);
2043 av_assert0((d->nb_components==4 || d->nb_components==2) == !!(d->flags & AV_PIX_FMT_FLAG_ALPHA));
2044 av_assert2(av_get_pix_fmt(d->name) == i);
2046 for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
2047 const AVComponentDescriptor *c = &d->comp[j];
2048 if(j>=d->nb_components) {
2049 av_assert0(!c->plane && !c->step_minus1 && !c->offset_plus1 && !c->shift && !c->depth_minus1);
2052 if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2053 av_assert0(c->step_minus1 >= c->depth_minus1);
2055 av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
2057 if (!strncmp(d->name, "bayer_", 6))
2059 av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2060 av_assert0(tmp[0] == 0 && tmp[1] == 0);
2061 tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
2062 av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2068 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2070 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2074 if (!desc || strlen(desc->name) < 2)
2075 return AV_PIX_FMT_NONE;
2076 av_strlcpy(name, desc->name, sizeof(name));
2077 i = strlen(name) - 2;
2078 if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2079 return AV_PIX_FMT_NONE;
2081 name[i] ^= 'b' ^ 'l';
2083 return get_pix_fmt_internal(name);