On Wednesday 15 October 2014, 21:56:53, Bryce Harrington wrote: > On Mon, Oct 13, 2014 at 07:40:48PM +0200, Niels Ole Salscheider wrote: > > This patch allows to attach an ICC profile to each output. > > > > Signed-off-by: Niels Ole Salscheider <niels_...@salscheider-online.de> > > --- > > > > src/cms-colord.c | 4 +++- > > src/cms-helper.c | 16 +++++++++++++++- > > src/cms-helper.h | 3 ++- > > src/cms-static.c | 1 + > > src/compositor.c | 18 ++++++++++++++++++ > > src/compositor.h | 2 ++ > > 6 files changed, 41 insertions(+), 3 deletions(-) > > > > diff --git a/src/cms-colord.c b/src/cms-colord.c > > index 4ff3aac..5696ea3 100644 > > --- a/src/cms-colord.c > > +++ b/src/cms-colord.c > > @@ -155,8 +155,9 @@ colord_update_output_from_device (struct cms_output > > *ocms)> > > gint percentage; > > > > /* old profile is no longer valid */ > > > > - weston_cms_destroy_profile(ocms->p); > > + weston_cms_destroy_profile(ocms->o, ocms->p); > > > > ocms->p = NULL; > > > > + wl_signal_emit(&ocms->o->profile_signal, ocms->o); > > > > ret = cd_device_connect_sync(ocms->device, NULL, &error); > > if (!ret) { > > > > @@ -384,6 +385,7 @@ colord_dispatch_all_pending(int fd, uint32_t mask, > > void *data)> > > } > > > > weston_cms_set_color_profile(ocms->o, ocms->p); > > > > + wl_signal_emit(&ocms->o->profile_signal, ocms->o); > > > > } > > g_list_free (cms->pending); > > cms->pending = NULL; > > > > diff --git a/src/cms-helper.c b/src/cms-helper.c > > index c063c77..4e20f28 100644 > > --- a/src/cms-helper.c > > +++ b/src/cms-helper.c > > @@ -25,6 +25,8 @@ > > > > #include <stdlib.h> > > #include <string.h> > > #include <stdio.h> > > > > +#include <fcntl.h> > > +#include <unistd.h> > > > > #ifdef HAVE_LCMS > > #include <lcms2.h> > > > > @@ -63,6 +65,13 @@ weston_cms_set_color_profile(struct weston_output *o, > > > > uint16_t *red = NULL; > > uint16_t *green = NULL; > > uint16_t *blue = NULL; > > > > + int fd; > > + > > + fd = open(p->filename, 0); > > + o->colorspace = weston_colorspace_from_fd(fd , 0, o->compositor); > > + close(fd); > > error checking on the file open > > > + if (o->colorspace == NULL) > > + o->colorspace = &o->compositor->srgb_colorspace; > > > > if (!o->set_gamma) > > > > return; > > > > @@ -96,13 +105,18 @@ weston_cms_set_color_profile(struct weston_output *o, > > > > } > > > > void > > > > -weston_cms_destroy_profile(struct weston_color_profile *p) > > +weston_cms_destroy_profile(struct weston_output *o, > > + struct weston_color_profile *p) > > > > { > > > > if (!p) > > > > return; > > > > #ifdef HAVE_LCMS > > > > cmsCloseProfile(p->lcms_handle); > > > > #endif > > > > + > > + weston_colorspace_destroy(o->colorspace); > > + o->colorspace = &o->compositor->srgb_colorspace; > > + > > > > free(p->filename); > > free(p); > > > > } > > > > diff --git a/src/cms-helper.h b/src/cms-helper.h > > index 6e5594d..3fd17b3 100644 > > --- a/src/cms-helper.h > > +++ b/src/cms-helper.h > > @@ -67,6 +67,7 @@ weston_cms_create_profile(const char *filename, > > > > struct weston_color_profile * > > weston_cms_load_profile(const char *filename); > > void > > > > -weston_cms_destroy_profile(struct weston_color_profile *p); > > +weston_cms_destroy_profile(struct weston_output *o, > > + struct weston_color_profile *p); > > > > #endif > > > > diff --git a/src/cms-static.c b/src/cms-static.c > > index ad54fd1..c7dce58 100644 > > --- a/src/cms-static.c > > +++ b/src/cms-static.c > > @@ -58,6 +58,7 @@ cms_output_created(struct cms_static *cms, struct > > weston_output *o)> > > weston_log("cms-static: loading %s for %s\n", > > > > profile, o->name); > > > > weston_cms_set_color_profile(o, p); > > > > + wl_signal_emit(&o->profile_signal, o); > > > > } > > > > } > > > > diff --git a/src/compositor.c b/src/compositor.c > > index 4f959a4..61b70e7 100644 > > --- a/src/compositor.c > > +++ b/src/compositor.c > > @@ -3516,6 +3516,20 @@ weston_compositor_remove_output(struct > > weston_compositor *compositor,> > > } > > > > } > > > > +static void > > +weston_output_notifier_profile(struct wl_listener *listener, void *data) > > +{ > > +/* TODO: > > + struct weston_output *output = (struct weston_output *) data; > > + struct weston_compositor *ec = output->compositor; > > + struct weston_resource *resource; > > + > > + for each wl_cms resource { > > + wl_cms_send_output_colorspace_changed(resource, output); > > + } > > +*/ > > Is this supposed to be TODO'd out? > If so, could use an explanatory statement.
Not really... It is implemented now. > > +} > > + > > > > WL_EXPORT void > > weston_output_destroy(struct weston_output *output) > > { > > > > @@ -3736,10 +3750,14 @@ weston_output_init(struct weston_output *output, > > struct weston_compositor *c,> > > wl_signal_init(&output->frame_signal); > > wl_signal_init(&output->destroy_signal); > > > > + wl_signal_init(&output->profile_signal); > > > > wl_list_init(&output->animation_list); > > wl_list_init(&output->resource_list); > > wl_list_init(&output->feedback_list); > > > > + output->profile_listener.notify = weston_output_notifier_profile; > > + wl_signal_add(&output->profile_signal, &output->profile_listener); > > + > > > > output->id = ffs(~output->compositor->output_id_pool) - 1; > > output->compositor->output_id_pool |= 1 << output->id; > > > > diff --git a/src/compositor.h b/src/compositor.h > > index 5f198a9..419a56a 100644 > > --- a/src/compositor.h > > +++ b/src/compositor.h > > @@ -224,6 +224,8 @@ struct weston_output { > > > > int dirty; > > struct wl_signal frame_signal; > > struct wl_signal destroy_signal; > > > > + struct wl_signal profile_signal; > > + struct wl_listener profile_listener; > > > > int move_x, move_y; > > uint32_t frame_time; /* presentation timestamp in milliseconds */ > > uint64_t msc; /* media stream counter */ > > > > -- > > 2.1.2 > > > > _______________________________________________ > > wayland-devel mailing list > > wayland-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel