HDR in Android-Screenshots

Seit der Einführung von HDR-Videos (High Dynamic Range) streamen Streamingdienste HDR-Videos, wobei der Fokus auf Vollbildwiedergabe liegt. Vor Kurzem haben Social-Media-Apps Unterstützung für HDR-Video und Ultra HDR eingeführt, was auf ein wachsendes Interesse an der Einführung von HDR in verschiedenen Apps hindeutet.

HDR-Unterstützung unter Android

Hier sind die Meilensteine der Unterstützung von HDR-Technologie durch Android im Laufe der Jahre:

Android 7

  • Erste Unterstützung für die HDR-Videodecodierung und -Wiedergabe.
  • Kontinuierliche Weiterentwicklung der HDR-Funktionen.

Android 13

  • Umfassende Unterstützung für HDR-Videoaufnahmen, ‑Codierung und ‑Wiedergabe.
  • Einführung von Mischung aus SDR und HDR, bei der unterschiedliche darstellbare Helligkeitsbereiche zwischen SDR und HDR definiert werden.

Android 14

Die Unterstützung von Screenshots mit HDR hat sich ebenfalls weiterentwickelt und im Laufe der Jahre einige Änderungen durchlaufen.

Verbesserungen bei HDR-Screenshots

In diesem Abschnitt wird die Entwicklung der HDR-Screenshot-Funktion in den letzten Android-Updates nachvollzogen.

Android 9

SurfaceFlinger, der Grafik-Compositor von Android, bietet Unterstützung für HDR-Videos. Das GPU-Rendering von HDR-Videos und ‑Screenshots wird mit einem komplexen polynomiellen Tone Mapper unterstützt. Diese Tonzuordnungskurve entspricht nicht immer der Tonzuordnung des Displays. Daher unterscheiden sich Screenshots vom Inhalt auf dem Display.

Android 13

Dem GPU-Rendering-Block von SurfaceFlinger wird ein Tone-Mapping-Plug-in hinzugefügt, sodass der OEM einen GPU-Shader bereitstellen kann, der der Tone-Mapping-Kurve des Displays entspricht. Die Screenshots entsprechen fast dem, was auf dem Bildschirm zu sehen ist, aber mit den folgenden Unterschieden:

  • Screenshots bleiben im SDR-Format. Daher erscheinen die HDR-Bereiche im Screenshot dunkler, wenn sie neben einer HDR-Szene betrachtet werden.
  • Die SDR-Luminanz wird nicht verwaltet, sodass SDR-Inhalte im Screenshot genauso hell wie HDR-Inhalte erscheinen.

Mit anderen Worten: Alle HDR-Videos, die im Screenshot zu sehen sind, werden in SDR-Videos konvertiert.

Android 14

Ultra HDR stellt eine große Herausforderung für Screenshots dar. Im Gegensatz zu Videos werden Bilder in der Regel im UI-Framebuffer gerendert, was zwei Hauptfolgen hat:

  • Bilder dürfen keine Bildverarbeitung wie Tonzuordnung aufweisen, die sich von der umgebenden Benutzeroberfläche unterscheidet.
  • Apps sind für das quellenbasierte Tone-Mapping beim Rendern der Benutzeroberfläche verantwortlich.

Um diese Herausforderung zu meistern, gibt es drei mögliche Implementierungen für Screenshots:

  • Die HDR-Details eines Ultra HDR-Bildes werden beibehalten, was zu einer abgedunkelten App-Benutzeroberfläche im Screenshot führt.
  • Die Details der App-Benutzeroberfläche werden beibehalten, was zu einem Clipping von Ultra-HDR-Bildern führt.
  • Die App-Benutzeroberfläche wird aufgehellt, während HDR-Highlights abgeschnitten werden.

Unter Android 14 wird der dritte Ansatz umgesetzt, bei dem die Benutzeroberfläche der App aufgehellt und HDR-Highlights abgeschnitten werden.

Android 15 QPR1

SurfaceFlinger enthält einen lokalen Tone-Mapping-Algorithmus für Screenshots. Dazu sind folgende Schritte erforderlich:

  • Das Eingabebild wird in kleinere Bilder unterteilt.
  • Die maximale Leuchtdichte in jedem Bild wird berechnet und niedrige Leuchtdichtewerte in jedem Abschnitt werden verworfen.
  • Die berechneten Luminanzen werden durch Weichzeichnen und Resampling interpoliert.
  • Anwenden eines parametrisierten Reinhard-Tonemappers auf das Eingabebild basierend auf den interpolierten Luminanzwerten.

Dieser Algorithmus bietet erhebliche Verbesserungen bei Screenshots zwischen Android 14 und Android 15-QPR1, wie in den folgenden Beispielen zu sehen ist:

  • 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 abgeschnitten.

    Android 14 Android 15 QPR1
    Beispiel 1 in Android 14 Beispiel 1 in Android 15qpr

    Abbildung 1: Vergleich von Android 14 und Android 15-QPR1 für Beispiel 1.

  • Beispiel 2 ist ein Screenshot eines HDR-Videos, das über Einstellungen gelegt wurde, gefolgt von weiteren Screenshots. In Android 14 sind die Farben des Screenshots immer dunkler. In Android 15-QPR1 werden die Farben der Benutzeroberfläche durch den Tonemapper korrekt wiedergegeben und beibehalten.

    Android 14 Android 15 QPR1
    Beispiel 2 in Android 14 Beispiel 2 in Android 15qpr

    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 Renderns 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 aufnehmen.

Details zur Screenshot-Generierung:

  • 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.

Details zur PNG-Codierung:

  • Die Gainmap wird als PNG-Bild codiert, das einen gmAP-Chunk mit den ISO 21496-1-Metadaten für die Gainmap enthält.
  • Die SDR-Basiswiedergabe wird als PNG-Bild codiert, das einen gmAP-Chunk enthält, der die Version der ISO 21496-1-Metadaten enthält. Dieses PNG-Bild enthält auch einen gdAT-Chunk, der die gesamte codierte Gainmap-PNG-Datei enthält.

Die folgende Abbildung zeigt das Layout der PNG-Chunks:

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 PNGs. Apps können ein PNG mit einer Gainmap auf dieselbe Weise wie Ultra HDR anzeigen.