HDR em capturas de tela do Android

Após a introdução do vídeo em High Dynamic Range (HDR), os serviços de streaming começaram a transmitir vídeos em HDR, focando em experiências em tela cheia. Os apps de redes sociais agora oferecem suporte a vídeos HDR e Ultra HDR, o que indica um interesse crescente na adoção de HDR em vários apps.

Suporte do Android para HDR

O Android oferece suporte à tecnologia HDR em várias etapas:

Android 7

  • Suporte inicial para decodificação e exibição de vídeo HDR.
  • Avanços contínuos nos recursos de HDR.

Android 13

  • Suporte completo para captura, codificação e exibição de vídeo HDR.
  • Introduzimos a composição com SDR e HDR, que define diferentes intervalos de luminância mostráveis entre SDR e HDR.

Android 14

O suporte a capturas de tela em HDR também evoluiu e mudou.

Avanços nos recursos de captura de tela em HDR

Esta seção descreve a progressão da capacidade de captura de tela em HDR nas atualizações do Android.

Android 9

O SurfaceFlinger, compositor de gráficos do Android, apresenta suporte a vídeos HDR. A renderização de vídeo e capturas de tela HDR pela GPU usa um mapeador de tons polinomiais complexo. Essa curva de mapeamento de tons nem sempre é equivalente ao mapeador de tons da tela, então as capturas de tela são diferentes do conteúdo na tela.

Android 13

O bloco de renderização de GPU do SurfaceFlinger inclui um plug-in de mapeamento de tons, que permite que o OEM forneça um shader de GPU para corresponder à curva de mapeamento de tons da tela. As capturas de tela são quase iguais ao conteúdo na tela, mas com as seguintes diferenças:

  • As capturas de tela permanecem no formato SDR. Consequentemente, quando visualizadas ao lado de uma cena HDR, as regiões HDR na captura de tela parecem mais escuras.
  • A luminância SDR não é gerenciada. Por isso, o conteúdo SDR na captura de tela aparece tão claro quanto o conteúdo HDR.

Em outras palavras, o sistema converte qualquer vídeo HDR capturado na captura de tela em vídeo SDR.

Android 14

O Ultra HDR é um desafio significativo para capturas de tela. Ao contrário dos vídeos, o sistema geralmente renderiza imagens no framebuffer da interface, o que tem duas implicações principais:

  • As imagens não podem ter processamento, incluindo mapeamento de tons, que difere da interface do usuário ao redor.
  • Os apps são responsáveis pelo mapeamento de tons baseado na origem ao renderizar a interface.

Para aliviar esse desafio, considere três possíveis implementações de captura de tela:

  • Preserva os detalhes HDR de uma imagem Ultra HDR, resultando em uma interface do app escurecida na captura de tela.
  • Preservar os detalhes da interface do app, causando corte na imagem Ultra HDR.
  • Comprometa-se iluminando a interface do app e cortando os destaques em HDR.

O Android 14 implementa a terceira abordagem de clareamento da interface do app e corte de destaques HDR.

Android 15-QPR1

O SurfaceFlinger inclui um algoritmo local de mapeamento de tons para capturas de tela. Esse processo envolve:

  • Dividir a imagem de entrada em imagens menores.
  • Calculando a luminância máxima em cada imagem e descartando valores baixos em cada seção.
  • Interpolação das luminâncias calculadas por desfoque e reamostragem.
  • Aplicar um tonemapper de Reinhard parametrizado à imagem de entrada com base nos valores de luminância interpolados.

Esse algoritmo melhora significativamente as capturas de tela entre o Android 14 e o Android 15 QPR1, como demonstram os exemplos a seguir:

  • O exemplo 1 é uma captura de tela de um vídeo HDR sobreposto a uma página do Chrome com Ultra HDR. As cores da interface são preservadas na nova implementação, e a imagem não é mais cortada.

    Android 14 Android 15-QPR1
    Exemplo 1 no Android 14 Exemplo 1 no Android 15qpr

    Figura 1. Comparação do Android 14 e do Android 15 QPR1 no exemplo 1.

  • O exemplo 2 é uma captura de tela de um vídeo HDR sobreposto às Configurações com capturas de tela subsequentes. No Android 14, as cores da captura de tela ficam cada vez mais escuras. No Android 15-QPR1, o tonemapper replica e preserva corretamente as cores da interface.

    Android 14 Android 15-QPR1
    Exemplo 2 no Android 14 Exemplo 2 no Android 15qpr

    Figura 2. Comparação do Android 14 e do Android 15 QPR1 para o exemplo 2.

Android 16

Semelhante ao Ultra HDR, as capturas de tela em HDR armazenam um mapa de ganho no arquivo de captura de tela para recuperar a representação HDR durante a renderização. No entanto, ao contrário do Ultra HDR, a captura de tela permanece no formato PNG para compatibilidade com versões anteriores de sistemas que ingerem capturas de tela PNG.

A geração de capturas de tela envolve o seguinte:

  • Quando o conteúdo HDR é exibido no dispositivo, uma captura de tela é gerada usando pixels FP16.
  • O mapeador de tons local descrito no Android 15-QPR1 gera uma renderização SDR de base de 8 bits.
  • Um mapa de ganho de 8 bits é produzido combinando a renderização de base SDR com a renderização HDR.
  • A renderização de base SDR e o mapa de ganho são codificados em um único arquivo PNG.

A codificação PNG envolve o seguinte:

  • O mapa de ganho é codificado como uma imagem PNG, que inclui um bloco gmAP contendo os metadados ISO 21496-1 do mapa de ganho.
  • A renderização de base em SDR é codificada como uma imagem PNG, que inclui um bloco gmAP contendo a versão dos metadados ISO 21496-1. Essa imagem PNG também inclui um bloco gdAT, que contém todo o PNG de mapa de ganho codificado.

A figura a seguir mostra o layout dos blocos PNG:

Layout dos blocos PNG

Figura 3. Layout dos blocos PNG.

Com o Android 16, o codec PNG é compatível com a codificação e a decodificação desses PNGs. Os apps podem mostrar um PNG com um mapa de ganho da mesma maneira que o Ultra HDR.