Android 8.1 und höher unterstützen die Farbverwaltung, mit der eine einheitliche Darstellung auf verschiedenen Displaytechnologien möglich ist. Apps, die auf Android-Geräten ausgeführt werden, können auf die volle Funktionalität eines Wide-Gamut-Displays zugreifen, um das Display optimal zu nutzen.
Bisherige Android-Releases unterstützten keine Farbverwaltung, sondern basierten darauf, dass Inhalte und Displays kompatibel sind. Dieses Ziel wurde oft von der Fernsehbranche unterstützt. Neuere Displaytechnologien ermöglichen jedoch viel größere Farbräume, auf denen vorhandene Inhalte nicht wie erwartet angezeigt werden. Mit Android 8.1 und höher können Geräte mit einem Wide-Gamut-Display (z. B. Active Matrix Organic Light Emitting Diode oder AMOLED, einige LCDs) Wide-Gamut-Inhalte von Apps anzeigen.
Gerätesupport ermitteln
Geräte mit Wide-Color-Displays und Android 8.1 oder höher sollten die Farbverwaltung (Wide-Color) unterstützen. Bevor Sie diese Funktion aktivieren, prüfen Sie, ob das Gerät die folgenden Anforderungen erfüllt:
- Das Display des Geräts erfüllt die Hardwareanforderungen, einschließlich eines gut charakterisierten Displays, 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-Belastung zu reduzieren, ist die Unterstützung von erweitertem sRGB und HDR10 in der Displaypipeline wünschenswert.
- Das Gerät unterstützt eine werksseitige Kalibrierung, bei der Kalibrierungsdaten generiert und auf dem Gerät gespeichert werden, um Abweichungen bei der Displayleistung aufgrund von Produktionsschwankungen auszugleichen. Mit den Kalibrierungsdaten sollte das Display mindestens sRGB-Inhalte und die Weißpunkte D65 und D73 korrekt darstellen können.
Wenn diese Anforderungen erfüllt sind, können Sie die Farbverwaltung für das Gerät aktivieren.
Farbmanagement implementieren
Aktualisieren Sie zuerst den Hardware Composer 2 (HWC2)-Treiber, um die Farbmodi zu verstehen und diese auf die Hardware anzuwenden.
Insbesondere muss der HWC2-Composer die Farbmodi „Display-P3“ und „sRGB“ mit HWCDisplay::GetColorModes
melden.
Aktivieren Sie als Nächstes die erforderlichen OpenGL-Erweiterungen und die Bibliotheksunterstützung, um OpenGL-Farbräume in HAL-Datenräume umzuwandeln. Zu den erforderlichen OpenGL-Erweiterungen gehören:
-
EGL_EXT_pixel_format_float
. Ermöglicht es Apps, EGLSurfaces mit 16‑Bit-Float-Farbkomponenten zu erstellen. Priorität: hoch (dies ist wahrscheinlich das Standardpixelformat für Apps mit erweitertem Farbumfang). Treiberunterstützung erforderlich. -
EGL_KHR_gl_colorspace
. Für Apps, die Standard-Framebuffer im sRGB-Format verwenden möchten, um einfacher sRGB-Rendering auf Displaygeräten zu erzielen, ermöglicht diese Erweiterung das Erstellen von EGLSurfaces, die von OpenGL-Kontexten, die diese Funktion unterstützen, in sRGB gerendert werden. Erfordert Treiberunterstützung für das 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, auf das Display bezogenen Farbraum mit denselben Weißpunkten und Primärfarben wie sRGB. Er ist also abwärtskompatibel mit sRGB. Dafür sollte keine Treiberunterstützung erforderlich sein und es kann im Android-EGL-Wrapper implementiert werden. Damit diese Erweiterung nützlich ist, ist die Unterstützung von 16-Bit-Gleitkommazahlen (FP16) erforderlich. -
EGL_EXT_gl_colorspace_display_p3
undEGL_EXT_gl_colorspace_display_p3_linear
. Für Apps, die Standard-Framebuffer im Display-P3-Format verwenden möchten, um einfacher sRGB-Rendering auf Displaygeräten zu erzielen, können mit dieser Erweiterung EGLSurfaces erstellt werden, die von OpenGL-Kontexten, die diese Funktion unterstützen, in Display-P3 gerendert werden. Dies kann im EGL-Treiber-Wrapper implementiert werden. -
VK_EXT_swapchain_colorspace
(Vulkan). Ermöglicht es Apps, Swap-Chains 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 Farbverwaltungsfunktion anpassen, indem Sie die 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 Displaypipeline Ermöglicht die Unterstützung mehrerer Farbtransformationen in der Hardware.
- Unterstützung für unabhängige Farbtransformationen auf mehreren Ebenen (z. B. sRGB für einige Ebenen und erweitertes sRGB für andere, jeweils mit eigener Farbpipeline). Wenn mehrere Farbräume sichtbar sind, müssen einige Farbräume in den Farbraum des Displays konvertiert werden. Idealerweise wird diese Transformation von der Display-Engine bereitgestellt. Andernfalls muss Android die GPU-Komposition ausführen.
Testen
Verwenden Sie die folgenden Ressourcen in opengl/tests
, um die Farbverwaltung zu testen:
gl2_basic
ist eine einfache OpenGL-Demo, die einen Display-P3-Farbraum anfordert.-
EGL_test
prüft, ob die erforderliche Erweiterung und Konfigurationsunterstützung (10:10:10:2 und FP16) vorhanden ist. test_wide_color
erstellt eine Oberfläche auf die gleiche Weise wie SurfaceFlinger (z. B. Konfiguration, Farbraum und Pixelformat).
Referenzimplementierung
Eine Referenzimplementierung findest du unter frameworks/native
. Informationen zu Überschriften finden Sie hier:
system/core/include/system/graphics.h
system/core/include/system/graphics-base.h
HAL_DATASPACE_*
HAL_COLOR_MODE_*