Dopo l'introduzione dei video HDR (High Dynamic Range), i servizi di streaming hanno iniziato a trasmettere in streaming 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 di Android
Android ha supportato la tecnologia HDR attraverso diverse tappe fondamentali:
Android 7
- Supporto iniziale per la decodifica e la visualizzazione di video HDR.
- Continui progressi 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 intervalli di luminanza visualizzabili diversi tra SDR e HDR.
Android 14
- Supporto per le immagini HDR con Ultra HDR.
Anche il supporto per gli screenshot HDR si è evoluto e ha subito modifiche.
Progressi nelle funzionalità degli screenshot HDR
Questa sezione descrive la progressione della funzionalità degli 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 toni polinomiale. Questa curva di mappatura dei toni non è sempre equivalente al mapper di toni del display, quindi gli screenshot differiscono dai contenuti sullo schermo.
Android 13
Il blocco di rendering GPU di SurfaceFlinger include un plug-in di mappatura dei toni, che consente all'OEM di fornire uno shader GPU per corrispondere alla curva di mappatura dei toni 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 accanto 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 in video SDR qualsiasi video HDR acquisito nello screenshot.
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'UI, il che ha due implicazioni principali:
- Le immagini non possono avere un'elaborazione delle immagini, inclusa la mappatura dei toni, diversa dall'UI circostante.
- Le app sono responsabili della mappatura dei toni basata sull'origine durante il rendering della loro UI.
Per alleviare questa sfida, prendi in considerazione tre potenziali implementazioni di screenshot:
- Conserva i dettagli HDR di un'immagine Ultra HDR, con conseguente oscuramento dell'UI dell'app nello screenshot.
- Conserva i dettagli dell'UI dell'app, causando il ritaglio dell'immagine Ultra HDR.
- Compromesso: illumina l'UI dell'app e ritaglia le alte luci HDR.
Android 14 implementa il terzo approccio di illuminazione dell'UI dell'app e ritaglio delle alte luci HDR.
Android 15-QPR1
SurfaceFlinger include un algoritmo di mappatura dei toni locale per gli screenshot. Questo processo prevede:
- Suddivisione dell'immagine di input in immagini più piccole.
- Calcolo della luminanza massima in ogni immagine e scarto dei valori di luminanza bassi all'interno di ogni sezione.
- Interpolazione delle luminanze calcolate tramite sfocatura e ricampionamento.
- Applicazione di un mapper di toni Reinhard parametrizzato all'immagine di input, in base ai valori di luminanza interpolati.
Questo algoritmo migliora significativamente 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 di Chrome contenente Ultra HDR. I colori dell'UI vengono mantenuti per lo più 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 degli screenshot sono progressivamente più scuri. In Android 15-QPR1, il mapper di toni replica e conserva correttamente i colori dell'UI.
Android 14 Android 15-QPR1
Figura 2. Confronto tra Android 14 e Android 15-QPR1 per l'esempio 2.
Android 16
Analogamente a Ultra HDR, gli screenshot HDR memorizzano una mappa di guadagno 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 di screenshot prevede quanto segue:
- Quando i contenuti HDR vengono visualizzati sul dispositivo, viene generato uno screenshot utilizzando pixel FP16.
- Il mapper di toni locale descritto in Android 15-QPR1 genera una riproduzione SDR di base a 8 bit.
- Viene prodotta una mappa di guadagno a 8 bit combinando la riproduzione di base SDR con la riproduzione HDR.
- La riproduzione di base SDR e la mappa di guadagno vengono codificate in un unico file PNG.
La codifica PNG prevede quanto segue:
- La mappa di guadagno viene codificata come immagine PNG, che include un
gmAPblocco, contenente i metadati ISO 21496-1 per la mappa di guadagno. - La riproduzione di base SDR viene codificata come immagine PNG, che include un
gmAPblocco contenente la versione dei metadati ISO 21496-1. Questa immagine PNG include anche un bloccogdATcontenente l'intera mappa di guadagno PNG 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 sia la decodifica di questi PNG. Le app possono visualizzare un PNG con una mappa di guadagno nello stesso modo di Ultra HDR.