ICC colour management in Xorg

The CompIcc plugin is already a great tool for mixed multi monitor setups. However compiz is in few distributions the default window manager. So it would make sense for the Linux desktop to implement the net-color spec inside Xorg.

Hey, hey, you might ask now, Why do I need this compositing toy called compiz now in Xorg and what brings me that ICC stuff? The answer is simple. Look at Apple computers. They show most likely the colours the designer has intended. And at least basic stuff works. You shurely want one a small gamut monitor to see the same skin tones like on a wide gamut monitor. After all its the photo or picture or drawing you are interested in. A grayish photo from a baby on a small laptop monitor or a grand daddy with highly orange saturated face on a wide gamut screen is surely not intuitive. Supposed your camera works good enough, and most digitals are really good, its possible to exchange the photos from the one monitor to an other monitor with different sized gamut. There shall be not that high difference as we see on todays Linux desktops.

Is’nt ICC colour management expensive? No, not necessarily. The very basic colorimetric information comes straight from the monitor. It is embedded in a small binary block known as EDID. A ICC profile can be generated on the fly from this data block. E.g. Oyranos supports that as a fall back. So, ICC colour management can be made instant and needs no extra purchase of expensive equipment to improve the colour rendering.

What is needed in Xorg to get ICC support in? A layer, which sees the window regions defined by the net-color spec and which can use hardware shaders. Then it needs to put the monitors each on a own texture, apply the window regions and let the shader run on the GPU. The net-colour spec has some more requirements. But these should be manageable.

Why in Xorg? Its a technical question. The main reason is that each compositing window manager needs to implement the net-color spec. That is lots of work and you know there are lots of window managers for Xorg. Beside that repeated work, not all window managers will naturally be prepared to work with GPU shaders. From a user point of view its desirable that capable hardware is deployed for colour correction without the need of configuration. So it makes sense to have the colour management implemetation in one place. Of course there needs to happen some discussion with the Xorg people about the concept and the details in advance.

Will higher bit depth and different channels, e.g. Cmyk, be supported? The net-color spec does not talk about that. It works with whatever pixel storage format is provided. E.g. In compiz it is 16-bit integers ARGB.

Will a true HDR format not be better and simpler to be implemented? Let me ask back how long shall we wait for that to happen?

What weaknesses are actual in the net-color spec? It can not define a custom colour transform per monitor. However by putting the colour management into the application it is still possible to gain more control over the colour rendering process. As well, defining a document colour space per region is not yet supported but easy to extent and I guess to implement. The classical use case for that would be a video stream with a attached ICC profile. Currently the content is assumed to be sRGB only or the application has to colour manage itself.