Управление цветом

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 (Вулкан). Позволяет приложениям помечать цепочки обмена с помощью цветового пространства, которое они используют. Включает ряд распространенных цветовых пространств, таких как DCI-P3, Display-P3, AdobeRGB и BT2020.

Настройка

Вы можете настроить функцию управления цветом, включив поддержку различных цветовых стандартов, таких как DCI-P3, AdobeRGB, Rec709 и Rec2020. Другие настройки включают в себя:

  • Аппаратная поддержка преобразования цвета в конвейере отображения. Включает аппаратную поддержку нескольких преобразований цвета.
  • Поддержка независимого преобразования цвета на нескольких слоях (например, некоторые слои могут быть sRGB, а другие — расширенный sRGB, каждый со своим собственным цветовым конвейером). Когда видно более одного цветового пространства, некоторые цветовые пространства необходимо преобразовать в цветовое пространство дисплея. В идеале это преобразование лучше всего обеспечивается механизмом отображения (в противном случае Android должен выполнять композицию графического процессора).

Тестирование

Чтобы протестировать управление цветом, используйте следующие ресурсы в opengl/tests :

  • gl2_basic — это простая демонстрация OpenGL, которая запрашивает цветовое пространство Display-P3.
  • EGL_test тестирует необходимые расширения и поддержку конфигурации (10:10:10:2 и FP16).
  • test_wide_color создает поверхность так же, как SurfaceFlinger (например, конфигурация, цветовое пространство и формат пикселей).

Эталонная реализация

Для эталонной реализации обратитесь к frameworks/native . Для заголовков см.: