Administración de color

Android 8.1 y versiones posteriores incluyen compatibilidad con la administración de color, que se puede usar para proporcionar una experiencia coherente en todas las tecnologías de visualización. Las apps que se ejecutan en Android pueden acceder a todas las funciones de una pantalla con amplia gama de colores para aprovechar al máximo un dispositivo de visualización.

Las versiones anteriores de Android no incluían compatibilidad con la administración de color y, en cambio, se basaban en que el contenido y las pantallas fueran compatibles (un objetivo que a menudo ayudaba a la industria de la TV). Sin embargo, las tecnologías de pantalla recientes permiten pantallas de gama mucho más amplias que no muestran el contenido existente como se espera. 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 LCD) pueden ver contenido de gama amplia desde las apps.

Cómo determinar la compatibilidad del dispositivo

Los dispositivos con pantallas de color amplio que ejecutan Android 8.1 o versiones posteriores deben admitir la administración del color (color amplio). Antes de habilitar esta función, asegúrate 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 habilites la administración del color. Para reducir el impacto en la CPU y la GPU, es conveniente que la canalización de pantalla admita sRGB extendido y HDR10.
  • 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 la pantalla. Como mínimo, los datos de calibración deben permitir que la pantalla muestre con precisión el contenido sRGB y los puntos blancos D65 y D73.

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

Implementa la administración de color

Para implementar la administración del color, primero actualiza el controlador de Hardware Composer 2 (HWC2) para que comprenda los modos de color y los aplique al hardware. Específicamente, el compositor de HWC2 debe informar los modos de color Display-P3 y sRGB con HWCDisplay::GetColorModes.

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

  • EGL_EXT_pixel_format_float. Permite que las apps creen EGLSurfaces presentables con componentes de color de coma flotante de 16 bits. Prioridad: Alta (se espera que este sea el formato de píxel predeterminado para las apps compatibles con colores amplios). Se requiere asistencia del conductor.
  • EGL_KHR_gl_colorspace. Para las apps que desean usar búferes de fotogramas predeterminados en formato sRGB para lograr más fácilmente la renderización sRGB en dispositivos de visualización, esta extensión permite crear EGLSurfaces que se renderizarán en sRGB con contextos de OpenGL que admitan esa capacidad. Requiere compatibilidad del controlador con 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 apps pueden elegir cuando crean un EGLSurface. El espacio de color scRGB define un espacio de visualización lineal al que se hace referencia con el mismo punto blanco y los mismos colores primarios que sRGB (y, por lo tanto, es compatible con sRGB). Esto no debería requerir compatibilidad con el controlador y se puede implementar en el wrapper de EGL de Android. Para ser útil, esta extensión requiere compatibilidad con el punto flotante de 16 bits (FP16).
  • EGL_EXT_gl_colorspace_display_p3 y EGL_EXT_gl_colorspace_display_p3_linear. En el caso de las apps que desean usar búferes de fotogramas predeterminados en formato Display-P3 para lograr más fácilmente la renderización sRGB en dispositivos de visualización, esta extensión permite crear EGLSurfaces que se renderizarán en Display-P3 con contextos de OpenGL que admitan esa capacidad. Esto se puede implementar en el wrapper del controlador de EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Permite que las apps etiqueten las cadenas de intercambio con el espacio de color que usan. Incluye varios espacios de color comunes, como DCI-P3, Display-P3, AdobeRGB y BT2020.

Personalización

Puedes personalizar la función de administración de color para incluir compatibilidad con una variedad de estándares de color, como DCI-P3, AdobeRGB, Rec709 y Rec2020. Otras personalizaciones incluyen las siguientes:

  • Compatibilidad de hardware para la conversión de color en la canalización de visualización. Se habilitó la compatibilidad con varias 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 extendido, 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, el motor de pantalla debería proporcionar esta transformación (de lo contrario, Android debe realizar la composición de la GPU).

Prueba

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

  • gl2_basic es una demostración sencilla de OpenGL que solicita un espacio de color Display-P3.
  • EGL_test Pruebas de compatibilidad con la extensión y la configuración necesarias (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íxel).

Implementación de referencia

Para obtener una implementación de referencia, consulta frameworks/native. Para los encabezados, consulta lo siguiente: