From 4304329d0c1f730d0a8dcc9de9c01ea8a0a17557 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Mon, 16 May 2022 20:30:49 -0700 Subject: [PATCH] libobs: Ignore lower six bits for P010 sources --- libobs/data/format_conversion.effect | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libobs/data/format_conversion.effect b/libobs/data/format_conversion.effect index 6bd66720b..5d6e4484c 100644 --- a/libobs/data/format_conversion.effect +++ b/libobs/data/format_conversion.effect @@ -651,7 +651,9 @@ float4 PSP010_SRGB_Reverse(VertTexPos frag_in) : TARGET { float y = image.Load(int3(frag_in.pos.xy, 0)).x; float2 cbcr = image1.Load(int3(frag_in.uv, 0)).xy; - float3 yuv = float3(y, cbcr); + float3 yuv_65535 = floor(float3(y, cbcr) * 65535. + 0.5); + float3 yuv_1023 = floor(yuv_65535 * 0.015625); + float3 yuv = yuv_1023 / 1023.; float3 rgb = YUV_to_RGB(yuv); rgb = srgb_nonlinear_to_linear(rgb); return float4(rgb, 1.); @@ -661,7 +663,9 @@ float4 PSP010_PQ_2020_709_Reverse(VertTexPos frag_in) : TARGET { float y = image.Load(int3(frag_in.pos.xy, 0)).x; float2 cbcr = image1.Load(int3(frag_in.uv, 0)).xy; - float3 yuv = float3(y, cbcr); + float3 yuv_65535 = floor(float3(y, cbcr) * 65535. + 0.5); + float3 yuv_1023 = floor(yuv_65535 * 0.015625); + float3 yuv = yuv_1023 / 1023.; float3 pq = YUV_to_RGB(yuv); float3 hdr2020 = st2084_to_linear(pq) * maximum_over_sdr_white_nits; float3 rgb = rec2020_to_rec709(hdr2020); @@ -672,7 +676,9 @@ float4 PSP010_HLG_2020_709_Reverse(VertTexPos frag_in) : TARGET { float y = image.Load(int3(frag_in.pos.xy, 0)).x; float2 cbcr = image1.Load(int3(frag_in.uv, 0)).xy; - float3 yuv = float3(y, cbcr); + float3 yuv_65535 = floor(float3(y, cbcr) * 65535. + 0.5); + float3 yuv_1023 = floor(yuv_65535 * 0.015625); + float3 yuv = yuv_1023 / 1023.; float3 hlg = YUV_to_RGB(yuv); float3 hdr2020 = hlg_to_linear(hlg, hlg_exponent) * maximum_over_sdr_white_nits; float3 rgb = rec2020_to_rec709(hdr2020);