[argyllcms] Dispcal interfering with colord set profile

  • From: Richard Hughes <hughsient@xxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Tue, 26 Feb 2013 12:47:58 +0000

Hey all,

I've had a couple of bug reports submitted against colord where it was
noticed that using dispread set the vcgt curves to linear (as it
should) and the curves were not set back to the users profile setting
after dispcal had finished.

There are a few ways to fix this:

1. dispread saves the content of the vcgt and re-applies them when the
command finishes
2. dispread execs something like colormgr device-inhibit when it
starts, and then when dispread dies / finishes colord notices the
inhibit process also dies and automatically refreshes the screen
profile
3. dispread learns about D-Bus and does a ~150 line call to colord to
inhibit the vcgt setting for the duration of the process -- see
https://gitorious.org/colord/master/blobs/master/src/org.freedesktop.ColorManager.Device.xml#line455
for details
4. dispread links against libcolord and does a 4 line call to colord
of FindDeviceByProperty(XRANDR_name=lvds1), device.ProfilingInhibit().
5. dispread calls something like colord
state-has-changed-refresh-everything when done

Solution 1 and 5 have the downside that if dispread crashes or the
user does ctrl-c then the profile doesn't get applied. Solution 2
means we have to get a thread involved (as colormgr device-inhibit is
sync). Solution 3 involves adding a Linux-only DBUS (or GLib) build
dep for ArgyllCMS and an optional run-time colord dep. Solution 4
involves an optional build time colord dep with an optional run-time
colord dep. My preferred solution is 4 for simplicity reasons.

I'm quite happy to contribute BSD licensed code to do 2,3,4 or 5, but
didn't want to start on a patch or example code until I knew what
Graemes view on this was. Thanks.

Richard.

Other related posts: