Manejo del color

Android 8.1 y versiones posteriores incluyen compatibilidad con la gestión del color que se puede usar para brindar una experiencia uniforme 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 pantalla.

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 a la industria de la televisión). Sin embargo, las tecnologías de visualización recientes permiten pantallas de gama mucho más amplias que no muestran el contenido existente como se esperaba. Con Android 8.1 y versiones posteriores, los dispositivos que usan una pantalla de gama amplia (por ejemplo, diodo emisor de luz orgánico de matriz activa o AMOLED, algunas pantallas LCD) pueden ver contenido de gama amplia de las aplicaciones.

Determinación del soporte 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 admite el espacio de color Display-P3. Si la pantalla no cumple con este requisito, no habilite la gestión del color. Para reducir el impacto de la CPU y la GPU, es deseable la compatibilidad con sRGB y HDR10 extendidos en la tubería 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 ajustar la variación de fabricación en el comportamiento de visualización. 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.

Implementación de la gestión del color

Para implementar la gestió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 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 los 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íxel predeterminado para aplicaciones que reconocen colores amplios). Requiere soporte de controlador.
  • EGL_KHR_gl_colorspace . Para las aplicaciones que desean usar búferes de fotogramas predeterminados en formato sRGB para lograr una representación sRGB más fácil en los dispositivos de visualización, esta extensión permite crear EGLSurfaces que se procesará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 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 compatibilidad con el controlador y se puede implementar en el contenedor EGL de Android. Para ser útil, esta extensión requiere soporte para coma flotante de 16 bits (FP16).
  • EGL_EXT_gl_colorspace_display_p3 y EGL_EXT_gl_colorspace_display_p3_linear . Para las aplicaciones que desean usar los búferes de fotogramas predeterminados del formato Display-P3 para lograr una representación sRGB más fácil en los dispositivos de visualización, esta extensión permite crear EGLSurfaces 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 al incluir soporte para una variedad de estándares de color como DCI-P3, AdobeRGB, Rec709 y Rec2020. Otras personalizaciones incluyen:

  • Compatibilidad de hardware para la conversión de color en la tubería de visualización. Habilita la compatibilidad con múltiples transformaciones de color en el hardware.
  • Compatibilidad con la transformación de color independiente en varias capas (por ejemplo, algunas capas podrían ser sRGB y otras sRGB extendidas, cada una con su propia canalización de color). 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 la 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 una implementación de referencia, consulte frameworks/native . Para encabezados, consulte: