From 377532f2f50df1436e44e1533a8df542a8fa0bc3 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Wed, 8 Jan 2025 21:47:32 +0100 Subject: [PATCH] onscreen/native: Set default color encoding and range values In order to ensure consistent behavior with the composited path as well as across different KMS drivers. In the future we'll want to use other values as well, requested by client via the upcoming color representation protocol. Note that right now KMS drivers default to different values. Most use BT709 and narrow range, notably Intel and AMD, but some others do not. BT709/narrow is arguably a much better default than BT601/narrow as the former is used for most contemporary video content and the later more for still images. Part-of: --- src/backends/native/meta-onscreen-native.c | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c index 8006b9f52..cbb4c1156 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c @@ -462,6 +462,32 @@ apply_transform (MetaCrtcKms *crtc_kms, hw_transform); } +static void +apply_color_encoding (MetaKmsPlaneAssignment *kms_plane_assignment, + MetaKmsPlane *kms_plane) +{ + if (!meta_kms_plane_is_color_encoding_handled (kms_plane, + META_KMS_PLANE_YCBCR_COLOR_ENCODING_BT709)) + return; + + meta_kms_plane_update_set_color_encoding (kms_plane, + kms_plane_assignment, + META_KMS_PLANE_YCBCR_COLOR_ENCODING_BT709); +} + +static void +apply_color_range (MetaKmsPlaneAssignment *kms_plane_assignment, + MetaKmsPlane *kms_plane) +{ + if (!meta_kms_plane_is_color_range_handled (kms_plane, + META_KMS_PLANE_YCBCR_COLOR_RANGE_LIMITED)) + return; + + meta_kms_plane_update_set_color_range (kms_plane, + kms_plane_assignment, + META_KMS_PLANE_YCBCR_COLOR_RANGE_LIMITED); +} + static MetaKmsPlaneAssignment * assign_primary_plane (MetaCrtcKms *crtc_kms, MetaDrmBuffer *buffer, @@ -501,6 +527,8 @@ assign_primary_plane (MetaCrtcKms *crtc_kms, *dst_rect, flags); apply_transform (crtc_kms, plane_assignment, primary_kms_plane); + apply_color_encoding (plane_assignment, primary_kms_plane); + apply_color_range (plane_assignment, primary_kms_plane); return plane_assignment; }