monitor: Add API to list supported color modes
Available modes are 'default', which is always added, and BT.2100, which is added if the BT.2020 color space, and the PQ transfer function, is supported by the output. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4192>
This commit is contained in:
@ -70,6 +70,8 @@ typedef struct _MetaMonitorPrivate
|
|||||||
char *display_name;
|
char *display_name;
|
||||||
|
|
||||||
gboolean is_for_lease;
|
gboolean is_for_lease;
|
||||||
|
|
||||||
|
GList *color_modes;
|
||||||
} MetaMonitorPrivate;
|
} MetaMonitorPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaMonitor, meta_monitor, G_TYPE_OBJECT)
|
G_DEFINE_TYPE_WITH_PRIVATE (MetaMonitor, meta_monitor, G_TYPE_OBJECT)
|
||||||
@ -203,6 +205,27 @@ meta_monitor_generate_spec (MetaMonitor *monitor)
|
|||||||
priv->spec = monitor_spec;
|
priv->spec = monitor_spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_monitor_init_supported_color_modes (MetaMonitor *monitor)
|
||||||
|
{
|
||||||
|
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||||
|
const MetaOutputInfo *output_info =
|
||||||
|
meta_monitor_get_main_output_info (monitor);
|
||||||
|
|
||||||
|
priv->color_modes =
|
||||||
|
g_list_append (NULL, GINT_TO_POINTER (META_COLOR_MODE_DEFAULT));
|
||||||
|
|
||||||
|
if ((output_info->supported_color_spaces &
|
||||||
|
(1 << META_OUTPUT_COLORSPACE_BT2020)) &&
|
||||||
|
(output_info->supported_hdr_eotfs &
|
||||||
|
(1 << META_OUTPUT_HDR_METADATA_EOTF_PQ)))
|
||||||
|
{
|
||||||
|
priv->color_modes =
|
||||||
|
g_list_append (priv->color_modes,
|
||||||
|
GINT_TO_POINTER (META_COLOR_MODE_BT2100));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const double known_diagonals[] = {
|
static const double known_diagonals[] = {
|
||||||
12.1,
|
12.1,
|
||||||
13.3,
|
13.3,
|
||||||
@ -588,6 +611,7 @@ meta_monitor_finalize (GObject *object)
|
|||||||
MetaMonitor *monitor = META_MONITOR (object);
|
MetaMonitor *monitor = META_MONITOR (object);
|
||||||
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||||
|
|
||||||
|
g_list_free (priv->color_modes);
|
||||||
g_hash_table_destroy (priv->mode_ids);
|
g_hash_table_destroy (priv->mode_ids);
|
||||||
g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
|
g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
|
||||||
meta_monitor_spec_free (priv->spec);
|
meta_monitor_spec_free (priv->spec);
|
||||||
@ -837,6 +861,7 @@ meta_monitor_normal_new (MetaMonitorManager *monitor_manager,
|
|||||||
meta_output_set_monitor (output, monitor);
|
meta_output_set_monitor (output, monitor);
|
||||||
|
|
||||||
meta_monitor_generate_spec (monitor);
|
meta_monitor_generate_spec (monitor);
|
||||||
|
meta_monitor_init_supported_color_modes (monitor);
|
||||||
|
|
||||||
meta_monitor_normal_generate_modes (monitor_normal);
|
meta_monitor_normal_generate_modes (monitor_normal);
|
||||||
|
|
||||||
@ -2363,6 +2388,14 @@ meta_monitor_set_hdr_metadata (MetaMonitor *monitor,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
meta_monitor_get_supported_color_modes (MetaMonitor *monitor)
|
||||||
|
{
|
||||||
|
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||||
|
|
||||||
|
return priv->color_modes;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
meta_parse_monitor_mode (const char *string,
|
meta_parse_monitor_mode (const char *string,
|
||||||
int *out_width,
|
int *out_width,
|
||||||
|
@ -355,4 +355,6 @@ void meta_monitor_set_for_lease (MetaMonitor *monitor,
|
|||||||
META_EXPORT_TEST
|
META_EXPORT_TEST
|
||||||
gboolean meta_monitor_is_for_lease (MetaMonitor *monitor);
|
gboolean meta_monitor_is_for_lease (MetaMonitor *monitor);
|
||||||
|
|
||||||
|
GList * meta_monitor_get_supported_color_modes (MetaMonitor *monitor);
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaMonitorSpec, meta_monitor_spec_free)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaMonitorSpec, meta_monitor_spec_free)
|
||||||
|
@ -40,6 +40,12 @@ typedef enum
|
|||||||
META_OUTPUT_HDR_METADATA_EOTF_HLG,
|
META_OUTPUT_HDR_METADATA_EOTF_HLG,
|
||||||
} MetaOutputHdrMetadataEOTF;
|
} MetaOutputHdrMetadataEOTF;
|
||||||
|
|
||||||
|
typedef enum _MetaColorMode
|
||||||
|
{
|
||||||
|
META_COLOR_MODE_DEFAULT = 0,
|
||||||
|
META_COLOR_MODE_BT2100 = 1,
|
||||||
|
} MetaColorMode;
|
||||||
|
|
||||||
typedef enum _MetaOutputRGBRange
|
typedef enum _MetaOutputRGBRange
|
||||||
{
|
{
|
||||||
META_OUTPUT_RGB_RANGE_UNKNOWN = 0,
|
META_OUTPUT_RGB_RANGE_UNKNOWN = 0,
|
||||||
|
Reference in New Issue
Block a user