HDR in Android-Screenshots

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