From 6dc9cab14b6d3c1ade26b182e0e41ea914c99054 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Mon, 1 Jul 2024 14:09:13 +0200 Subject: [PATCH] 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: --- src/backends/meta-output.c | 64 ++++++++++++++++++ src/backends/meta-output.h | 4 ++ .../native/meta-kms-connector-private.h | 4 -- src/backends/native/meta-kms-connector.c | 66 +------------------ src/tests/hdr-metadata-unit-tests.c | 2 +- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/src/backends/meta-output.c b/src/backends/meta-output.c index 647742cb7..d42451407 100644 --- a/src/backends/meta-output.c +++ b/src/backends/meta-output.c @@ -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, diff --git a/src/backends/meta-output.h b/src/backends/meta-output.h index 2b4f3496d..b007f9feb 100644 --- a/src/backends/meta-output.h +++ b/src/backends/meta-output.h @@ -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 ()) diff --git a/src/backends/native/meta-kms-connector-private.h b/src/backends/native/meta-kms-connector-private.h index fcabc19cf..321804283 100644 --- a/src/backends/native/meta-kms-connector-private.h +++ b/src/backends/native/meta-kms-connector-private.h @@ -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); diff --git a/src/backends/native/meta-kms-connector.c b/src/backends/native/meta-kms-connector.c index 63603f8f1..11b3461b5 100644 --- a/src/backends/native/meta-kms-connector.c +++ b/src/backends/native/meta-kms-connector.c @@ -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 || diff --git a/src/tests/hdr-metadata-unit-tests.c b/src/tests/hdr-metadata-unit-tests.c index 352d1d1c8..22223bc06 100644 --- a/src/tests/hdr-metadata-unit-tests.c +++ b/src/tests/hdr-metadata-unit-tests.c @@ -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