From f24ba544cd03261f25dab8ab564d832c28233079 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 12 Dec 2015 14:47:30 +0100 Subject: vo_opengl: enable brightness/contrast controls for RGB Why not. Also, instead of disabling hue/saturation for RGB, just don't apply them. (They don't make sense for conversion matrixes other than YUV, but I can't be bothered to keep the fine-grained disabling of UI controls either.) --- video/csputils.c | 21 +++++++++++++-------- video/out/opengl/video.c | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'video') diff --git a/video/csputils.c b/video/csputils.c index fb9d971517..d6e80e0c16 100644 --- a/video/csputils.c +++ b/video/csputils.c @@ -652,14 +652,19 @@ void mp_get_csp_matrix(struct mp_csp_params *params, struct mp_cmat *m) abort(); }; - // Hue is equivalent to rotating input [U, V] subvector around the origin. - // Saturation scales [U, V]. - float huecos = params->gray ? 0 : params->saturation * cos(params->hue); - float huesin = params->gray ? 0 : params->saturation * sin(params->hue); - for (int i = 0; i < 3; i++) { - float u = m->m[i][1], v = m->m[i][2]; - m->m[i][1] = huecos * u - huesin * v; - m->m[i][2] = huesin * u + huecos * v; + if ((colorspace == MP_CSP_BT_601 || colorspace == MP_CSP_BT_709 || + colorspace == MP_CSP_SMPTE_240M || colorspace == MP_CSP_BT_2020_NC) + && !params->gray) + { + // Hue is equivalent to rotating input [U, V] subvector around the origin. + // Saturation scales [U, V]. + float huecos = params->saturation * cos(params->hue); + float huesin = params->saturation * sin(params->hue); + for (int i = 0; i < 3; i++) { + float u = m->m[i][1], v = m->m[i][2]; + m->m[i][1] = huecos * u - huesin * v; + m->m[i][2] = huesin * u + huecos * v; + } } // The values below are written in 0-255 scale - thus bring s into range. diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index ff4c7a25aa..d2fb4ac38c 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -753,7 +753,7 @@ static void init_video(struct gl_video *p) mp_image_params_guess_csp(&p->image_params); int eq_caps = MP_CSP_EQ_CAPS_GAMMA; - if (p->is_yuv && p->image_params.colorspace != MP_CSP_BT_2020_C) + if (p->image_params.colorspace != MP_CSP_BT_2020_C) eq_caps |= MP_CSP_EQ_CAPS_COLORMATRIX; if (p->image_desc.flags & MP_IMGFLAG_XYZ) eq_caps |= MP_CSP_EQ_CAPS_BRIGHTNESS; -- cgit v1.2.3