summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-03-28 21:02:48 +0100
committerwm4 <wm4@nowhere>2013-03-28 21:46:17 +0100
commit4221417875a67a3040de6fc01ba8c20b286855df (patch)
treeea24e7c7e93d558ede20a40a3aa8e6e5f4288a45
parent120d6bf57cbed1be4d909b0633908fc32fed7013 (diff)
downloadmpv-4221417875a67a3040de6fc01ba8c20b286855df.tar.bz2
mpv-4221417875a67a3040de6fc01ba8c20b286855df.tar.xz
gl_video: support NV21 too
-rw-r--r--video/out/gl_video.c5
-rw-r--r--video/out/gl_video_shaders.glsl3
2 files changed, 6 insertions, 2 deletions
diff --git a/video/out/gl_video.c b/video/out/gl_video.c
index 18991923f4..8f69c37ccd 100644
--- a/video/out/gl_video.c
+++ b/video/out/gl_video.c
@@ -690,13 +690,14 @@ static void compile_shaders(struct gl_video *p)
bool convert_input_to_linear = !p->is_linear_rgb &&
(p->opts.srgb || p->use_lut_3d);
- if (p->image_format == IMGFMT_NV12) {
+ if (p->image_format == IMGFMT_NV12 || p->image_format == IMGFMT_NV21) {
shader_def(&header_conv, "USE_CONV", "CONV_NV12");
} else if (p->plane_count > 1) {
shader_def(&header_conv, "USE_CONV", "CONV_PLANAR");
}
shader_def_opt(&header_conv, "USE_GBRP", p->image_format == IMGFMT_GBRP);
+ shader_def_opt(&header_conv, "USE_SWAP_UV", p->image_format == IMGFMT_NV21);
shader_def_opt(&header_conv, "USE_YGRAY", p->is_yuv && p->plane_count == 1);
shader_def_opt(&header_conv, "USE_COLORMATRIX", p->is_yuv);
shader_def_opt(&header_conv, "USE_LINEAR_CONV", convert_input_to_linear);
@@ -1609,7 +1610,7 @@ static bool init_format(int fmt, struct gl_video *init)
}
// YUV/half-packed
- if (!supported && fmt == IMGFMT_NV12) {
+ if (!supported && (fmt == IMGFMT_NV12 || fmt == IMGFMT_NV21)) {
supported = true;
plane_format[0] = IMGFMT_Y8;
plane_format[1] = IMGFMT_YA8;
diff --git a/video/out/gl_video_shaders.glsl b/video/out/gl_video_shaders.glsl
index 4e2ccdde37..51f18de377 100644
--- a/video/out/gl_video_shaders.glsl
+++ b/video/out/gl_video_shaders.glsl
@@ -332,6 +332,9 @@ void main() {
#ifdef USE_GBRP
color.gbr = color;
#endif
+#ifdef USE_SWAP_UV
+ color.rbg = color;
+#endif
#ifdef USE_YGRAY
// NOTE: actually slightly wrong for 16 bit input video, and completely
// wrong for 9/10 bit input