1
0
Fork 0

backends: Move MetaOutputHdrMetadata from KmsConnector to Output

This makes it independent of the native backend and allows us to use it
in more places.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
This commit is contained in:
Sebastian Wick 2024-07-01 14:09:13 +02:00
parent fefcc6edec
commit 6dc9cab14b
5 changed files with 70 additions and 70 deletions

View file

@ -712,6 +712,70 @@ meta_tile_info_equal (MetaTileInfo *a,
return TRUE;
}
static gboolean
hdr_primaries_equal (double x1, double x2)
{
return fabs (x1 - x2) < (0.00002 - DBL_EPSILON);
}
static gboolean
hdr_nits_equal (double x1, double x2)
{
return fabs (x1 - x2) < (1.0 - DBL_EPSILON);
}
static gboolean
hdr_min_luminance_equal (double x1, double x2)
{
return fabs (x1 - x2) < (0.0001 - DBL_EPSILON);
}
gboolean
meta_output_hdr_metadata_equal (MetaOutputHdrMetadata *metadata,
MetaOutputHdrMetadata *other_metadata)
{
if (!metadata->active && !other_metadata->active)
return TRUE;
if (metadata->active != other_metadata->active)
return FALSE;
if (metadata->eotf != other_metadata->eotf)
return FALSE;
if (!hdr_primaries_equal (metadata->mastering_display_primaries[0].x,
other_metadata->mastering_display_primaries[0].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[0].y,
other_metadata->mastering_display_primaries[0].y) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[1].x,
other_metadata->mastering_display_primaries[1].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[1].y,
other_metadata->mastering_display_primaries[1].y) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[2].x,
other_metadata->mastering_display_primaries[2].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[2].y,
other_metadata->mastering_display_primaries[2].y) ||
!hdr_primaries_equal (metadata->mastering_display_white_point.x,
other_metadata->mastering_display_white_point.x) ||
!hdr_primaries_equal (metadata->mastering_display_white_point.y,
other_metadata->mastering_display_white_point.y))
return FALSE;
if (!hdr_nits_equal (metadata->mastering_display_max_luminance,
other_metadata->mastering_display_max_luminance))
return FALSE;
if (!hdr_min_luminance_equal (metadata->mastering_display_min_luminance,
other_metadata->mastering_display_min_luminance))
return FALSE;
if (!hdr_nits_equal (metadata->max_cll, other_metadata->max_cll) ||
!hdr_nits_equal (metadata->max_fall, other_metadata->max_fall))
return FALSE;
return TRUE;
}
void
meta_output_update_modes (MetaOutput *output,
MetaCrtcMode *preferred_mode,

View file

@ -188,6 +188,10 @@ gboolean
meta_tile_info_equal (MetaTileInfo *a,
MetaTileInfo *b);
META_EXPORT_TEST
gboolean meta_output_hdr_metadata_equal (MetaOutputHdrMetadata *metadata,
MetaOutputHdrMetadata *other_metadata);
const char * meta_output_colorspace_get_name (MetaOutputColorspace color_space);
#define META_TYPE_OUTPUT_INFO (meta_output_info_get_type ())

View file

@ -161,7 +161,3 @@ void meta_set_drm_hdr_metadata (MetaOutputHdrMetadata *metadata,
META_EXPORT_TEST
gboolean set_output_hdr_metadata (struct hdr_output_metadata *drm_metadata,
MetaOutputHdrMetadata *metadata);
META_EXPORT_TEST
gboolean hdr_metadata_equal (MetaOutputHdrMetadata *metadata,
MetaOutputHdrMetadata *other_metadata);

View file

@ -900,70 +900,6 @@ kms_modes_equal (GList *modes,
return TRUE;
}
static gboolean
hdr_primaries_equal (double x1, double x2)
{
return fabs (x1 - x2) < (0.00002 - DBL_EPSILON);
}
static gboolean
hdr_nits_equal (double x1, double x2)
{
return fabs (x1 - x2) < (1.0 - DBL_EPSILON);
}
static gboolean
hdr_min_luminance_equal (double x1, double x2)
{
return fabs (x1 - x2) < (0.0001 - DBL_EPSILON);
}
gboolean
hdr_metadata_equal (MetaOutputHdrMetadata *metadata,
MetaOutputHdrMetadata *other_metadata)
{
if (!metadata->active && !other_metadata->active)
return TRUE;
if (metadata->active != other_metadata->active)
return FALSE;
if (metadata->eotf != other_metadata->eotf)
return FALSE;
if (!hdr_primaries_equal (metadata->mastering_display_primaries[0].x,
other_metadata->mastering_display_primaries[0].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[0].y,
other_metadata->mastering_display_primaries[0].y) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[1].x,
other_metadata->mastering_display_primaries[1].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[1].y,
other_metadata->mastering_display_primaries[1].y) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[2].x,
other_metadata->mastering_display_primaries[2].x) ||
!hdr_primaries_equal (metadata->mastering_display_primaries[2].y,
other_metadata->mastering_display_primaries[2].y) ||
!hdr_primaries_equal (metadata->mastering_display_white_point.x,
other_metadata->mastering_display_white_point.x) ||
!hdr_primaries_equal (metadata->mastering_display_white_point.y,
other_metadata->mastering_display_white_point.y))
return FALSE;
if (!hdr_nits_equal (metadata->mastering_display_max_luminance,
other_metadata->mastering_display_max_luminance))
return FALSE;
if (!hdr_min_luminance_equal (metadata->mastering_display_min_luminance,
other_metadata->mastering_display_min_luminance))
return FALSE;
if (!hdr_nits_equal (metadata->max_cll, other_metadata->max_cll) ||
!hdr_nits_equal (metadata->max_fall, other_metadata->max_fall))
return FALSE;
return TRUE;
}
static MetaKmsResourceChanges
meta_kms_connector_state_changes (MetaKmsConnectorState *state,
MetaKmsConnectorState *new_state)
@ -1030,7 +966,7 @@ meta_kms_connector_state_changes (MetaKmsConnectorState *state,
if (state->hdr.supported != new_state->hdr.supported ||
state->hdr.unknown != new_state->hdr.unknown ||
!hdr_metadata_equal (&state->hdr.value, &new_state->hdr.value))
!meta_output_hdr_metadata_equal (&state->hdr.value, &new_state->hdr.value))
return META_KMS_RESOURCE_CHANGE_FULL;
if (state->broadcast_rgb.value != new_state->broadcast_rgb.value ||

View file

@ -96,7 +96,7 @@ meta_test_hdr_metadata_equality2 (void)
&metadata_out,
sizeof (MetaOutputHdrMetadata)), !=, 0);
g_assert_true (hdr_metadata_equal (&metadata_in, &metadata_out));
g_assert_true (meta_output_hdr_metadata_equal (&metadata_in, &metadata_out));
}
void