Gestione del colore

Android 8.1 e versioni successive includono il supporto per la gestione del colore, che può essere utilizzata per fornire un'esperienza coerente tra le tecnologie di visualizzazione. Le app in esecuzione su Android possono accedere a tutte le funzionalità di un display ad ampia gamma per ottenere il massimo da un dispositivo di visualizzazione.

Le versioni precedenti di Android non includevano il supporto per la gestione del colore e si basavano invece sulla compatibilità di contenuti e display (un obiettivo spesso aiutato dall'industria televisiva). Tuttavia, le recenti tecnologie di visualizzazione consentono di visualizzare gamme molto più ampie che non mostrano i contenuti esistenti come previsto. Con Android 8.1 e versioni successive, i dispositivi che utilizzano un display ad ampia gamma (ad esempio, diodi organici a emissione di luce o AMOLED a matrice attiva, alcuni LCD) possono visualizzare contenuti ad ampia gamma dalle app.

Determinare il supporto del dispositivo

I dispositivi con display a colori intensi con Android 8.1 o versioni successive dovrebbero supportare la gestione del colore (ampia gamma di colori). Prima di attivare questa funzionalità, assicurati che il dispositivo soddisfi i seguenti requisiti:

  • Il display del dispositivo soddisfa i requisiti hardware, che includono un display ben caratterizzato che supporta lo spazio colore Display P3. Se il display non soddisfa questo requisito, non attivare la gestione del colore. Per ridurre l'impatto su CPU e GPU, è auspicabile il supporto di sRGB esteso e HDR10 nella pipeline di visualizzazione.
  • Il dispositivo supporta una procedura di calibrazione di fabbrica che genera dati di calibrazione (memorizzati sul dispositivo) per compensare la varianza di produzione nel comportamento del display. Come minimo, i dati di calibrazione devono consentire al display di visualizzare con precisione i contenuti sRGB e i punti di bianco D65 e D73.

Se questi requisiti sono soddisfatti, puoi attivare la funzionalità di gestione del colore per il dispositivo.

Implementare la gestione del colore

Per implementare la gestione del colore, aggiorna prima il driver Hardware Composer 2 (HWC2) per comprendere le modalità colore e applicarle all'hardware. Nello specifico, il compositore HWC2 deve segnalare le modalità colore Display-P3 e sRGB utilizzando HWCDisplay::GetColorModes.

Successivamente, attiva le estensioni OpenGL e il supporto della libreria necessari per convertire gli spazi colore OpenGL in spazi dati HAL. Le estensioni OpenGL richieste includono:

  • EGL_EXT_pixel_format_float. Consente alle app di creare EGLSurface presentabili con componenti di colore in virgola mobile a 16 bit. Priorità: alta (si prevede che questo sia il formato pixel predefinito per le app compatibili con la gamma cromatica estesa). Richiede il supporto del conducente.
  • EGL_KHR_gl_colorspace. Per le app che vogliono utilizzare i framebuffer predefiniti in formato sRGB per ottenere più facilmente il rendering sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurface che verranno sottoposte a rendering in sRGB dai contesti OpenGL che supportano questa funzionalità. Richiede il supporto del driver per il comportamento sRGB.

Android fornisce anche le seguenti estensioni facoltative:

  • EGL_EXT_colorspace_scrgb_linear. Questa estensione fornisce una nuova opzione per lo spazio colore, scRGB, che le app possono scegliere quando creano un EGLSurface. Lo spazio colore scRGB definisce uno spazio di riferimento lineare del display con lo stesso punto di bianco e gli stessi colori primari di sRGB (e quindi è compatibile con le versioni precedenti di sRGB). Questa operazione non dovrebbe richiedere il supporto del driver e può essere implementata nel wrapper EGL di Android. Per essere utile, questa estensione richiede il supporto per la virgola mobile a 16 bit (FP16).
  • EGL_EXT_gl_colorspace_display_p3 e EGL_EXT_gl_colorspace_display_p3_linear. Per le app che vogliono utilizzare i framebuffer predefiniti del formato Display-P3 per ottenere più facilmente il rendering sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurface che verranno sottoposte a rendering in Display-P3 dai contesti OpenGL che supportano questa funzionalità. Questa operazione può essere implementata nel wrapper del driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Consente alle app di taggare le catene di scambio con lo spazio colore che utilizzano. Include una serie di spazi colore comuni come DCI-P3, Display-P3, AdobeRGB e BT2020.

Personalizzazione

Puoi personalizzare la funzionalità di gestione del colore includendo il supporto per una varietà di standard di colore come DCI-P3, AdobeRGB, Rec709 e Rec2020. Altre personalizzazioni includono:

  • Supporto hardware per la conversione del colore nella pipeline di visualizzazione. Consente il supporto di più trasformazioni del colore nell'hardware.
  • Supporto della trasformazione indipendente del colore su più livelli (ad esempio, alcuni livelli potrebbero essere sRGB e altri sRGB esteso, ognuno con la propria pipeline del colore). Quando sono visibili più spazi colore, alcuni spazi colore devono essere convertiti nello spazio colore del display. Idealmente, questa trasformazione viene fornita al meglio dal motore di visualizzazione (altrimenti Android deve eseguire la composizione della GPU).

Test

Per testare la gestione del colore, utilizza le seguenti risorse in opengl/tests:

  • gl2_basic è una semplice demo OpenGL che richiede uno spazio colore Display P3.
  • EGL_test test per il supporto necessario di estensioni e configurazioni (10:10:10:2 e FP16).
  • test_wide_color crea una superficie nello stesso modo di SurfaceFlinger (ad esempio, configurazione, spazio colore e formato pixel).

Implementazione di riferimento

Per un'implementazione di riferimento, consulta frameworks/native. Per le intestazioni, consulta: