diff options
author | wm4 <wm4@nowhere> | 2015-12-24 16:42:21 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-12-24 16:42:21 +0100 |
commit | 3973a953df7516afbb21f4b95dde2161a67e5d84 (patch) | |
tree | f854e2be2f7e2bad0aced53a2b1c2f37fe17284d /video/img_format.c | |
parent | 082c23515f6e83381ff5220128fa4e3aecbb43d3 (diff) | |
download | mpv-3973a953df7516afbb21f4b95dde2161a67e5d84.tar.bz2 mpv-3973a953df7516afbb21f4b95dde2161a67e5d84.tar.xz |
sub: find GBRP format automatically when rendering to RGB
This removes the need to define IMGFMT_GBRAP, which fixes compilation
with the current Libav release.
This also makes it automatically pick up a GBRP format with the same bit
width. (Unfortunately, it seems libswscale does not support conversion
to AV_PIX_FMT_GBRAP16, so our code falls back to 8 bit, removing
precision for video covered by subtitles in cases this code is used.)
Also, when the source video is e.g. 10 bit YUV, upsample to 16 bit.
Whether this is good or bad, it fixes behavior with alpha. Although I'm
not sure if the alpha range is really correct ([0,2^16-1] vs.
[0,255*256]). Keep in mind that libswscale doesn't even agree with the
way we do it.
Diffstat (limited to 'video/img_format.c')
-rw-r--r-- | video/img_format.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/video/img_format.c b/video/img_format.c index 42b4df45ab..3535807993 100644 --- a/video/img_format.c +++ b/video/img_format.c @@ -275,12 +275,12 @@ struct mp_imgfmt_desc mp_imgfmt_get_desc(int mpfmt) return desc; } -// Find a format that is MP_IMGFLAG_YUV_P with the following configuration. -int mp_imgfmt_find_yuv_planar(int xs, int ys, int planes, int component_bits) +// Find a format that has the given flags set with the following configuration. +int mp_imgfmt_find(int xs, int ys, int planes, int component_bits, int flags) { for (int n = IMGFMT_START + 1; n < IMGFMT_END; n++) { struct mp_imgfmt_desc desc = mp_imgfmt_get_desc(n); - if (desc.id && (desc.flags & MP_IMGFLAG_YUV_P)) { + if (desc.id && ((desc.flags & flags) == flags)) { if (desc.num_planes == planes && desc.chroma_xs == xs && desc.chroma_ys == ys && desc.plane_bits == component_bits && (desc.flags & MP_IMGFLAG_NE)) |