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
31 #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;
43 int mask = (1 << depth) - 1;
44 int shift = comp.shift;
46 int flags = desc->flags;
48 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
49 int skip = x * step + comp.offset;
50 const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
51 int shift = 8 - depth - (skip & 7);
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;
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;
91 int flags = desc->flags;
93 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
94 int skip = x * step + comp.offset;
95 uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
96 int shift = 8 - depth - (skip & 7);
99 *p |= *src++ << shift;
105 int shift = comp.shift;
106 uint8_t *p = data[plane] + y * linesize[plane] +
107 x * step + comp.offset;
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_PLUS1_MINUS1
131 FF_DISABLE_DEPRECATION_WARNINGS
133 static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
134 [AV_PIX_FMT_YUV420P] = {
140 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
141 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
142 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
144 .flags = AV_PIX_FMT_FLAG_PLANAR,
146 [AV_PIX_FMT_YUYV422] = {
152 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
153 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* U */
154 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* V */
157 [AV_PIX_FMT_YVYU422] = {
163 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
164 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* U */
165 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* V */
168 [AV_PIX_FMT_RGB24] = {
174 { 0, 3, 0, 0, 8, 2, 7, 1 }, /* R */
175 { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
176 { 0, 3, 2, 0, 8, 2, 7, 3 }, /* B */
178 .flags = AV_PIX_FMT_FLAG_RGB,
180 [AV_PIX_FMT_BGR24] = {
186 { 0, 3, 2, 0, 8, 2, 7, 3 }, /* R */
187 { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
188 { 0, 3, 0, 0, 8, 2, 7, 1 }, /* B */
190 .flags = AV_PIX_FMT_FLAG_RGB,
192 [AV_PIX_FMT_YUV422P] = {
198 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
199 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
200 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
202 .flags = AV_PIX_FMT_FLAG_PLANAR,
204 [AV_PIX_FMT_YUV444P] = {
210 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
211 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
212 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
214 .flags = AV_PIX_FMT_FLAG_PLANAR,
216 [AV_PIX_FMT_YUV410P] = {
222 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
223 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
224 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
226 .flags = AV_PIX_FMT_FLAG_PLANAR,
228 [AV_PIX_FMT_YUV411P] = {
234 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
235 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
236 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
238 .flags = AV_PIX_FMT_FLAG_PLANAR,
240 [AV_PIX_FMT_YUVJ411P] = {
246 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
247 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
248 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
250 .flags = AV_PIX_FMT_FLAG_PLANAR,
252 [AV_PIX_FMT_GRAY8] = {
258 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
260 .flags = FF_PSEUDOPAL,
263 [AV_PIX_FMT_MONOWHITE] = {
269 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* Y */
271 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
273 [AV_PIX_FMT_MONOBLACK] = {
279 { 0, 1, 0, 7, 1, 0, 0, 1 }, /* Y */
281 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
283 [AV_PIX_FMT_PAL8] = {
289 { 0, 1, 0, 0, 8, 0, 7, 1 },
291 .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA,
293 [AV_PIX_FMT_YUVJ420P] = {
299 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
300 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
301 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
303 .flags = AV_PIX_FMT_FLAG_PLANAR,
305 [AV_PIX_FMT_YUVJ422P] = {
311 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
312 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
313 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
315 .flags = AV_PIX_FMT_FLAG_PLANAR,
317 [AV_PIX_FMT_YUVJ444P] = {
323 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
324 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
325 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
327 .flags = AV_PIX_FMT_FLAG_PLANAR,
329 [AV_PIX_FMT_XVMC] = {
331 .flags = AV_PIX_FMT_FLAG_HWACCEL,
333 [AV_PIX_FMT_UYVY422] = {
339 { 0, 2, 1, 0, 8, 1, 7, 2 }, /* Y */
340 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* U */
341 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* V */
344 [AV_PIX_FMT_UYYVYY411] = {
350 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* Y */
351 { 0, 6, 0, 0, 8, 5, 7, 1 }, /* U */
352 { 0, 6, 3, 0, 8, 5, 7, 4 }, /* V */
355 [AV_PIX_FMT_BGR8] = {
361 { 0, 1, 0, 0, 3, 0, 2, 1 }, /* R */
362 { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
363 { 0, 1, 0, 6, 2, 0, 1, 1 }, /* B */
365 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
367 [AV_PIX_FMT_BGR4] = {
373 { 0, 4, 3, 0, 1, 3, 0, 4 }, /* R */
374 { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
375 { 0, 4, 0, 0, 1, 3, 0, 1 }, /* B */
377 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
379 [AV_PIX_FMT_BGR4_BYTE] = {
385 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* R */
386 { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
387 { 0, 1, 0, 3, 1, 0, 0, 1 }, /* B */
389 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
391 [AV_PIX_FMT_RGB8] = {
397 { 0, 1, 0, 6, 2, 0, 1, 1 }, /* R */
398 { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
399 { 0, 1, 0, 0, 3, 0, 2, 1 }, /* B */
401 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
403 [AV_PIX_FMT_RGB4] = {
409 { 0, 4, 0, 0, 1, 3, 0, 1 }, /* R */
410 { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
411 { 0, 4, 3, 0, 1, 3, 0, 4 }, /* B */
413 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
415 [AV_PIX_FMT_RGB4_BYTE] = {
421 { 0, 1, 0, 3, 1, 0, 0, 1 }, /* R */
422 { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
423 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* B */
425 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
427 [AV_PIX_FMT_NV12] = {
433 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
434 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
435 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
437 .flags = AV_PIX_FMT_FLAG_PLANAR,
439 [AV_PIX_FMT_NV21] = {
445 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
446 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */
447 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */
449 .flags = AV_PIX_FMT_FLAG_PLANAR,
451 [AV_PIX_FMT_ARGB] = {
457 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */
458 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
459 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */
460 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
462 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
464 [AV_PIX_FMT_RGBA] = {
470 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */
471 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
472 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */
473 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
475 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
477 [AV_PIX_FMT_ABGR] = {
483 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */
484 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
485 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */
486 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
488 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
490 [AV_PIX_FMT_BGRA] = {
496 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */
497 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
498 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */
499 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
501 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
503 [AV_PIX_FMT_0RGB] = {
509 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */
510 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
511 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */
513 .flags = AV_PIX_FMT_FLAG_RGB,
515 [AV_PIX_FMT_RGB0] = {
521 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */
522 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
523 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */
525 .flags = AV_PIX_FMT_FLAG_RGB,
527 [AV_PIX_FMT_0BGR] = {
533 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */
534 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
535 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */
537 .flags = AV_PIX_FMT_FLAG_RGB,
539 [AV_PIX_FMT_BGR0] = {
545 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */
546 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
547 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */
549 .flags = AV_PIX_FMT_FLAG_RGB,
551 [AV_PIX_FMT_GRAY9BE] = {
557 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
559 .flags = AV_PIX_FMT_FLAG_BE,
562 [AV_PIX_FMT_GRAY9LE] = {
568 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
572 [AV_PIX_FMT_GRAY10BE] = {
578 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
580 .flags = AV_PIX_FMT_FLAG_BE,
583 [AV_PIX_FMT_GRAY10LE] = {
589 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
593 [AV_PIX_FMT_GRAY12BE] = {
599 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
601 .flags = AV_PIX_FMT_FLAG_BE,
604 [AV_PIX_FMT_GRAY12LE] = {
610 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
614 [AV_PIX_FMT_GRAY14BE] = {
620 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
622 .flags = AV_PIX_FMT_FLAG_BE,
625 [AV_PIX_FMT_GRAY14LE] = {
631 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
635 [AV_PIX_FMT_GRAY16BE] = {
641 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
643 .flags = AV_PIX_FMT_FLAG_BE,
646 [AV_PIX_FMT_GRAY16LE] = {
652 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
656 [AV_PIX_FMT_YUV440P] = {
662 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
663 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
664 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
666 .flags = AV_PIX_FMT_FLAG_PLANAR,
668 [AV_PIX_FMT_YUVJ440P] = {
674 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
675 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
676 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
678 .flags = AV_PIX_FMT_FLAG_PLANAR,
680 [AV_PIX_FMT_YUV440P10LE] = {
681 .name = "yuv440p10le",
686 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
687 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
688 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
690 .flags = AV_PIX_FMT_FLAG_PLANAR,
692 [AV_PIX_FMT_YUV440P10BE] = {
693 .name = "yuv440p10be",
698 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
699 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
700 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
702 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
704 [AV_PIX_FMT_YUV440P12LE] = {
705 .name = "yuv440p12le",
710 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
711 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
712 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
714 .flags = AV_PIX_FMT_FLAG_PLANAR,
716 [AV_PIX_FMT_YUV440P12BE] = {
717 .name = "yuv440p12be",
722 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
723 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
724 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
726 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
728 [AV_PIX_FMT_YUVA420P] = {
734 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
735 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
736 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
737 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
739 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
741 [AV_PIX_FMT_YUVA422P] = {
747 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
748 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
749 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
750 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
752 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
754 [AV_PIX_FMT_YUVA444P] = {
760 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
761 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
762 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
763 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
765 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
767 [AV_PIX_FMT_YUVA420P9BE] = {
768 .name = "yuva420p9be",
773 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
774 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
775 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
776 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
778 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
780 [AV_PIX_FMT_YUVA420P9LE] = {
781 .name = "yuva420p9le",
786 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
787 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
788 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
789 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
791 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
793 [AV_PIX_FMT_YUVA422P9BE] = {
794 .name = "yuva422p9be",
799 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
800 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
801 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
802 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
804 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
806 [AV_PIX_FMT_YUVA422P9LE] = {
807 .name = "yuva422p9le",
812 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
813 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
814 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
815 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
817 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
819 [AV_PIX_FMT_YUVA444P9BE] = {
820 .name = "yuva444p9be",
825 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
826 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
827 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
828 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
830 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
832 [AV_PIX_FMT_YUVA444P9LE] = {
833 .name = "yuva444p9le",
838 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
839 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
840 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
841 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
843 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
845 [AV_PIX_FMT_YUVA420P10BE] = {
846 .name = "yuva420p10be",
851 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
852 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
853 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
854 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
856 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
858 [AV_PIX_FMT_YUVA420P10LE] = {
859 .name = "yuva420p10le",
864 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
865 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
866 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
867 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
869 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
871 [AV_PIX_FMT_YUVA422P10BE] = {
872 .name = "yuva422p10be",
877 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
878 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
879 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
880 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
882 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
884 [AV_PIX_FMT_YUVA422P10LE] = {
885 .name = "yuva422p10le",
890 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
891 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
892 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
893 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
895 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
897 [AV_PIX_FMT_YUVA444P10BE] = {
898 .name = "yuva444p10be",
903 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
904 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
905 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
906 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
908 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
910 [AV_PIX_FMT_YUVA444P10LE] = {
911 .name = "yuva444p10le",
916 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
917 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
918 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
919 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
921 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
923 [AV_PIX_FMT_YUVA420P16BE] = {
924 .name = "yuva420p16be",
929 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
930 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
931 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
932 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
934 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
936 [AV_PIX_FMT_YUVA420P16LE] = {
937 .name = "yuva420p16le",
942 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
943 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
944 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
945 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
947 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
949 [AV_PIX_FMT_YUVA422P16BE] = {
950 .name = "yuva422p16be",
955 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
956 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
957 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
958 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
960 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
962 [AV_PIX_FMT_YUVA422P16LE] = {
963 .name = "yuva422p16le",
968 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
969 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
970 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
971 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
973 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
975 [AV_PIX_FMT_YUVA444P16BE] = {
976 .name = "yuva444p16be",
981 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
982 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
983 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
984 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
986 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
988 [AV_PIX_FMT_YUVA444P16LE] = {
989 .name = "yuva444p16le",
994 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
995 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
996 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
997 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
999 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1001 [AV_PIX_FMT_RGB48BE] = {
1007 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
1008 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1009 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
1011 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
1013 [AV_PIX_FMT_RGB48LE] = {
1019 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
1020 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1021 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
1023 .flags = AV_PIX_FMT_FLAG_RGB,
1025 [AV_PIX_FMT_RGBA64BE] = {
1031 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
1032 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1033 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
1034 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1036 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1038 [AV_PIX_FMT_RGBA64LE] = {
1044 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
1045 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1046 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
1047 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1049 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1051 [AV_PIX_FMT_RGB565BE] = {
1057 { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */
1058 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1059 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1061 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1063 [AV_PIX_FMT_RGB565LE] = {
1069 { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */
1070 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1071 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1073 .flags = AV_PIX_FMT_FLAG_RGB,
1075 [AV_PIX_FMT_RGB555BE] = {
1081 { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */
1082 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1083 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1085 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1087 [AV_PIX_FMT_RGB555LE] = {
1093 { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */
1094 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1095 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1097 .flags = AV_PIX_FMT_FLAG_RGB,
1099 [AV_PIX_FMT_RGB444BE] = {
1105 { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */
1106 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1107 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
1109 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1111 [AV_PIX_FMT_RGB444LE] = {
1117 { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */
1118 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1119 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
1121 .flags = AV_PIX_FMT_FLAG_RGB,
1123 [AV_PIX_FMT_BGR48BE] = {
1129 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
1130 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1131 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
1133 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1135 [AV_PIX_FMT_BGR48LE] = {
1141 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
1142 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1143 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
1145 .flags = AV_PIX_FMT_FLAG_RGB,
1147 [AV_PIX_FMT_BGRA64BE] = {
1153 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
1154 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1155 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
1156 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1158 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1160 [AV_PIX_FMT_BGRA64LE] = {
1166 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
1167 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1168 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
1169 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1171 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1173 [AV_PIX_FMT_BGR565BE] = {
1179 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1180 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1181 { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */
1183 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1185 [AV_PIX_FMT_BGR565LE] = {
1191 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1192 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1193 { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */
1195 .flags = AV_PIX_FMT_FLAG_RGB,
1197 [AV_PIX_FMT_BGR555BE] = {
1203 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1204 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1205 { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */
1207 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1209 [AV_PIX_FMT_BGR555LE] = {
1215 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1216 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1217 { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */
1219 .flags = AV_PIX_FMT_FLAG_RGB,
1221 [AV_PIX_FMT_BGR444BE] = {
1227 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
1228 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1229 { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */
1231 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1233 [AV_PIX_FMT_BGR444LE] = {
1239 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
1240 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1241 { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */
1243 .flags = AV_PIX_FMT_FLAG_RGB,
1246 [AV_PIX_FMT_VAAPI_MOCO] = {
1247 .name = "vaapi_moco",
1250 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1252 [AV_PIX_FMT_VAAPI_IDCT] = {
1253 .name = "vaapi_idct",
1256 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1258 [AV_PIX_FMT_VAAPI_VLD] = {
1259 .name = "vaapi_vld",
1262 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1265 [AV_PIX_FMT_VAAPI] = {
1269 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1272 [AV_PIX_FMT_YUV420P9LE] = {
1273 .name = "yuv420p9le",
1278 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1279 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1280 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1282 .flags = AV_PIX_FMT_FLAG_PLANAR,
1284 [AV_PIX_FMT_YUV420P9BE] = {
1285 .name = "yuv420p9be",
1290 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1291 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1292 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1294 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1296 [AV_PIX_FMT_YUV420P10LE] = {
1297 .name = "yuv420p10le",
1302 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1303 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1304 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1306 .flags = AV_PIX_FMT_FLAG_PLANAR,
1308 [AV_PIX_FMT_YUV420P10BE] = {
1309 .name = "yuv420p10be",
1314 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1315 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1316 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1318 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1320 [AV_PIX_FMT_YUV420P12LE] = {
1321 .name = "yuv420p12le",
1326 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1327 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1328 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1330 .flags = AV_PIX_FMT_FLAG_PLANAR,
1332 [AV_PIX_FMT_YUV420P12BE] = {
1333 .name = "yuv420p12be",
1338 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1339 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1340 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1342 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1344 [AV_PIX_FMT_YUV420P14LE] = {
1345 .name = "yuv420p14le",
1350 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1351 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1352 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1354 .flags = AV_PIX_FMT_FLAG_PLANAR,
1356 [AV_PIX_FMT_YUV420P14BE] = {
1357 .name = "yuv420p14be",
1362 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1363 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1364 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1366 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1368 [AV_PIX_FMT_YUV420P16LE] = {
1369 .name = "yuv420p16le",
1374 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1375 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1376 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1378 .flags = AV_PIX_FMT_FLAG_PLANAR,
1380 [AV_PIX_FMT_YUV420P16BE] = {
1381 .name = "yuv420p16be",
1386 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1387 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1388 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1390 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1392 [AV_PIX_FMT_YUV422P9LE] = {
1393 .name = "yuv422p9le",
1398 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1399 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1400 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1402 .flags = AV_PIX_FMT_FLAG_PLANAR,
1404 [AV_PIX_FMT_YUV422P9BE] = {
1405 .name = "yuv422p9be",
1410 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1411 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1412 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1414 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1416 [AV_PIX_FMT_YUV422P10LE] = {
1417 .name = "yuv422p10le",
1422 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1423 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1424 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1426 .flags = AV_PIX_FMT_FLAG_PLANAR,
1428 [AV_PIX_FMT_YUV422P10BE] = {
1429 .name = "yuv422p10be",
1434 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1435 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1436 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1438 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1440 [AV_PIX_FMT_YUV422P12LE] = {
1441 .name = "yuv422p12le",
1446 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1447 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1448 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1450 .flags = AV_PIX_FMT_FLAG_PLANAR,
1452 [AV_PIX_FMT_YUV422P12BE] = {
1453 .name = "yuv422p12be",
1458 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1459 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1460 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1462 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1464 [AV_PIX_FMT_YUV422P14LE] = {
1465 .name = "yuv422p14le",
1470 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1471 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1472 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1474 .flags = AV_PIX_FMT_FLAG_PLANAR,
1476 [AV_PIX_FMT_YUV422P14BE] = {
1477 .name = "yuv422p14be",
1482 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1483 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1484 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1486 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1488 [AV_PIX_FMT_YUV422P16LE] = {
1489 .name = "yuv422p16le",
1494 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1495 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1496 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1498 .flags = AV_PIX_FMT_FLAG_PLANAR,
1500 [AV_PIX_FMT_YUV422P16BE] = {
1501 .name = "yuv422p16be",
1506 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1507 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1508 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1510 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1512 [AV_PIX_FMT_YUV444P16LE] = {
1513 .name = "yuv444p16le",
1518 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1519 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1520 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1522 .flags = AV_PIX_FMT_FLAG_PLANAR,
1524 [AV_PIX_FMT_YUV444P16BE] = {
1525 .name = "yuv444p16be",
1530 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1531 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1532 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1534 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1536 [AV_PIX_FMT_YUV444P10LE] = {
1537 .name = "yuv444p10le",
1542 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1543 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1544 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1546 .flags = AV_PIX_FMT_FLAG_PLANAR,
1548 [AV_PIX_FMT_YUV444P10BE] = {
1549 .name = "yuv444p10be",
1554 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1555 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1556 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1558 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1560 [AV_PIX_FMT_YUV444P9LE] = {
1561 .name = "yuv444p9le",
1566 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1567 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1568 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1570 .flags = AV_PIX_FMT_FLAG_PLANAR,
1572 [AV_PIX_FMT_YUV444P9BE] = {
1573 .name = "yuv444p9be",
1578 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1579 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1580 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1582 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1584 [AV_PIX_FMT_YUV444P12LE] = {
1585 .name = "yuv444p12le",
1590 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1591 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1592 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1594 .flags = AV_PIX_FMT_FLAG_PLANAR,
1596 [AV_PIX_FMT_YUV444P12BE] = {
1597 .name = "yuv444p12be",
1602 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1603 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1604 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1606 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1608 [AV_PIX_FMT_YUV444P14LE] = {
1609 .name = "yuv444p14le",
1614 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1615 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1616 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1618 .flags = AV_PIX_FMT_FLAG_PLANAR,
1620 [AV_PIX_FMT_YUV444P14BE] = {
1621 .name = "yuv444p14be",
1626 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1627 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1628 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1630 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1632 [AV_PIX_FMT_D3D11VA_VLD] = {
1633 .name = "d3d11va_vld",
1636 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1638 [AV_PIX_FMT_DXVA2_VLD] = {
1639 .name = "dxva2_vld",
1642 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1644 [AV_PIX_FMT_YA8] = {
1648 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
1649 { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */
1651 .flags = AV_PIX_FMT_FLAG_ALPHA,
1654 [AV_PIX_FMT_YA16LE] = {
1658 { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
1659 { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
1661 .flags = AV_PIX_FMT_FLAG_ALPHA,
1663 [AV_PIX_FMT_YA16BE] = {
1667 { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
1668 { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
1670 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
1672 [AV_PIX_FMT_VIDEOTOOLBOX] = {
1673 .name = "videotoolbox_vld",
1674 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1676 [AV_PIX_FMT_GBRP] = {
1682 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
1683 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
1684 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
1686 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1688 [AV_PIX_FMT_GBRP9LE] = {
1694 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
1695 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
1696 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
1698 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1700 [AV_PIX_FMT_GBRP9BE] = {
1706 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
1707 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
1708 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
1710 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1712 [AV_PIX_FMT_GBRP10LE] = {
1718 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
1719 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
1720 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
1722 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1724 [AV_PIX_FMT_GBRP10BE] = {
1730 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
1731 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
1732 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
1734 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1736 [AV_PIX_FMT_GBRP12LE] = {
1742 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
1743 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
1744 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
1746 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1748 [AV_PIX_FMT_GBRP12BE] = {
1754 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
1755 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
1756 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
1758 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1760 [AV_PIX_FMT_GBRP14LE] = {
1766 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */
1767 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */
1768 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */
1770 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1772 [AV_PIX_FMT_GBRP14BE] = {
1778 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */
1779 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */
1780 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */
1782 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1784 [AV_PIX_FMT_GBRP16LE] = {
1790 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1791 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1792 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1794 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1796 [AV_PIX_FMT_GBRP16BE] = {
1802 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1803 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1804 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1806 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1808 [AV_PIX_FMT_GBRAP] = {
1814 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
1815 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
1816 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
1817 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
1819 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1820 AV_PIX_FMT_FLAG_ALPHA,
1822 [AV_PIX_FMT_GBRAP16LE] = {
1823 .name = "gbrap16le",
1828 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1829 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1830 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1831 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1833 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1834 AV_PIX_FMT_FLAG_ALPHA,
1836 [AV_PIX_FMT_GBRAP16BE] = {
1837 .name = "gbrap16be",
1842 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1843 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1844 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1845 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1847 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
1848 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1850 [AV_PIX_FMT_VDPAU] = {
1854 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1856 [AV_PIX_FMT_XYZ12LE] = {
1862 { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
1863 { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
1864 { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
1866 /*.flags = -- not used*/
1868 [AV_PIX_FMT_XYZ12BE] = {
1874 { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
1875 { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
1876 { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
1878 .flags = AV_PIX_FMT_FLAG_BE,
1881 #define BAYER8_DESC_COMMON \
1882 .nb_components= 3, \
1883 .log2_chroma_w= 0, \
1884 .log2_chroma_h= 0, \
1891 #define BAYER16_DESC_COMMON \
1892 .nb_components= 3, \
1893 .log2_chroma_w= 0, \
1894 .log2_chroma_h= 0, \
1901 [AV_PIX_FMT_BAYER_BGGR8] = {
1902 .name = "bayer_bggr8",
1904 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1906 [AV_PIX_FMT_BAYER_BGGR16LE] = {
1907 .name = "bayer_bggr16le",
1909 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1911 [AV_PIX_FMT_BAYER_BGGR16BE] = {
1912 .name = "bayer_bggr16be",
1914 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1916 [AV_PIX_FMT_BAYER_RGGB8] = {
1917 .name = "bayer_rggb8",
1919 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1921 [AV_PIX_FMT_BAYER_RGGB16LE] = {
1922 .name = "bayer_rggb16le",
1924 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1926 [AV_PIX_FMT_BAYER_RGGB16BE] = {
1927 .name = "bayer_rggb16be",
1929 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1931 [AV_PIX_FMT_BAYER_GBRG8] = {
1932 .name = "bayer_gbrg8",
1934 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1936 [AV_PIX_FMT_BAYER_GBRG16LE] = {
1937 .name = "bayer_gbrg16le",
1939 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1941 [AV_PIX_FMT_BAYER_GBRG16BE] = {
1942 .name = "bayer_gbrg16be",
1944 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1946 [AV_PIX_FMT_BAYER_GRBG8] = {
1947 .name = "bayer_grbg8",
1949 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1951 [AV_PIX_FMT_BAYER_GRBG16LE] = {
1952 .name = "bayer_grbg16le",
1954 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1956 [AV_PIX_FMT_BAYER_GRBG16BE] = {
1957 .name = "bayer_grbg16be",
1959 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1961 [AV_PIX_FMT_NV16] = {
1967 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
1968 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
1969 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
1971 .flags = AV_PIX_FMT_FLAG_PLANAR,
1973 [AV_PIX_FMT_NV20LE] = {
1979 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1980 { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
1981 { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
1983 .flags = AV_PIX_FMT_FLAG_PLANAR,
1985 [AV_PIX_FMT_NV20BE] = {
1991 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1992 { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
1993 { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
1995 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
1997 [AV_PIX_FMT_QSV] = {
1999 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2001 [AV_PIX_FMT_MEDIACODEC] = {
2002 .name = "mediacodec",
2003 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2005 [AV_PIX_FMT_MMAL] = {
2007 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2009 [AV_PIX_FMT_CUDA] = {
2011 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2013 [AV_PIX_FMT_AYUV64LE] = {
2019 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */
2020 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */
2021 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */
2022 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */
2024 .flags = AV_PIX_FMT_FLAG_ALPHA,
2026 [AV_PIX_FMT_AYUV64BE] = {
2032 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */
2033 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */
2034 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */
2035 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */
2037 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
2039 [AV_PIX_FMT_P010LE] = {
2045 { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
2046 { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
2047 { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
2049 .flags = AV_PIX_FMT_FLAG_PLANAR,
2051 [AV_PIX_FMT_P010BE] = {
2057 { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
2058 { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
2059 { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
2061 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2063 [AV_PIX_FMT_P016LE] = {
2069 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
2070 { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
2071 { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
2073 .flags = AV_PIX_FMT_FLAG_PLANAR,
2075 [AV_PIX_FMT_P016BE] = {
2081 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
2082 { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
2083 { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
2085 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2087 [AV_PIX_FMT_GBRAP12LE] = {
2088 .name = "gbrap12le",
2093 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
2094 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
2095 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
2096 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2098 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2099 AV_PIX_FMT_FLAG_ALPHA,
2101 [AV_PIX_FMT_GBRAP12BE] = {
2102 .name = "gbrap12be",
2107 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
2108 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
2109 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
2110 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2112 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2113 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2115 [AV_PIX_FMT_GBRAP10LE] = {
2116 .name = "gbrap10le",
2121 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
2122 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
2123 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
2124 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
2126 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2127 AV_PIX_FMT_FLAG_ALPHA,
2129 [AV_PIX_FMT_GBRAP10BE] = {
2130 .name = "gbrap10be",
2135 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
2136 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
2137 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
2138 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
2140 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2141 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2143 [AV_PIX_FMT_D3D11] = {
2145 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2147 [AV_PIX_FMT_GBRPF32BE] = {
2148 .name = "gbrpf32be",
2153 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2154 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2155 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2157 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2158 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2160 [AV_PIX_FMT_GBRPF32LE] = {
2161 .name = "gbrpf32le",
2166 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2167 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2168 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2170 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB,
2172 [AV_PIX_FMT_GBRAPF32BE] = {
2173 .name = "gbrapf32be",
2178 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2179 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2180 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2181 { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */
2183 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2184 AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB |
2185 AV_PIX_FMT_FLAG_FLOAT,
2187 [AV_PIX_FMT_GBRAPF32LE] = {
2188 .name = "gbrapf32le",
2193 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2194 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2195 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2196 { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */
2198 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
2199 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2201 [AV_PIX_FMT_DRM_PRIME] = {
2202 .name = "drm_prime",
2203 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2205 [AV_PIX_FMT_OPENCL] = {
2207 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2209 [AV_PIX_FMT_GRAYF32BE] = {
2210 .name = "grayf32be",
2215 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */
2217 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT,
2220 [AV_PIX_FMT_GRAYF32LE] = {
2221 .name = "grayf32le",
2226 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */
2228 .flags = AV_PIX_FMT_FLAG_FLOAT,
2232 #if FF_API_PLUS1_MINUS1
2233 FF_ENABLE_DEPRECATION_WARNINGS
2236 static const char * const color_range_names[] = {
2237 [AVCOL_RANGE_UNSPECIFIED] = "unknown",
2238 [AVCOL_RANGE_MPEG] = "tv",
2239 [AVCOL_RANGE_JPEG] = "pc",
2242 static const char * const color_primaries_names[AVCOL_PRI_NB] = {
2243 [AVCOL_PRI_RESERVED0] = "reserved",
2244 [AVCOL_PRI_BT709] = "bt709",
2245 [AVCOL_PRI_UNSPECIFIED] = "unknown",
2246 [AVCOL_PRI_RESERVED] = "reserved",
2247 [AVCOL_PRI_BT470M] = "bt470m",
2248 [AVCOL_PRI_BT470BG] = "bt470bg",
2249 [AVCOL_PRI_SMPTE170M] = "smpte170m",
2250 [AVCOL_PRI_SMPTE240M] = "smpte240m",
2251 [AVCOL_PRI_FILM] = "film",
2252 [AVCOL_PRI_BT2020] = "bt2020",
2253 [AVCOL_PRI_SMPTE428] = "smpte428",
2254 [AVCOL_PRI_SMPTE431] = "smpte431",
2255 [AVCOL_PRI_SMPTE432] = "smpte432",
2256 [AVCOL_PRI_JEDEC_P22] = "jedec-p22",
2259 static const char * const color_transfer_names[] = {
2260 [AVCOL_TRC_RESERVED0] = "reserved",
2261 [AVCOL_TRC_BT709] = "bt709",
2262 [AVCOL_TRC_UNSPECIFIED] = "unknown",
2263 [AVCOL_TRC_RESERVED] = "reserved",
2264 [AVCOL_TRC_GAMMA22] = "bt470m",
2265 [AVCOL_TRC_GAMMA28] = "bt470bg",
2266 [AVCOL_TRC_SMPTE170M] = "smpte170m",
2267 [AVCOL_TRC_SMPTE240M] = "smpte240m",
2268 [AVCOL_TRC_LINEAR] = "linear",
2269 [AVCOL_TRC_LOG] = "log100",
2270 [AVCOL_TRC_LOG_SQRT] = "log316",
2271 [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
2272 [AVCOL_TRC_BT1361_ECG] = "bt1361e",
2273 [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
2274 [AVCOL_TRC_BT2020_10] = "bt2020-10",
2275 [AVCOL_TRC_BT2020_12] = "bt2020-12",
2276 [AVCOL_TRC_SMPTE2084] = "smpte2084",
2277 [AVCOL_TRC_SMPTE428] = "smpte428",
2278 [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
2281 static const char * const color_space_names[] = {
2282 [AVCOL_SPC_RGB] = "gbr",
2283 [AVCOL_SPC_BT709] = "bt709",
2284 [AVCOL_SPC_UNSPECIFIED] = "unknown",
2285 [AVCOL_SPC_RESERVED] = "reserved",
2286 [AVCOL_SPC_FCC] = "fcc",
2287 [AVCOL_SPC_BT470BG] = "bt470bg",
2288 [AVCOL_SPC_SMPTE170M] = "smpte170m",
2289 [AVCOL_SPC_SMPTE240M] = "smpte240m",
2290 [AVCOL_SPC_YCGCO] = "ycgco",
2291 [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
2292 [AVCOL_SPC_BT2020_CL] = "bt2020c",
2293 [AVCOL_SPC_SMPTE2085] = "smpte2085",
2294 [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc",
2295 [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c",
2296 [AVCOL_SPC_ICTCP] = "ictcp",
2299 static const char * const chroma_location_names[] = {
2300 [AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
2301 [AVCHROMA_LOC_LEFT] = "left",
2302 [AVCHROMA_LOC_CENTER] = "center",
2303 [AVCHROMA_LOC_TOPLEFT] = "topleft",
2304 [AVCHROMA_LOC_TOP] = "top",
2305 [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
2306 [AVCHROMA_LOC_BOTTOM] = "bottom",
2309 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
2311 enum AVPixelFormat pix_fmt;
2313 for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
2314 if (av_pix_fmt_descriptors[pix_fmt].name &&
2315 (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
2316 av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
2319 return AV_PIX_FMT_NONE;
2322 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
2324 return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
2325 av_pix_fmt_descriptors[pix_fmt].name : NULL;
2329 # define X_NE(be, le) be
2331 # define X_NE(be, le) le
2334 enum AVPixelFormat av_get_pix_fmt(const char *name)
2336 enum AVPixelFormat pix_fmt;
2338 if (!strcmp(name, "rgb32"))
2339 name = X_NE("argb", "bgra");
2340 else if (!strcmp(name, "bgr32"))
2341 name = X_NE("abgr", "rgba");
2343 pix_fmt = get_pix_fmt_internal(name);
2344 if (pix_fmt == AV_PIX_FMT_NONE) {
2347 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
2348 pix_fmt = get_pix_fmt_internal(name2);
2352 if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi"))
2353 pix_fmt = AV_PIX_FMT_VAAPI;
2358 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2361 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2363 for (c = 0; c < pixdesc->nb_components; c++) {
2364 int s = c == 1 || c == 2 ? 0 : log2_pixels;
2365 bits += pixdesc->comp[c].depth << s;
2368 return bits >> log2_pixels;
2371 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2374 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2377 for (c = 0; c < pixdesc->nb_components; c++) {
2378 const AVComponentDescriptor *comp = &pixdesc->comp[c];
2379 int s = c == 1 || c == 2 ? 0 : log2_pixels;
2380 steps[comp->plane] = comp->step << s;
2382 for (c = 0; c < 4; c++)
2385 if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
2388 return bits >> log2_pixels;
2391 char *av_get_pix_fmt_string(char *buf, int buf_size,
2392 enum AVPixelFormat pix_fmt)
2396 snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
2398 const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
2399 snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
2400 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
2406 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
2408 if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
2410 return &av_pix_fmt_descriptors[pix_fmt];
2413 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
2416 return &av_pix_fmt_descriptors[0];
2417 while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
2425 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
2427 if (desc < av_pix_fmt_descriptors ||
2428 desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
2429 return AV_PIX_FMT_NONE;
2431 return desc - av_pix_fmt_descriptors;
2434 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
2435 int *h_shift, int *v_shift)
2437 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2439 return AVERROR(ENOSYS);
2440 *h_shift = desc->log2_chroma_w;
2441 *v_shift = desc->log2_chroma_h;
2446 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
2448 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2449 int i, planes[4] = { 0 }, ret = 0;
2452 return AVERROR(EINVAL);
2454 for (i = 0; i < desc->nb_components; i++)
2455 planes[desc->comp[i].plane] = 1;
2456 for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
2461 void ff_check_pixfmt_descriptors(void){
2464 for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
2465 const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
2466 uint8_t fill[4][8+6+3] = {{0}};
2467 uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2468 int linesize[4] = {0,0,0,0};
2471 if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2473 // av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2474 av_assert0(d->log2_chroma_w <= 3);
2475 av_assert0(d->log2_chroma_h <= 3);
2476 av_assert0(d->nb_components <= 4);
2477 av_assert0(d->name && d->name[0]);
2478 av_assert2(av_get_pix_fmt(d->name) == i);
2480 for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
2481 const AVComponentDescriptor *c = &d->comp[j];
2482 if(j>=d->nb_components) {
2483 av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth);
2486 if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2487 av_assert0(c->step >= c->depth);
2489 av_assert0(8*c->step >= c->depth);
2491 if (d->flags & AV_PIX_FMT_FLAG_BAYER)
2493 av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2494 av_assert0(tmp[0] == 0 && tmp[1] == 0);
2495 tmp[0] = tmp[1] = (1<<c->depth) - 1;
2496 av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2502 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2504 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2508 if (!desc || strlen(desc->name) < 2)
2509 return AV_PIX_FMT_NONE;
2510 av_strlcpy(name, desc->name, sizeof(name));
2511 i = strlen(name) - 2;
2512 if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2513 return AV_PIX_FMT_NONE;
2515 name[i] ^= 'b' ^ 'l';
2517 return get_pix_fmt_internal(name);
2520 #define FF_COLOR_NA -1
2521 #define FF_COLOR_RGB 0 /**< RGB color space */
2522 #define FF_COLOR_GRAY 1 /**< gray color space */
2523 #define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
2524 #define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
2525 #define FF_COLOR_XYZ 4
2527 #define pixdesc_has_alpha(pixdesc) \
2528 ((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA)
2531 static int get_color_type(const AVPixFmtDescriptor *desc) {
2532 if (desc->flags & AV_PIX_FMT_FLAG_PAL)
2533 return FF_COLOR_RGB;
2535 if(desc->nb_components == 1 || desc->nb_components == 2)
2536 return FF_COLOR_GRAY;
2538 if(desc->name && !strncmp(desc->name, "yuvj", 4))
2539 return FF_COLOR_YUV_JPEG;
2541 if(desc->name && !strncmp(desc->name, "xyz", 3))
2542 return FF_COLOR_XYZ;
2544 if(desc->flags & AV_PIX_FMT_FLAG_RGB)
2545 return FF_COLOR_RGB;
2547 if(desc->nb_components == 0)
2550 return FF_COLOR_YUV;
2553 static int get_pix_fmt_depth(int *min, int *max, enum AVPixelFormat pix_fmt)
2555 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2558 if (!desc || !desc->nb_components) {
2560 return AVERROR(EINVAL);
2563 *min = INT_MAX, *max = -INT_MAX;
2564 for (i = 0; i < desc->nb_components; i++) {
2565 *min = FFMIN(desc->comp[i].depth, *min);
2566 *max = FFMAX(desc->comp[i].depth, *max);
2571 static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
2572 enum AVPixelFormat src_pix_fmt,
2573 unsigned *lossp, unsigned consider)
2575 const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt);
2576 const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt);
2577 int src_color, dst_color;
2578 int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth;
2579 int ret, loss, i, nb_components;
2580 int score = INT_MAX - 1;
2582 if (!src_desc || !dst_desc)
2585 if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) ||
2586 (dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
2587 if (dst_pix_fmt == src_pix_fmt)
2596 if (dst_pix_fmt == src_pix_fmt)
2599 if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0)
2601 if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0)
2604 src_color = get_color_type(src_desc);
2605 dst_color = get_color_type(dst_desc);
2606 if (dst_pix_fmt == AV_PIX_FMT_PAL8)
2607 nb_components = FFMIN(src_desc->nb_components, 4);
2609 nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
2611 for (i = 0; i < nb_components; i++) {
2612 int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1);
2613 if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) {
2614 loss |= FF_LOSS_DEPTH;
2615 score -= 65536 >> depth_minus1;
2619 if (consider & FF_LOSS_RESOLUTION) {
2620 if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) {
2621 loss |= FF_LOSS_RESOLUTION;
2622 score -= 256 << dst_desc->log2_chroma_w;
2624 if (dst_desc->log2_chroma_h > src_desc->log2_chroma_h) {
2625 loss |= FF_LOSS_RESOLUTION;
2626 score -= 256 << dst_desc->log2_chroma_h;
2628 // don't favor 422 over 420 if downsampling is needed, because 420 has much better support on the decoder side
2629 if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 0 &&
2630 dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 0 ) {
2635 if(consider & FF_LOSS_COLORSPACE)
2638 if (src_color != FF_COLOR_RGB &&
2639 src_color != FF_COLOR_GRAY)
2640 loss |= FF_LOSS_COLORSPACE;
2643 if (src_color != FF_COLOR_GRAY)
2644 loss |= FF_LOSS_COLORSPACE;
2647 if (src_color != FF_COLOR_YUV)
2648 loss |= FF_LOSS_COLORSPACE;
2650 case FF_COLOR_YUV_JPEG:
2651 if (src_color != FF_COLOR_YUV_JPEG &&
2652 src_color != FF_COLOR_YUV &&
2653 src_color != FF_COLOR_GRAY)
2654 loss |= FF_LOSS_COLORSPACE;
2657 /* fail safe test */
2658 if (src_color != dst_color)
2659 loss |= FF_LOSS_COLORSPACE;
2662 if(loss & FF_LOSS_COLORSPACE)
2663 score -= (nb_components * 65536) >> FFMIN(dst_desc->comp[0].depth - 1, src_desc->comp[0].depth - 1);
2665 if (dst_color == FF_COLOR_GRAY &&
2666 src_color != FF_COLOR_GRAY && (consider & FF_LOSS_CHROMA)) {
2667 loss |= FF_LOSS_CHROMA;
2670 if (!pixdesc_has_alpha(dst_desc) && (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))) {
2671 loss |= FF_LOSS_ALPHA;
2674 if (dst_pix_fmt == AV_PIX_FMT_PAL8 && (consider & FF_LOSS_COLORQUANT) &&
2675 (src_pix_fmt != AV_PIX_FMT_PAL8 && (src_color != FF_COLOR_GRAY || (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))))) {
2676 loss |= FF_LOSS_COLORQUANT;
2684 int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt,
2685 enum AVPixelFormat src_pix_fmt,
2689 int ret = get_pix_fmt_score(dst_pix_fmt, src_pix_fmt, &loss, has_alpha ? ~0 : ~FF_LOSS_ALPHA);
2695 enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
2696 enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
2698 enum AVPixelFormat dst_pix_fmt;
2699 int loss1, loss2, loss_mask;
2700 const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1);
2701 const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2);
2705 dst_pix_fmt = dst_pix_fmt2;
2706 } else if (!desc2) {
2707 dst_pix_fmt = dst_pix_fmt1;
2709 loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */
2711 loss_mask &= ~FF_LOSS_ALPHA;
2713 score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask);
2714 score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask);
2716 if (score1 == score2) {
2717 if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) {
2718 dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1;
2720 dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1;
2723 dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1;
2728 *loss_ptr = av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
2732 const char *av_color_range_name(enum AVColorRange range)
2734 return (unsigned) range < AVCOL_RANGE_NB ?
2735 color_range_names[range] : NULL;
2738 int av_color_range_from_name(const char *name)
2742 for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) {
2743 size_t len = strlen(color_range_names[i]);
2744 if (!strncmp(color_range_names[i], name, len))
2748 return AVERROR(EINVAL);
2751 const char *av_color_primaries_name(enum AVColorPrimaries primaries)
2753 return (unsigned) primaries < AVCOL_PRI_NB ?
2754 color_primaries_names[primaries] : NULL;
2757 int av_color_primaries_from_name(const char *name)
2761 for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) {
2764 if (!color_primaries_names[i])
2767 len = strlen(color_primaries_names[i]);
2768 if (!strncmp(color_primaries_names[i], name, len))
2772 return AVERROR(EINVAL);
2775 const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
2777 return (unsigned) transfer < AVCOL_TRC_NB ?
2778 color_transfer_names[transfer] : NULL;
2781 int av_color_transfer_from_name(const char *name)
2785 for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) {
2788 if (!color_transfer_names[i])
2791 len = strlen(color_transfer_names[i]);
2792 if (!strncmp(color_transfer_names[i], name, len))
2796 return AVERROR(EINVAL);
2799 const char *av_color_space_name(enum AVColorSpace space)
2801 return (unsigned) space < AVCOL_SPC_NB ?
2802 color_space_names[space] : NULL;
2805 int av_color_space_from_name(const char *name)
2809 for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) {
2812 if (!color_space_names[i])
2815 len = strlen(color_space_names[i]);
2816 if (!strncmp(color_space_names[i], name, len))
2820 return AVERROR(EINVAL);
2823 const char *av_chroma_location_name(enum AVChromaLocation location)
2825 return (unsigned) location < AVCHROMA_LOC_NB ?
2826 chroma_location_names[location] : NULL;
2829 int av_chroma_location_from_name(const char *name)
2833 for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) {
2836 if (!chroma_location_names[i])
2839 len = strlen(chroma_location_names[i]);
2840 if (!strncmp(chroma_location_names[i], name, len))
2844 return AVERROR(EINVAL);