aboutsummaryrefslogtreecommitdiff
path: root/en/devices/tech/display/color-mgmt.html
diff options
context:
space:
mode:
Diffstat (limited to 'en/devices/tech/display/color-mgmt.html')
-rw-r--r--en/devices/tech/display/color-mgmt.html149
1 files changed, 149 insertions, 0 deletions
diff --git a/en/devices/tech/display/color-mgmt.html b/en/devices/tech/display/color-mgmt.html
new file mode 100644
index 00000000..d73f091d
--- /dev/null
+++ b/en/devices/tech/display/color-mgmt.html
@@ -0,0 +1,149 @@
+<html devsite>
+ <head>
+ <title>Color Management</title>
+ <meta name="project_path" value="/_project.yaml" />
+ <meta name="book_path" value="/_book.yaml" />
+ </head>
+ <body>
+ <!--
+ Copyright 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<p>Android 8.1 adds support for color management that can be used to provide a
+consistent experience across display technologies. Applications running on
+Android 8.1 can access the full capabilities of a wide gamut display to get the
+most out of a display device.</p>
+
+<p>Previous Android releases did not include color management support and
+instead relied on content and displays being compatible (a goal often aided by
+the TV industry). However, recent display technologies allow for much larger
+gamut displays that do not display existing content as expected. With Android
+8.1, devices that use a wide-gamut display (e.g. active-matrix organic
+light-emitting diode or AMOLED, some LCDs) will be able to see wide-gamut
+content from applications.</p>
+
+<h2>Determining device support</h2>
+<p>Devices with wide-color displays running Android 8.1 should support color
+management (wide-color). Before enabling this feature, ensure the device meets
+the following requirements:</p>
+<ul>
+<li>Device display meets the hardware requirements, which include a
+well-characterized display that supports the Display-P3 colorspace. If the
+display does not meet this requirement, do not enable color management. To
+reduce CPU and GPU impact, support for extended sRGB and HDR10 in the display
+pipeline is desirable.</li>
+<li>Device supports a factory calibration process that generates calibration
+data (stored on the device) to adjust for manufacturing variance in display
+behavior. At a minimum, calibration data should allow the display to accurately
+display sRGB content and D65 and D73 white points (future versions of Android
+may support full ICC profiles for each device).</li>
+</ul>
+<p>If the above requirements are met, you can enable the color management
+feature for the device.</p>
+
+<h2>Implementing color management</h2>
+<p>To implement color management, you must first update the
+<a href="/devices/graphics/implement-hwc">Hardware Composer 2 (HWC2)</a> driver
+to understand color modes and to apply those modes to the hardware.
+Specifically, the HWC2 composer must report the Display-P3 and sRGB
+color modes using <code>HWCDisplay::GetColorModes</code>.</p>
+
+<aside class="key-term"><strong>Key Term:</strong> Display-P3 uses Digital
+Cinema Initiatives primaries and sRGB transfer function.</aside>
+
+<p>Next, enable the necessary OpenGL extensions and library support to
+translate OpenGL color spaces to HAL data spaces. Required OpenGL extensions
+include:</p>
+<ul>
+<li>
+<a href="https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_pixel_format_float.txt" class="external">EGL_EXT_pixel_format_float</a>.
+Allows applications to create presentable EGLSurface(s) with 16-bit float color
+components. Priority: high (expect this is the default pixel format for
+wide-color aware applications). Requires driver support.</li>
+<li>
+<a href="https://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_colorspace.txt" class="external">EGL_KHR_gl_colorspace</a>.
+For applications that want to use sRGB format default framebuffers to more
+easily achieve sRGB rendering to display devices, this extension allows creating
+EGLSurfaces that will be rendered to in sRGB by OpenGL contexts supporting that
+capability. Requires driver support for sRGB behavior.</li>
+</ul>
+<p>Android also provides the following optional extensions:</p>
+<ul>
+<li>
+<a href="https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_gl_colorspace_scrgb_linear.txt" class="external">EGL_EXT_colorspace_scrgb_linear</a>.
+This extension provides a new color space option, scRGB, for applications to
+choose when creating an EGLSurface. The scRGB color space defines a linear
+display referred space with the same white point and color primaries as sRGB
+(and thus is backward-compatible with sRGB). This should not require driver
+support and can be implemented in the Android EGL wrapper. To be useful, this
+extension requires support for 16-bit floating point (FP16).</li>
+<li>
+<a href="https://github.com/KhronosGroup/EGL-Registry/pull/10/files" class="external">EGL_KHR_gl_colorspace_display_p3
+and EGL_EXT_gl_colorspace_display_p3_linear</a>. For applications that want
+to use Display-P3 format default framebuffers to more easily achieve sRGB
+rendering to display devices, this extension allows creating EGLSurfaces that
+will be rendered to in Display-P3 by OpenGL contexts supporting that capability.
+This can be implemented in EGL driver wrapper.</li>
+<li>
+<a href="https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VK_EXT_swapchain_colorspace" class="external">VK_EXT_swapchain_colorspace</a>
+(Vulkan). Enables applications to tag swap chains with the color space they are
+using. Includes a number of common color spaces such as DCI-P3, Display-P3,
+AdobeRGB, BT2020, etc.</li>
+</ul>
+
+<h2>Customizing</h2>
+<p>You can customize the color management feature by including support for a
+variety of color standards such as DCI-P3, AdobeRGB, Rec709, Rec2020. Other
+customizations include:</p>
+<ul>
+<li><strong>Hardware support for color conversion in the display
+pipeline</strong>. Enables support for multiple color transforms in hardware.
+</li>
+<li><strong>Support for independent color transform on multiple layers</strong>
+(e.g. some layers could be sRGB and others extended-sRGB, each with their own
+color pipeline). When there is more than one color space visible, some color
+spaces will need to be converted to the color space of the display. Ideally,
+this transform is best provided by the display engine (otherwise Android must
+perform GPU composition).</li>
+</ul>
+
+<h2>Testing</h2>
+<p>To test color management, use the following resources in
+<code>opengl/tests</code>:</p>
+<ul>
+<li><code>gl2_basic</code>. Simple OpenGL demo that requests a Display-P3
+colorspace.</li>
+<li><code>
+<a href="https://android.googlesource.com/platform/frameworks/native/+/master/opengl/tests/EGLTest/EGL_test.cpp">EGL_test</code></a>.
+Tests for necessary extension and config support (10:10:10:2 and FP16).</li>
+<li><code>test_wide_color</code>. Creates surface in same manner as
+SurfaceFlinger (e.g. config, color space, pixel format).</li>
+</ul>
+
+<h2>Reference implementation</h2>
+<p>For a reference implementation, refer to <code>frameworks/native</code>. For
+headers, refer to:</p>
+<ul>
+<li>
+<code><a href="https://android.googlesource.com/platform/system/core/+/master/libsystem/include/system/graphics.h">system/core/include/system/graphics.h</code></a></li>
+<li>
+<code><a href="https://android.googlesource.com/platform/system/core/+/master/libsystem/include/system/graphics-base.h">system/core/include/system/graphics-base.h</code></a><ul>
+<li><code>HAL_DATASPACE_*</code></li>
+<li><code>HAL_COLOR_MODE_*</code></li>
+</ul>
+</li>
+</ul>
+
+</body>
+</html>