From 9dc4154fecd9ef99b56b3e9e7534142df0ccae92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Sun, 22 Jan 2023 14:02:11 +0100 Subject: vo_gpu: improve XYZ conversion Fixes #4925 --- video/out/gpu/video.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'video/out') diff --git a/video/out/gpu/video.c b/video/out/gpu/video.c index 3f789b6046..df689b53c3 100644 --- a/video/out/gpu/video.c +++ b/video/out/gpu/video.c @@ -2333,7 +2333,7 @@ static void pass_convert_yuv(struct gl_video *p) // Pre-colormatrix input gamma correction if (cparams.color.space == MP_CSP_XYZ) - GLSL(color.rgb = pow(color.rgb, vec3(2.6));) // linear light + pass_linearize(p->sc, p->image_params.color.gamma); // We always explicitly normalize the range in pass_read_video cparams.input_bits = cparams.texture_bits = 0; @@ -2347,6 +2347,13 @@ static void pass_convert_yuv(struct gl_video *p) GLSL(color.rgb = mat3(colormatrix) * color.rgb + colormatrix_c;) + if (cparams.color.space == MP_CSP_XYZ) { + pass_delinearize(p->sc, p->image_params.color.gamma); + // mp_get_csp_matrix implicitly converts XYZ to DCI-P3 + p->image_params.color.space = MP_CSP_RGB; + p->image_params.color.primaries = MP_CSP_PRIM_DCI_P3; + } + if (p->image_params.color.space == MP_CSP_BT_2020_C) { // Conversion for C'rcY'cC'bc via the BT.2020 CL system: // C'bc = (B'-Y'c) / 1.9404 | C'bc <= 0 -- cgit v1.2.3