Gerenciamento de cor

O Android 8.1 e superior incluem suporte para gerenciamento de cores que pode ser usado para fornecer uma experiência consistente em todas as tecnologias de exibição. Os aplicativos executados no Android podem acessar todos os recursos de uma tela de ampla gama para aproveitar ao máximo um dispositivo de exibição.

As versões anteriores do Android não incluíam suporte para gerenciamento de cores e, em vez disso, dependiam da compatibilidade de conteúdo e telas (um objetivo frequentemente auxiliado pela indústria de TV). No entanto, as tecnologias de exibição recentes permitem exibições de gama muito maior que não exibem o conteúdo existente conforme o esperado. Com o Android 8.1 e superior, os dispositivos que usam uma tela de ampla gama (por exemplo, diodo orgânico emissor de luz de matriz ativa ou AMOLED, alguns LCDs) podem ver conteúdo de ampla gama de aplicativos.

Determinar o suporte do dispositivo

Dispositivos com telas coloridas que executam Android 8.1 ou superior devem oferecer suporte ao gerenciamento de cores (cores amplas). Antes de ativar esse recurso, certifique-se de que o dispositivo atenda aos seguintes requisitos:

  • A tela do dispositivo atende aos requisitos de hardware, que incluem uma tela bem caracterizada que suporta o espaço de cores Display-P3. Se o monitor não atender a esse requisito, não ative o gerenciamento de cores. Para reduzir o impacto da CPU e GPU, é desejável suporte para sRGB e HDR10 estendidos no pipeline de exibição.
  • O dispositivo suporta um processo de calibração de fábrica que gera dados de calibração (armazenados no dispositivo) para ajustar a variação de fabricação no comportamento do display. No mínimo, os dados de calibração devem permitir que o monitor exiba com precisão o conteúdo sRGB e os pontos brancos D65 e D73.

Se esses requisitos forem atendidos, você poderá ativar o recurso de gerenciamento de cores para o dispositivo.

Implementar gerenciamento de cores

Para implementar o gerenciamento de cores, primeiro atualize o driver Hardware Composer 2 (HWC2) para entender os modos de cores e aplicar esses modos ao hardware. Especificamente, o compositor HWC2 deve relatar os modos de cores Display-P3 e sRGB usando HWCDisplay::GetColorModes .

Em seguida, ative as extensões OpenGL necessárias e o suporte de biblioteca para traduzir espaços de cores OpenGL em espaços de dados HAL. As extensões OpenGL necessárias incluem:

  • EGL_EXT_pixel_format_float . Permite que os aplicativos criem EGLSurfaces apresentáveis ​​com componentes de cores flutuantes de 16 bits. Prioridade: alta (espere que este seja o formato de pixel padrão para aplicativos com reconhecimento de cores amplas). Requer suporte de driver.
  • EGL_KHR_gl_colorspace . Para aplicativos que desejam usar framebuffers padrão no formato sRGB para obter mais facilmente a renderização sRGB para dispositivos de exibição, esta extensão permite criar EGLSurfaces que serão renderizados em sRGB por contextos OpenGL que suportam esse recurso. Requer suporte de driver para comportamento sRGB.

O Android também oferece as seguintes extensões opcionais:

  • EGL_EXT_colorspace_scrgb_linear . Esta extensão fornece uma nova opção de espaço de cores, scRGB, que os aplicativos podem escolher ao criar um EGLSurface. O espaço de cores scRGB define um espaço de exibição linear com o mesmo ponto branco e cores primárias do sRGB (e, portanto, é compatível com versões anteriores do sRGB). Isso não deve exigir suporte de driver e pode ser implementado no wrapper Android EGL. Para ser útil, esta extensão requer suporte para ponto flutuante de 16 bits (FP16).
  • EGL_EXT_gl_colorspace_display_p3 e EGL_EXT_gl_colorspace_display_p3_linear . Para aplicativos que desejam usar framebuffers padrão no formato Display-P3 para obter mais facilmente a renderização sRGB para dispositivos de exibição, esta extensão permite criar EGLSurfaces que serão renderizados em Display-P3 por contextos OpenGL que suportam esse recurso. Isso pode ser implementado no wrapper do driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Permite que os aplicativos marquem cadeias de troca com o espaço de cores que estão usando. Inclui vários espaços de cores comuns, como DCI-P3, Display-P3, AdobeRGB e BT2020.

Costumização

Você pode personalizar o recurso de gerenciamento de cores incluindo suporte para uma variedade de padrões de cores, como DCI-P3, AdobeRGB, Rec709 e Rec2020. Outras personalizações incluem:

  • Suporte de hardware para conversão de cores no pipeline de exibição. Permite suporte para múltiplas transformações de cores em hardware.
  • Suporte para transformação de cores independente em múltiplas camadas (por exemplo, algumas camadas podem ser sRGB e outras sRGB estendidas, cada uma com seu próprio pipeline de cores). Quando há mais de um espaço de cores visível, alguns espaços de cores precisam ser convertidos no espaço de cores do display. Idealmente, essa transformação é melhor fornecida pelo mecanismo de exibição (caso contrário, o Android deve realizar a composição da GPU).

Teste

Para testar o gerenciamento de cores, use os seguintes recursos em opengl/tests :

  • gl2_basic é uma demonstração simples de OpenGL que solicita um espaço de cores Display-P3.
  • EGL_test testa a extensão necessária e suporte de configuração (10:10:10:2 e FP16).
  • test_wide_color cria uma superfície da mesma maneira que SurfaceFlinger (por exemplo, configuração, espaço de cores e formato de pixel).

Implementação de referência

Para uma implementação de referência, consulte frameworks/native . Para cabeçalhos, consulte: