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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4204>
This commit is contained in:
Robert Mader 2025-01-08 21:47:32 +01:00 committed by Marge Bot
parent 5bb7a0f13e
commit 377532f2f5

View File

@ -462,6 +462,32 @@ apply_transform (MetaCrtcKms *crtc_kms,
hw_transform); 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 * static MetaKmsPlaneAssignment *
assign_primary_plane (MetaCrtcKms *crtc_kms, assign_primary_plane (MetaCrtcKms *crtc_kms,
MetaDrmBuffer *buffer, MetaDrmBuffer *buffer,
@ -501,6 +527,8 @@ assign_primary_plane (MetaCrtcKms *crtc_kms,
*dst_rect, *dst_rect,
flags); flags);
apply_transform (crtc_kms, plane_assignment, primary_kms_plane); 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; return plane_assignment;
} }