Dall'introduzione dei video HDR (High Dynamic Range), i servizi di streaming hanno iniziato a trasmettere in streaming video HDR, concentrandosi su esperienze a schermo intero. Di recente, le app di social media hanno lanciato il supporto per i video HDR e Ultra HDR, indicando un crescente interesse per l'adozione dell'HDR in varie app.
Supporto HDR per Android
Di seguito sono riportate le tappe fondamentali del supporto della tecnologia HDR da parte di Android nel corso di diversi anni:
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.
- Introduzione della composizione mista SDR e HDR, che definisce diverse gamme di luminanza visualizzabili tra SDR e HDR.
Android 14
- Supporto per immagini HDR con Ultra HDR.
Anche il supporto degli screenshot con HDR si è evoluto e ha subito una serie di modifiche nel corso degli anni.
Progressi nelle funzionalità di screenshot HDR
Questa sezione tiene traccia dell'avanzamento della funzionalità di screenshot HDR negli aggiornamenti di Android recenti.
Android 9
SurfaceFlinger, il compositore grafico di Android, introduce il supporto dei video HDR. Il rendering GPU di video e screenshot HDR è supportato da un complesso mapper di tonalità polinomiale. Questa curva di mappatura del tono non è sempre equivalente al mapper del tono del display, pertanto gli screenshot differiscono dai contenuti sullo schermo.
Android 13
Un plug-in di mappatura dei toni viene aggiunto al blocco di rendering della GPU di SurfaceFlinger, consentendo all'OEM di fornire uno shader GPU che corrisponda alla curva di mappatura dei toni del display. Gli screenshot corrispondono quasi a ciò che viene visualizzato 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, pertanto i contenuti SDR all'interno dello screenshot appaiono luminosi come i contenuti HDR.
In altre parole, qualsiasi video HDR acquisito nello screenshot viene convertito in video SDR.
Android 14
Ultra HDR rappresenta una sfida significativa per gli screenshot. A differenza dei video, le immagini vengono in genere visualizzate all'interno del framebuffer dell'interfaccia utente, il che ha due implicazioni principali:
- Le immagini non possono avere un'elaborazione, inclusa la mappatura della tonalità, diversa dall'interfaccia utente circostante.
- Le app sono responsabili della mappatura della tonalità basata sull'origine durante il rendering della UI.
Per alleviare questo problema, esistono tre potenziali implementazioni della funzionalità di acquisizione degli screenshot:
- Preserva i dettagli HDR di un'immagine Ultra HDR, con conseguente oscuramento dell'interfaccia utente dell'app nello screenshot.
- Preservare i dettagli dell'interfaccia utente dell'app, causando il ritaglio dell'immagine Ultra HDR.
- Compromesso: illuminare la UI dell'app e ritagliare le aree in evidenza HDR.
Android 14 implementa il terzo approccio di illuminazione della UI dell'app e ritaglio delle luci HDR.
Android 15-QPR1
SurfaceFlinger include un algoritmo di mappatura della tonalità 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.
- Interpolando le 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 mostra miglioramenti significativi degli screenshot tra Android 14 e Android 15-QPR1, come mostrato negli esempi seguenti:
L'esempio 1 è uno screenshot di un video HDR sovrapposto a una pagina Chrome contenente Ultra HDR. I colori della UI vengono per lo più conservati 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 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 dell'interfaccia utente.
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.
I dettagli della generazione di screenshot sono i seguenti:
- Quando i contenuti HDR vengono visualizzati sul dispositivo, viene generata un'istantanea utilizzando pixel FP16.
- Il mapper di tonalità locale descritto in Android 15-QPR1 genera una base di rendering SDR 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.
I dettagli della codifica PNG sono i seguenti:
- La mappa del guadagno è codificata come immagine PNG, che include un blocco gmAP contenente i metadati ISO 21496-1 per la mappa del guadagno.
- Il rendering di base SDR è codificato come immagine PNG, che include un blocco gmAP contenente la versione dei metadati ISO 21496-1. Questa immagine PNG include anche un blocco gdAT, contenente l'intera immagine PNG della gain map codificata.
La figura seguente mostra il layout dei blocchi 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 PNG con una gain map nello stesso modo di Ultra HDR.