From 3fd1031c425204b8d92c69528277bfbd7912e8e7 Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Wed, 23 May 2018 16:02:50 +0200 Subject: Fix color space conversion of YUV video nodes YUV to RGB color conversion was not working, because the provided ColorSpace object was invalid. According to gl_renderer.cc, invalid color spaces should be treated as REC709. Task-number: QTBUG-68174 Change-Id: I1ad3b74ced4734e048256c075c953e9218ca6b6c Reviewed-by: Allan Sandfeld Jensen --- src/core/yuv_video_node.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/yuv_video_node.cpp b/src/core/yuv_video_node.cpp index ebde2e005..4a436d952 100644 --- a/src/core/yuv_video_node.cpp +++ b/src/core/yuv_video_node.cpp @@ -56,7 +56,7 @@ namespace QtWebEngineCore { class YUVVideoMaterialShader : public QSGMaterialShader { public: - YUVVideoMaterialShader(const gfx::ColorSpace &colorSpace) : m_colorSpace(colorSpace) + YUVVideoMaterialShader(const gfx::ColorSpace &colorSpace) { static const char *shaderHead = "varying mediump vec2 v_yaTexCoord;\n" @@ -80,9 +80,11 @@ public: " mediump vec3 rgb = DoColorConversion(yuv);\n" " gl_FragColor = vec4(rgb, 1.0) * alpha;\n" "}"; + // Invalid or unspecified color spaces should be treated as REC709. + gfx::ColorSpace src = colorSpace.IsValid() ? colorSpace : gfx::ColorSpace::CreateREC709(); gfx::ColorSpace dst = gfx::ColorSpace::CreateSRGB(); std::unique_ptr transform = - gfx::ColorTransform::NewColorTransform(m_colorSpace, dst, gfx::ColorTransform::Intent::INTENT_PERCEPTUAL); + gfx::ColorTransform::NewColorTransform(src, dst, gfx::ColorTransform::Intent::INTENT_PERCEPTUAL); QByteArray header(shaderHead); if (QOpenGLContext::currentContext()->isOpenGLES()) @@ -143,7 +145,6 @@ protected: m_id_opacity = program()->uniformLocation("alpha"); } - gfx::ColorSpace m_colorSpace; int m_id_matrix; int m_id_yaTexScale; int m_id_uvTexScale; -- cgit v1.2.3