[PATCH 3/4] Add a set_gamma vfunc on weston_output
Richard Hughes
hughsient at gmail.com
Wed May 1 13:52:12 PDT 2013
---
src/compositor-drm.c | 24 ++++++++++++++++++++++++
src/compositor.h | 7 +++++++
2 files changed, 31 insertions(+)
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index c8016cd..857aeed 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -545,6 +545,27 @@ drm_output_render(struct drm_output *output, pixman_region32_t *damage)
}
static void
+drm_output_set_gamma(struct weston_output *output_base,
+ uint16_t size, uint16_t *r, uint16_t *g, uint16_t *b)
+{
+ int rc;
+ struct drm_output *output = (struct drm_output *) output_base;
+ struct drm_compositor *compositor = (struct drm_compositor *) output->base.compositor;
+
+ /* check */
+ if (output_base->gamma_size != size)
+ return;
+ if (!output->original_crtc)
+ return;
+
+ rc = drmModeCrtcSetGamma(compositor->drm.fd,
+ output->crtc_id,
+ size, r, g, b);
+ if (rc)
+ weston_log("set gamma failed: %m\n");
+}
+
+static void
drm_output_repaint(struct weston_output *output_base,
pixman_region32_t *damage)
{
@@ -1799,6 +1820,9 @@ create_output_for_connector(struct drm_compositor *ec,
output->base.set_dpms = drm_set_dpms;
output->base.switch_mode = drm_output_switch_mode;
+ output->base.gamma_size = output->original_crtc->gamma_size;
+ output->base.set_gamma = drm_output_set_gamma;
+
weston_plane_init(&output->cursor_plane, 0, 0);
weston_plane_init(&output->fb_plane, 0, 0);
diff --git a/src/compositor.h b/src/compositor.h
index ce63fc2..63d1127 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -198,6 +198,13 @@ struct weston_output {
uint32_t backlight_current;
void (*set_backlight)(struct weston_output *output, uint32_t value);
void (*set_dpms)(struct weston_output *output, enum dpms_enum level);
+
+ uint16_t gamma_size;
+ void (*set_gamma)(struct weston_output *output,
+ uint16_t size,
+ uint16_t *r,
+ uint16_t *g,
+ uint16_t *b);
};
struct weston_xkb_info {
--
1.8.2.1
More information about the wayland-devel
mailing list