Farbverwaltung

Android 8.1 und höher unterstützen das Farbmanagement, das für eine konsistente Darstellung auf verschiedenen Displaytechnologien verwendet werden kann. Apps, die unter Android ausgeführt werden, können auf die vollen Funktionen eines Displays mit großem Farbraum zugreifen, um das Beste aus einem Anzeigegerät herauszuholen.

In früheren Android-Versionen wurde die Farbverwaltung nicht unterstützt. Stattdessen wurde darauf geachtet, dass Inhalte und Displays kompatibel sind. Das wurde oft durch die TV-Branche unterstützt. Mit den aktuellen Displaytechnologien sind jedoch Displays mit einem viel größeren Farbraum möglich, auf denen vorhandene Inhalte nicht wie erwartet dargestellt werden. Auf Geräten mit Android 8.1 und höher, die ein Display mit großem Farbraum verwenden (z. B. AMOLED-Displays oder einige LCDs), können Apps Inhalte mit großem Farbraum anzeigen.

Gerätesupport ermitteln

Geräte mit Displays mit großem Farbraum, auf denen Android 8.1 oder höher ausgeführt wird, sollten Farbmanagement (großer Farbraum) unterstützen. Bevor Sie diese Funktion aktivieren, muss das Gerät die folgenden Anforderungen erfüllen:

  • Das Gerätedisplay erfüllt die Hardwareanforderungen, darunter ein gut charakterisiertes Display, das den Display P3-Farbraum unterstützt. Wenn das Display diese Anforderung nicht erfüllt, aktivieren Sie die Farbverwaltung nicht. Um die CPU- und GPU-Auslastung zu reduzieren, ist die Unterstützung von erweitertem sRGB und HDR10 in der Display-Pipeline wünschenswert.
  • Das Gerät unterstützt einen Prozess zur Werkskalibrierung, bei dem Kalibrierungsdaten generiert werden, die auf dem Gerät gespeichert werden, um Fertigungsvarianzen im Displayverhalten auszugleichen. Kalibrierungsdaten sollten es dem Display ermöglichen, sRGB-Inhalte und die Weißpunkte D65 und D73 genau darzustellen.

Wenn diese Anforderungen erfüllt sind, können Sie die Farbverwaltung für das Gerät aktivieren.

Farbmanagement implementieren

Um die Farbverwaltung zu implementieren, müssen Sie zuerst den Hardware Composer 2 (HWC2)-Treiber aktualisieren, damit er Farbmodi versteht und diese auf die Hardware anwenden kann. Der HWC2-Composer muss die Farbmodi „Display P3“ und „sRGB“ mit HWCDisplay::GetColorModes melden.

Als Nächstes aktivieren Sie die erforderlichen OpenGL-Erweiterungen und die Bibliotheksunterstützung, um OpenGL-Farbräume in HAL-Datenräume zu übersetzen. Erforderliche OpenGL-Erweiterungen:

  • EGL_EXT_pixel_format_float. Ermöglicht Apps, EGLSurfaces mit 16-Bit-Gleitkomma-Farbkomponenten zu erstellen. Priorität: hoch (dies ist das Standardpixelformat für Apps, die auf breite Farbräume ausgelegt sind). Erfordert Treiberunterstützung.
  • EGL_KHR_gl_colorspace. Für Apps, die Standard-Framebuffers im sRGB-Format verwenden möchten, um sRGB-Rendering auf Anzeigegeräten einfacher zu erreichen, ermöglicht diese Erweiterung die Erstellung von EGLSurfaces, die von OpenGL-Kontexten, die diese Funktion unterstützen, in sRGB gerendert werden. Erfordert Treiberunterstützung für sRGB-Verhalten.

Android bietet außerdem die folgenden optionalen Erweiterungen:

  • EGL_EXT_colorspace_scrgb_linear. Diese Erweiterung bietet eine neue Farbraumoption, scRGB, die Apps beim Erstellen einer EGLSurface auswählen können. Der scRGB-Farbraum definiert einen linearen Referenzfarbraum für die Anzeige mit demselben Weißpunkt und denselben Primärfarben wie sRGB und ist daher abwärtskompatibel mit sRGB. Dafür ist keine Treiberunterstützung erforderlich und die Funktion kann im Android-EGL-Wrapper implementiert werden. Damit diese Erweiterung nützlich ist, muss sie 16‑Bit-Gleitkommazahlen (FP16) unterstützen.
  • EGL_EXT_gl_colorspace_display_p3 und EGL_EXT_gl_colorspace_display_p3_linear. Für Apps, die Display-P3-Format-Standard-Framebuffer verwenden möchten, um sRGB-Rendering auf Anzeigegeräten einfacher zu erreichen, ermöglicht diese Erweiterung das Erstellen von EGLSurfaces, die in Display-P3 gerendert werden, wenn OpenGL-Kontexte diese Funktion unterstützen. Dies kann im EGL-Treiber-Wrapper implementiert werden.
  • VK_EXT_swapchain_colorspace (Vulkan) Ermöglicht Apps, Swapchains mit dem verwendeten Farbraum zu taggen. Enthält eine Reihe gängiger Farbräume wie DCI-P3, Display-P3, AdobeRGB und BT2020.

Personalisierung

Sie können die Farbverwaltung anpassen, indem Sie Unterstützung für verschiedene Farbstandards wie DCI‑P3, AdobeRGB, Rec709 und Rec2020 hinzufügen. Weitere Anpassungen:

  • Hardwareunterstützung für die Farbkonvertierung in der Display-Pipeline: Ermöglicht die Unterstützung mehrerer Farbtransformationen in der Hardware.
  • Unterstützung für unabhängige Farbtransformation auf mehreren Ebenen: Einige Ebenen können beispielsweise sRGB und andere Extended sRGB sein, jeweils mit eigener Farb-Pipeline. Wenn mehr als ein Farbraum sichtbar ist, müssen einige Farbräume in den Farbraum des Displays konvertiert werden. Im Idealfall wird diese Transformation von der Display-Engine bereitgestellt. Andernfalls muss Android die GPU-Zusammensetzung durchführen.

Testen

Verwenden Sie die folgenden Ressourcen in opengl/tests, um das Farbmanagement zu testen:

  • gl2_basic ist eine einfache OpenGL-Demo, die einen Display-P3-Farbraum anfordert.
  • EGL_test Tests für die erforderliche Unterstützung von Erweiterungen und Konfigurationen (10:10:10:2 und FP16).
  • test_wide_color erstellt eine Oberfläche auf dieselbe Weise wie SurfaceFlinger (z. B. Konfiguration, Farbraum und Pixelformat).

Referenzimplementierung

Eine Referenzimplementierung finden Sie unter frameworks/native. Informationen zu Headern finden Sie unter: