Gestione del colore

Android 8.1 e versioni successive includono il supporto per la gestione del colore che può essere utilizzato per fornire un'esperienza coerente tra tutte 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 affidavano invece alla compatibilità di contenuti e display (un obiettivo spesso aiutato dall'industria televisiva). Tuttavia, le recenti tecnologie di visualizzazione consentono display con una gamma molto più ampia che non visualizzano 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 a matrice attiva o AMOLED, alcuni LCD) possono visualizzare contenuti ad ampia gamma dalle app.

Determina il supporto del dispositivo

I dispositivi con display a colori ampi con Android 8.1 o versioni successive dovrebbero supportare la gestione del colore (a colori ampi). Prima di abilitare questa funzione, assicurati che il dispositivo soddisfi i seguenti requisiti:

  • Il display del dispositivo soddisfa i requisiti hardware, che includono un display ben caratterizzato che supporti lo spazio colore Display-P3. Se il display non soddisfa questo requisito, non abilitare la gestione del colore. Per ridurre l'impatto su CPU e GPU, è auspicabile il supporto per sRGB estesi e HDR10 nella pipeline di visualizzazione.
  • Il dispositivo supporta un processo di calibrazione di fabbrica che genera dati di calibrazione (memorizzati sul dispositivo) per regolare la variazione di produzione nel comportamento del display. Come minimo, i dati di calibrazione dovrebbero consentire al display di visualizzare accuratamente il contenuto sRGB e i punti bianchi D65 e D73.

Se questi requisiti vengono soddisfatti, è possibile abilitare la funzionalità di gestione del colore per il dispositivo.

Implementare la gestione del colore

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

Successivamente, abilita le estensioni OpenGL necessarie e il supporto della libreria per tradurre 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 float a 16 bit. Priorità: alta (si prevede che questo sia il formato pixel predefinito per le app che supportano i colori larghi). Richiede il supporto del conducente.
  • EGL_KHR_gl_colorspace . Per le app che desiderano utilizzare framebuffer predefiniti in formato sRGB per ottenere più facilmente il rendering sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurfaces di cui verrà eseguito il rendering in sRGB da contesti OpenGL che supportano tale funzionalità. Richiede il supporto del driver per il comportamento sRGB.

Android fornisce anche le seguenti estensioni opzionali:

  • EGL_EXT_colorspace_scrgb_linear . Questa estensione fornisce una nuova opzione di spazio colore, scRGB, che le app possono scegliere durante la creazione di una EGLSurface. Lo spazio colore scRGB definisce uno spazio di riferimento del display lineare con lo stesso punto bianco e colori primari di sRGB (e quindi è retrocompatibile con sRGB). Ciò non dovrebbe richiedere il supporto del driver e può essere implementato 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 desiderano utilizzare framebuffer predefiniti del formato Display-P3 per ottenere più facilmente il rendering sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurfaces di cui verrà eseguito il rendering in Display-P3 da contesti OpenGL che supportano tale funzionalità. Questo può essere implementato nel wrapper del driver EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Consente alle app di contrassegnare le catene di scambio con lo spazio colore che stanno utilizzando. Include una serie di spazi colore comuni come DCI-P3, Display-P3, AdobeRGB e BT2020.

Personalizzazione

È possibile 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. Abilita il supporto per più trasformazioni di colore nell'hardware.
  • Supporto per la trasformazione del colore indipendente su più livelli (ad esempio, alcuni livelli potrebbero essere sRGB e altri sRGB estesi, ciascuno con la propria pipeline di colori). Quando è visibile più di uno spazio 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 GPU).

Test

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

  • gl2_basic è una semplice demo OpenGL che richiede uno spazio colore Display-P3.
  • EGL_test verifica l'estensione necessaria e il supporto della configurazione (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, fare riferimento a frameworks/native . Per le intestazioni fare riferimento a: