mirror of https://github.com/mpv-player/mpv
img_format: add RGB30 format
FFmpeg does not support this from what I can see. This makes supporting it a bit awkward. Later commits use this format.
This commit is contained in:
parent
62bd8da490
commit
8f5979c5d8
|
@ -36,6 +36,7 @@ struct mp_imgfmt_entry {
|
||||||
static const struct mp_imgfmt_entry mp_imgfmt_list[] = {
|
static const struct mp_imgfmt_entry mp_imgfmt_list[] = {
|
||||||
// not in ffmpeg
|
// not in ffmpeg
|
||||||
{"vdpau_output", IMGFMT_VDPAU_OUTPUT},
|
{"vdpau_output", IMGFMT_VDPAU_OUTPUT},
|
||||||
|
{"rgb30", IMGFMT_RGB30},
|
||||||
// FFmpeg names have an annoying "_vld" suffix
|
// FFmpeg names have an annoying "_vld" suffix
|
||||||
{"videotoolbox", IMGFMT_VIDEOTOOLBOX},
|
{"videotoolbox", IMGFMT_VIDEOTOOLBOX},
|
||||||
{"vaapi", IMGFMT_VAAPI},
|
{"vaapi", IMGFMT_VAAPI},
|
||||||
|
@ -107,6 +108,19 @@ static struct mp_imgfmt_desc mp_only_imgfmt_desc(int mpfmt)
|
||||||
.flags = MP_IMGFLAG_BE | MP_IMGFLAG_LE | MP_IMGFLAG_RGB |
|
.flags = MP_IMGFLAG_BE | MP_IMGFLAG_LE | MP_IMGFLAG_RGB |
|
||||||
MP_IMGFLAG_HWACCEL,
|
MP_IMGFLAG_HWACCEL,
|
||||||
};
|
};
|
||||||
|
case IMGFMT_RGB30:
|
||||||
|
return (struct mp_imgfmt_desc) {
|
||||||
|
.id = mpfmt,
|
||||||
|
.avformat = AV_PIX_FMT_NONE,
|
||||||
|
.flags = MP_IMGFLAG_BYTE_ALIGNED | MP_IMGFLAG_NE | MP_IMGFLAG_RGB,
|
||||||
|
.num_planes = 1,
|
||||||
|
.align_x = 1,
|
||||||
|
.align_y = 1,
|
||||||
|
.bytes = {4},
|
||||||
|
.bpp = {32},
|
||||||
|
.plane_bits = 30,
|
||||||
|
.component_bits = 10,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return (struct mp_imgfmt_desc) {0};
|
return (struct mp_imgfmt_desc) {0};
|
||||||
}
|
}
|
||||||
|
@ -309,6 +323,9 @@ static bool validate_regular_imgfmt(const struct mp_regular_imgfmt *fmt)
|
||||||
|
|
||||||
enum mp_csp mp_imgfmt_get_forced_csp(int imgfmt)
|
enum mp_csp mp_imgfmt_get_forced_csp(int imgfmt)
|
||||||
{
|
{
|
||||||
|
if (imgfmt == IMGFMT_RGB30)
|
||||||
|
return MP_CSP_RGB;
|
||||||
|
|
||||||
enum AVPixelFormat pixfmt = imgfmt2pixfmt(imgfmt);
|
enum AVPixelFormat pixfmt = imgfmt2pixfmt(imgfmt);
|
||||||
const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(pixfmt);
|
const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(pixfmt);
|
||||||
|
|
||||||
|
@ -327,10 +344,13 @@ enum mp_csp mp_imgfmt_get_forced_csp(int imgfmt)
|
||||||
|
|
||||||
enum mp_component_type mp_imgfmt_get_component_type(int imgfmt)
|
enum mp_component_type mp_imgfmt_get_component_type(int imgfmt)
|
||||||
{
|
{
|
||||||
|
if (imgfmt == IMGFMT_RGB30)
|
||||||
|
return MP_COMPONENT_TYPE_UINT;
|
||||||
|
|
||||||
const AVPixFmtDescriptor *pixdesc =
|
const AVPixFmtDescriptor *pixdesc =
|
||||||
av_pix_fmt_desc_get(imgfmt2pixfmt(imgfmt));
|
av_pix_fmt_desc_get(imgfmt2pixfmt(imgfmt));
|
||||||
|
|
||||||
if (!pixdesc)
|
if (!pixdesc || (pixdesc->flags & AV_PIX_FMT_FLAG_HWACCEL))
|
||||||
return MP_COMPONENT_TYPE_UNKNOWN;
|
return MP_COMPONENT_TYPE_UNKNOWN;
|
||||||
|
|
||||||
#if LIBAVUTIL_VERSION_MICRO >= 100
|
#if LIBAVUTIL_VERSION_MICRO >= 100
|
||||||
|
|
|
@ -192,6 +192,9 @@ enum mp_imgfmt {
|
||||||
// Accessed with bit-shifts after endian-swapping the uint16_t pixel
|
// Accessed with bit-shifts after endian-swapping the uint16_t pixel
|
||||||
IMGFMT_RGB565, // 5r 6g 5b (MSB to LSB)
|
IMGFMT_RGB565, // 5r 6g 5b (MSB to LSB)
|
||||||
|
|
||||||
|
// Accessed with bit-shifts, uint32_t units.
|
||||||
|
IMGFMT_RGB30, // 2pad 10r 10g 10b (MSG to LSB)
|
||||||
|
|
||||||
// Hardware accelerated formats. Plane data points to special data
|
// Hardware accelerated formats. Plane data points to special data
|
||||||
// structures, instead of pixel data.
|
// structures, instead of pixel data.
|
||||||
IMGFMT_VDPAU, // VdpVideoSurface
|
IMGFMT_VDPAU, // VdpVideoSurface
|
||||||
|
|
Loading…
Reference in New Issue