Nach der Einführung von HDR-Videos (High Dynamic Range) begannen Streamingdienste mit dem Streamen von HDR-Videos, wobei der Schwerpunkt auf Vollbildwiedergabe lag. Social-Media-Apps unterstützen jetzt HDR-Videos und Ultra HDR, was auf ein wachsendes Interesse an der Einführung von HDR in verschiedenen Apps hindeutet.
HDR-Unterstützung in Android
Android hat die HDR-Technologie in mehreren Schritten unterstützt:
Android 7
- Erste Unterstützung für die HDR-Videodecodierung und -wiedergabe.
- Kontinuierliche Weiterentwicklung der HDR-Funktionen.
Android 13
- End-to-End-Unterstützung für die Aufnahme, Codierung und Wiedergabe von HDR-Videos.
- Einführung der gemischten SDR- und HDR-Komposition, die unterschiedliche darstellbare Luminanzbereiche zwischen SDR und HDR definiert.
Android 14
- Unterstützung für HDR-Bilder mit Ultra HDR.
Auch die Unterstützung für HDR-Screenshots hat sich weiterentwickelt und verändert.
Verbesserungen bei HDR-Screenshots
In diesem Abschnitt wird die Entwicklung der HDR-Screenshot-Funktion in Android-Updates beschrieben.
Android 9
SurfaceFlinger, der Grafik-Compositor von Android, führt die Unterstützung für HDR-Videos ein. Für das GPU-Rendering von HDR-Videos und ‑Screenshots wird ein komplexer polynomieller Tone Mapper verwendet. Diese Tone-Mapping-Kurve entspricht nicht immer dem Tone Mapper des Displays, sodass sich Screenshots vom Inhalt auf dem Bildschirm unterscheiden.
Android 13
Der GPU-Rendering-Block von SurfaceFlinger enthält ein Tone-Mapping-Plug-in, mit dem der OEM einen GPU-Shader bereitstellen kann, der der Tone-Mapping-Kurve des Displays entspricht. Screenshots stimmen fast mit dem Inhalt auf dem Bildschirm überein, aber mit den folgenden Unterschieden:
- Screenshots bleiben im SDR-Format. Wenn sie neben einer HDR-Szene angezeigt werden, erscheinen die HDR-Bereiche im Screenshot daher dunkler.
- Die SDR-Luminanz wird nicht verwaltet, sodass SDR-Inhalte im Screenshot genauso hell wie HDR-Inhalte erscheinen.
Mit anderen Worten: Das System konvertiert alle HDR-Videos, die im Screenshot aufgenommen wurden, in SDR-Videos.
Android 14
Ultra HDR stellt eine erhebliche Herausforderung für Screenshots dar. Im Gegensatz zu Videos rendert das System Bilder in der Regel im UI-Framebuffer, was zwei Hauptfolgen hat:
- Bilder können keine Bildverarbeitung haben, einschließlich Tone Mapping, die sich von der umgebenden Benutzeroberfläche unterscheidet.
- Apps sind für das quellbasierte Tone Mapping verantwortlich, wenn sie ihre Benutzeroberfläche rendern.
Um diese Herausforderung zu meistern, gibt es drei potenzielle Implementierungen für Screenshots:
- Die HDR-Details eines Ultra HDR-Bildes bleiben erhalten, was zu einer abgedunkelten App-Benutzeroberfläche im Screenshot führt.
- Die Details der App-Benutzeroberfläche bleiben erhalten, was zu einem Clipping des Ultra HDR-Bildes führt.
- Ein Kompromiss besteht darin, die App-Benutzeroberfläche aufzuhellen und gleichzeitig HDR-Spitzlichter zu beschneiden.
In Android 14 wird der dritte Ansatz implementiert, bei dem die App-Benutzeroberfläche aufgehellt und HDR-Spitzlichter beschnitten werden.
Android 15-QPR1
SurfaceFlinger enthält einen lokalen Tone-Mapping-Algorithmus für Screenshots. Dieser Prozess umfasst Folgendes:
- Das Eingabebild wird in kleinere Bilder unterteilt.
- Die maximale Luminanz wird in jedem Bild berechnet und niedrige Luminanzwerte werden in jedem Abschnitt verworfen.
- Die berechneten Luminanzen werden durch Weichzeichnen und Resampling interpoliert.
- Auf das Eingabebild wird ein parametrisierter Reinhard-Tone-Mapper angewendet, der auf den interpolierten Luminanzwerten basiert.
Dieser Algorithmus verbessert die Screenshots zwischen Android 14 und Android 15-QPR1 erheblich, wie die folgenden Beispiele zeigen:
Beispiel 1 ist ein Screenshot eines HDR-Videos, das über eine Chrome-Seite mit Ultra HDR gelegt wurde. Die Farben der Benutzeroberfläche bleiben in der neuen Implementierung weitgehend erhalten und das Bild wird nicht mehr beschnitten.
Android 14 Android 15-QPR1
Abbildung 1 : Vergleich von Android 14 und Android 15-QPR1 für Beispiel 1.
Beispiel 2 ist ein Screenshot eines HDR-Videos, das über die Einstellungen gelegt wurde, mit nachfolgenden Screenshots. In Android 14 werden die Farben der Screenshots immer dunkler. In Android 15-QPR1 repliziert und bewahrt der Tone Mapper die Farben der Benutzeroberfläche korrekt.
Android 14 Android 15-QPR1
Abbildung 2 : Vergleich von Android 14 und Android 15-QPR1 für Beispiel 2.
Android 16
Ähnlich wie bei Ultra HDR wird bei HDR-Screenshots eine Gainmap in der Screenshot-Datei gespeichert, um die HDR-Darstellung während des Renderings wiederherzustellen. Im Gegensatz zu Ultra HDR bleibt der Screenshot jedoch im PNG-Format, um die Abwärtskompatibilität mit Systemen zu gewährleisten, die PNG-Screenshots verarbeiten.
Die Screenshot-Generierung umfasst Folgendes:
- Wenn HDR-Inhalte auf dem Gerät angezeigt werden, wird ein Screenshot mit FP16-Pixeln erstellt.
- Der in Android 15-QPR1 beschriebene lokale Tone Mapper generiert eine 8-Bit-SDR-Basiswiedergabe.
- Eine 8-Bit-Gainmap wird durch Kombinieren der SDR-Basiswiedergabe mit der HDR-Wiedergabe erstellt.
- Die SDR-Basiswiedergabe und die Gainmap werden in einer einzigen PNG-Datei codiert.
Die PNG-Codierung umfasst Folgendes:
- Die Gainmap wird als PNG-Bild codiert, das einen
gmAP-Chunk enthält, der die ISO 21496-1-Metadaten für die Gainmap enthält. - Die SDR-Basiswiedergabe wird als PNG-Bild codiert, das einen
gmAPChunk enthält, der die Version der ISO 21496-1 Metadaten enthält. Dieses PNG-Bild enthält auch einengdAT-Chunk, der die gesamte codierte Gainmap-PNG-Datei enthält.
Die folgende Abbildung zeigt das Layout der PNG-Chunks:
Abbildung 3 : Layout der PNG-Chunks.
In Android 16 unterstützt der PNG-Codec sowohl die Codierung als auch die Decodierung dieser PNG-Dateien. Apps können eine PNG-Datei mit einer Gainmap auf dieselbe Weise wie Ultra HDR anzeigen.