Oyranos/X11 Requirements

From ColourWiki

Oyranos has some requirements to provide colour management related informations through it's APIs. For further reading see Monitor Configuration.

Table of contents

Architectural Overview

Applications need a way to communicate colorimetry of their image content. Applications, which like to handle colour management (CM) on their own, need additional a path to tell the system what to do with the content and what not.

Applications can follow several strategies:

  1. be dumb - The application knows nothing about CM. The system takes content as being in a default RGB colour space and does colour matching. Most applications would fall in this category.
  2. tag content - The application knows about the colorimetry of its content and tells the system about it.
  3. take over control - The application knows best how to handle its content. Tell the system to not match content with following options:
    1. Dont apply colour conversions. This is for proofing and image editing applications.
    2. Dont apply calibration from graphic card gamma tables. This is useful for HDR content.

The "take over control" kind of applications want additionally to know about the screen layout and monitor colorimetry. This is handled by Xinerama alike API's and the _ICC_PROFILE_xxx atom.

Screen Areas and Colour Space tagging

Two things are needed,

  • a ICC profile container attached to window or screen region
  • a opt out flags for colour correction down the path, so applications can handle colour management on their own
    • a "no colour conversions" flag
    • a "no calibration from graphic card gamma tables" flag
  • the virtually third is that every other content is expected as sRGB, as is the case today

The above would fit along all the path:

 application -> toolkit -> composite manager -> X11 -> OpenGL -> shader.

There remains to find an endpoint where most paths meet. This could be the composite manager or a additional layer between composite manager and Xorg or inside Xorg itself.

The OpenICC project Colour Management Near X (http://www.freedesktop.org/wiki/OpenIcc/ColorManagementNearX) implemented the idea. As a result the X Color Management spec was born to describe the basic communication. It covers and continues most of the above outlined ideas.

Multi Monitor EDID in X11

EDID information describes monitor parameters like description, serial number and gives hints about colourimetric behaviour.

Oyranos uses this information to identify a particular monitor and search for a best matching profile, as long as one is stored in the Oyranos device profile database.

You can check independently whether a EDID atom is set by calling in a X11 environment:

xprop -root | grep EDID

The modern way is to search for the EDID data in the xrandr output:

xrandr --prop | grep EDID

Specification

X servers export the EDID inormation typically in the "XFree86_DDC_EDID1_RAWDATA" and "XFree86_DDC_EDID2_RAWDATA" atom. If there are more monitors connected to the root window, the following atoms get a underscore and the monitor number appended, like in

Example

Xinerama_screen_number = 0 => XFree86_DDC_EDID1_RAWDATA

Xinerama_screen_number >= 1 => XFree86_DDC_EDID1_RAWDATA_1 + XFree86_DDC_EDID1_RAWDATA_2 ...

This way compatibility is enshured for existing applications.

Parsing

This section is incomplete. But at least the code can be found here in libXcm-0.3.x and higher.

The section decribes the EDID parsing in Oyranos.

Oyranos parses EDID information for monitor identification. It uses the 18 byte blocks starting from 54 for a monitor manufacturer, model and serial ID string. In case the manufacturer was omitted, it switches back to scan the 2 byte ID's starting at position 8. The later could be extended to model(10) and serial(12).

References

Versions / Implementations

Oyranos 0.1.5 obtained the oyranos-monitor-nvidia commandline tool to demonstrate the described behaviour.

ICC Profiles in X

References

Further Tasks

(Draft for a ICC Profiles in X Specification 0.5)

  • add xrandr-1.2 porperties per each physical output device

X Color Management spec

The goal is to communicate ICC colour regions between a colour server and clients.

References

X Color Management in libXcm git (http://www.oyranos.org/scm?p=xcolor.git;a=blob;f=docs/X_Color_Management.txt)

Implementations

The implementation is available in libXcm-0.2.x (http://www.spinics.net/lists/xorg/msg50027.html) and later.

The CompIcc ICC colour server for compiz plugin supports the draft. The plugin supports complete desktop colour correction and is multi monitor aware.

Ideas exist to support the spec in a Gnome window manager.

Further Tasks

  • screenshot tools
    • take tagged regions as is - they are already colour corrected
    • convert remaining desktop from native monitor space to document colour space
    • use document colour space from _ICC_PROFILE(_xxx) (typical sRGB)
  • describe _ICC_COLOR_PROFILES (3D scene/2D vector colour correction)
    • server side implementation
    • client is the xcm tool in the Xcm package

ICC meta Tag for Monitor Profiles

The specification provides means to embed monitor information into ICC profiles.

References

Implementations

  • xcmedid provides a JSON format output with complying keys and values, which can be used to embed that data into a ICC profile.
  • dispcalGUI supports writing of these meta data.
  • Taxi stores these meta data along with ICC profiles online.
  • Oyranos CMS can lockup meta data from profiles on disk or search in the Taxi ICC DB for matching profiles.

Miscellaneous

References

30-bit visual bugs


Colour Management and Toolkits

back -> Oyranos