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_line2(void *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,
41 AVComponentDescriptor comp = desc->comp[c];
42 int plane = comp.plane;
43 int depth = comp.depth;
44 unsigned mask = (1ULL << depth) - 1;
45 int shift = comp.shift;
47 int flags = desc->flags;
48 uint16_t *dst16 = dst;
49 uint32_t *dst32 = dst;
51 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
52 int skip = x * step + comp.offset;
53 const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
54 int shift = 8 - depth - (skip & 7);
57 int val = (*p >> shift) & mask;
58 if (read_pal_component)
59 val = data[1][4*val + c];
63 if (dst_element_size == 4) *dst32++ = val;
67 const uint8_t *p = data[plane] + y * linesize[plane] +
68 x * step + comp.offset;
69 int is_8bit = shift + depth <= 8;
70 int is_16bit= shift + depth <=16;
73 p += !!(flags & AV_PIX_FMT_FLAG_BE);
77 if (is_8bit) val = *p;
78 else if(is_16bit) val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
79 else val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB32(p) : AV_RL32(p);
80 val = (val >> shift) & mask;
81 if (read_pal_component)
82 val = data[1][4 * val + c];
84 if (dst_element_size == 4) *dst32++ = val;
90 void av_read_image_line(uint16_t *dst,
91 const uint8_t *data[4], const int linesize[4],
92 const AVPixFmtDescriptor *desc,
93 int x, int y, int c, int w,
94 int read_pal_component)
96 av_read_image_line2(dst, data, linesize, desc,x, y, c, w,
101 void av_write_image_line2(const void *src,
102 uint8_t *data[4], const int linesize[4],
103 const AVPixFmtDescriptor *desc,
104 int x, int y, int c, int w, int src_element_size)
106 AVComponentDescriptor comp = desc->comp[c];
107 int plane = comp.plane;
108 int depth = comp.depth;
109 int step = comp.step;
110 int flags = desc->flags;
111 const uint32_t *src32 = src;
112 const uint16_t *src16 = src;
114 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
115 int skip = x * step + comp.offset;
116 uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
117 int shift = 8 - depth - (skip & 7);
120 *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift;
126 int shift = comp.shift;
127 uint8_t *p = data[plane] + y * linesize[plane] +
128 x * step + comp.offset;
130 if (shift + depth <= 8) {
131 p += !!(flags & AV_PIX_FMT_FLAG_BE);
133 *p |= ((src_element_size == 4 ? *src32++ : *src16++) << shift);
138 unsigned s = (src_element_size == 4 ? *src32++ : *src16++);
139 if (shift + depth <= 16) {
140 if (flags & AV_PIX_FMT_FLAG_BE) {
141 uint16_t val = AV_RB16(p) | (s << shift);
144 uint16_t val = AV_RL16(p) | (s << shift);
148 if (flags & AV_PIX_FMT_FLAG_BE) {
149 uint32_t val = AV_RB32(p) | (s << shift);
152 uint32_t val = AV_RL32(p) | (s << shift);
162 void av_write_image_line(const uint16_t *src,
163 uint8_t *data[4], const int linesize[4],
164 const AVPixFmtDescriptor *desc,
165 int x, int y, int c, int w)
167 av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2);
170 #if FF_API_PLUS1_MINUS1
171 FF_DISABLE_DEPRECATION_WARNINGS
173 static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
174 [AV_PIX_FMT_YUV420P] = {
180 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
181 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
182 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
184 .flags = AV_PIX_FMT_FLAG_PLANAR,
186 [AV_PIX_FMT_YUYV422] = {
192 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
193 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* U */
194 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* V */
197 [AV_PIX_FMT_YVYU422] = {
203 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
204 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* U */
205 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* V */
208 [AV_PIX_FMT_RGB24] = {
214 { 0, 3, 0, 0, 8, 2, 7, 1 }, /* R */
215 { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
216 { 0, 3, 2, 0, 8, 2, 7, 3 }, /* B */
218 .flags = AV_PIX_FMT_FLAG_RGB,
220 [AV_PIX_FMT_BGR24] = {
226 { 0, 3, 2, 0, 8, 2, 7, 3 }, /* R */
227 { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
228 { 0, 3, 0, 0, 8, 2, 7, 1 }, /* B */
230 .flags = AV_PIX_FMT_FLAG_RGB,
232 [AV_PIX_FMT_YUV422P] = {
238 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
239 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
240 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
242 .flags = AV_PIX_FMT_FLAG_PLANAR,
244 [AV_PIX_FMT_YUV444P] = {
250 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
251 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
252 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
254 .flags = AV_PIX_FMT_FLAG_PLANAR,
256 [AV_PIX_FMT_YUV410P] = {
262 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
263 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
264 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
266 .flags = AV_PIX_FMT_FLAG_PLANAR,
268 [AV_PIX_FMT_YUV411P] = {
274 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
275 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
276 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
278 .flags = AV_PIX_FMT_FLAG_PLANAR,
280 [AV_PIX_FMT_YUVJ411P] = {
286 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
287 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
288 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
290 .flags = AV_PIX_FMT_FLAG_PLANAR,
292 [AV_PIX_FMT_GRAY8] = {
298 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
300 .flags = FF_PSEUDOPAL,
303 [AV_PIX_FMT_MONOWHITE] = {
309 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* Y */
311 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
313 [AV_PIX_FMT_MONOBLACK] = {
319 { 0, 1, 0, 7, 1, 0, 0, 1 }, /* Y */
321 .flags = AV_PIX_FMT_FLAG_BITSTREAM,
323 [AV_PIX_FMT_PAL8] = {
329 { 0, 1, 0, 0, 8, 0, 7, 1 },
331 .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA,
333 [AV_PIX_FMT_YUVJ420P] = {
339 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
340 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
341 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
343 .flags = AV_PIX_FMT_FLAG_PLANAR,
345 [AV_PIX_FMT_YUVJ422P] = {
351 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
352 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
353 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
355 .flags = AV_PIX_FMT_FLAG_PLANAR,
357 [AV_PIX_FMT_YUVJ444P] = {
363 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
364 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
365 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
367 .flags = AV_PIX_FMT_FLAG_PLANAR,
369 [AV_PIX_FMT_XVMC] = {
371 .flags = AV_PIX_FMT_FLAG_HWACCEL,
373 [AV_PIX_FMT_UYVY422] = {
379 { 0, 2, 1, 0, 8, 1, 7, 2 }, /* Y */
380 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* U */
381 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* V */
384 [AV_PIX_FMT_UYYVYY411] = {
390 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* Y */
391 { 0, 6, 0, 0, 8, 5, 7, 1 }, /* U */
392 { 0, 6, 3, 0, 8, 5, 7, 4 }, /* V */
395 [AV_PIX_FMT_BGR8] = {
401 { 0, 1, 0, 0, 3, 0, 2, 1 }, /* R */
402 { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
403 { 0, 1, 0, 6, 2, 0, 1, 1 }, /* B */
405 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
407 [AV_PIX_FMT_BGR4] = {
413 { 0, 4, 3, 0, 1, 3, 0, 4 }, /* R */
414 { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
415 { 0, 4, 0, 0, 1, 3, 0, 1 }, /* B */
417 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
419 [AV_PIX_FMT_BGR4_BYTE] = {
425 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* R */
426 { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
427 { 0, 1, 0, 3, 1, 0, 0, 1 }, /* B */
429 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
431 [AV_PIX_FMT_RGB8] = {
437 { 0, 1, 0, 6, 2, 0, 1, 1 }, /* R */
438 { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
439 { 0, 1, 0, 0, 3, 0, 2, 1 }, /* B */
441 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
443 [AV_PIX_FMT_RGB4] = {
449 { 0, 4, 0, 0, 1, 3, 0, 1 }, /* R */
450 { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
451 { 0, 4, 3, 0, 1, 3, 0, 4 }, /* B */
453 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
455 [AV_PIX_FMT_RGB4_BYTE] = {
461 { 0, 1, 0, 3, 1, 0, 0, 1 }, /* R */
462 { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
463 { 0, 1, 0, 0, 1, 0, 0, 1 }, /* B */
465 .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL,
467 [AV_PIX_FMT_NV12] = {
473 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
474 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
475 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
477 .flags = AV_PIX_FMT_FLAG_PLANAR,
479 [AV_PIX_FMT_NV21] = {
485 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
486 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */
487 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */
489 .flags = AV_PIX_FMT_FLAG_PLANAR,
491 [AV_PIX_FMT_ARGB] = {
497 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */
498 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
499 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */
500 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
502 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
504 [AV_PIX_FMT_RGBA] = {
510 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */
511 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
512 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */
513 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
515 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
517 [AV_PIX_FMT_ABGR] = {
523 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */
524 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
525 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */
526 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
528 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
530 [AV_PIX_FMT_BGRA] = {
536 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */
537 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
538 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */
539 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
541 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
543 [AV_PIX_FMT_0RGB] = {
549 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */
550 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
551 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */
553 .flags = AV_PIX_FMT_FLAG_RGB,
555 [AV_PIX_FMT_RGB0] = {
561 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */
562 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
563 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */
565 .flags = AV_PIX_FMT_FLAG_RGB,
567 [AV_PIX_FMT_0BGR] = {
573 { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */
574 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
575 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */
577 .flags = AV_PIX_FMT_FLAG_RGB,
579 [AV_PIX_FMT_BGR0] = {
585 { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */
586 { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
587 { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */
589 .flags = AV_PIX_FMT_FLAG_RGB,
591 [AV_PIX_FMT_GRAY9BE] = {
597 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
599 .flags = AV_PIX_FMT_FLAG_BE,
602 [AV_PIX_FMT_GRAY9LE] = {
608 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
612 [AV_PIX_FMT_GRAY10BE] = {
618 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
620 .flags = AV_PIX_FMT_FLAG_BE,
623 [AV_PIX_FMT_GRAY10LE] = {
629 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
633 [AV_PIX_FMT_GRAY12BE] = {
639 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
641 .flags = AV_PIX_FMT_FLAG_BE,
644 [AV_PIX_FMT_GRAY12LE] = {
650 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
654 [AV_PIX_FMT_GRAY14BE] = {
660 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
662 .flags = AV_PIX_FMT_FLAG_BE,
665 [AV_PIX_FMT_GRAY14LE] = {
671 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
675 [AV_PIX_FMT_GRAY16BE] = {
681 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
683 .flags = AV_PIX_FMT_FLAG_BE,
686 [AV_PIX_FMT_GRAY16LE] = {
692 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
696 [AV_PIX_FMT_YUV440P] = {
702 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
703 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
704 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
706 .flags = AV_PIX_FMT_FLAG_PLANAR,
708 [AV_PIX_FMT_YUVJ440P] = {
714 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
715 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
716 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
718 .flags = AV_PIX_FMT_FLAG_PLANAR,
720 [AV_PIX_FMT_YUV440P10LE] = {
721 .name = "yuv440p10le",
726 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
727 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
728 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
730 .flags = AV_PIX_FMT_FLAG_PLANAR,
732 [AV_PIX_FMT_YUV440P10BE] = {
733 .name = "yuv440p10be",
738 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
739 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
740 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
742 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
744 [AV_PIX_FMT_YUV440P12LE] = {
745 .name = "yuv440p12le",
750 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
751 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
752 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
754 .flags = AV_PIX_FMT_FLAG_PLANAR,
756 [AV_PIX_FMT_YUV440P12BE] = {
757 .name = "yuv440p12be",
762 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
763 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
764 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
766 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
768 [AV_PIX_FMT_YUVA420P] = {
774 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
775 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
776 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
777 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
779 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
781 [AV_PIX_FMT_YUVA422P] = {
787 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
788 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
789 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
790 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
792 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
794 [AV_PIX_FMT_YUVA444P] = {
800 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
801 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
802 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
803 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
805 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
807 [AV_PIX_FMT_YUVA420P9BE] = {
808 .name = "yuva420p9be",
813 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
814 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
815 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
816 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
818 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
820 [AV_PIX_FMT_YUVA420P9LE] = {
821 .name = "yuva420p9le",
826 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
827 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
828 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
829 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
831 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
833 [AV_PIX_FMT_YUVA422P9BE] = {
834 .name = "yuva422p9be",
839 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
840 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
841 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
842 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
844 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
846 [AV_PIX_FMT_YUVA422P9LE] = {
847 .name = "yuva422p9le",
852 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
853 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
854 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
855 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
857 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
859 [AV_PIX_FMT_YUVA444P9BE] = {
860 .name = "yuva444p9be",
865 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
866 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
867 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
868 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
870 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
872 [AV_PIX_FMT_YUVA444P9LE] = {
873 .name = "yuva444p9le",
878 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
879 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
880 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
881 { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
883 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
885 [AV_PIX_FMT_YUVA420P10BE] = {
886 .name = "yuva420p10be",
891 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
892 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
893 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
894 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
896 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
898 [AV_PIX_FMT_YUVA420P10LE] = {
899 .name = "yuva420p10le",
904 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
905 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
906 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
907 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
909 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
911 [AV_PIX_FMT_YUVA422P10BE] = {
912 .name = "yuva422p10be",
917 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
918 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
919 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
920 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
922 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
924 [AV_PIX_FMT_YUVA422P10LE] = {
925 .name = "yuva422p10le",
930 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
931 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
932 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
933 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
935 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
937 [AV_PIX_FMT_YUVA444P10BE] = {
938 .name = "yuva444p10be",
943 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
944 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
945 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
946 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
948 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
950 [AV_PIX_FMT_YUVA444P10LE] = {
951 .name = "yuva444p10le",
956 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
957 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
958 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
959 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
961 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
963 [AV_PIX_FMT_YUVA420P16BE] = {
964 .name = "yuva420p16be",
969 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
970 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
971 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
972 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
974 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
976 [AV_PIX_FMT_YUVA420P16LE] = {
977 .name = "yuva420p16le",
982 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
983 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
984 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
985 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
987 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
989 [AV_PIX_FMT_YUVA422P16BE] = {
990 .name = "yuva422p16be",
995 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
996 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
997 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
998 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1000 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1002 [AV_PIX_FMT_YUVA422P16LE] = {
1003 .name = "yuva422p16le",
1008 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1009 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1010 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1011 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1013 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1015 [AV_PIX_FMT_YUVA444P16BE] = {
1016 .name = "yuva444p16be",
1021 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1022 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1023 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1024 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1026 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1028 [AV_PIX_FMT_YUVA444P16LE] = {
1029 .name = "yuva444p16le",
1034 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1035 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1036 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1037 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1039 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
1041 [AV_PIX_FMT_RGB48BE] = {
1047 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
1048 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1049 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
1051 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
1053 [AV_PIX_FMT_RGB48LE] = {
1059 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
1060 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1061 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
1063 .flags = AV_PIX_FMT_FLAG_RGB,
1065 [AV_PIX_FMT_RGBA64BE] = {
1071 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
1072 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1073 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
1074 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1076 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1078 [AV_PIX_FMT_RGBA64LE] = {
1084 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
1085 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1086 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
1087 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1089 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1091 [AV_PIX_FMT_RGB565BE] = {
1097 { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */
1098 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1099 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1101 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1103 [AV_PIX_FMT_RGB565LE] = {
1109 { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */
1110 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1111 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1113 .flags = AV_PIX_FMT_FLAG_RGB,
1115 [AV_PIX_FMT_RGB555BE] = {
1121 { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */
1122 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1123 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1125 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1127 [AV_PIX_FMT_RGB555LE] = {
1133 { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */
1134 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1135 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
1137 .flags = AV_PIX_FMT_FLAG_RGB,
1139 [AV_PIX_FMT_RGB444BE] = {
1145 { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */
1146 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1147 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
1149 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1151 [AV_PIX_FMT_RGB444LE] = {
1157 { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */
1158 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1159 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
1161 .flags = AV_PIX_FMT_FLAG_RGB,
1163 [AV_PIX_FMT_BGR48BE] = {
1169 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
1170 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1171 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
1173 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1175 [AV_PIX_FMT_BGR48LE] = {
1181 { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
1182 { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
1183 { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
1185 .flags = AV_PIX_FMT_FLAG_RGB,
1187 [AV_PIX_FMT_BGRA64BE] = {
1193 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
1194 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1195 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
1196 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1198 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1200 [AV_PIX_FMT_BGRA64LE] = {
1206 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
1207 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
1208 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
1209 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
1211 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1213 [AV_PIX_FMT_BGR565BE] = {
1219 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1220 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1221 { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */
1223 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1225 [AV_PIX_FMT_BGR565LE] = {
1231 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1232 { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
1233 { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */
1235 .flags = AV_PIX_FMT_FLAG_RGB,
1237 [AV_PIX_FMT_BGR555BE] = {
1243 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1244 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1245 { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */
1247 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1249 [AV_PIX_FMT_BGR555LE] = {
1255 { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
1256 { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
1257 { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */
1259 .flags = AV_PIX_FMT_FLAG_RGB,
1261 [AV_PIX_FMT_BGR444BE] = {
1267 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
1268 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1269 { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */
1271 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
1273 [AV_PIX_FMT_BGR444LE] = {
1279 { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
1280 { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
1281 { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */
1283 .flags = AV_PIX_FMT_FLAG_RGB,
1286 [AV_PIX_FMT_VAAPI_MOCO] = {
1287 .name = "vaapi_moco",
1290 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1292 [AV_PIX_FMT_VAAPI_IDCT] = {
1293 .name = "vaapi_idct",
1296 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1298 [AV_PIX_FMT_VAAPI_VLD] = {
1299 .name = "vaapi_vld",
1302 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1305 [AV_PIX_FMT_VAAPI] = {
1309 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1312 [AV_PIX_FMT_YUV420P9LE] = {
1313 .name = "yuv420p9le",
1318 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1319 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1320 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1322 .flags = AV_PIX_FMT_FLAG_PLANAR,
1324 [AV_PIX_FMT_YUV420P9BE] = {
1325 .name = "yuv420p9be",
1330 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1331 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1332 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1334 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1336 [AV_PIX_FMT_YUV420P10LE] = {
1337 .name = "yuv420p10le",
1342 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1343 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1344 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1346 .flags = AV_PIX_FMT_FLAG_PLANAR,
1348 [AV_PIX_FMT_YUV420P10BE] = {
1349 .name = "yuv420p10be",
1354 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1355 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1356 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1358 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1360 [AV_PIX_FMT_YUV420P12LE] = {
1361 .name = "yuv420p12le",
1366 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1367 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1368 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1370 .flags = AV_PIX_FMT_FLAG_PLANAR,
1372 [AV_PIX_FMT_YUV420P12BE] = {
1373 .name = "yuv420p12be",
1378 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1379 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1380 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1382 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1384 [AV_PIX_FMT_YUV420P14LE] = {
1385 .name = "yuv420p14le",
1390 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1391 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1392 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1394 .flags = AV_PIX_FMT_FLAG_PLANAR,
1396 [AV_PIX_FMT_YUV420P14BE] = {
1397 .name = "yuv420p14be",
1402 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1403 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1404 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1406 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1408 [AV_PIX_FMT_YUV420P16LE] = {
1409 .name = "yuv420p16le",
1414 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1415 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1416 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1418 .flags = AV_PIX_FMT_FLAG_PLANAR,
1420 [AV_PIX_FMT_YUV420P16BE] = {
1421 .name = "yuv420p16be",
1426 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1427 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1428 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1430 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1432 [AV_PIX_FMT_YUV422P9LE] = {
1433 .name = "yuv422p9le",
1438 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1439 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1440 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1442 .flags = AV_PIX_FMT_FLAG_PLANAR,
1444 [AV_PIX_FMT_YUV422P9BE] = {
1445 .name = "yuv422p9be",
1450 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1451 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1452 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1454 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1456 [AV_PIX_FMT_YUV422P10LE] = {
1457 .name = "yuv422p10le",
1462 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1463 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1464 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1466 .flags = AV_PIX_FMT_FLAG_PLANAR,
1468 [AV_PIX_FMT_YUV422P10BE] = {
1469 .name = "yuv422p10be",
1474 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1475 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1476 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1478 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1480 [AV_PIX_FMT_YUV422P12LE] = {
1481 .name = "yuv422p12le",
1486 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1487 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1488 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1490 .flags = AV_PIX_FMT_FLAG_PLANAR,
1492 [AV_PIX_FMT_YUV422P12BE] = {
1493 .name = "yuv422p12be",
1498 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1499 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1500 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1502 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1504 [AV_PIX_FMT_YUV422P14LE] = {
1505 .name = "yuv422p14le",
1510 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1511 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1512 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1514 .flags = AV_PIX_FMT_FLAG_PLANAR,
1516 [AV_PIX_FMT_YUV422P14BE] = {
1517 .name = "yuv422p14be",
1522 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1523 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1524 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1526 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1528 [AV_PIX_FMT_YUV422P16LE] = {
1529 .name = "yuv422p16le",
1534 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1535 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1536 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1538 .flags = AV_PIX_FMT_FLAG_PLANAR,
1540 [AV_PIX_FMT_YUV422P16BE] = {
1541 .name = "yuv422p16be",
1546 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1547 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1548 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1550 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1552 [AV_PIX_FMT_YUV444P16LE] = {
1553 .name = "yuv444p16le",
1558 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1559 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1560 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1562 .flags = AV_PIX_FMT_FLAG_PLANAR,
1564 [AV_PIX_FMT_YUV444P16BE] = {
1565 .name = "yuv444p16be",
1570 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
1571 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
1572 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
1574 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1576 [AV_PIX_FMT_YUV444P10LE] = {
1577 .name = "yuv444p10le",
1582 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1583 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1584 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1586 .flags = AV_PIX_FMT_FLAG_PLANAR,
1588 [AV_PIX_FMT_YUV444P10BE] = {
1589 .name = "yuv444p10be",
1594 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
1595 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
1596 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
1598 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1600 [AV_PIX_FMT_YUV444P9LE] = {
1601 .name = "yuv444p9le",
1606 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1607 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1608 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1610 .flags = AV_PIX_FMT_FLAG_PLANAR,
1612 [AV_PIX_FMT_YUV444P9BE] = {
1613 .name = "yuv444p9be",
1618 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
1619 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
1620 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
1622 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1624 [AV_PIX_FMT_YUV444P12LE] = {
1625 .name = "yuv444p12le",
1630 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1631 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1632 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1634 .flags = AV_PIX_FMT_FLAG_PLANAR,
1636 [AV_PIX_FMT_YUV444P12BE] = {
1637 .name = "yuv444p12be",
1642 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
1643 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
1644 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
1646 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1648 [AV_PIX_FMT_YUV444P14LE] = {
1649 .name = "yuv444p14le",
1654 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1655 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1656 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1658 .flags = AV_PIX_FMT_FLAG_PLANAR,
1660 [AV_PIX_FMT_YUV444P14BE] = {
1661 .name = "yuv444p14be",
1666 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */
1667 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */
1668 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */
1670 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
1672 [AV_PIX_FMT_D3D11VA_VLD] = {
1673 .name = "d3d11va_vld",
1676 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1678 [AV_PIX_FMT_DXVA2_VLD] = {
1679 .name = "dxva2_vld",
1682 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1684 [AV_PIX_FMT_YA8] = {
1688 { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
1689 { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */
1691 .flags = AV_PIX_FMT_FLAG_ALPHA,
1694 [AV_PIX_FMT_YA16LE] = {
1698 { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
1699 { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
1701 .flags = AV_PIX_FMT_FLAG_ALPHA,
1703 [AV_PIX_FMT_YA16BE] = {
1707 { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
1708 { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
1710 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
1712 [AV_PIX_FMT_VIDEOTOOLBOX] = {
1713 .name = "videotoolbox_vld",
1714 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1716 [AV_PIX_FMT_GBRP] = {
1722 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
1723 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
1724 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
1726 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1728 [AV_PIX_FMT_GBRP9LE] = {
1734 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
1735 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
1736 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
1738 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1740 [AV_PIX_FMT_GBRP9BE] = {
1746 { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
1747 { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
1748 { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
1750 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1752 [AV_PIX_FMT_GBRP10LE] = {
1758 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
1759 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
1760 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
1762 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1764 [AV_PIX_FMT_GBRP10BE] = {
1770 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
1771 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
1772 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
1774 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1776 [AV_PIX_FMT_GBRP12LE] = {
1782 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
1783 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
1784 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
1786 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1788 [AV_PIX_FMT_GBRP12BE] = {
1794 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
1795 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
1796 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
1798 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1800 [AV_PIX_FMT_GBRP14LE] = {
1806 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */
1807 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */
1808 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */
1810 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1812 [AV_PIX_FMT_GBRP14BE] = {
1818 { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */
1819 { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */
1820 { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */
1822 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1824 [AV_PIX_FMT_GBRP16LE] = {
1830 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1831 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1832 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1834 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1836 [AV_PIX_FMT_GBRP16BE] = {
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 */
1846 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
1848 [AV_PIX_FMT_GBRAP] = {
1854 { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
1855 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
1856 { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
1857 { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
1859 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1860 AV_PIX_FMT_FLAG_ALPHA,
1862 [AV_PIX_FMT_GBRAP16LE] = {
1863 .name = "gbrap16le",
1868 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1869 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1870 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1871 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1873 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
1874 AV_PIX_FMT_FLAG_ALPHA,
1876 [AV_PIX_FMT_GBRAP16BE] = {
1877 .name = "gbrap16be",
1882 { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
1883 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
1884 { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
1885 { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
1887 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
1888 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
1890 [AV_PIX_FMT_VDPAU] = {
1894 .flags = AV_PIX_FMT_FLAG_HWACCEL,
1896 [AV_PIX_FMT_XYZ12LE] = {
1902 { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
1903 { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
1904 { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
1906 /*.flags = -- not used*/
1908 [AV_PIX_FMT_XYZ12BE] = {
1914 { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
1915 { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
1916 { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
1918 .flags = AV_PIX_FMT_FLAG_BE,
1921 #define BAYER8_DESC_COMMON \
1922 .nb_components= 3, \
1923 .log2_chroma_w= 0, \
1924 .log2_chroma_h= 0, \
1931 #define BAYER16_DESC_COMMON \
1932 .nb_components= 3, \
1933 .log2_chroma_w= 0, \
1934 .log2_chroma_h= 0, \
1941 [AV_PIX_FMT_BAYER_BGGR8] = {
1942 .name = "bayer_bggr8",
1944 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1946 [AV_PIX_FMT_BAYER_BGGR16LE] = {
1947 .name = "bayer_bggr16le",
1949 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1951 [AV_PIX_FMT_BAYER_BGGR16BE] = {
1952 .name = "bayer_bggr16be",
1954 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1956 [AV_PIX_FMT_BAYER_RGGB8] = {
1957 .name = "bayer_rggb8",
1959 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1961 [AV_PIX_FMT_BAYER_RGGB16LE] = {
1962 .name = "bayer_rggb16le",
1964 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1966 [AV_PIX_FMT_BAYER_RGGB16BE] = {
1967 .name = "bayer_rggb16be",
1969 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1971 [AV_PIX_FMT_BAYER_GBRG8] = {
1972 .name = "bayer_gbrg8",
1974 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1976 [AV_PIX_FMT_BAYER_GBRG16LE] = {
1977 .name = "bayer_gbrg16le",
1979 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1981 [AV_PIX_FMT_BAYER_GBRG16BE] = {
1982 .name = "bayer_gbrg16be",
1984 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1986 [AV_PIX_FMT_BAYER_GRBG8] = {
1987 .name = "bayer_grbg8",
1989 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1991 [AV_PIX_FMT_BAYER_GRBG16LE] = {
1992 .name = "bayer_grbg16le",
1994 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
1996 [AV_PIX_FMT_BAYER_GRBG16BE] = {
1997 .name = "bayer_grbg16be",
1999 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
2001 [AV_PIX_FMT_NV16] = {
2007 { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
2008 { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
2009 { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
2011 .flags = AV_PIX_FMT_FLAG_PLANAR,
2013 [AV_PIX_FMT_NV20LE] = {
2019 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
2020 { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
2021 { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
2023 .flags = AV_PIX_FMT_FLAG_PLANAR,
2025 [AV_PIX_FMT_NV20BE] = {
2031 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
2032 { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
2033 { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
2035 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2037 [AV_PIX_FMT_QSV] = {
2039 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2041 [AV_PIX_FMT_MEDIACODEC] = {
2042 .name = "mediacodec",
2043 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2045 [AV_PIX_FMT_MMAL] = {
2047 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2049 [AV_PIX_FMT_CUDA] = {
2051 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2053 [AV_PIX_FMT_AYUV64LE] = {
2059 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */
2060 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */
2061 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */
2062 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */
2064 .flags = AV_PIX_FMT_FLAG_ALPHA,
2066 [AV_PIX_FMT_AYUV64BE] = {
2072 { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */
2073 { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */
2074 { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */
2075 { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */
2077 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
2079 [AV_PIX_FMT_P010LE] = {
2085 { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
2086 { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
2087 { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
2089 .flags = AV_PIX_FMT_FLAG_PLANAR,
2091 [AV_PIX_FMT_P010BE] = {
2097 { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
2098 { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
2099 { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
2101 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2103 [AV_PIX_FMT_P016LE] = {
2109 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
2110 { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
2111 { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
2113 .flags = AV_PIX_FMT_FLAG_PLANAR,
2115 [AV_PIX_FMT_P016BE] = {
2121 { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
2122 { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */
2123 { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */
2125 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
2127 [AV_PIX_FMT_GBRAP12LE] = {
2128 .name = "gbrap12le",
2133 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
2134 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
2135 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
2136 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2138 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2139 AV_PIX_FMT_FLAG_ALPHA,
2141 [AV_PIX_FMT_GBRAP12BE] = {
2142 .name = "gbrap12be",
2147 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
2148 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
2149 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
2150 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2152 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2153 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2155 [AV_PIX_FMT_GBRAP10LE] = {
2156 .name = "gbrap10le",
2161 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
2162 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
2163 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
2164 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
2166 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
2167 AV_PIX_FMT_FLAG_ALPHA,
2169 [AV_PIX_FMT_GBRAP10BE] = {
2170 .name = "gbrap10be",
2175 { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
2176 { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
2177 { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
2178 { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
2180 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2181 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
2183 [AV_PIX_FMT_D3D11] = {
2185 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2187 [AV_PIX_FMT_GBRPF32BE] = {
2188 .name = "gbrpf32be",
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 */
2197 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2198 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2200 [AV_PIX_FMT_GBRPF32LE] = {
2201 .name = "gbrpf32le",
2206 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2207 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2208 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2210 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB,
2212 [AV_PIX_FMT_GBRAPF32BE] = {
2213 .name = "gbrapf32be",
2218 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2219 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2220 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2221 { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */
2223 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
2224 AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB |
2225 AV_PIX_FMT_FLAG_FLOAT,
2227 [AV_PIX_FMT_GBRAPF32LE] = {
2228 .name = "gbrapf32le",
2233 { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */
2234 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */
2235 { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */
2236 { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */
2238 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
2239 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
2241 [AV_PIX_FMT_DRM_PRIME] = {
2242 .name = "drm_prime",
2243 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2245 [AV_PIX_FMT_OPENCL] = {
2247 .flags = AV_PIX_FMT_FLAG_HWACCEL,
2249 [AV_PIX_FMT_GRAYF32BE] = {
2250 .name = "grayf32be",
2255 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */
2257 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT,
2260 [AV_PIX_FMT_GRAYF32LE] = {
2261 .name = "grayf32le",
2266 { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */
2268 .flags = AV_PIX_FMT_FLAG_FLOAT,
2271 [AV_PIX_FMT_YUVA422P12BE] = {
2272 .name = "yuva422p12be",
2277 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
2278 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
2279 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
2280 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2282 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2284 [AV_PIX_FMT_YUVA422P12LE] = {
2285 .name = "yuva422p12le",
2290 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
2291 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
2292 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
2293 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2295 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2297 [AV_PIX_FMT_YUVA444P12BE] = {
2298 .name = "yuva444p12be",
2303 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
2304 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
2305 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
2306 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2308 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2310 [AV_PIX_FMT_YUVA444P12LE] = {
2311 .name = "yuva444p12le",
2316 { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
2317 { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
2318 { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
2319 { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
2321 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
2324 #if FF_API_PLUS1_MINUS1
2325 FF_ENABLE_DEPRECATION_WARNINGS
2328 static const char * const color_range_names[] = {
2329 [AVCOL_RANGE_UNSPECIFIED] = "unknown",
2330 [AVCOL_RANGE_MPEG] = "tv",
2331 [AVCOL_RANGE_JPEG] = "pc",
2334 static const char * const color_primaries_names[AVCOL_PRI_NB] = {
2335 [AVCOL_PRI_RESERVED0] = "reserved",
2336 [AVCOL_PRI_BT709] = "bt709",
2337 [AVCOL_PRI_UNSPECIFIED] = "unknown",
2338 [AVCOL_PRI_RESERVED] = "reserved",
2339 [AVCOL_PRI_BT470M] = "bt470m",
2340 [AVCOL_PRI_BT470BG] = "bt470bg",
2341 [AVCOL_PRI_SMPTE170M] = "smpte170m",
2342 [AVCOL_PRI_SMPTE240M] = "smpte240m",
2343 [AVCOL_PRI_FILM] = "film",
2344 [AVCOL_PRI_BT2020] = "bt2020",
2345 [AVCOL_PRI_SMPTE428] = "smpte428",
2346 [AVCOL_PRI_SMPTE431] = "smpte431",
2347 [AVCOL_PRI_SMPTE432] = "smpte432",
2348 [AVCOL_PRI_JEDEC_P22] = "jedec-p22",
2351 static const char * const color_transfer_names[] = {
2352 [AVCOL_TRC_RESERVED0] = "reserved",
2353 [AVCOL_TRC_BT709] = "bt709",
2354 [AVCOL_TRC_UNSPECIFIED] = "unknown",
2355 [AVCOL_TRC_RESERVED] = "reserved",
2356 [AVCOL_TRC_GAMMA22] = "bt470m",
2357 [AVCOL_TRC_GAMMA28] = "bt470bg",
2358 [AVCOL_TRC_SMPTE170M] = "smpte170m",
2359 [AVCOL_TRC_SMPTE240M] = "smpte240m",
2360 [AVCOL_TRC_LINEAR] = "linear",
2361 [AVCOL_TRC_LOG] = "log100",
2362 [AVCOL_TRC_LOG_SQRT] = "log316",
2363 [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
2364 [AVCOL_TRC_BT1361_ECG] = "bt1361e",
2365 [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
2366 [AVCOL_TRC_BT2020_10] = "bt2020-10",
2367 [AVCOL_TRC_BT2020_12] = "bt2020-12",
2368 [AVCOL_TRC_SMPTE2084] = "smpte2084",
2369 [AVCOL_TRC_SMPTE428] = "smpte428",
2370 [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
2373 static const char * const color_space_names[] = {
2374 [AVCOL_SPC_RGB] = "gbr",
2375 [AVCOL_SPC_BT709] = "bt709",
2376 [AVCOL_SPC_UNSPECIFIED] = "unknown",
2377 [AVCOL_SPC_RESERVED] = "reserved",
2378 [AVCOL_SPC_FCC] = "fcc",
2379 [AVCOL_SPC_BT470BG] = "bt470bg",
2380 [AVCOL_SPC_SMPTE170M] = "smpte170m",
2381 [AVCOL_SPC_SMPTE240M] = "smpte240m",
2382 [AVCOL_SPC_YCGCO] = "ycgco",
2383 [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
2384 [AVCOL_SPC_BT2020_CL] = "bt2020c",
2385 [AVCOL_SPC_SMPTE2085] = "smpte2085",
2386 [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc",
2387 [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c",
2388 [AVCOL_SPC_ICTCP] = "ictcp",
2391 static const char * const chroma_location_names[] = {
2392 [AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
2393 [AVCHROMA_LOC_LEFT] = "left",
2394 [AVCHROMA_LOC_CENTER] = "center",
2395 [AVCHROMA_LOC_TOPLEFT] = "topleft",
2396 [AVCHROMA_LOC_TOP] = "top",
2397 [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
2398 [AVCHROMA_LOC_BOTTOM] = "bottom",
2401 static enum AVPixelFormat get_pix_fmt_internal(const char *name)
2403 enum AVPixelFormat pix_fmt;
2405 for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
2406 if (av_pix_fmt_descriptors[pix_fmt].name &&
2407 (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
2408 av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
2411 return AV_PIX_FMT_NONE;
2414 const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
2416 return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
2417 av_pix_fmt_descriptors[pix_fmt].name : NULL;
2421 # define X_NE(be, le) be
2423 # define X_NE(be, le) le
2426 enum AVPixelFormat av_get_pix_fmt(const char *name)
2428 enum AVPixelFormat pix_fmt;
2430 if (!strcmp(name, "rgb32"))
2431 name = X_NE("argb", "bgra");
2432 else if (!strcmp(name, "bgr32"))
2433 name = X_NE("abgr", "rgba");
2435 pix_fmt = get_pix_fmt_internal(name);
2436 if (pix_fmt == AV_PIX_FMT_NONE) {
2439 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
2440 pix_fmt = get_pix_fmt_internal(name2);
2444 if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi"))
2445 pix_fmt = AV_PIX_FMT_VAAPI;
2450 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2453 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2455 for (c = 0; c < pixdesc->nb_components; c++) {
2456 int s = c == 1 || c == 2 ? 0 : log2_pixels;
2457 bits += pixdesc->comp[c].depth << s;
2460 return bits >> log2_pixels;
2463 int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
2466 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
2469 for (c = 0; c < pixdesc->nb_components; c++) {
2470 const AVComponentDescriptor *comp = &pixdesc->comp[c];
2471 int s = c == 1 || c == 2 ? 0 : log2_pixels;
2472 steps[comp->plane] = comp->step << s;
2474 for (c = 0; c < 4; c++)
2477 if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
2480 return bits >> log2_pixels;
2483 char *av_get_pix_fmt_string(char *buf, int buf_size,
2484 enum AVPixelFormat pix_fmt)
2488 snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
2490 const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
2491 snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
2492 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
2498 const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
2500 if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
2502 return &av_pix_fmt_descriptors[pix_fmt];
2505 const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
2508 return &av_pix_fmt_descriptors[0];
2509 while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
2517 enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
2519 if (desc < av_pix_fmt_descriptors ||
2520 desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
2521 return AV_PIX_FMT_NONE;
2523 return desc - av_pix_fmt_descriptors;
2526 int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
2527 int *h_shift, int *v_shift)
2529 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2531 return AVERROR(ENOSYS);
2532 *h_shift = desc->log2_chroma_w;
2533 *v_shift = desc->log2_chroma_h;
2538 int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
2540 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2541 int i, planes[4] = { 0 }, ret = 0;
2544 return AVERROR(EINVAL);
2546 for (i = 0; i < desc->nb_components; i++)
2547 planes[desc->comp[i].plane] = 1;
2548 for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
2553 void ff_check_pixfmt_descriptors(void){
2556 for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) {
2557 const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i];
2558 uint8_t fill[4][8+6+3] = {{0}};
2559 uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]};
2560 int linesize[4] = {0,0,0,0};
2563 if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags)
2565 // av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name);
2566 av_assert0(d->log2_chroma_w <= 3);
2567 av_assert0(d->log2_chroma_h <= 3);
2568 av_assert0(d->nb_components <= 4);
2569 av_assert0(d->name && d->name[0]);
2570 av_assert2(av_get_pix_fmt(d->name) == i);
2572 for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) {
2573 const AVComponentDescriptor *c = &d->comp[j];
2574 if(j>=d->nb_components) {
2575 av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth);
2578 if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) {
2579 av_assert0(c->step >= c->depth);
2581 av_assert0(8*c->step >= c->depth);
2583 if (d->flags & AV_PIX_FMT_FLAG_BAYER)
2585 av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
2586 av_assert0(tmp[0] == 0 && tmp[1] == 0);
2587 tmp[0] = tmp[1] = (1<<c->depth) - 1;
2588 av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
2594 enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
2596 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2600 if (!desc || strlen(desc->name) < 2)
2601 return AV_PIX_FMT_NONE;
2602 av_strlcpy(name, desc->name, sizeof(name));
2603 i = strlen(name) - 2;
2604 if (strcmp(name + i, "be") && strcmp(name + i, "le"))
2605 return AV_PIX_FMT_NONE;
2607 name[i] ^= 'b' ^ 'l';
2609 return get_pix_fmt_internal(name);
2612 #define FF_COLOR_NA -1
2613 #define FF_COLOR_RGB 0 /**< RGB color space */
2614 #define FF_COLOR_GRAY 1 /**< gray color space */
2615 #define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
2616 #define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
2617 #define FF_COLOR_XYZ 4
2619 #define pixdesc_has_alpha(pixdesc) \
2620 ((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA)
2623 static int get_color_type(const AVPixFmtDescriptor *desc) {
2624 if (desc->flags & AV_PIX_FMT_FLAG_PAL)
2625 return FF_COLOR_RGB;
2627 if(desc->nb_components == 1 || desc->nb_components == 2)
2628 return FF_COLOR_GRAY;
2630 if(desc->name && !strncmp(desc->name, "yuvj", 4))
2631 return FF_COLOR_YUV_JPEG;
2633 if(desc->name && !strncmp(desc->name, "xyz", 3))
2634 return FF_COLOR_XYZ;
2636 if(desc->flags & AV_PIX_FMT_FLAG_RGB)
2637 return FF_COLOR_RGB;
2639 if(desc->nb_components == 0)
2642 return FF_COLOR_YUV;
2645 static int get_pix_fmt_depth(int *min, int *max, enum AVPixelFormat pix_fmt)
2647 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
2650 if (!desc || !desc->nb_components) {
2652 return AVERROR(EINVAL);
2655 *min = INT_MAX, *max = -INT_MAX;
2656 for (i = 0; i < desc->nb_components; i++) {
2657 *min = FFMIN(desc->comp[i].depth, *min);
2658 *max = FFMAX(desc->comp[i].depth, *max);
2663 static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
2664 enum AVPixelFormat src_pix_fmt,
2665 unsigned *lossp, unsigned consider)
2667 const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt);
2668 const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt);
2669 int src_color, dst_color;
2670 int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth;
2671 int ret, loss, i, nb_components;
2672 int score = INT_MAX - 1;
2674 if (!src_desc || !dst_desc)
2677 if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) ||
2678 (dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
2679 if (dst_pix_fmt == src_pix_fmt)
2688 if (dst_pix_fmt == src_pix_fmt)
2691 if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0)
2693 if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0)
2696 src_color = get_color_type(src_desc);
2697 dst_color = get_color_type(dst_desc);
2698 if (dst_pix_fmt == AV_PIX_FMT_PAL8)
2699 nb_components = FFMIN(src_desc->nb_components, 4);
2701 nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
2703 for (i = 0; i < nb_components; i++) {
2704 int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1);
2705 if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) {
2706 loss |= FF_LOSS_DEPTH;
2707 score -= 65536 >> depth_minus1;
2711 if (consider & FF_LOSS_RESOLUTION) {
2712 if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) {
2713 loss |= FF_LOSS_RESOLUTION;
2714 score -= 256 << dst_desc->log2_chroma_w;
2716 if (dst_desc->log2_chroma_h > src_desc->log2_chroma_h) {
2717 loss |= FF_LOSS_RESOLUTION;
2718 score -= 256 << dst_desc->log2_chroma_h;
2720 // don't favor 422 over 420 if downsampling is needed, because 420 has much better support on the decoder side
2721 if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 0 &&
2722 dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 0 ) {
2727 if(consider & FF_LOSS_COLORSPACE)
2730 if (src_color != FF_COLOR_RGB &&
2731 src_color != FF_COLOR_GRAY)
2732 loss |= FF_LOSS_COLORSPACE;
2735 if (src_color != FF_COLOR_GRAY)
2736 loss |= FF_LOSS_COLORSPACE;
2739 if (src_color != FF_COLOR_YUV)
2740 loss |= FF_LOSS_COLORSPACE;
2742 case FF_COLOR_YUV_JPEG:
2743 if (src_color != FF_COLOR_YUV_JPEG &&
2744 src_color != FF_COLOR_YUV &&
2745 src_color != FF_COLOR_GRAY)
2746 loss |= FF_LOSS_COLORSPACE;
2749 /* fail safe test */
2750 if (src_color != dst_color)
2751 loss |= FF_LOSS_COLORSPACE;
2754 if(loss & FF_LOSS_COLORSPACE)
2755 score -= (nb_components * 65536) >> FFMIN(dst_desc->comp[0].depth - 1, src_desc->comp[0].depth - 1);
2757 if (dst_color == FF_COLOR_GRAY &&
2758 src_color != FF_COLOR_GRAY && (consider & FF_LOSS_CHROMA)) {
2759 loss |= FF_LOSS_CHROMA;
2762 if (!pixdesc_has_alpha(dst_desc) && (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))) {
2763 loss |= FF_LOSS_ALPHA;
2766 if (dst_pix_fmt == AV_PIX_FMT_PAL8 && (consider & FF_LOSS_COLORQUANT) &&
2767 (src_pix_fmt != AV_PIX_FMT_PAL8 && (src_color != FF_COLOR_GRAY || (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))))) {
2768 loss |= FF_LOSS_COLORQUANT;
2776 int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt,
2777 enum AVPixelFormat src_pix_fmt,
2781 int ret = get_pix_fmt_score(dst_pix_fmt, src_pix_fmt, &loss, has_alpha ? ~0 : ~FF_LOSS_ALPHA);
2787 enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
2788 enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
2790 enum AVPixelFormat dst_pix_fmt;
2791 int loss1, loss2, loss_mask;
2792 const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1);
2793 const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2);
2797 dst_pix_fmt = dst_pix_fmt2;
2798 } else if (!desc2) {
2799 dst_pix_fmt = dst_pix_fmt1;
2801 loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */
2803 loss_mask &= ~FF_LOSS_ALPHA;
2805 score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask);
2806 score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask);
2808 if (score1 == score2) {
2809 if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) {
2810 dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1;
2812 dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1;
2815 dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1;
2820 *loss_ptr = av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
2824 const char *av_color_range_name(enum AVColorRange range)
2826 return (unsigned) range < AVCOL_RANGE_NB ?
2827 color_range_names[range] : NULL;
2830 int av_color_range_from_name(const char *name)
2834 for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) {
2835 size_t len = strlen(color_range_names[i]);
2836 if (!strncmp(color_range_names[i], name, len))
2840 return AVERROR(EINVAL);
2843 const char *av_color_primaries_name(enum AVColorPrimaries primaries)
2845 return (unsigned) primaries < AVCOL_PRI_NB ?
2846 color_primaries_names[primaries] : NULL;
2849 int av_color_primaries_from_name(const char *name)
2853 for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) {
2856 if (!color_primaries_names[i])
2859 len = strlen(color_primaries_names[i]);
2860 if (!strncmp(color_primaries_names[i], name, len))
2864 return AVERROR(EINVAL);
2867 const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
2869 return (unsigned) transfer < AVCOL_TRC_NB ?
2870 color_transfer_names[transfer] : NULL;
2873 int av_color_transfer_from_name(const char *name)
2877 for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) {
2880 if (!color_transfer_names[i])
2883 len = strlen(color_transfer_names[i]);
2884 if (!strncmp(color_transfer_names[i], name, len))
2888 return AVERROR(EINVAL);
2891 const char *av_color_space_name(enum AVColorSpace space)
2893 return (unsigned) space < AVCOL_SPC_NB ?
2894 color_space_names[space] : NULL;
2897 int av_color_space_from_name(const char *name)
2901 for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) {
2904 if (!color_space_names[i])
2907 len = strlen(color_space_names[i]);
2908 if (!strncmp(color_space_names[i], name, len))
2912 return AVERROR(EINVAL);
2915 const char *av_chroma_location_name(enum AVChromaLocation location)
2917 return (unsigned) location < AVCHROMA_LOC_NB ?
2918 chroma_location_names[location] : NULL;
2921 int av_chroma_location_from_name(const char *name)
2925 for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) {
2928 if (!chroma_location_names[i])
2931 len = strlen(chroma_location_names[i]);
2932 if (!strncmp(chroma_location_names[i], name, len))
2936 return AVERROR(EINVAL);