In seguito all'introduzione dei video High Dynamic Range (HDR), i servizi di streaming hanno iniziato a trasmettere video HDR, concentrandosi sulle esperienze a schermo intero. Le app di social media ora supportano i video HDR e Ultra HDR, il che indica un crescente interesse per l'adozione dell'HDR in varie app.
Supporto HDR per Android
Android ha supportato la tecnologia HDR in diverse tappe fondamentali:
Android 7
- Supporto iniziale per la decodifica e la visualizzazione di video HDR.
- Progressi continui nelle funzionalità HDR.
Android 13
- Supporto end-to-end per l'acquisizione, la codifica e la visualizzazione di video HDR.
- È stata introdotta la composizione mista SDR e HDR, che definisce diverse gamme di luminanza visualizzabili tra SDR e HDR.
Android 14
- Supporto per le immagini HDR con Ultra HDR.
Anche il supporto degli screenshot HDR si è evoluto e modificato.
Miglioramenti alle funzionalità degli screenshot HDR
Questa sezione descrive l'evoluzione della funzionalità di screenshot HDR negli aggiornamenti di Android.
Android 9
SurfaceFlinger, il compositore grafico di Android, introduce il supporto per i video HDR. Il rendering GPU di video e screenshot HDR utilizza un complesso mapper di tonalità polinomiale. Questa curva di mappatura tonale non è sempre equivalente al mappatore tonale del display, pertanto gli screenshot differiscono dai contenuti sullo schermo.
Android 13
Il blocco di rendering della GPU di SurfaceFlinger include un plug-in di mappatura tonale, che consente all'OEM di fornire uno shader GPU per adattarsi alla curva di mappatura tonale del display. Gli screenshot corrispondono quasi ai contenuti sullo schermo, ma con le seguenti differenze:
- Gli screenshot rimangono in formato SDR. Di conseguenza, se visualizzate insieme a una scena HDR, le regioni HDR all'interno dello screenshot appaiono più scure.
- La luminanza SDR non viene gestita, quindi i contenuti SDR all'interno dello screenshot appaiono luminosi come i contenuti HDR.
In altre parole, il sistema converte qualsiasi video HDR acquisito nello screenshot in un video SDR.
Android 14
Ultra HDR rappresenta una sfida significativa per gli screenshot. A differenza dei video, il sistema in genere esegue il rendering delle immagini all'interno del framebuffer dell'interfaccia utente, il che ha due implicazioni principali:
- Le immagini non possono avere un'elaborazione delle immagini, inclusa la mappatura dei toni, diversa dalla UI circostante.
- Le app sono responsabili della mappatura tonale basata sull'origine durante il rendering della loro UI.
Per alleviare questo problema, prendi in considerazione tre potenziali implementazioni della funzionalità di acquisizione degli screenshot:
- Preservare i dettagli HDR di un'immagine Ultra HDR, con conseguente oscuramento della UI dell'app nello screenshot.
- Preserva i dettagli dell'UI dell'app, causando il ritaglio dell'immagine Ultra HDR.
- Compromesso che consiste nell'illuminare la UI dell'app e ritagliare le alte luci HDR.
Android 14 implementa il terzo approccio, ovvero la luminosità della UI dell'app e il clipping delle luci HDR.
Android 15 QPR1
SurfaceFlinger include un algoritmo di mappatura tonale locale per gli screenshot. Questa procedura prevede:
- Dividere l'immagine di input in immagini più piccole.
- Calcolo della luminanza massima in ogni immagine e scarto dei valori di bassa luminanza all'interno di ogni sezione.
- Interpolazione delle luminanze calcolate tramite sfocatura e ricampionamento.
- Applicazione di un tonemapper Reinhard parametrizzato all'immagine di input, in base ai valori di luminanza interpolati.
Questo algoritmo migliora notevolmente gli screenshot tra Android 14 e Android 15 QPR1, come dimostrano i seguenti esempi:
L'esempio 1 è uno screenshot di un video HDR sovrapposto a una pagina Chrome contenente Ultra HDR. I colori della UI sono per lo più preservati nella nuova implementazione e l'immagine non viene più ritagliata.
Android 14 Android 15 QPR1
Figura 1. Confronto tra Android 14 e Android 15 QPR1 per l'esempio 1.
L'esempio 2 è uno screenshot di un video HDR sovrapposto a Impostazioni con gli screenshot successivi. In Android 14, i colori dello screenshot sono successivamente più scuri. In Android 15 QPR1, il tonemapper replica e conserva correttamente i colori della UI.
Android 14 Android 15 QPR1
Figura 2. Confronto tra Android 14 e Android 15 QPR1 per l'esempio 2.
Android 16
Simili all'Ultra HDR, gli screenshot HDR memorizzano una gainmap nel file dello screenshot per recuperare la rappresentazione HDR durante il rendering. Tuttavia, a differenza di Ultra HDR, lo screenshot rimane in formato PNG per la compatibilità con i sistemi che acquisiscono screenshot PNG.
La generazione degli screenshot prevede quanto segue:
- Quando i contenuti HDR vengono visualizzati sul dispositivo, viene generato uno screenshot utilizzando pixel FP16.
- Il mapper di tonalità locale descritto in Android 15 QPR1 genera una riproduzione SDR di base a 8 bit.
- Una gain map a 8 bit viene prodotta combinando la base di rendering SDR con il rendering HDR.
- La base SDR e la gain map vengono codificate in un unico file PNG.
La codifica PNG prevede quanto segue:
- La mappa di guadagno è codificata come immagine PNG, che include un chunk
gmAP, contenente i metadati ISO 21496-1 per la mappa di guadagno. - Il rendering di base SDR è codificato come immagine PNG, che include un chunk
gmAPcontenente la versione dei metadati ISO 21496-1. Questa immagine PNG include anche un bloccogdAT, contenente l'intera immagine PNG della gain map codificata.
La figura seguente mostra il layout dei chunk PNG:
Figura 3. Layout dei blocchi PNG.
Con Android 16, il codec PNG supporta sia la codifica che la decodifica di questi PNG. Le app possono visualizzare un file PNG con una gain map nello stesso modo di Ultra HDR.