Farbmanagement

Android 8.1 und höher bieten Unterstützung für Farbmanagement, das für ein einheitliches Erlebnis über alle Anzeigetechnologien hinweg verwendet werden kann. Apps, die auf Android ausgeführt werden, können auf die vollen Funktionen eines Wide-Gamut-Displays zugreifen, um das Beste aus einem Anzeigegerät herauszuholen.

Frühere Android-Versionen boten keine Unterstützung für das Farbmanagement und verließen sich stattdessen auf die Kompatibilität von Inhalten und Displays (ein Ziel, das oft von der TV-Branche unterstützt wird). Neuere Anzeigetechnologien ermöglichen jedoch Displays mit einem viel größeren Farbumfang, bei denen vorhandene Inhalte nicht wie erwartet angezeigt werden. Mit Android 8.1 und höher können Geräte, die ein Wide-Gamut-Display verwenden (z. B. organische Leuchtdioden mit aktiver Matrix oder AMOLED, einige LCDs), Wide-Gamut-Inhalte von Apps sehen.

Bestimmen Sie die Geräteunterstützung

Geräte mit Wide-Color-Displays mit Android 8.1 oder höher sollten Farbmanagement (Wide-Color) unterstützen. Stellen Sie vor der Aktivierung dieser Funktion sicher, dass das Gerät die folgenden Anforderungen erfüllt:

  • Die Geräteanzeige erfüllt die Hardwareanforderungen, zu denen eine gut charakterisierte Anzeige gehört, die den Display-P3-Farbraum unterstützt. Wenn das Display diese Anforderung nicht erfüllt, aktivieren Sie das Farbmanagement nicht. Um die Belastung von CPU und GPU zu reduzieren, ist die Unterstützung von erweitertem sRGB und HDR10 in der Display-Pipeline wünschenswert.
  • Das Gerät unterstützt einen werksseitigen Kalibrierungsprozess, der Kalibrierungsdaten generiert (auf dem Gerät gespeichert), um herstellungsbedingte Abweichungen im Anzeigeverhalten auszugleichen. Die Kalibrierungsdaten sollten es dem Display zumindest ermöglichen, sRGB-Inhalte und D65- und D73-Weißpunkte genau anzuzeigen.

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

Implementieren Sie Farbmanagement

Um das Farbmanagement zu implementieren, aktualisieren Sie zunächst den Hardware Composer 2 (HWC2) -Treiber, um Farbmodi zu verstehen und diese Modi 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 Bibliotheksunterstützung, um OpenGL-Farbräume in HAL-Datenräume zu übersetzen. Zu den erforderlichen OpenGL-Erweiterungen gehören:

  • EGL_EXT_pixel_format_float . Ermöglicht Apps das Erstellen darstellbarer EGLSurfaces mit 16-Bit-Float-Farbkomponenten. Priorität: hoch (es ist davon auszugehen, dass dies das Standardpixelformat für Apps mit großer Farberkennung ist). Erfordert Treiberunterstützung.
  • EGL_KHR_gl_colorspace . Für Apps, die Standard-Framebuffer im sRGB-Format verwenden möchten, um die sRGB-Wiedergabe 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 anzeigebezogenen Raum mit demselben Weißpunkt und denselben Farbprimärfarben wie sRGB (und ist daher abwärtskompatibel mit sRGB). Dies sollte keine Treiberunterstützung erfordern und kann im Android EGL-Wrapper implementiert werden. Um nützlich zu sein, erfordert diese Erweiterung Unterstützung für 16-Bit-Gleitkomma (FP16).
  • EGL_EXT_gl_colorspace_display_p3 und EGL_EXT_gl_colorspace_display_p3_linear . Für Apps, die Standard-Framebuffer im Display-P3-Format verwenden möchten, um sRGB-Rendering auf Anzeigegeräten einfacher zu erreichen, ermöglicht diese Erweiterung die Erstellung von EGLSurfaces, die in Display-P3 von OpenGL-Kontexten gerendert werden, die diese Funktion unterstützen. Dies kann im EGL-Treiber-Wrapper implementiert werden.
  • VK_EXT_swapchain_colorspace (Vulkan). Ermöglicht Apps, Swap-Ketten mit dem von ihnen verwendeten Farbraum zu kennzeichnen. Enthält eine Reihe gängiger Farbräume wie DCI-P3, Display-P3, AdobeRGB und BT2020.

Anpassung

Sie können die Farbmanagementfunktion anpassen, indem Sie die Unterstützung verschiedener Farbstandards wie DCI-P3, AdobeRGB, Rec709 und Rec2020 einbinden. Weitere Anpassungen umfassen:

  • Hardware-Unterstü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 Farbtransformationen auf mehreren Ebenen (z. B. könnten einige Ebenen sRGB und andere erweitertes sRGB sein, jede mit ihrer eigenen Farbpipeline). Wenn mehr als ein Farbraum sichtbar ist, müssen einige Farbräume in den Farbraum des Displays konvertiert werden. Im Idealfall wird diese Transformation am besten von der Anzeige-Engine bereitgestellt (andernfalls muss Android die GPU-Komposition durchführen).

Testen

Um das Farbmanagement zu testen, verwenden Sie die folgenden Ressourcen in opengl/tests :

  • gl2_basic ist eine einfache OpenGL-Demo, die einen Display-P3-Farbraum anfordert.
  • EGL_test testet die erforderliche Erweiterungs- und Konfigurationsunterstützung (10:10:10:2 und FP16).
  • test_wide_color erstellt eine Oberfläche auf die gleiche Weise wie SurfaceFlinger (z. B. Konfiguration, Farbraum und Pixelformat).

Referenzimplementierung

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