summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-03-09 22:47:33 +0100
committerwm4 <wm4@nowhere>2015-03-09 22:47:33 +0100
commitcfa44f4e9077d712be5c1c3cf9a4d7bbe79e605e (patch)
tree549d8be04ac7a9c69a7b7838dddf25d5627e3a82
parentb9307b71753f205baaac99f8e803774c7efdebeb (diff)
downloadmpv-cfa44f4e9077d712be5c1c3cf9a4d7bbe79e605e.tar.bz2
mpv-cfa44f4e9077d712be5c1c3cf9a4d7bbe79e605e.tar.xz
vo_opengl: move minor helper to common code
The generic image format code should cary most of the "knowledge" about image formats.
-rw-r--r--video/img_format.c3
-rw-r--r--video/img_format.h2
-rw-r--r--video/out/gl_video.c11
3 files changed, 6 insertions, 10 deletions
diff --git a/video/img_format.c b/video/img_format.c
index f717ff9c1e..5451dd9ad1 100644
--- a/video/img_format.c
+++ b/video/img_format.c
@@ -249,6 +249,9 @@ struct mp_imgfmt_desc mp_imgfmt_get_desc(int mpfmt)
desc.plane_bits = 8; // usually restricted to 8 bit; may change
}
+ if (desc.chroma_xs || desc.chroma_ys)
+ desc.flags |= MP_IMGFLAG_SUBSAMPLED;
+
return desc;
}
diff --git a/video/img_format.h b/video/img_format.h
index 7d0762c3ce..e734185045 100644
--- a/video/img_format.h
+++ b/video/img_format.h
@@ -66,6 +66,8 @@
#define MP_IMGFLAG_PAL 0x8000
// planes don't contain real data; planes[3] contains an API-specific pointer
#define MP_IMGFLAG_HWACCEL 0x10000
+// Set if the chroma resolution is lower than luma resolution. Unset for non-YUV.
+#define MP_IMGFLAG_SUBSAMPLED 0x20000
// Exactly one of these bits is set in mp_imgfmt_desc.flags
#define MP_IMGFLAG_COLOR_CLASS_MASK \
diff --git a/video/out/gl_video.c b/video/out/gl_video.c
index 8654242bcb..5ddb6c5cad 100644
--- a/video/out/gl_video.c
+++ b/video/out/gl_video.c
@@ -880,15 +880,6 @@ static void shader_setup_scaler(char **shader, struct scaler *scaler, int pass)
}
}
-// return false if RGB or 4:4:4 YUV
-static bool input_is_subsampled(struct gl_video *p)
-{
- for (int i = 0; i < p->plane_count; i++)
- if (p->image_desc.xs[i] || p->image_desc.ys[i])
- return true;
- return false;
-}
-
static void compile_shaders(struct gl_video *p)
{
GL *gl = p->gl;
@@ -1092,7 +1083,7 @@ static void compile_shaders(struct gl_video *p)
if (p->plane_count > 1 && !trivial_scaling)
use_indirect = true;
- if (input_is_subsampled(p)) {
+ if (p->image_desc.flags & MP_IMGFLAG_SUBSAMPLED) {
shader_setup_scaler(&header_conv, &p->scalers[1], -1);
} else {
// Force using the normal scaler on chroma. If the "indirect" stage is