From 4221417875a67a3040de6fc01ba8c20b286855df Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 28 Mar 2013 21:02:48 +0100 Subject: [PATCH] gl_video: support NV21 too --- video/out/gl_video.c | 5 +++-- video/out/gl_video_shaders.glsl | 3 +++ 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