Android 8.1 e versioni successive includono il supporto della gestione del colore, che può essere utilizzato 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 a gamma estesa per ottenere il massimo da un dispositivo di visualizzazione.
Le release Android precedenti non includevano il supporto della gestione del colore e si basavano invece sulla compatibilità dei contenuti e dei display (un obiettivo spesso aiutato dall'industria televisiva). Tuttavia, le recenti tecnologie di visualizzazione consentono di avere display con gamma molto più ampia che non mostrano i contenuti esistenti come previsto. Con Android 8.1 e versioni successive, i dispositivi che utilizzano un display a gamma estesa (ad esempio, diodi organici a emissione di luce con matrice attiva o AMOLED, alcuni LCD) possono visualizzare i contenuti a gamma estesa delle app.
Determinare il supporto del dispositivo
I dispositivi con display a colori ampi con Android 8.1 o versioni successive dovrebbero supportare la gestione del colore (ampio spettro di colori). Prima di attivare questa funzionalità, assicurati che il dispositivo soddisfi i seguenti requisiti:
- Il display del dispositivo soddisfa i requisiti hardware, tra cui un display ben caratterizzato che supporta lo spazio di 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 e HDR10 estendido nella pipeline di visualizzazione.
- Il dispositivo supporta una procedura di calibrazione di fabbrica che genera dati di calibrazione (archiviati sul dispositivo) per compensare la variabilità di produzione del 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 innanzitutto il driver Hardware Composer 2 (HWC2) per comprendere le modalità di colore e applicarle all'hardware.
Nello specifico, il compositore HWC2 deve segnalare le modalità di colore Display-P3 e sRGB utilizzando HWCDisplay::GetColorModes
.
Successivamente, attiva le estensioni OpenGL e il supporto della libreria necessari per tradurre gli spazi colore OpenGL in spazi di dati HAL. Le estensioni OpenGL obbligatorie include:
-
EGL_EXT_pixel_format_float
. Consente alle app di creare EGLSurface presentabili con componenti di colore con virgola mobile a 16 bit. Priorità: alta (si prevede che questo sia il formato pixel predefinito per le app che supportano una vasta gamma di colori). Richiede il supporto del driver. -
EGL_KHR_gl_colorspace
. Per le app che vogliono utilizzare framebuffer predefiniti in formato sRGB per ottenere più facilmente il rendering in sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurface che verranno visualizzate 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 di 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 (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 di virgola mobile a 16 bit (FP16). -
EGL_EXT_gl_colorspace_display_p3
eEGL_EXT_gl_colorspace_display_p3_linear
. Per le app che vogliono utilizzare i framebuffer predefiniti in formato Display-P3 per ottenere più facilmente il rendering in sRGB sui dispositivi di visualizzazione, questa estensione consente di creare EGLSurface che verranno visualizzate in Display-P3 dai contesti OpenGL che supportano questa funzionalità. Questa funzionalità 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 di colore in uso. Include una serie di spazi di colore comuni come DCI-P3, Display-P3, AdobeRGB e BT2020.
Personalizzazione
Puoi personalizzare la funzionalità di gestione del colore includendo il supporto di una serie 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 di colore in hardware.
- Supporto per la trasformazione del colore indipendente su più livelli (ad esempio, alcuni livelli potrebbero essere sRGB e altri sRGB esteso, ciascuno con la propria pipeline di colori). Quando sono visibili più spazi di colore, alcuni devono essere convertiti nello spazio di colore del display. Idealmente, questa trasformazione è fornita al meglio dal motore di visualizzazione (in caso contrario, 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
Esegui test per verificare il supporto necessario per le estensioni e le configurazioni (10:10:10:2 e FP16). test_wide_color
crea una superficie nello stesso modo di SurfaceFlinger (ad esempio, configurazione, spazio di colore e formato dei pixel).
Implementazione di riferimento
Per un'implementazione di riferimento, consulta frameworks/native
. Per le intestazioni, consulta:
system/core/include/system/graphics.h
system/core/include/system/graphics-base.h
HAL_DATASPACE_*
HAL_COLOR_MODE_*