mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-29 05:40:16 -04:00
doc: add a section on color management
I think the docbook deserves an introduction to how color management is designed in Wayland, aimed at people who are familiar with pixels but new to the topic. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
parent
53fbc2b0c1
commit
ba9f9a446f
3 changed files with 141 additions and 0 deletions
139
doc/publican/sources/Color.xml
Normal file
139
doc/publican/sources/Color.xml
Normal file
|
|
@ -0,0 +1,139 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8' ?>
|
||||||
|
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||||
|
<!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent">
|
||||||
|
%BOOK_ENTITIES;
|
||||||
|
]>
|
||||||
|
|
||||||
|
<chapter id="chap-Color-Management">
|
||||||
|
<title>Color management</title>
|
||||||
|
|
||||||
|
<section id="sect-Color-Management-preface">
|
||||||
|
<title>Overview</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Color management in Wayland considers only displays. All pictures in
|
||||||
|
Wayland are always display-referred, meaning that the pixel values are
|
||||||
|
intended as-is for some specific display where they would produce the
|
||||||
|
light emissions (<ulink
|
||||||
|
url="https://cie.co.at/eilvterm/17-23-002">stimuli</ulink>) the picture's
|
||||||
|
author desired. Wayland does not support displaying "raw" camera or
|
||||||
|
scanner images as they are not display-referred, nor are they even
|
||||||
|
pictures without complex and subjective processing.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Stimuli — the picture itself — are only half of the picture reproduction.
|
||||||
|
The other half is the environment where a display is viewed. A striking
|
||||||
|
example is comparing a brightly lit office to a dark movie theater, the
|
||||||
|
stimuli required to produce a good reading of the picture is greatly
|
||||||
|
different. Therefore display-referred does not include only the display
|
||||||
|
but the viewing environment as well.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Window systems have been very well capable of operating without any
|
||||||
|
explicit consideration to color management. This is because there used to
|
||||||
|
be the implicit assumption of the standard display, the sRGB display,
|
||||||
|
which all computer monitors implemented, more or less. The viewing
|
||||||
|
environment was and still is accounted by adjusting the display and/or the
|
||||||
|
room to produce a workable experience. Pictures are authored on a computer
|
||||||
|
system by drawing, painting and adjusting the picture until it looks right
|
||||||
|
on the author's monitor. This implicitly builds the standard display and
|
||||||
|
environment assumption into the picture data. Deviations from the sRGB
|
||||||
|
specification were minor enough that they often did not matter if not in a
|
||||||
|
professional context like the printing industry. Displaying video material
|
||||||
|
required some more attention to the details, because video and television
|
||||||
|
standards differ enough from the sRGB display. What really made explicit
|
||||||
|
color management a hard requirement for entertainment is the coming of
|
||||||
|
wide color gamut (WCG) and high dynamic range (HDR) materials and
|
||||||
|
displays.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The color management design in Wayland follows the general Wayland design
|
||||||
|
principles: compositors tell clients what would be the optimal thing to
|
||||||
|
do, clients tell the compositors what kind of pictures they are actually
|
||||||
|
producing, and then compositors display those pictures the best they can.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="sect-Color-Management-Protocol">
|
||||||
|
<title>Protocol Interfaces</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Color management interfaces in Wayland and divided into two protocols:
|
||||||
|
<ulink url="https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/color-management?ref_type=heads">color-management</ulink>
|
||||||
|
and
|
||||||
|
<ulink url="https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/color-representation?ref_type=heads">color-representation</ulink>.
|
||||||
|
They are designed to work together, but they can also be used
|
||||||
|
independently when the other one is not needed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<section id="sect-Color-Management-Protocol-color-management">
|
||||||
|
<title>Color-management</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Color management protocol has two main purposes. First, it puts the
|
||||||
|
responsibility of color management on the compositor. This means that
|
||||||
|
clients do not necessarily need to care about color management at all,
|
||||||
|
and can display just fine by using the traditional standard display
|
||||||
|
assumption even when the actual display is wildly different. Clients
|
||||||
|
can also choose to target some other assumed display and let the
|
||||||
|
compositor handle it, or they can explicitly render for the actual
|
||||||
|
display at hand. Second, when the window system has multiple different
|
||||||
|
monitors, and a wl_surface happens to span more than one monitor, the
|
||||||
|
compositor can display the surface content correctly on all spanned
|
||||||
|
monitors simultaneously, as much as physically possible.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Color-management protocol concentrates on colorimetry: when you have a
|
||||||
|
pixel with RGB values, what stimulus do those values represent. The
|
||||||
|
stimulus definition follows the CIE 1931 two-degree observer model. Some
|
||||||
|
core concepts here are color primaries, white point, transfer function,
|
||||||
|
and dynamic range. The viewing environment is represented in an
|
||||||
|
extremely simplified way as the reference white luminance. The
|
||||||
|
connection between pixel RGB values and stimulus plus viewing
|
||||||
|
environment is recorded in an <emphasis>image description</emphasis>
|
||||||
|
object. Clients can create image description objects and tag
|
||||||
|
<code>wl_surface</code>s with them, to indicate what kind of surface
|
||||||
|
content there will be. Clients can also ask what image description the
|
||||||
|
compositor would prefer to have on the <code>wl_surface</code>, and that
|
||||||
|
preference can change over time, e.g. when the <code>wl_surface</code>
|
||||||
|
is moved from one
|
||||||
|
<code>wl_output</code> to another. Following the compositor's preference
|
||||||
|
may provide advantages in image quality and power consumption.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Image description objects can come in two flavors: parametric and
|
||||||
|
ICC-based. The above was written with parametric image descriptions in
|
||||||
|
mind, and they have first-class support for HDR. ICC-based image
|
||||||
|
descriptions are wrapping an ICC profile and have no other data. ICC
|
||||||
|
profiles are the standard tool for standard dynamic range (SDR) display
|
||||||
|
color management. This means the capabilities between the two flavors
|
||||||
|
differ, and one cannot always be replaced by the other. Compositor
|
||||||
|
support for each flavor is optional.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="sect-Color-Management-Protocol-color-representation">
|
||||||
|
<title>Color-representation</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Color-representation protocol deals with (potentially sub-sampled)
|
||||||
|
YCbCr-RGB conversion, quantization range, and the inclusion of alpha in
|
||||||
|
the RGB color channels, a.k.a. pre-multiplication. There are several
|
||||||
|
different specifications on how an YCbCr-like (including ICtCp) signal,
|
||||||
|
with chroma sub-sampling or not, is created from a full-resolution RGB
|
||||||
|
image. Again, a client can tag a <code>wl_surface</code> with
|
||||||
|
color-representation metadata to tell the compositor what kind of pixel
|
||||||
|
data will be displayed through the wl_surface.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The main purpose of color-representation is to correctly off-load the
|
||||||
|
YCbCr-RGB conversion to the compositor, which can then opportunistically
|
||||||
|
off-load it further to very power-efficient fixed-function circuitry in
|
||||||
|
a display controller. This can significantly reduce power consumption
|
||||||
|
when watching videos compared to using a GPU for the same, and on some
|
||||||
|
embedded hardware platforms it is a hard requirement for processing high
|
||||||
|
resolution video.
|
||||||
|
</para>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</chapter>
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<xi:include href="Architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
<xi:include href="Architecture.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||||
<xi:include href="Protocol.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
<xi:include href="Protocol.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||||
<xi:include href="Xwayland.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
<xi:include href="Xwayland.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||||
|
<xi:include href="Color.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||||
<xi:include href="ProtocolSpec.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
<xi:include href="ProtocolSpec.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||||
<xi:include href="Client.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
<xi:include href="Client.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||||
<xi:include href="Server.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
<xi:include href="Server.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ publican_sources = [
|
||||||
'Protocol.xml',
|
'Protocol.xml',
|
||||||
'Xwayland.xml',
|
'Xwayland.xml',
|
||||||
'Compositors.xml',
|
'Compositors.xml',
|
||||||
|
'Color.xml',
|
||||||
'Client.xml',
|
'Client.xml',
|
||||||
'Server.xml'
|
'Server.xml'
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue