HDR em capturas de tela do Android

Após o lançamento do vídeo em High Dynamic Range (HDR), os serviços de streaming começaram a transmitir vídeos em HDR, com foco em experiências de tela cheia. Os apps de mídia social agora são compatíveis com vídeos HDR e Ultra HDR, o que indica um interesse crescente na adoção do 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ídeos em HDR.
  • Avanços contínuos nos recursos de HDR.

Android 13

  • Suporte de ponta a ponta para captura, codificação e exibição de vídeo HDR.
  • Introduzimos a composição mista de 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 gráfico do Android, oferece 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. Por isso, 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, então o conteúdo SDR na captura de tela aparece com o mesmo brilho do 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 representa um desafio significativo para as 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 ao redor.
  • Os apps são responsáveis pelo mapeamento de tons com base na fonte ao renderizar a IU.

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.
  • Compromisso ao clarear a interface do app enquanto corta os destaques do 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 de luminância baixos em cada seção.
  • Interpolar as luminâncias calculadas com desfoque e reamostragem.
  • Aplicar um mapeador de tons 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 para o 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 QPR1 do Android 15 no 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 recebem 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 QPR1 do Android 15 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 para o 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 oferece suporte à codificação e à decodificação desses PNGs. Os apps podem mostrar um PNG com um mapa de ganho da mesma maneira que o Ultra HDR.