[Openicc] Suggested update to "ICC Profiles in X Specification 0.4"
graeme at argyllcms.com
Wed Nov 16 07:11:07 UTC 2016
A user has drawn to my attention a problem caused by the
"ICC Profiles in X Specification" not covering X11 XRANDR.
Since XRANDR allows for a screen to have multiple Outputs and CRTC's
with each Output having a corresponding Videolut & physical display(s),
each Output may need a different ICC profiles. (The current 0.4 specifications
talks about monitors, but it's not clear what's meant by this. It's unlikely
to be XRANDR V1.5 "Monitors", since this is not defined by X11 or Xinerama.) It
therefore unclear how to deal with Screens that have multiple Outputs
in a backwards compatible way.
[ A lot of this was touched upon in previous mail on this list. ]
I suggest changing the _ICC_PROFILE section in
to clarify this:
An atom should be set in the root window of each Screen that has
a corresponding ICC profile.
This property does not have to be set on every Screen. When this property is not set for a
Screen, this Screen is uncharacterised, and colour correction for this screen should be
done using the sRGB colour space.
The atoms are of type XA_CARDINAL with 8-bit elements. The value of the atom should be a
literal ICC profile, that applications can read and parse directly.
As profiles can be large, applications should read the profile for a particular screen
once, and cache it. As a screen's profile may change during the lifetime of the process,
applications should ask to receive property change notifications from the root window,
even if they don't currently have a profile set. Applications which can change screens
using mechanisms such as display migration should be aware that the new screen is likely
to have different profiles assigned to screens. Applications should be aware that
a screen may be composed of multiple Outputs, each Output having a different ICC profile.
Because with Xinerama or XRandR there may be multiple Screens, the following naming
scheme is used to identify the corresponding atom in a root window:
First working Output of first Screen: _ICC_PROFILE
First working Output of second and subsequent Screens: _ICC_PROFILE_xxx
xxx is the X11 Screen index, starting at 0
In addition to the above atoms in the root window, an XRANDR Output
should have a property named _ICC_PROFILE set to contain the same
The meaning of the _ICC_PROFILE and _ICC_PROFILE_xxx atom(s) and properties is
that of a target colour space according to this version of the specification.
I also note that some arrangements of XRANDR Screens, CRTC's and Outputs are
not possible to properly color manage. For instance if two CRTC areas overlap
and they connect to different Outputs (and implicitly physical displays), then although
different calibration curves could be set to suite each physical display, different
output ICC profiles cannot be used since the overlapping frame buffer
values can only be set to the output of a single ICC profile. Similarly, more
than one Output (i.e. physical display) connected to a CRTC has only one set of frame
buffer values and CRTC calibration curves, and so color management of only
one of the two physical displays is possible.
Comments ? Suggestions ?
More information about the openicc