|
|
|
/*
|
|
|
|
* pixel format descriptor
|
|
|
|
* Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
|
|
|
|
*
|
|
|
|
* This file is part of FFmpeg.
|
|
|
|
*
|
|
|
|
* FFmpeg is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* FFmpeg is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with FFmpeg; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "avstring.h"
|
|
|
|
#include "common.h"
|
|
|
|
#include "pixfmt.h"
|
|
|
|
#include "pixdesc.h"
|
|
|
|
#include "intreadwrite.h"
|
|
|
|
|
|
|
|
void av_read_image_line2(void *dst,
|
|
|
|
const uint8_t *data[4], const int linesize[4],
|
|
|
|
const AVPixFmtDescriptor *desc,
|
|
|
|
int x, int y, int c, int w,
|
|
|
|
int read_pal_component,
|
|
|
|
int dst_element_size)
|
|
|
|
{
|
|
|
|
AVComponentDescriptor comp = desc->comp[c];
|
|
|
|
int plane = comp.plane;
|
|
|
|
int depth = comp.depth;
|
|
|
|
unsigned mask = (1ULL << depth) - 1;
|
|
|
|
int shift = comp.shift;
|
|
|
|
int step = comp.step;
|
|
|
|
int flags = desc->flags;
|
|
|
|
uint16_t *dst16 = dst;
|
|
|
|
uint32_t *dst32 = dst;
|
|
|
|
|
|
|
|
if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
|
lavu/pixdesc: handle xv30be in av_[read|write]_image_line
xv30be is an obnoxious format that I shouldn't have included in the
first place. xv30 packs 3 10bit channels into 32bits and while our
byte-oriented logic can handle Little Endian correctly, it cannot
handle Big Endian. To avoid that, I marked xv30be as a bitstream
format, but while that didn't produce FATE errors, it turns out that
the existing read/write code silently produces incorrect results, which
can be revealed via ubsan.
In all likelyhood, the correct fix here is to remove the format. As
this format is only used by Intel vaapi, it's only going to show up
in LE form, so we could just drop the BE version. But I don't want to
deal with creating a hole in the pixfmt list and all the weirdness that
comes from that. Instead, I decided to write the correct read/write
code for it.
And that code isn't too bad, as long as it's specialised for this
format, as the channels are all bit-aligned inside a 32bit word.
2 years ago
|
|
|
if (depth == 10) {
|
|
|
|
// Assume all channels are packed into a 32bit value
|
|
|
|
const uint8_t *byte_p = data[plane] + y * linesize[plane];
|
|
|
|
const uint32_t *p = (uint32_t *)byte_p;
|
|
|
|
|
lavu/pixdesc: handle xv30be in av_[read|write]_image_line
xv30be is an obnoxious format that I shouldn't have included in the
first place. xv30 packs 3 10bit channels into 32bits and while our
byte-oriented logic can handle Little Endian correctly, it cannot
handle Big Endian. To avoid that, I marked xv30be as a bitstream
format, but while that didn't produce FATE errors, it turns out that
the existing read/write code silently produces incorrect results, which
can be revealed via ubsan.
In all likelyhood, the correct fix here is to remove the format. As
this format is only used by Intel vaapi, it's only going to show up
in LE form, so we could just drop the BE version. But I don't want to
deal with creating a hole in the pixfmt list and all the weirdness that
comes from that. Instead, I decided to write the correct read/write
code for it.
And that code isn't too bad, as long as it's specialised for this
format, as the channels are all bit-aligned inside a 32bit word.
2 years ago
|
|
|
while (w--) {
|
|
|
|
int val = AV_RB32(p);
|
|
|
|
val = (val >> comp.offset) & mask;
|
|
|
|
if (read_pal_component)
|
|
|
|
val = data[1][4*val + c];
|
|
|
|
if (dst_element_size == 4) *dst32++ = val;
|
|
|
|
else *dst16++ = val;
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
int skip = x * step + comp.offset;
|
|
|
|
const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
|
|
|
|
int shift = 8 - depth - (skip & 7);
|
|
|
|
|
|
|
|
while (w--) {
|
|
|
|
int val = (*p >> shift) & mask;
|
|
|
|
if (read_pal_component)
|
|
|
|
val = data[1][4*val + c];
|
|
|
|
shift -= step;
|
|
|
|
p -= shift >> 3;
|
|
|
|
shift &= 7;
|
|
|
|
if (dst_element_size == 4) *dst32++ = val;
|
|
|
|
else *dst16++ = val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
const uint8_t *p = data[plane] + y * linesize[plane] +
|
|
|
|
x * step + comp.offset;
|
|
|
|
int is_8bit = shift + depth <= 8;
|
|
|
|
int is_16bit= shift + depth <=16;
|
|
|
|
|
|
|
|
if (is_8bit)
|
|
|
|
p += !!(flags & AV_PIX_FMT_FLAG_BE);
|
|
|
|
|
|
|
|
while (w--) {
|
|
|
|
unsigned val;
|
|
|
|
if (is_8bit) val = *p;
|
|
|
|
else if(is_16bit) val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
|
|
|
|
else val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB32(p) : AV_RL32(p);
|
|
|
|
val = (val >> shift) & mask;
|
|
|
|
if (read_pal_component)
|
|
|
|
val = data[1][4 * val + c];
|
|
|
|
p += step;
|
|
|
|
if (dst_element_size == 4) *dst32++ = val;
|
|
|
|
else *dst16++ = val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void av_read_image_line(uint16_t *dst,
|
|
|
|
const uint8_t *data[4], const int linesize[4],
|
|
|
|
const AVPixFmtDescriptor *desc,
|
|
|
|
int x, int y, int c, int w,
|
|
|
|
int read_pal_component)
|
|
|
|
{
|
|
|
|
av_read_image_line2(dst, data, linesize, desc,x, y, c, w,
|
|
|
|
read_pal_component,
|
|
|
|
2);
|
|
|
|
}
|
|
|
|
|
|
|
|
void av_write_image_line2(const void *src,
|
|
|
|
uint8_t *data[4], const int linesize[4],
|
|
|
|
const AVPixFmtDescriptor *desc,
|
|
|
|
int x, int y, int c, int w, int src_element_size)
|
|
|
|
{
|
|
|
|
AVComponentDescriptor comp = desc->comp[c];
|
|
|
|
int plane = comp.plane;
|
|
|
|
int depth = comp.depth;
|
|
|
|
int step = comp.step;
|
|
|
|
int flags = desc->flags;
|
|
|
|
const uint32_t *src32 = src;
|
|
|
|
const uint16_t *src16 = src;
|
|
|
|
|
|
|
|
if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
|
lavu/pixdesc: handle xv30be in av_[read|write]_image_line
xv30be is an obnoxious format that I shouldn't have included in the
first place. xv30 packs 3 10bit channels into 32bits and while our
byte-oriented logic can handle Little Endian correctly, it cannot
handle Big Endian. To avoid that, I marked xv30be as a bitstream
format, but while that didn't produce FATE errors, it turns out that
the existing read/write code silently produces incorrect results, which
can be revealed via ubsan.
In all likelyhood, the correct fix here is to remove the format. As
this format is only used by Intel vaapi, it's only going to show up
in LE form, so we could just drop the BE version. But I don't want to
deal with creating a hole in the pixfmt list and all the weirdness that
comes from that. Instead, I decided to write the correct read/write
code for it.
And that code isn't too bad, as long as it's specialised for this
format, as the channels are all bit-aligned inside a 32bit word.
2 years ago
|
|
|
if (depth == 10) {
|
|
|
|
// Assume all channels are packed into a 32bit value
|
|
|
|
const uint8_t *byte_p = data[plane] + y * linesize[plane];
|
|
|
|
uint32_t *p = (uint32_t *)byte_p;
|
|
|
|
int offset = comp.offset;
|
|
|
|
uint32_t mask = ((1ULL << depth) - 1) << offset;
|
|
|
|
|
lavu/pixdesc: handle xv30be in av_[read|write]_image_line
xv30be is an obnoxious format that I shouldn't have included in the
first place. xv30 packs 3 10bit channels into 32bits and while our
byte-oriented logic can handle Little Endian correctly, it cannot
handle Big Endian. To avoid that, I marked xv30be as a bitstream
format, but while that didn't produce FATE errors, it turns out that
the existing read/write code silently produces incorrect results, which
can be revealed via ubsan.
In all likelyhood, the correct fix here is to remove the format. As
this format is only used by Intel vaapi, it's only going to show up
in LE form, so we could just drop the BE version. But I don't want to
deal with creating a hole in the pixfmt list and all the weirdness that
comes from that. Instead, I decided to write the correct read/write
code for it.
And that code isn't too bad, as long as it's specialised for this
format, as the channels are all bit-aligned inside a 32bit word.
2 years ago
|
|
|
while (w--) {
|
|
|
|
uint16_t val = src_element_size == 4 ? *src32++ : *src16++;
|
|
|
|
AV_WB32(p, (AV_RB32(p) & ~mask) | (val << offset));
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
int skip = x * step + comp.offset;
|
|
|
|
uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
|
|
|
|
int shift = 8 - depth - (skip & 7);
|
|
|
|
|
|
|
|
while (w--) {
|
|
|
|
*p |= (src_element_size == 4 ? *src32++ : *src16++) << shift;
|
|
|
|
shift -= step;
|
|
|
|
p -= shift >> 3;
|
|
|
|
shift &= 7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
int shift = comp.shift;
|
|
|
|
uint8_t *p = data[plane] + y * linesize[plane] +
|
|
|
|
x * step + comp.offset;
|
|
|
|
|
|
|
|
if (shift + depth <= 8) {
|
|
|
|
p += !!(flags & AV_PIX_FMT_FLAG_BE);
|
|
|
|
while (w--) {
|
|
|
|
*p |= ((src_element_size == 4 ? *src32++ : *src16++) << shift);
|
|
|
|
p += step;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
while (w--) {
|
|
|
|
unsigned s = (src_element_size == 4 ? *src32++ : *src16++);
|
|
|
|
if (shift + depth <= 16) {
|
|
|
|
if (flags & AV_PIX_FMT_FLAG_BE) {
|
|
|
|
uint16_t val = AV_RB16(p) | (s << shift);
|
|
|
|
AV_WB16(p, val);
|
|
|
|
} else {
|
|
|
|
uint16_t val = AV_RL16(p) | (s << shift);
|
|
|
|
AV_WL16(p, val);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (flags & AV_PIX_FMT_FLAG_BE) {
|
|
|
|
uint32_t val = AV_RB32(p) | (s << shift);
|
|
|
|
AV_WB32(p, val);
|
|
|
|
} else {
|
|
|
|
uint32_t val = AV_RL32(p) | (s << shift);
|
|
|
|
AV_WL32(p, val);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
p += step;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void av_write_image_line(const uint16_t *src,
|
|
|
|
uint8_t *data[4], const int linesize[4],
|
|
|
|
const AVPixFmtDescriptor *desc,
|
|
|
|
int x, int y, int c, int w)
|
|
|
|
{
|
|
|
|
av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
|
|
|
|
[AV_PIX_FMT_YUV420P] = {
|
|
|
|
.name = "yuv420p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUYV422] = {
|
|
|
|
.name = "yuyv422",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 8 }, /* Y */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* U */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YVYU422] = {
|
|
|
|
.name = "yvyu422",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 8 }, /* Y */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* U */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_Y210LE] = {
|
|
|
|
.name = "y210le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 6, 10 }, /* Y */
|
|
|
|
{ 0, 8, 2, 6, 10 }, /* U */
|
|
|
|
{ 0, 8, 6, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_Y210BE] = {
|
|
|
|
.name = "y210be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 6, 10 }, /* Y */
|
|
|
|
{ 0, 8, 2, 6, 10 }, /* U */
|
|
|
|
{ 0, 8, 6, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB24] = {
|
|
|
|
.name = "rgb24",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 3, 0, 0, 8 }, /* R */
|
|
|
|
{ 0, 3, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 3, 2, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR24] = {
|
|
|
|
.name = "bgr24",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 3, 2, 0, 8 }, /* R */
|
|
|
|
{ 0, 3, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 3, 0, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_X2RGB10LE] = {
|
|
|
|
.name = "x2rgb10le",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 4, 10 }, /* R */
|
|
|
|
{ 0, 4, 1, 2, 10 }, /* G */
|
|
|
|
{ 0, 4, 0, 0, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_X2RGB10BE] = {
|
|
|
|
.name = "x2rgb10be",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 4, 10 }, /* R */
|
|
|
|
{ 0, 4, 1, 2, 10 }, /* G */
|
|
|
|
{ 0, 4, 2, 0, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_X2BGR10LE] = {
|
|
|
|
.name = "x2bgr10le",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 10 }, /* R */
|
|
|
|
{ 0, 4, 1, 2, 10 }, /* G */
|
|
|
|
{ 0, 4, 2, 4, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_X2BGR10BE] = {
|
|
|
|
.name = "x2bgr10be",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 0, 10 }, /* R */
|
|
|
|
{ 0, 4, 1, 2, 10 }, /* G */
|
|
|
|
{ 0, 4, 0, 4, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P] = {
|
|
|
|
.name = "yuv422p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P] = {
|
|
|
|
.name = "yuv444p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV410P] = {
|
|
|
|
.name = "yuv410p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 2,
|
|
|
|
.log2_chroma_h = 2,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV411P] = {
|
|
|
|
.name = "yuv411p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 2,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVJ411P] = {
|
|
|
|
.name = "yuvj411p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 2,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY8] = {
|
|
|
|
.name = "gray",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "gray8,y8",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_MONOWHITE] = {
|
|
|
|
.name = "monow",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 1 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BITSTREAM,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_MONOBLACK] = {
|
|
|
|
.name = "monob",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 7, 1 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BITSTREAM,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_PAL8] = {
|
|
|
|
.name = "pal8",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 },
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVJ420P] = {
|
|
|
|
.name = "yuvj420p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVJ422P] = {
|
|
|
|
.name = "yuvj422p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVJ444P] = {
|
|
|
|
.name = "yuvj444p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
#if FF_API_XVMC
|
|
|
|
[AV_PIX_FMT_XVMC] = {
|
|
|
|
.name = "xvmc",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
#endif
|
|
|
|
[AV_PIX_FMT_UYVY422] = {
|
|
|
|
.name = "uyvy422",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 1, 0, 8 }, /* Y */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* U */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_UYYVYY411] = {
|
|
|
|
.name = "uyyvyy411",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 2,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* Y */
|
|
|
|
{ 0, 6, 0, 0, 8 }, /* U */
|
|
|
|
{ 0, 6, 3, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR8] = {
|
|
|
|
.name = "bgr8",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 3 }, /* R */
|
|
|
|
{ 0, 1, 0, 3, 3 }, /* G */
|
|
|
|
{ 0, 1, 0, 6, 2 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR4] = {
|
|
|
|
.name = "bgr4",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 3, 0, 1 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 2 }, /* G */
|
|
|
|
{ 0, 4, 0, 0, 1 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR4_BYTE] = {
|
|
|
|
.name = "bgr4_byte",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 1 }, /* R */
|
|
|
|
{ 0, 1, 0, 1, 2 }, /* G */
|
|
|
|
{ 0, 1, 0, 3, 1 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB8] = {
|
|
|
|
.name = "rgb8",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 6, 2 }, /* R */
|
|
|
|
{ 0, 1, 0, 3, 3 }, /* G */
|
|
|
|
{ 0, 1, 0, 0, 3 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB4] = {
|
|
|
|
.name = "rgb4",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 1 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 2 }, /* G */
|
|
|
|
{ 0, 4, 3, 0, 1 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB4_BYTE] = {
|
|
|
|
.name = "rgb4_byte",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 3, 1 }, /* R */
|
|
|
|
{ 0, 1, 0, 1, 2 }, /* G */
|
|
|
|
{ 0, 1, 0, 0, 1 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV12] = {
|
|
|
|
.name = "nv12",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 8 }, /* U */
|
|
|
|
{ 1, 2, 1, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV21] = {
|
|
|
|
.name = "nv21",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 2, 1, 0, 8 }, /* U */
|
|
|
|
{ 1, 2, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_ARGB] = {
|
|
|
|
.name = "argb",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* B */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBA] = {
|
|
|
|
.name = "rgba",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* B */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_ABGR] = {
|
|
|
|
.name = "abgr",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* B */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGRA] = {
|
|
|
|
.name = "bgra",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* B */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_0RGB] = {
|
|
|
|
.name = "0rgb",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB0] = {
|
|
|
|
.name = "rgb0",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_0BGR] = {
|
|
|
|
.name = "0bgr",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR0] = {
|
|
|
|
.name = "bgr0",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* R */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* G */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY9BE] = {
|
|
|
|
.name = "gray9be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
.alias = "y9be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY9LE] = {
|
|
|
|
.name = "gray9le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "y9le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY10BE] = {
|
|
|
|
.name = "gray10be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
.alias = "y10be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY10LE] = {
|
|
|
|
.name = "gray10le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "y10le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY12BE] = {
|
|
|
|
.name = "gray12be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
.alias = "y12be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY12LE] = {
|
|
|
|
.name = "gray12le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "y12le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY14BE] = {
|
|
|
|
.name = "gray14be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
.alias = "y14be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY14LE] = {
|
|
|
|
.name = "gray14le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "y14le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY16BE] = {
|
|
|
|
.name = "gray16be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
.alias = "y16be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAY16LE] = {
|
|
|
|
.name = "gray16le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
},
|
|
|
|
.alias = "y16le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV440P] = {
|
|
|
|
.name = "yuv440p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVJ440P] = {
|
|
|
|
.name = "yuvj440p",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV440P10LE] = {
|
|
|
|
.name = "yuv440p10le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV440P10BE] = {
|
|
|
|
.name = "yuv440p10be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV440P12LE] = {
|
|
|
|
.name = "yuv440p12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV440P12BE] = {
|
|
|
|
.name = "yuv440p12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P] = {
|
|
|
|
.name = "yuva420p",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
{ 3, 1, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P] = {
|
|
|
|
.name = "yuva422p",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
{ 3, 1, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P] = {
|
|
|
|
.name = "yuva444p",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* U */
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* V */
|
|
|
|
{ 3, 1, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P9BE] = {
|
|
|
|
.name = "yuva420p9be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P9LE] = {
|
|
|
|
.name = "yuva420p9le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P9BE] = {
|
|
|
|
.name = "yuva422p9be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P9LE] = {
|
|
|
|
.name = "yuva422p9le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P9BE] = {
|
|
|
|
.name = "yuva444p9be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P9LE] = {
|
|
|
|
.name = "yuva444p9le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 9 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P10BE] = {
|
|
|
|
.name = "yuva420p10be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P10LE] = {
|
|
|
|
.name = "yuva420p10le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P10BE] = {
|
|
|
|
.name = "yuva422p10be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P10LE] = {
|
|
|
|
.name = "yuva422p10le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P10BE] = {
|
|
|
|
.name = "yuva444p10be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P10LE] = {
|
|
|
|
.name = "yuva444p10le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P16BE] = {
|
|
|
|
.name = "yuva420p16be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA420P16LE] = {
|
|
|
|
.name = "yuva420p16le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P16BE] = {
|
|
|
|
.name = "yuva422p16be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P16LE] = {
|
|
|
|
.name = "yuva422p16le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P16BE] = {
|
|
|
|
.name = "yuva444p16be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P16LE] = {
|
|
|
|
.name = "yuva444p16le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB48BE] = {
|
|
|
|
.name = "rgb48be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 6, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 6, 4, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB48LE] = {
|
|
|
|
.name = "rgb48le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 6, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 6, 4, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBA64BE] = {
|
|
|
|
.name = "rgba64be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBA64LE] = {
|
|
|
|
.name = "rgba64le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB565BE] = {
|
|
|
|
.name = "rgb565be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, -1, 3, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 6 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB565LE] = {
|
|
|
|
.name = "rgb565le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 1, 3, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 6 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB555BE] = {
|
|
|
|
.name = "rgb555be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, -1, 2, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 5 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB555LE] = {
|
|
|
|
.name = "rgb555le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 1, 2, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 5 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB444BE] = {
|
|
|
|
.name = "rgb444be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, -1, 0, 4 }, /* R */
|
|
|
|
{ 0, 2, 0, 4, 4 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 4 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGB444LE] = {
|
|
|
|
.name = "rgb444le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 1, 0, 4 }, /* R */
|
|
|
|
{ 0, 2, 0, 4, 4 }, /* G */
|
|
|
|
{ 0, 2, 0, 0, 4 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR48BE] = {
|
|
|
|
.name = "bgr48be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 4, 0, 16 }, /* R */
|
|
|
|
{ 0, 6, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 6, 0, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR48LE] = {
|
|
|
|
.name = "bgr48le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 4, 0, 16 }, /* R */
|
|
|
|
{ 0, 6, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 6, 0, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGRA64BE] = {
|
|
|
|
.name = "bgra64be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGRA64LE] = {
|
|
|
|
.name = "bgra64le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR565BE] = {
|
|
|
|
.name = "bgr565be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 6 }, /* G */
|
|
|
|
{ 0, 2, -1, 3, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR565LE] = {
|
|
|
|
.name = "bgr565le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 6 }, /* G */
|
|
|
|
{ 0, 2, 1, 3, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR555BE] = {
|
|
|
|
.name = "bgr555be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 5 }, /* G */
|
|
|
|
{ 0, 2, -1, 2, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR555LE] = {
|
|
|
|
.name = "bgr555le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 5 }, /* R */
|
|
|
|
{ 0, 2, 0, 5, 5 }, /* G */
|
|
|
|
{ 0, 2, 1, 2, 5 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR444BE] = {
|
|
|
|
.name = "bgr444be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 4 }, /* R */
|
|
|
|
{ 0, 2, 0, 4, 4 }, /* G */
|
|
|
|
{ 0, 2, -1, 0, 4 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BGR444LE] = {
|
|
|
|
.name = "bgr444le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 4 }, /* R */
|
|
|
|
{ 0, 2, 0, 4, 4 }, /* G */
|
|
|
|
{ 0, 2, 1, 0, 4 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VAAPI] = {
|
|
|
|
.name = "vaapi",
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P9LE] = {
|
|
|
|
.name = "yuv420p9le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P9BE] = {
|
|
|
|
.name = "yuv420p9be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P10LE] = {
|
|
|
|
.name = "yuv420p10le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P10BE] = {
|
|
|
|
.name = "yuv420p10be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P12LE] = {
|
|
|
|
.name = "yuv420p12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P12BE] = {
|
|
|
|
.name = "yuv420p12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P14LE] = {
|
|
|
|
.name = "yuv420p14le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P14BE] = {
|
|
|
|
.name = "yuv420p14be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P16LE] = {
|
|
|
|
.name = "yuv420p16le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV420P16BE] = {
|
|
|
|
.name = "yuv420p16be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P9LE] = {
|
|
|
|
.name = "yuv422p9le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P9BE] = {
|
|
|
|
.name = "yuv422p9be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P10LE] = {
|
|
|
|
.name = "yuv422p10le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P10BE] = {
|
|
|
|
.name = "yuv422p10be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P12LE] = {
|
|
|
|
.name = "yuv422p12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P12BE] = {
|
|
|
|
.name = "yuv422p12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P14LE] = {
|
|
|
|
.name = "yuv422p14le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P14BE] = {
|
|
|
|
.name = "yuv422p14be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P16LE] = {
|
|
|
|
.name = "yuv422p16le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV422P16BE] = {
|
|
|
|
.name = "yuv422p16be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P16LE] = {
|
|
|
|
.name = "yuv444p16le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P16BE] = {
|
|
|
|
.name = "yuv444p16be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P10LE] = {
|
|
|
|
.name = "yuv444p10le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P10BE] = {
|
|
|
|
.name = "yuv444p10be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P9LE] = {
|
|
|
|
.name = "yuv444p9le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P9BE] = {
|
|
|
|
.name = "yuv444p9be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P12LE] = {
|
|
|
|
.name = "yuv444p12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P12BE] = {
|
|
|
|
.name = "yuv444p12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P14LE] = {
|
|
|
|
.name = "yuv444p14le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUV444P14BE] = {
|
|
|
|
.name = "yuv444p14be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_D3D11VA_VLD] = {
|
|
|
|
.name = "d3d11va_vld",
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_DXVA2_VLD] = {
|
|
|
|
.name = "dxva2_vld",
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YA8] = {
|
|
|
|
.name = "ya8",
|
|
|
|
.nb_components = 2,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 8 }, /* Y */
|
|
|
|
{ 0, 2, 1, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
.alias = "gray8a",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YA16LE] = {
|
|
|
|
.name = "ya16le",
|
|
|
|
.nb_components = 2,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 16 }, /* Y */
|
|
|
|
{ 0, 4, 2, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YA16BE] = {
|
|
|
|
.name = "ya16be",
|
|
|
|
.nb_components = 2,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 16 }, /* Y */
|
|
|
|
{ 0, 4, 2, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VIDEOTOOLBOX] = {
|
|
|
|
.name = "videotoolbox_vld",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP] = {
|
|
|
|
.name = "gbrp",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* R */
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* G */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP9LE] = {
|
|
|
|
.name = "gbrp9le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP9BE] = {
|
|
|
|
.name = "gbrp9be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 9 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 9 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 9 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP10LE] = {
|
|
|
|
.name = "gbrp10le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP10BE] = {
|
|
|
|
.name = "gbrp10be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP12LE] = {
|
|
|
|
.name = "gbrp12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP12BE] = {
|
|
|
|
.name = "gbrp12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP14LE] = {
|
|
|
|
.name = "gbrp14le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP14BE] = {
|
|
|
|
.name = "gbrp14be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 14 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 14 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 14 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP16LE] = {
|
|
|
|
.name = "gbrp16le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRP16BE] = {
|
|
|
|
.name = "gbrp16be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP] = {
|
|
|
|
.name = "gbrap",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 1, 0, 0, 8 }, /* R */
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* G */
|
|
|
|
{ 1, 1, 0, 0, 8 }, /* B */
|
|
|
|
{ 3, 1, 0, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP16LE] = {
|
|
|
|
.name = "gbrap16le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP16BE] = {
|
|
|
|
.name = "gbrap16be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 16 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
|
|
|
|
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VDPAU] = {
|
|
|
|
.name = "vdpau",
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XYZ12LE] = {
|
|
|
|
.name = "xyz12le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 0, 4, 12 }, /* X */
|
|
|
|
{ 0, 6, 2, 4, 12 }, /* Y */
|
|
|
|
{ 0, 6, 4, 4, 12 }, /* Z */
|
|
|
|
},
|
|
|
|
/*.flags = -- not used*/
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XYZ12BE] = {
|
|
|
|
.name = "xyz12be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 6, 0, 4, 12 }, /* X */
|
|
|
|
{ 0, 6, 2, 4, 12 }, /* Y */
|
|
|
|
{ 0, 6, 4, 4, 12 }, /* Z */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
|
|
|
|
#define BAYER8_DESC_COMMON \
|
|
|
|
.nb_components= 3, \
|
|
|
|
.log2_chroma_w= 0, \
|
|
|
|
.log2_chroma_h= 0, \
|
|
|
|
.comp = { \
|
|
|
|
{ 0, 1, 0, 0, 2 }, \
|
|
|
|
{ 0, 1, 0, 0, 4 }, \
|
|
|
|
{ 0, 1, 0, 0, 2 }, \
|
|
|
|
}, \
|
|
|
|
|
|
|
|
#define BAYER16_DESC_COMMON \
|
|
|
|
.nb_components= 3, \
|
|
|
|
.log2_chroma_w= 0, \
|
|
|
|
.log2_chroma_h= 0, \
|
|
|
|
.comp = { \
|
|
|
|
{ 0, 2, 0, 0, 4 }, \
|
|
|
|
{ 0, 2, 0, 0, 8 }, \
|
|
|
|
{ 0, 2, 0, 0, 4 }, \
|
|
|
|
}, \
|
|
|
|
|
|
|
|
[AV_PIX_FMT_BAYER_BGGR8] = {
|
|
|
|
.name = "bayer_bggr8",
|
|
|
|
BAYER8_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_BGGR16LE] = {
|
|
|
|
.name = "bayer_bggr16le",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_BGGR16BE] = {
|
|
|
|
.name = "bayer_bggr16be",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_RGGB8] = {
|
|
|
|
.name = "bayer_rggb8",
|
|
|
|
BAYER8_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_RGGB16LE] = {
|
|
|
|
.name = "bayer_rggb16le",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_RGGB16BE] = {
|
|
|
|
.name = "bayer_rggb16be",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GBRG8] = {
|
|
|
|
.name = "bayer_gbrg8",
|
|
|
|
BAYER8_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GBRG16LE] = {
|
|
|
|
.name = "bayer_gbrg16le",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GBRG16BE] = {
|
|
|
|
.name = "bayer_gbrg16be",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GRBG8] = {
|
|
|
|
.name = "bayer_grbg8",
|
|
|
|
BAYER8_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GRBG16LE] = {
|
|
|
|
.name = "bayer_grbg16le",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_BAYER_GRBG16BE] = {
|
|
|
|
.name = "bayer_grbg16be",
|
|
|
|
BAYER16_DESC_COMMON
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV16] = {
|
|
|
|
.name = "nv16",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 8 }, /* U */
|
|
|
|
{ 1, 2, 1, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV20LE] = {
|
|
|
|
.name = "nv20le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV20BE] = {
|
|
|
|
.name = "nv20be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_QSV] = {
|
|
|
|
.name = "qsv",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_MEDIACODEC] = {
|
|
|
|
.name = "mediacodec",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_MMAL] = {
|
|
|
|
.name = "mmal",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_CUDA] = {
|
|
|
|
.name = "cuda",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_AYUV64LE] = {
|
|
|
|
.name = "ayuv64le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* Y */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* U */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* V */
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_AYUV64BE] = {
|
|
|
|
.name = "ayuv64be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* Y */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* U */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* V */
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P010LE] = {
|
|
|
|
.name = "p010le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P010BE] = {
|
|
|
|
.name = "p010be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
lavu/pixfmt: Add P012, Y212, XV30, and XV36 formats
These are the formats we want/need to use when dealing with the Intel
VAAPI decoder for 12bit 4:2:0, 12bit 4:2:2, 10bit 4:4:4 and 12bit 4:4:4
respectively.
As with the already supported Y210 and YUVX (XVUY) formats, they are
based on formats Microsoft picked as their preferred 4:2:2 and 4:4:4
video formats, and Intel ran with it.
P12 and Y212 are simply an extension of 10 bit formats to say 12 bits
will be used, with 4 unused bits instead of 6.
XV30, and XV36, as exotic as they sound, are variants of Y410 and Y412
where the alpha channel is left formally undefined. We prefer these
over the alpha versions because the hardware cannot actually do
anything with the alpha channel and respecting it is just overhead.
Y412/XV46 is a normal looking packed 4 channel format where each
channel is 16bits wide but only the 12msb are used (like P012).
Y410/XV30 packs three 10bit channels in 32bits with 2bits of alpha,
like A/X2RGB10 style formats. This annoying layout forced me to define
the BE version as a bitstream format. It seems like our pixdesc
infrastructure can handle the LE version being byte-defined, but not
when it's reversed. If there's a better way to handle this, please
let me know. Our existing X2 formats all have the 2 bits at the MSB
end, but this format places them at the LSB end and that seems to be
the root of the problem.
2 years ago
|
|
|
[AV_PIX_FMT_P012LE] = {
|
|
|
|
.name = "p012le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P012BE] = {
|
|
|
|
.name = "p012be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P016LE] = {
|
|
|
|
.name = "p016le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P016BE] = {
|
|
|
|
.name = "p016be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 1,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP12LE] = {
|
|
|
|
.name = "gbrap12le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP12BE] = {
|
|
|
|
.name = "gbrap12be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
|
|
|
|
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP10LE] = {
|
|
|
|
.name = "gbrap10le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAP10BE] = {
|
|
|
|
.name = "gbrap10be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 2, 0, 0, 10 }, /* R */
|
|
|
|
{ 0, 2, 0, 0, 10 }, /* G */
|
|
|
|
{ 1, 2, 0, 0, 10 }, /* B */
|
|
|
|
{ 3, 2, 0, 0, 10 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
|
|
|
|
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_D3D11] = {
|
|
|
|
.name = "d3d11",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRPF32BE] = {
|
|
|
|
.name = "gbrpf32be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 4, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* G */
|
|
|
|
{ 1, 4, 0, 0, 32 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
|
|
|
|
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRPF32LE] = {
|
|
|
|
.name = "gbrpf32le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 4, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* G */
|
|
|
|
{ 1, 4, 0, 0, 32 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAPF32BE] = {
|
|
|
|
.name = "gbrapf32be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 4, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* G */
|
|
|
|
{ 1, 4, 0, 0, 32 }, /* B */
|
|
|
|
{ 3, 4, 0, 0, 32 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GBRAPF32LE] = {
|
|
|
|
.name = "gbrapf32le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 2, 4, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* G */
|
|
|
|
{ 1, 4, 0, 0, 32 }, /* B */
|
|
|
|
{ 3, 4, 0, 0, 32 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA |
|
|
|
|
AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_DRM_PRIME] = {
|
|
|
|
.name = "drm_prime",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_OPENCL] = {
|
|
|
|
.name = "opencl",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAYF32BE] = {
|
|
|
|
.name = "grayf32be",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
.alias = "yf32be",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_GRAYF32LE] = {
|
|
|
|
.name = "grayf32le",
|
|
|
|
.nb_components = 1,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 0, 32 }, /* Y */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
.alias = "yf32le",
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P12BE] = {
|
|
|
|
.name = "yuva422p12be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA422P12LE] = {
|
|
|
|
.name = "yuva422p12le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P12BE] = {
|
|
|
|
.name = "yuva444p12be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_YUVA444P12LE] = {
|
|
|
|
.name = "yuva444p12le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 12 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 12 }, /* U */
|
|
|
|
{ 2, 2, 0, 0, 12 }, /* V */
|
|
|
|
{ 3, 2, 0, 0, 12 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV24] = {
|
|
|
|
.name = "nv24",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 2, 0, 0, 8 }, /* U */
|
|
|
|
{ 1, 2, 1, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_NV42] = {
|
|
|
|
.name = "nv42",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 1, 0, 0, 8 }, /* Y */
|
|
|
|
{ 1, 2, 1, 0, 8 }, /* U */
|
|
|
|
{ 1, 2, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VULKAN] = {
|
|
|
|
.name = "vulkan",
|
|
|
|
.flags = AV_PIX_FMT_FLAG_HWACCEL,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P210BE] = {
|
|
|
|
.name = "p210be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P210LE] = {
|
|
|
|
.name = "p210le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P410BE] = {
|
|
|
|
.name = "p410be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P410LE] = {
|
|
|
|
.name = "p410le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 6, 10 }, /* Y */
|
|
|
|
{ 1, 4, 0, 6, 10 }, /* U */
|
|
|
|
{ 1, 4, 2, 6, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P216BE] = {
|
|
|
|
.name = "p216be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P216LE] = {
|
|
|
|
.name = "p216le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P416BE] = {
|
|
|
|
.name = "p416be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P416LE] = {
|
|
|
|
.name = "p416le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 0, 16 }, /* Y */
|
|
|
|
{ 1, 4, 0, 0, 16 }, /* U */
|
|
|
|
{ 1, 4, 2, 0, 16 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VUYA] = {
|
|
|
|
.name = "vuya",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* Y */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* U */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* V */
|
|
|
|
{ 0, 4, 3, 0, 8 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_VUYX] = {
|
|
|
|
.name = "vuyx",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 2, 0, 8 }, /* Y */
|
|
|
|
{ 0, 4, 1, 0, 8 }, /* U */
|
|
|
|
{ 0, 4, 0, 0, 8 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBAF16BE] = {
|
|
|
|
.name = "rgbaf16be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBAF16LE] = {
|
|
|
|
.name = "rgbaf16le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 0, 0, 16 }, /* R */
|
|
|
|
{ 0, 8, 2, 0, 16 }, /* G */
|
|
|
|
{ 0, 8, 4, 0, 16 }, /* B */
|
|
|
|
{ 0, 8, 6, 0, 16 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA |
|
|
|
|
AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
lavu/pixfmt: Add P012, Y212, XV30, and XV36 formats
These are the formats we want/need to use when dealing with the Intel
VAAPI decoder for 12bit 4:2:0, 12bit 4:2:2, 10bit 4:4:4 and 12bit 4:4:4
respectively.
As with the already supported Y210 and YUVX (XVUY) formats, they are
based on formats Microsoft picked as their preferred 4:2:2 and 4:4:4
video formats, and Intel ran with it.
P12 and Y212 are simply an extension of 10 bit formats to say 12 bits
will be used, with 4 unused bits instead of 6.
XV30, and XV36, as exotic as they sound, are variants of Y410 and Y412
where the alpha channel is left formally undefined. We prefer these
over the alpha versions because the hardware cannot actually do
anything with the alpha channel and respecting it is just overhead.
Y412/XV46 is a normal looking packed 4 channel format where each
channel is 16bits wide but only the 12msb are used (like P012).
Y410/XV30 packs three 10bit channels in 32bits with 2bits of alpha,
like A/X2RGB10 style formats. This annoying layout forced me to define
the BE version as a bitstream format. It seems like our pixdesc
infrastructure can handle the LE version being byte-defined, but not
when it's reversed. If there's a better way to handle this, please
let me know. Our existing X2 formats all have the 2 bits at the MSB
end, but this format places them at the LSB end and that seems to be
the root of the problem.
2 years ago
|
|
|
[AV_PIX_FMT_Y212LE] = {
|
|
|
|
.name = "y212le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 4, 12 }, /* Y */
|
|
|
|
{ 0, 8, 2, 4, 12 }, /* U */
|
|
|
|
{ 0, 8, 6, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_Y212BE] = {
|
|
|
|
.name = "y212be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 0, 4, 12 }, /* Y */
|
|
|
|
{ 0, 8, 2, 4, 12 }, /* U */
|
|
|
|
{ 0, 8, 6, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XV30LE] = {
|
|
|
|
.name = "xv30le",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 4, 1, 2, 10 }, /* Y */
|
|
|
|
{ 0, 4, 0, 0, 10 }, /* U */
|
|
|
|
{ 0, 4, 2, 4, 10 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XV30BE] = {
|
|
|
|
.name = "xv30be",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 32, 10, 0, 10 }, /* Y */
|
|
|
|
{ 0, 32, 0, 0, 10 }, /* U */
|
|
|
|
{ 0, 32, 20, 0, 10 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_BITSTREAM,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XV36LE] = {
|
|
|
|
.name = "xv36le",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 2, 4, 12 }, /* Y */
|
|
|
|
{ 0, 8, 0, 4, 12 }, /* U */
|
|
|
|
{ 0, 8, 4, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_XV36BE] = {
|
|
|
|
.name = "xv36be",
|
|
|
|
.nb_components= 3,
|
|
|
|
.log2_chroma_w= 0,
|
|
|
|
.log2_chroma_h= 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 8, 2, 4, 12 }, /* Y */
|
|
|
|
{ 0, 8, 0, 4, 12 }, /* U */
|
|
|
|
{ 0, 8, 4, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBF32BE] = {
|
|
|
|
.name = "rgbf32be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 12, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 12, 4, 0, 32 }, /* G */
|
|
|
|
{ 0, 12, 8, 0, 32 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBF32LE] = {
|
|
|
|
.name = "rgbf32le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 12, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 12, 4, 0, 32 }, /* G */
|
|
|
|
{ 0, 12, 8, 0, 32 }, /* B */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBAF32BE] = {
|
|
|
|
.name = "rgbaf32be",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 16, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 16, 4, 0, 32 }, /* G */
|
|
|
|
{ 0, 16, 8, 0, 32 }, /* B */
|
|
|
|
{ 0, 16, 12, 0, 32 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB |
|
|
|
|
AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_RGBAF32LE] = {
|
|
|
|
.name = "rgbaf32le",
|
|
|
|
.nb_components = 4,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 16, 0, 0, 32 }, /* R */
|
|
|
|
{ 0, 16, 4, 0, 32 }, /* G */
|
|
|
|
{ 0, 16, 8, 0, 32 }, /* B */
|
|
|
|
{ 0, 16, 12, 0, 32 }, /* A */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT |
|
|
|
|
AV_PIX_FMT_FLAG_ALPHA,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P212BE] = {
|
|
|
|
.name = "p212be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P212LE] = {
|
|
|
|
.name = "p212le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 1,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P412BE] = {
|
|
|
|
.name = "p412be",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
|
|
|
|
},
|
|
|
|
[AV_PIX_FMT_P412LE] = {
|
|
|
|
.name = "p412le",
|
|
|
|
.nb_components = 3,
|
|
|
|
.log2_chroma_w = 0,
|
|
|
|
.log2_chroma_h = 0,
|
|
|
|
.comp = {
|
|
|
|
{ 0, 2, 0, 4, 12 }, /* Y */
|
|
|
|
{ 1, 4, 0, 4, 12 }, /* U */
|
|
|
|
{ 1, 4, 2, 4, 12 }, /* V */
|
|
|
|
},
|
|
|
|
.flags = AV_PIX_FMT_FLAG_PLANAR,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * const color_range_names[] = {
|
|
|
|
[AVCOL_RANGE_UNSPECIFIED] = "unknown",
|
|
|
|
[AVCOL_RANGE_MPEG] = "tv",
|
|
|
|
[AVCOL_RANGE_JPEG] = "pc",
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * const color_primaries_names[AVCOL_PRI_NB] = {
|
|
|
|
[AVCOL_PRI_RESERVED0] = "reserved",
|
|
|
|
[AVCOL_PRI_BT709] = "bt709",
|
|
|
|
[AVCOL_PRI_UNSPECIFIED] = "unknown",
|
|
|
|
[AVCOL_PRI_RESERVED] = "reserved",
|
|
|
|
[AVCOL_PRI_BT470M] = "bt470m",
|
|
|
|
[AVCOL_PRI_BT470BG] = "bt470bg",
|
|
|
|
[AVCOL_PRI_SMPTE170M] = "smpte170m",
|
|
|
|
[AVCOL_PRI_SMPTE240M] = "smpte240m",
|
|
|
|
[AVCOL_PRI_FILM] = "film",
|
|
|
|
[AVCOL_PRI_BT2020] = "bt2020",
|
|
|
|
[AVCOL_PRI_SMPTE428] = "smpte428",
|
|
|
|
[AVCOL_PRI_SMPTE431] = "smpte431",
|
|
|
|
[AVCOL_PRI_SMPTE432] = "smpte432",
|
|
|
|
[AVCOL_PRI_EBU3213] = "ebu3213",
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * const color_transfer_names[] = {
|
|
|
|
[AVCOL_TRC_RESERVED0] = "reserved",
|
|
|
|
[AVCOL_TRC_BT709] = "bt709",
|
|
|
|
[AVCOL_TRC_UNSPECIFIED] = "unknown",
|
|
|
|
[AVCOL_TRC_RESERVED] = "reserved",
|
|
|
|
[AVCOL_TRC_GAMMA22] = "bt470m",
|
|
|
|
[AVCOL_TRC_GAMMA28] = "bt470bg",
|
|
|
|
[AVCOL_TRC_SMPTE170M] = "smpte170m",
|
|
|
|
[AVCOL_TRC_SMPTE240M] = "smpte240m",
|
|
|
|
[AVCOL_TRC_LINEAR] = "linear",
|
|
|
|
[AVCOL_TRC_LOG] = "log100",
|
|
|
|
[AVCOL_TRC_LOG_SQRT] = "log316",
|
|
|
|
[AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
|
|
|
|
[AVCOL_TRC_BT1361_ECG] = "bt1361e",
|
|
|
|
[AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
|
|
|
|
[AVCOL_TRC_BT2020_10] = "bt2020-10",
|
|
|
|
[AVCOL_TRC_BT2020_12] = "bt2020-12",
|
|
|
|
[AVCOL_TRC_SMPTE2084] = "smpte2084",
|
|
|
|
[AVCOL_TRC_SMPTE428] = "smpte428",
|
|
|
|
[AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * const color_space_names[] = {
|
|
|
|
[AVCOL_SPC_RGB] = "gbr",
|
|
|
|
[AVCOL_SPC_BT709] = "bt709",
|
|
|
|
[AVCOL_SPC_UNSPECIFIED] = "unknown",
|
|
|
|
[AVCOL_SPC_RESERVED] = "reserved",
|
|
|
|
[AVCOL_SPC_FCC] = "fcc",
|
|
|
|
[AVCOL_SPC_BT470BG] = "bt470bg",
|
|
|
|
[AVCOL_SPC_SMPTE170M] = "smpte170m",
|
|
|
|
[AVCOL_SPC_SMPTE240M] = "smpte240m",
|
|
|
|
[AVCOL_SPC_YCGCO] = "ycgco",
|
|
|
|
[AVCOL_SPC_BT2020_NCL] = "bt2020nc",
|
|
|
|
[AVCOL_SPC_BT2020_CL] = "bt2020c",
|
|
|
|
[AVCOL_SPC_SMPTE2085] = "smpte2085",
|
|
|
|
[AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc",
|
|
|
|
[AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c",
|
|
|
|
[AVCOL_SPC_ICTCP] = "ictcp",
|
|
|
|
};
|
|
|
|
|
|
|
|
static const char * const chroma_location_names[] = {
|
|
|
|
[AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
|
|
|
|
[AVCHROMA_LOC_LEFT] = "left",
|
|
|
|
[AVCHROMA_LOC_CENTER] = "center",
|
|
|
|
[AVCHROMA_LOC_TOPLEFT] = "topleft",
|
|
|
|
[AVCHROMA_LOC_TOP] = "top",
|
|
|
|
[AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
|
|
|
|
[AVCHROMA_LOC_BOTTOM] = "bottom",
|
|
|
|
};
|
|
|
|
|
|
|
|
static enum AVPixelFormat get_pix_fmt_internal(const char *name)
|
|
|
|
{
|
|
|
|
enum AVPixelFormat pix_fmt;
|
|
|
|
|
|
|
|
for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
|
|
|
|
if (av_pix_fmt_descriptors[pix_fmt].name &&
|
|
|
|
(!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
|
|
|
|
av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
|
|
|
|
return pix_fmt;
|
|
|
|
|
|
|
|
return AV_PIX_FMT_NONE;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
|
|
|
|
av_pix_fmt_descriptors[pix_fmt].name : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if HAVE_BIGENDIAN
|
|
|
|
# define X_NE(be, le) be
|
|
|
|
#else
|
|
|
|
# define X_NE(be, le) le
|
|
|
|
#endif
|
|
|
|
|
|
|
|
enum AVPixelFormat av_get_pix_fmt(const char *name)
|
|
|
|
{
|
|
|
|
enum AVPixelFormat pix_fmt;
|
|
|
|
|
|
|
|
if (!strcmp(name, "rgb32"))
|
|
|
|
name = X_NE("argb", "bgra");
|
|
|
|
else if (!strcmp(name, "bgr32"))
|
|
|
|
name = X_NE("abgr", "rgba");
|
|
|
|
|
|
|
|
pix_fmt = get_pix_fmt_internal(name);
|
|
|
|
if (pix_fmt == AV_PIX_FMT_NONE) {
|
|
|
|
char name2[32];
|
|
|
|
|
|
|
|
snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
|
|
|
|
pix_fmt = get_pix_fmt_internal(name2);
|
|
|
|
}
|
|
|
|
|
|
|
|
return pix_fmt;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
|
|
|
|
{
|
|
|
|
int c, bits = 0;
|
|
|
|
int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
|
|
|
|
|
|
|
|
for (c = 0; c < pixdesc->nb_components; c++) {
|
|
|
|
int s = c == 1 || c == 2 ? 0 : log2_pixels;
|
|
|
|
bits += pixdesc->comp[c].depth << s;
|
|
|
|
}
|
|
|
|
|
|
|
|
return bits >> log2_pixels;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
|
|
|
|
{
|
|
|
|
int c, bits = 0;
|
|
|
|
int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
|
|
|
|
int steps[4] = {0};
|
|
|
|
|
|
|
|
for (c = 0; c < pixdesc->nb_components; c++) {
|
|
|
|
const AVComponentDescriptor *comp = &pixdesc->comp[c];
|
|
|
|
int s = c == 1 || c == 2 ? 0 : log2_pixels;
|
|
|
|
steps[comp->plane] = comp->step << s;
|
|
|
|
}
|
|
|
|
for (c = 0; c < 4; c++)
|
|
|
|
bits += steps[c];
|
|
|
|
|
|
|
|
if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM))
|
|
|
|
bits *= 8;
|
|
|
|
|
|
|
|
return bits >> log2_pixels;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *av_get_pix_fmt_string(char *buf, int buf_size,
|
|
|
|
enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
/* print header */
|
|
|
|
if (pix_fmt < 0) {
|
|
|
|
snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
|
|
|
|
} else {
|
|
|
|
const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
|
|
|
|
snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
|
|
|
|
pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
|
|
|
|
}
|
|
|
|
|
|
|
|
return buf;
|
|
|
|
}
|
|
|
|
|
|
|
|
const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
|
|
|
|
return NULL;
|
|
|
|
return &av_pix_fmt_descriptors[pix_fmt];
|
|
|
|
}
|
|
|
|
|
|
|
|
const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
|
|
|
|
{
|
|
|
|
if (!prev)
|
|
|
|
return &av_pix_fmt_descriptors[0];
|
|
|
|
while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) {
|
|
|
|
prev++;
|
|
|
|
if (prev->name)
|
|
|
|
return prev;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
|
|
|
|
{
|
|
|
|
if (desc < av_pix_fmt_descriptors ||
|
|
|
|
desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
|
|
|
|
return AV_PIX_FMT_NONE;
|
|
|
|
|
|
|
|
return desc - av_pix_fmt_descriptors;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
|
|
|
|
int *h_shift, int *v_shift)
|
|
|
|
{
|
|
|
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
|
|
|
if (!desc)
|
|
|
|
return AVERROR(ENOSYS);
|
|
|
|
*h_shift = desc->log2_chroma_w;
|
|
|
|
*v_shift = desc->log2_chroma_h;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
|
|
|
int i, planes[4] = { 0 }, ret = 0;
|
|
|
|
|
|
|
|
if (!desc)
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
|
|
|
|
for (i = 0; i < desc->nb_components; i++)
|
|
|
|
planes[desc->comp[i].plane] = 1;
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
|
|
|
|
ret += planes[i];
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
|
|
|
char name[16];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (!desc || strlen(desc->name) < 2)
|
|
|
|
return AV_PIX_FMT_NONE;
|
|
|
|
av_strlcpy(name, desc->name, sizeof(name));
|
|
|
|
i = strlen(name) - 2;
|
|
|
|
if (strcmp(name + i, "be") && strcmp(name + i, "le"))
|
|
|
|
return AV_PIX_FMT_NONE;
|
|
|
|
|
|
|
|
name[i] ^= 'b' ^ 'l';
|
|
|
|
|
|
|
|
return get_pix_fmt_internal(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
#define FF_COLOR_NA -1
|
|
|
|
#define FF_COLOR_RGB 0 /**< RGB color space */
|
|
|
|
#define FF_COLOR_GRAY 1 /**< gray color space */
|
|
|
|
#define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
|
|
|
|
#define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
|
|
|
|
#define FF_COLOR_XYZ 4
|
|
|
|
|
|
|
|
#define pixdesc_has_alpha(pixdesc) \
|
|
|
|
((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA)
|
|
|
|
|
|
|
|
|
|
|
|
static int get_color_type(const AVPixFmtDescriptor *desc) {
|
|
|
|
if (desc->flags & AV_PIX_FMT_FLAG_PAL)
|
|
|
|
return FF_COLOR_RGB;
|
|
|
|
|
|
|
|
if(desc->nb_components == 1 || desc->nb_components == 2)
|
|
|
|
return FF_COLOR_GRAY;
|
|
|
|
|
|
|
|
if (desc->name) {
|
|
|
|
if (av_strstart(desc->name, "yuvj", NULL))
|
|
|
|
return FF_COLOR_YUV_JPEG;
|
|
|
|
|
|
|
|
if (av_strstart(desc->name, "xyz", NULL))
|
|
|
|
return FF_COLOR_XYZ;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(desc->flags & AV_PIX_FMT_FLAG_RGB)
|
|
|
|
return FF_COLOR_RGB;
|
|
|
|
|
|
|
|
if(desc->nb_components == 0)
|
|
|
|
return FF_COLOR_NA;
|
|
|
|
|
|
|
|
return FF_COLOR_YUV;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int get_pix_fmt_depth(int *min, int *max, enum AVPixelFormat pix_fmt)
|
|
|
|
{
|
|
|
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (!desc || !desc->nb_components) {
|
|
|
|
*min = *max = 0;
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
*min = INT_MAX, *max = -INT_MAX;
|
|
|
|
for (i = 0; i < desc->nb_components; i++) {
|
|
|
|
*min = FFMIN(desc->comp[i].depth, *min);
|
|
|
|
*max = FFMAX(desc->comp[i].depth, *max);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
|
|
|
|
enum AVPixelFormat src_pix_fmt,
|
|
|
|
unsigned *lossp, unsigned consider)
|
|
|
|
{
|
|
|
|
const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt);
|
|
|
|
const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt);
|
|
|
|
int src_color, dst_color;
|
|
|
|
int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth;
|
|
|
|
int ret, loss, i, nb_components;
|
|
|
|
int score = INT_MAX - 1;
|
|
|
|
|
|
|
|
if (!src_desc || !dst_desc)
|
|
|
|
return -4;
|
|
|
|
|
|
|
|
if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) ||
|
|
|
|
(dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
|
|
|
|
if (dst_pix_fmt == src_pix_fmt)
|
|
|
|
return -1;
|
|
|
|
else
|
|
|
|
return -2;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* compute loss */
|
|
|
|
*lossp = loss = 0;
|
|
|
|
|
|
|
|
if (dst_pix_fmt == src_pix_fmt)
|
|
|
|
return INT_MAX;
|
|
|
|
|
|
|
|
if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0)
|
|
|
|
return -3;
|
|
|
|
if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0)
|
|
|
|
return -3;
|
|
|
|
|
|
|
|
src_color = get_color_type(src_desc);
|
|
|
|
dst_color = get_color_type(dst_desc);
|
|
|
|
if (dst_pix_fmt == AV_PIX_FMT_PAL8)
|
|
|
|
nb_components = FFMIN(src_desc->nb_components, 4);
|
|
|
|
else
|
|
|
|
nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components);
|
|
|
|
|
|
|
|
for (i = 0; i < nb_components; i++) {
|
|
|
|
int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1);
|
lavu/pixdesc: favour formats where depth and subsampling exactly match
Since introducing the various packed formats used by VAAPI (and p012),
we've noticed that there's actually a gap in how
av_find_best_pix_fmt_of_2 works. It doesn't actually assign any value
to having the same bit depth as the source format, when comparing
against formats with a higher bit depth. This usually doesn't matter,
because av_get_padded_bits_per_pixel() will account for it.
However, as many of these formats use padding internally, we find that
av_get_padded_bits_per_pixel() actually returns the same value for the
10 bit, 12 bit, 16 bit flavours, etc. In these tied situations, we end
up just picking the first of the two provided formats, even if the
second one should be preferred because it matches the actual bit depth.
This bug already existed if you tried to compare yuv420p10 against p016
and p010, for example, but it simply hadn't come up before so we never
noticed.
But now, we actually got a situation in the VAAPI VP9 decoder where it
offers both p010 and p012 because Profile 3 could be either depth and
ends up picking p012 for 10 bit content due to the ordering of the
testing.
In addition, in the process of testing the fix, I realised we have the
same gap when it comes to chroma subsampling - we do not favour a
format that has exactly the same subsampling vs one with less
subsampling when all else is equal.
To fix this, I'm introducing a small score penalty if the bit depth or
subsampling doesn't exactly match the source format. This will break
the tie in favour of the format with the exact match, but not offset
any of the other scoring penalties we already have.
I have added a set of tests around these formats which will fail
without this fix.
2 years ago
|
|
|
int depth_delta = src_desc->comp[i].depth - 1 - depth_minus1;
|
|
|
|
if (depth_delta > 0 && (consider & FF_LOSS_DEPTH)) {
|
|
|
|
loss |= FF_LOSS_DEPTH;
|
|
|
|
score -= 65536 >> depth_minus1;
|
lavu/pixdesc: favour formats where depth and subsampling exactly match
Since introducing the various packed formats used by VAAPI (and p012),
we've noticed that there's actually a gap in how
av_find_best_pix_fmt_of_2 works. It doesn't actually assign any value
to having the same bit depth as the source format, when comparing
against formats with a higher bit depth. This usually doesn't matter,
because av_get_padded_bits_per_pixel() will account for it.
However, as many of these formats use padding internally, we find that
av_get_padded_bits_per_pixel() actually returns the same value for the
10 bit, 12 bit, 16 bit flavours, etc. In these tied situations, we end
up just picking the first of the two provided formats, even if the
second one should be preferred because it matches the actual bit depth.
This bug already existed if you tried to compare yuv420p10 against p016
and p010, for example, but it simply hadn't come up before so we never
noticed.
But now, we actually got a situation in the VAAPI VP9 decoder where it
offers both p010 and p012 because Profile 3 could be either depth and
ends up picking p012 for 10 bit content due to the ordering of the
testing.
In addition, in the process of testing the fix, I realised we have the
same gap when it comes to chroma subsampling - we do not favour a
format that has exactly the same subsampling vs one with less
subsampling when all else is equal.
To fix this, I'm introducing a small score penalty if the bit depth or
subsampling doesn't exactly match the source format. This will break
the tie in favour of the format with the exact match, but not offset
any of the other scoring penalties we already have.
I have added a set of tests around these formats which will fail
without this fix.
2 years ago
|
|
|
} else if (depth_delta < 0 && (consider & FF_LOSS_EXCESS_DEPTH)) {
|
|
|
|
// Favour formats where bit depth exactly matches. If all other
|
|
|
|
// scoring is equal, we'd rather use the bit depth that most closely
|
|
|
|
// matches the source.
|
|
|
|
loss |= FF_LOSS_EXCESS_DEPTH;
|
|
|
|
score += depth_delta;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (consider & FF_LOSS_RESOLUTION) {
|
|
|
|
if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) {
|
|
|
|
loss |= FF_LOSS_RESOLUTION;
|
|
|
|
score -= 256 << dst_desc->log2_chroma_w;
|
|
|
|
}
|
|
|
|
if (dst_desc->log2_chroma_h > src_desc->log2_chroma_h) {
|
|
|
|
loss |= FF_LOSS_RESOLUTION;
|
|
|
|
score -= 256 << dst_desc->log2_chroma_h;
|
|
|
|
}
|
|
|
|
// don't favor 422 over 420 if downsampling is needed, because 420 has much better support on the decoder side
|
|
|
|
if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 0 &&
|
|
|
|
dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 0 ) {
|
|
|
|
score += 512;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
lavu/pixdesc: favour formats where depth and subsampling exactly match
Since introducing the various packed formats used by VAAPI (and p012),
we've noticed that there's actually a gap in how
av_find_best_pix_fmt_of_2 works. It doesn't actually assign any value
to having the same bit depth as the source format, when comparing
against formats with a higher bit depth. This usually doesn't matter,
because av_get_padded_bits_per_pixel() will account for it.
However, as many of these formats use padding internally, we find that
av_get_padded_bits_per_pixel() actually returns the same value for the
10 bit, 12 bit, 16 bit flavours, etc. In these tied situations, we end
up just picking the first of the two provided formats, even if the
second one should be preferred because it matches the actual bit depth.
This bug already existed if you tried to compare yuv420p10 against p016
and p010, for example, but it simply hadn't come up before so we never
noticed.
But now, we actually got a situation in the VAAPI VP9 decoder where it
offers both p010 and p012 because Profile 3 could be either depth and
ends up picking p012 for 10 bit content due to the ordering of the
testing.
In addition, in the process of testing the fix, I realised we have the
same gap when it comes to chroma subsampling - we do not favour a
format that has exactly the same subsampling vs one with less
subsampling when all else is equal.
To fix this, I'm introducing a small score penalty if the bit depth or
subsampling doesn't exactly match the source format. This will break
the tie in favour of the format with the exact match, but not offset
any of the other scoring penalties we already have.
I have added a set of tests around these formats which will fail
without this fix.
2 years ago
|
|
|
if (consider & FF_LOSS_EXCESS_RESOLUTION) {
|
|
|
|
// Favour formats where chroma subsampling exactly matches. If all other
|
|
|
|
// scoring is equal, we'd rather use the subsampling that most closely
|
|
|
|
// matches the source.
|
|
|
|
if (dst_desc->log2_chroma_w < src_desc->log2_chroma_w) {
|
|
|
|
loss |= FF_LOSS_EXCESS_RESOLUTION;
|
|
|
|
score -= 1 << (src_desc->log2_chroma_w - dst_desc->log2_chroma_w);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (dst_desc->log2_chroma_h < src_desc->log2_chroma_h) {
|
|
|
|
loss |= FF_LOSS_EXCESS_RESOLUTION;
|
|
|
|
score -= 1 << (src_desc->log2_chroma_h - dst_desc->log2_chroma_h);
|
|
|
|
}
|
|
|
|
|
|
|
|
// don't favour 411 over 420, because 420 has much better support on the
|
|
|
|
// decoder side.
|
|
|
|
if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 2 &&
|
|
|
|
dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 2) {
|
|
|
|
score += 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(consider & FF_LOSS_COLORSPACE)
|
|
|
|
switch(dst_color) {
|
|
|
|
case FF_COLOR_RGB:
|
|
|
|
if (src_color != FF_COLOR_RGB &&
|
|
|
|
src_color != FF_COLOR_GRAY)
|
|
|
|
loss |= FF_LOSS_COLORSPACE;
|
|
|
|
break;
|
|
|
|
case FF_COLOR_GRAY:
|
|
|
|
if (src_color != FF_COLOR_GRAY)
|
|
|
|
loss |= FF_LOSS_COLORSPACE;
|
|
|
|
break;
|
|
|
|
case FF_COLOR_YUV:
|
|
|
|
if (src_color != FF_COLOR_YUV)
|
|
|
|
loss |= FF_LOSS_COLORSPACE;
|
|
|
|
break;
|
|
|
|
case FF_COLOR_YUV_JPEG:
|
|
|
|
if (src_color != FF_COLOR_YUV_JPEG &&
|
|
|
|
src_color != FF_COLOR_YUV &&
|
|
|
|
src_color != FF_COLOR_GRAY)
|
|
|
|
loss |= FF_LOSS_COLORSPACE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
/* fail safe test */
|
|
|
|
if (src_color != dst_color)
|
|
|
|
loss |= FF_LOSS_COLORSPACE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(loss & FF_LOSS_COLORSPACE)
|
|
|
|
score -= (nb_components * 65536) >> FFMIN(dst_desc->comp[0].depth - 1, src_desc->comp[0].depth - 1);
|
|
|
|
|
|
|
|
if (dst_color == FF_COLOR_GRAY &&
|
|
|
|
src_color != FF_COLOR_GRAY && (consider & FF_LOSS_CHROMA)) {
|
|
|
|
loss |= FF_LOSS_CHROMA;
|
|
|
|
score -= 2 * 65536;
|
|
|
|
}
|
|
|
|
if (!pixdesc_has_alpha(dst_desc) && (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))) {
|
|
|
|
loss |= FF_LOSS_ALPHA;
|
|
|
|
score -= 65536;
|
|
|
|
}
|
|
|
|
if (dst_pix_fmt == AV_PIX_FMT_PAL8 && (consider & FF_LOSS_COLORQUANT) &&
|
|
|
|
(src_pix_fmt != AV_PIX_FMT_PAL8 && (src_color != FF_COLOR_GRAY || (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))))) {
|
|
|
|
loss |= FF_LOSS_COLORQUANT;
|
|
|
|
score -= 65536;
|
|
|
|
}
|
|
|
|
|
|
|
|
*lossp = loss;
|
|
|
|
return score;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt,
|
|
|
|
enum AVPixelFormat src_pix_fmt,
|
|
|
|
int has_alpha)
|
|
|
|
{
|
|
|
|
int loss;
|
|
|
|
int ret = get_pix_fmt_score(dst_pix_fmt, src_pix_fmt, &loss, has_alpha ? ~0 : ~FF_LOSS_ALPHA);
|
|
|
|
if (ret < 0)
|
|
|
|
return ret;
|
|
|
|
return loss;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
|
|
|
|
enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
|
|
|
|
{
|
|
|
|
enum AVPixelFormat dst_pix_fmt;
|
|
|
|
int loss1, loss2, loss_mask;
|
|
|
|
const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1);
|
|
|
|
const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2);
|
|
|
|
int score1, score2;
|
|
|
|
|
|
|
|
if (!desc1) {
|
|
|
|
dst_pix_fmt = dst_pix_fmt2;
|
|
|
|
} else if (!desc2) {
|
|
|
|
dst_pix_fmt = dst_pix_fmt1;
|
|
|
|
} else {
|
|
|
|
loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */
|
|
|
|
if(!has_alpha)
|
|
|
|
loss_mask &= ~FF_LOSS_ALPHA;
|
|
|
|
|
|
|
|
score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask);
|
|
|
|
score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask);
|
|
|
|
|
|
|
|
if (score1 == score2) {
|
|
|
|
if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) {
|
|
|
|
dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1;
|
|
|
|
} else {
|
|
|
|
dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (loss_ptr)
|
|
|
|
*loss_ptr = av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
|
|
|
|
return dst_pix_fmt;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_color_range_name(enum AVColorRange range)
|
|
|
|
{
|
|
|
|
return (unsigned) range < AVCOL_RANGE_NB ?
|
|
|
|
color_range_names[range] : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_color_range_from_name(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) {
|
|
|
|
if (av_strstart(name, color_range_names[i], NULL))
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_color_primaries_name(enum AVColorPrimaries primaries)
|
|
|
|
{
|
|
|
|
return (unsigned) primaries < AVCOL_PRI_NB ?
|
|
|
|
color_primaries_names[primaries] : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_color_primaries_from_name(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) {
|
|
|
|
if (!color_primaries_names[i])
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (av_strstart(name, color_primaries_names[i], NULL))
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
|
|
|
|
{
|
|
|
|
return (unsigned) transfer < AVCOL_TRC_NB ?
|
|
|
|
color_transfer_names[transfer] : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_color_transfer_from_name(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) {
|
|
|
|
if (!color_transfer_names[i])
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (av_strstart(name, color_transfer_names[i], NULL))
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_color_space_name(enum AVColorSpace space)
|
|
|
|
{
|
|
|
|
return (unsigned) space < AVCOL_SPC_NB ?
|
|
|
|
color_space_names[space] : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_color_space_from_name(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) {
|
|
|
|
if (!color_space_names[i])
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (av_strstart(name, color_space_names[i], NULL))
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *av_chroma_location_name(enum AVChromaLocation location)
|
|
|
|
{
|
|
|
|
return (unsigned) location < AVCHROMA_LOC_NB ?
|
|
|
|
chroma_location_names[location] : NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_chroma_location_from_name(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) {
|
|
|
|
if (!chroma_location_names[i])
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (av_strstart(name, chroma_location_names[i], NULL))
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
}
|
|
|
|
|
|
|
|
int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
|
|
|
|
{
|
|
|
|
if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB)
|
|
|
|
return AVERROR(EINVAL);
|
|
|
|
pos--;
|
|
|
|
|
|
|
|
*xpos = (pos&1) * 128;
|
|
|
|
*ypos = ((pos>>1)^(pos<4)) * 128;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos)
|
|
|
|
{
|
|
|
|
int pos, xout, yout;
|
|
|
|
|
|
|
|
for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) {
|
|
|
|
if (av_chroma_location_enum_to_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos)
|
|
|
|
return pos;
|
|
|
|
}
|
|
|
|
return AVCHROMA_LOC_UNSPECIFIED;
|
|
|
|
}
|