Начиная с 27 марта 2025 г. мы рекомендуем использовать android-latest-release вместо aosp-main для создания и участия в AOSP. Дополнительные сведения см. в разделе Изменения в AOSP .
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Android 8.1 и выше включают поддержку управления цветом, которое может использоваться для обеспечения согласованного опыта при использовании различных технологий отображения. Приложения, работающие на Android, могут получить доступ ко всем возможностям широкоэкранного дисплея, чтобы максимально использовать возможности устройства отображения.
Предыдущие версии Android не включали поддержку управления цветом и вместо этого полагались на совместимость контента и дисплеев (цель, часто поддерживаемая телевизионной индустрией). Однако последние технологии отображения позволяют использовать дисплеи с гораздо большим охватом, которые не отображают существующий контент так, как ожидалось. С Android 8.1 и выше устройства, использующие дисплей с широким охватом (например, активная матрица органических светодиодов или AMOLED, некоторые ЖК-дисплеи), могут видеть контент с широким охватом из приложений.
Определить поддержку устройства
Устройства с широкоцветными дисплеями под управлением Android 8.1 или выше должны поддерживать управление цветом (широкоцветное). Перед включением этой функции убедитесь, что устройство соответствует следующим требованиям:
Дисплей устройства соответствует аппаратным требованиям, которые включают хорошо охарактеризованный дисплей, поддерживающий цветовое пространство Display-P3. Если дисплей не соответствует этому требованию, не включайте управление цветом. Для снижения влияния на ЦП и ГП желательна поддержка расширенного sRGB и HDR10 в конвейере дисплея.
Устройство поддерживает процесс заводской калибровки, который генерирует данные калибровки (хранящиеся на устройстве) для корректировки производственных отклонений в поведении дисплея. Как минимум, данные калибровки должны позволять дисплею точно отображать содержимое sRGB и белые точки D65 и D73.
Если эти требования соблюдены, вы можете включить функцию управления цветом на устройстве.
Внедрить управление цветом
Для реализации управления цветом сначала обновите драйвер Hardware Composer 2 (HWC2), чтобы он понимал цветовые режимы и применял их к оборудованию. В частности, компоновщик HWC2 должен сообщать о цветовых режимах Display-P3 и sRGB с помощью HWCDisplay::GetColorModes .
Далее включите необходимые расширения OpenGL и поддержку библиотек для перевода цветовых пространств OpenGL в пространства данных HAL. Требуемые расширения OpenGL включают:
EGL_EXT_pixel_format_float . Позволяет приложениям создавать презентабельные EGLSurfaces с 16-битными плавающими компонентами цвета. Приоритет: высокий (ожидайте, что это формат пикселей по умолчанию для приложений с широким диапазоном цветов). Требуется поддержка драйвера.
EGL_KHR_gl_colorspace . Для приложений, которые хотят использовать буферы кадров формата sRGB по умолчанию для более простого достижения рендеринга sRGB для устройств отображения, это расширение позволяет создавать EGLSurfaces, которые будут рендериться в sRGB с помощью контекстов OpenGL, поддерживающих эту возможность. Требуется поддержка драйвера для поведения sRGB.
Android также предоставляет следующие дополнительные расширения:
EGL_EXT_colorspace_scrgb_linear . Это расширение предоставляет новую опцию цветового пространства scRGB, которую приложения могут выбирать при создании EGLSurface. Цветовое пространство scRGB определяет линейное пространство отображения с той же белой точкой и основными цветами, что и sRGB (и, таким образом, обратно совместимо с sRGB). Это не должно требовать поддержки драйвера и может быть реализовано в оболочке Android EGL. Чтобы быть полезным, это расширение требует поддержки 16-битной плавающей точки (FP16).
EGL_EXT_gl_colorspace_display_p3 и EGL_EXT_gl_colorspace_display_p3_linear . Для приложений, которые хотят использовать буферы кадров формата Display-P3 по умолчанию для более простого достижения рендеринга sRGB на устройствах отображения, это расширение позволяет создавать EGLSurfaces, которые будут рендериться в Display-P3 контекстами OpenGL, поддерживающими эту возможность. Это можно реализовать в оболочке драйвера EGL.
VK_EXT_swapchain_colorspace (Vulkan). Позволяет приложениям помечать цепочки обмена цветовым пространством, которое они используют. Включает ряд распространенных цветовых пространств, таких как DCI-P3, Display-P3, AdobeRGB и BT2020.
Настройка
Вы можете настроить функцию управления цветом, включив поддержку различных цветовых стандартов, таких как DCI-P3, AdobeRGB, Rec709 и Rec2020. Другие настройки включают:
Аппаратная поддержка преобразования цветов в конвейере отображения. Обеспечивает поддержку множественных преобразований цветов в оборудовании.
Поддержка независимого преобразования цвета на нескольких слоях (например, некоторые слои могут быть sRGB, а другие — расширенным sRGB, каждый со своим собственным цветовым конвейером). Когда видно более одного цветового пространства, некоторые цветовые пространства необходимо преобразовать в цветовое пространство дисплея. В идеале это преобразование лучше всего обеспечивается движком дисплея (в противном случае Android должен выполнить композицию GPU).
Тестирование
Для тестирования управления цветом используйте следующие ресурсы в opengl/tests :
gl2_basic — простая демонстрационная версия OpenGL, которая запрашивает цветовое пространство Display-P3.
EGL_test проверяет необходимую поддержку расширений и конфигураций (10:10:10:2 и FP16).
test_wide_color создает поверхность таким же образом, как и SurfaceFlinger (например, конфигурация, цветовое пространство и формат пикселей).
Референтная реализация
Для эталонной реализации обратитесь к frameworks/native . Для заголовков обратитесь к:
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Color management\n\nAndroid 8.1 and higher include support for color management that can be used to provide a\nconsistent experience across display technologies. Apps running on\nAndroid can access the full capabilities of a wide-gamut display to get the\nmost out of a display device.\n\nPrevious Android releases didn't include color management support and\ninstead relied on content and displays being compatible (a goal often aided by\nthe TV industry). However, recent display technologies allow for much larger\ngamut displays that don't display existing content as expected. With Android\n8.1 and higher, devices that use a wide-gamut display (for example, active-matrix organic\nlight-emitting diode or AMOLED, some LCDs) can see wide-gamut\ncontent from apps.\n\nDetermine device support\n------------------------\n\nDevices with wide-color displays running Android 8.1 or higher should support color\nmanagement (wide-color). Before enabling this feature, ensure that the device meets\nthe following requirements:\n\n- Device display meets the hardware requirements, which include a well-characterized display that supports the Display-P3 colorspace. If the display doesn't meet this requirement, don't enable color management. To reduce CPU and GPU impact, support for extended sRGB and HDR10 in the display pipeline is desirable.\n- 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.\n\nIf these requirements are met, you can enable the color management\nfeature for the device.\n\nImplement color management\n--------------------------\n\nTo implement color management, first update the\n[Hardware Composer 2 (HWC2)](/docs/core/graphics/implement-hwc) driver\nto understand color modes and to apply those modes to the hardware.\nSpecifically, the HWC2 composer must report the Display-P3 and sRGB\ncolor modes using `HWCDisplay::GetColorModes`.\n| **Key Term:** Display-P3 uses Digital Cinema Initiatives primaries and sRGB transfer function.\n\nNext, enable the necessary OpenGL extensions and library support to\ntranslate OpenGL color spaces to HAL data spaces. Required OpenGL extensions\ninclude:\n\n- [`EGL_EXT_pixel_format_float`](https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_pixel_format_float.txt). Allows apps to create presentable EGLSurfaces with 16-bit float color components. Priority: high (expect this is the default pixel format for wide-color aware apps). Requires driver support.\n- [`EGL_KHR_gl_colorspace`](https://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_gl_colorspace.txt). For apps 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.\n\nAndroid also provides the following optional extensions:\n\n- [`EGL_EXT_colorspace_scrgb_linear`](https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_gl_colorspace_scrgb_linear.txt). This extension provides a new color space option, scRGB, that apps can 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 shouldn't 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).\n- [`EGL_EXT_gl_colorspace_display_p3`\n and `EGL_EXT_gl_colorspace_display_p3_linear`](https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_display_p3.txt). For apps 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.\n- [`VK_EXT_swapchain_colorspace`](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VK_EXT_swapchain_colorspace) (Vulkan). Enables apps to tag swap chains with the color space they're using. Includes a number of common color spaces such as DCI-P3, Display-P3, AdobeRGB, and BT2020.\n\nCustomization\n-------------\n\nYou can customize the color management feature by including support for a\nvariety of color standards such as DCI-P3, AdobeRGB, Rec709, and Rec2020. Other\ncustomizations include:\n\n- **Hardware support for color conversion in the display\n pipeline.** Enables support for multiple color transforms in hardware.\n- **Support for independent color transform on multiple layers** (for example, some layers could be sRGB and others extended-sRGB, each with their own color pipeline). When there's more than one color space visible, some color spaces 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).\n\nTesting\n-------\n\nTo test color management, use the following resources in\n`opengl/tests`:\n\n- `gl2_basic` is a simple OpenGL demo that requests a Display-P3 colorspace.\n- [`EGL_test`](https://android.googlesource.com/platform/frameworks/native/+/android16-release/opengl/tests/EGLTest/EGL_test.cpp) tests for necessary extension and config support (10:10:10:2 and FP16).\n- `test_wide_color` creates a surface in same manner as SurfaceFlinger (for example, config, color space, and pixel format).\n\nReference implementation\n------------------------\n\nFor a reference implementation, refer to `frameworks/native`. For\nheaders, refer to:\n\n- [`system/core/include/system/graphics.h`](https://android.googlesource.com/platform/system/core/+/android16-release/libsystem/include/system/graphics.h)\n- [`system/core/include/system/graphics-base.h`](https://android.googlesource.com/platform/system/core/+/android16-release/libsystem/include/system/graphics-base.h)\n - `HAL_DATASPACE_*`\n - `HAL_COLOR_MODE_*`"]]