Manejo del color

Android 8.1 y versiones posteriores incluyen soporte para la gestión del color que se puede utilizar para brindar una experiencia consistente en todas las tecnologías de visualización. Las aplicaciones que se ejecutan en Android pueden acceder a todas las capacidades de una pantalla de amplia gama para aprovechar al máximo un dispositivo de visualización.

Las versiones anteriores de Android no incluían compatibilidad con la gestión del color y, en cambio, dependían de que el contenido y las pantallas fueran compatibles (un objetivo que a menudo ayuda la industria de la televisión). Sin embargo, las tecnologías de visualización recientes permiten pantallas con una gama mucho mayor que no muestran el contenido existente como se esperaba. Con Android 8.1 y versiones posteriores, los dispositivos que utilizan una pantalla de amplia gama (por ejemplo, diodos emisores de luz orgánicos de matriz activa o AMOLED, algunas pantallas LCD) pueden ver contenido de amplia gama de aplicaciones.

Determinar la compatibilidad del dispositivo

Los dispositivos con pantallas de colores amplios que ejecutan Android 8.1 o superior deben admitir la gestión del color (colores amplios). Antes de habilitar esta función, asegúrese de que el dispositivo cumpla con los siguientes requisitos:

  • La pantalla del dispositivo cumple con los requisitos de hardware, que incluyen una pantalla bien caracterizada que admita el espacio de color Display-P3. Si la pantalla no cumple con este requisito, no habilite la administración del color. Para reducir el impacto de la CPU y la GPU, es deseable la compatibilidad con sRGB y HDR10 extendidos en el proceso de visualización.
  • El dispositivo admite un proceso de calibración de fábrica que genera datos de calibración (almacenados en el dispositivo) para ajustarse a las variaciones de fabricación en el comportamiento de la pantalla. Como mínimo, los datos de calibración deberían permitir que la pantalla muestre con precisión el contenido sRGB y los puntos blancos D65 y D73.

Si se cumplen estos requisitos, puede habilitar la función de administración de color para el dispositivo.

Implementar la gestión del color

Para implementar la administración del color, primero actualice el controlador Hardware Composer 2 (HWC2) para comprender los modos de color y aplicar esos modos al hardware. Específicamente, el compositor de HWC2 debe informar los modos de color Display-P3 y sRGB mediante HWCDisplay::GetColorModes .

A continuación, habilite las extensiones OpenGL necesarias y la compatibilidad con la biblioteca para traducir espacios de color OpenGL a espacios de datos HAL. Las extensiones OpenGL requeridas incluyen:

  • EGL_EXT_pixel_format_float . Permite que las aplicaciones creen EGLSurfaces presentables con componentes de color flotante de 16 bits. Prioridad: alta (espere que este sea el formato de píxeles predeterminado para aplicaciones que admiten colores amplios). Requiere soporte del conductor.
  • EGL_KHR_gl_colorspace . Para las aplicaciones que desean usar framebuffers predeterminados del formato sRGB para lograr más fácilmente la representación sRGB en dispositivos de visualización, esta extensión permite crear superficies EGLSurfaces que se representarán en sRGB mediante contextos OpenGL que admitan esa capacidad. Requiere soporte de controlador para el comportamiento sRGB.

Android también proporciona las siguientes extensiones opcionales:

  • EGL_EXT_colorspace_scrgb_linear . Esta extensión proporciona una nueva opción de espacio de color, scRGB, que las aplicaciones pueden elegir al crear una EGLSurface. El espacio de color scRGB define un espacio referido de visualización lineal con el mismo punto blanco y colores primarios que sRGB (y por lo tanto es compatible con versiones anteriores de sRGB). Esto no debería requerir soporte de controlador y se puede implementar en el contenedor EGL de Android. Para que sea útil, esta extensión requiere soporte para punto flotante de 16 bits (FP16).
  • EGL_EXT_gl_colorspace_display_p3 y EGL_EXT_gl_colorspace_display_p3_linear . Para las aplicaciones que desean utilizar framebuffers predeterminados del formato Display-P3 para lograr más fácilmente la representación sRGB en dispositivos de visualización, esta extensión permite crear superficies EGLS que se representarán en Display-P3 mediante contextos OpenGL que admitan esa capacidad. Esto se puede implementar en el contenedor del controlador EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Permite que las aplicaciones etiqueten cadenas de intercambio con el espacio de color que están usando. Incluye una serie de espacios de color comunes, como DCI-P3, Display-P3, AdobeRGB y BT2020.

Personalización

Puede personalizar la función de administración del color incluyendo compatibilidad con una variedad de estándares de color como DCI-P3, AdobeRGB, Rec709 y Rec2020. Otras personalizaciones incluyen:

  • Soporte de hardware para la conversión de color en el proceso de visualización. Habilita la compatibilidad con múltiples transformaciones de color en hardware.
  • Soporte para transformación de color independiente en múltiples capas (por ejemplo, algunas capas podrían ser sRGB y otras extendidas, sRGB, cada una con su propia canalización de colores). Cuando hay más de un espacio de color visible, algunos espacios de color deben convertirse al espacio de color de la pantalla. Idealmente, esta transformación la proporciona mejor el motor de visualización (de lo contrario, Android debe realizar la composición de GPU).

Pruebas

Para probar la gestión del color, utilice los siguientes recursos en opengl/tests :

  • gl2_basic es una demostración simple de OpenGL que solicita un espacio de color Display-P3.
  • EGL_test prueba la extensión necesaria y el soporte de configuración (10:10:10:2 y FP16).
  • test_wide_color crea una superficie de la misma manera que SurfaceFlinger (por ejemplo, configuración, espacio de color y formato de píxeles).

Implementación de referencia

Para obtener una implementación de referencia, consulte frameworks/native . Para encabezados, consulte: