HDR en capturas de pantalla de Android

Tras la introducción del video de alto rango dinámico (HDR), los servicios de transmisión comenzaron a transmitir videos HDR, enfocándose en experiencias de pantalla completa. Las apps de redes sociales ahora admiten video HDR y Ultra HDR, lo que indica un creciente interés en la adopción de HDR en varias apps.

Compatibilidad de Android con HDR

Android ha admitido la tecnología HDR a través de varios hitos:

Android 7

  • Se agregó compatibilidad inicial con la decodificación y visualización de video HDR.
  • Avances continuos en las funciones de HDR

Android 13

  • Compatibilidad integral con la captura, la codificación y la visualización de video HDR
  • Se introdujo la composición mixta de SDR y HDR, que define diferentes rangos de luminancia que se pueden mostrar entre SDR y HDR.

Android 14

  • Compatibilidad con imágenes HDR con Ultra HDR

La compatibilidad con capturas de pantalla HDR también evolucionó y cambió.

Avances en las capacidades de captura de pantalla HDR

En esta sección, se describe la progresión de la capacidad de captura de pantalla HDR en las actualizaciones de Android.

Android 9

SurfaceFlinger, el compositor de gráficos de Android, presenta compatibilidad con videos en HDR. La renderización de GPU de videos y capturas de pantalla HDR usa un asignador de tonos polinómico complejo. Esta curva de asignación de tonos no siempre equivale al asignador de tonos de la pantalla, por lo que las capturas de pantalla difieren del contenido en pantalla.

Android 13

El bloque de renderización de GPU de SurfaceFlinger incluye un complemento de asignación de tono, que permite que el OEM proporcione un sombreador de GPU que coincida con la curva de asignación de tono de su pantalla. Las capturas de pantalla casi coinciden con el contenido en pantalla, pero con las siguientes diferencias:

  • Las capturas de pantalla permanecen en formato SDR. Por lo tanto, cuando se ven junto con una escena HDR, las regiones HDR dentro de la captura de pantalla se ven más oscuras.
  • La luminancia SDR no se administra, por lo que el contenido SDR dentro de la captura de pantalla aparece tan brillante como el contenido HDR.

En otras palabras, el sistema convierte cualquier video HDR capturado en la captura de pantalla en un video SDR.

Android 14

Ultra HDR plantea un desafío importante para las capturas de pantalla. A diferencia de los videos, el sistema suele renderizar imágenes dentro del búfer de fotogramas de la IU, lo que tiene dos implicaciones principales:

  • Las imágenes no pueden tener un procesamiento de imágenes, incluido el ajuste de tonos, que difiera de la IU circundante.
  • Las apps son responsables de la asignación de tonos basada en la fuente cuando renderizan su IU.

Para mitigar este desafío, considera tres posibles implementaciones de captura de pantalla:

  • Conservar los detalles de HDR de una imagen Ultra HDR, lo que genera una IU de la app oscurecida en la captura de pantalla
  • Conservar los detalles de la IU de la app, lo que provoca el recorte de la imagen Ultra HDR
  • Compromete el brillo de la IU de la app mientras recorta los detalles destacados en HDR.

Android 14 implementa el tercer enfoque para aclarar la IU de la app y recortar los detalles HDR.

QPR1 para Android 15

SurfaceFlinger incluye un algoritmo de asignación de tono local para las capturas de pantalla. Este proceso implica lo siguiente:

  • Dividir la imagen de entrada en imágenes más pequeñas
  • Se calcula la luminancia máxima en cada imagen y se descartan los valores de luminancia bajos dentro de cada sección.
  • Interpolar las luminancias calculadas a través del desenfoque y el nuevo muestreo
  • Aplicar un asignador de tonos de Reinhard parametrizado a la imagen de entrada, según los valores de luminancia interpolados

Este algoritmo mejora significativamente las capturas de pantalla entre Android 14 y Android 15 QPR1, como se demuestra en los siguientes ejemplos:

  • En el ejemplo 1, se muestra una captura de pantalla de un video HDR superpuesto en una página de Chrome que contiene Ultra HDR. Los colores de la IU se conservan en su mayoría en la nueva implementación, y la imagen ya no se recorta.

    Android 14 QPR1 para Android 15
    Ejemplo 1 en Android 14 Ejemplo 1 en Android 15qpr

    Figura 1: Comparación de Android 14 y Android 15 QPR1 para el ejemplo 1.

  • El ejemplo 2 es una captura de pantalla de un video HDR superpuesto sobre Configuración con capturas de pantalla posteriores. En Android 14, los colores de las capturas de pantalla son cada vez más oscuros. En el QPR1 de Android 15, el asignador de tonos replica y conserva correctamente los colores de la IU.

    Android 14 QPR1 para Android 15
    Ejemplo 2 en Android 14 Ejemplo 2 en Android 15qpr

    Figura 2: Comparación de Android 14 y Android 15 QPR1 para el ejemplo 2.

Android 16

Al igual que en Ultra HDR, las capturas de pantalla HDR almacenan un mapa de ganancia en el archivo de captura de pantalla para recuperar la representación HDR durante la renderización. Sin embargo, a diferencia de Ultra HDR, la captura de pantalla permanece en formato PNG para garantizar la retrocompatibilidad con los sistemas que admiten capturas de pantalla en PNG.

La generación de capturas de pantalla implica lo siguiente:

  • Cuando se muestra contenido HDR en el dispositivo, se genera una captura de pantalla con píxeles FP16.
  • El asignador de tonos local que se describe en Android 15 QPR1 genera una representación SDR base de 8 bits.
  • Se produce un mapa de ganancia de 8 bits combinando la representación base de SDR con la representación de HDR.
  • La versión base en SDR y el mapa de ganancia se codifican en un solo archivo PNG.

La codificación PNG implica lo siguiente:

  • El mapa de ganancia se codifica como una imagen PNG, que incluye un fragmento gmAP que contiene los metadatos de ISO 21496-1 para el mapa de ganancia.
  • La versión base en SDR se codifica como una imagen PNG, que incluye un fragmento gmAP que contiene la versión de los metadatos de ISO 21496-1. Esta imagen PNG también incluye un fragmento gdAT, que contiene la totalidad del PNG del mapa de ganancia codificado.

En la siguiente figura, se muestra el diseño de los fragmentos de PNG:

Diseño de los fragmentos de PNG

Figura 3: Diseño de los fragmentos PNG.

Con Android 16, el códec PNG admite la codificación y decodificación de estos PNG. Las apps pueden mostrar un PNG con un mapa de ganancia de la misma manera que Ultra HDR.