[mutter] monitor: Add API to set GAMMA LUT
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor: Add API to set GAMMA LUT
- Date: Thu, 1 Sep 2022 14:52:09 +0000 (UTC)
commit f8dbea27f81f48942436f9e1991a7b259a752232
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Tue Oct 26 11:46:37 2021 +0200
monitor: Add API to set GAMMA LUT
It's effectively a for-each for every active CRTC of the monitor.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2141>
src/backends/meta-monitor-manager-private.h | 7 ++++
src/backends/meta-monitor-manager.c | 14 +++++++
src/backends/meta-monitor.c | 63 +++++++++++++++++++++++++++++
src/backends/meta-monitor.h | 6 +++
4 files changed, 90 insertions(+)
---
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index 1943e81506..57f02f25b1 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -466,4 +466,11 @@ void meta_monitor_manager_get_crtc_gamma (MetaMonitorManager *manager,
unsigned short **green,
unsigned short **blue);
+void meta_monitor_manager_set_crtc_gamma (MetaMonitorManager *manager,
+ MetaCrtc *crtc,
+ size_t size,
+ unsigned short *red,
+ unsigned short *green,
+ unsigned short *blue);
+
#endif /* META_MONITOR_MANAGER_PRIVATE_H */
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index b58a05f2d8..6bdd72be17 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -3971,3 +3971,17 @@ meta_monitor_manager_get_virtual_monitors (MetaMonitorManager *manager)
return priv->virtual_monitors;
}
+
+void
+meta_monitor_manager_set_crtc_gamma (MetaMonitorManager *manager,
+ MetaCrtc *crtc,
+ size_t size,
+ unsigned short *red,
+ unsigned short *green,
+ unsigned short *blue)
+{
+ MetaMonitorManagerClass *manager_class =
+ META_MONITOR_MANAGER_GET_CLASS (manager);
+
+ manager_class->set_crtc_gamma (manager, crtc, size, red, green, blue);
+}
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 120fa2e604..0dca085ea6 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -648,6 +648,69 @@ meta_monitor_get_gamma_lut_size (MetaMonitor *monitor)
return size;
}
+typedef struct
+{
+ uint16_t *red;
+ uint16_t *green;
+ uint16_t *blue;
+ size_t size;
+} LutData;
+
+static gboolean
+set_gamma_lut (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorCrtcMode *monitor_crtc_mode,
+ gpointer user_data,
+ GError **error)
+{
+ LutData *lut_data = user_data;
+ MetaBackend *backend = meta_monitor_get_backend (monitor);
+ MetaMonitorManager *monitor_manager =
+ meta_backend_get_monitor_manager (backend);
+ MetaCrtc *crtc;
+
+ crtc = meta_output_get_assigned_crtc (monitor_crtc_mode->output);
+
+ meta_monitor_manager_set_crtc_gamma (monitor_manager,
+ crtc,
+ lut_data->size,
+ lut_data->red,
+ lut_data->green,
+ lut_data->blue);
+ return TRUE;
+}
+
+/**
+ * meta_monitor_set_gamma_lut:
+ *
+ * Set a new gamma look-up table (LUT) for the given monitor's CRTCs.
+ */
+void
+meta_monitor_set_gamma_lut (MetaMonitor *monitor,
+ uint16_t *red,
+ uint16_t *green,
+ uint16_t *blue,
+ size_t size)
+{
+ MetaMonitorMode *current_mode;
+ LutData lut_data;
+
+ current_mode = meta_monitor_get_current_mode (monitor);
+ g_return_if_fail (current_mode);
+
+ lut_data = (LutData) {
+ .red = red,
+ .green = green,
+ .blue = blue,
+ .size = size,
+ };
+ meta_monitor_mode_foreach_crtc (monitor,
+ current_mode,
+ set_gamma_lut,
+ &lut_data,
+ NULL);
+}
+
static void
meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
{
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index cf0ffa99ca..17c4ff3b3a 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -297,4 +297,10 @@ gboolean meta_monitor_set_privacy_screen_enabled (MetaMonitor *monitor,
size_t meta_monitor_get_gamma_lut_size (MetaMonitor *monitor);
+void meta_monitor_set_gamma_lut (MetaMonitor *monitor,
+ uint16_t *red,
+ uint16_t *green,
+ uint16_t *blue,
+ size_t size);
+
#endif /* META_MONITOR_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]