Farbkorrektur mit Look-up-Tabellen (LUTs)

Unterschiedliche HDR-Funktionen auf Android-Geräten können zu uneinheitlichen HDR-Ausgaben führen. Eine Look-up-Tabelle (LUT) ist eine neue Farbkorrekturlösung, die diese Inkonsistenz beheben soll. Diese Inkonsistenz wird behoben, indem eine Methode zur Farbkorrektur vorgeschrieben wird, anstatt sie an einen nicht definierten gerätespezifischen Farbkorrekturmechanismus zu delegieren.

SDK-Voraussetzungen

Für die Implementierung von LUTs muss Ihre SDK-Version 36 oder höher sein.

LUT implementieren

Führen Sie die folgenden Schritte aus, um eine LUT auf ein SurfaceControl anzuwenden:

  1. Erstellen Sie eine DisplayLuts-Instanz.
  2. Erstellen Sie DisplayLuts.Entry-Instanzen mit dem LUT-Datenpuffer, LUT-Dimension und dem Sampling-Schlüssel der LUT. Weitere Informationen finden Sie in der Dokumentation zu LutProperties.
  3. Rufen Sie DisplayLuts#set(DisplayLuts.Entry luts) oder DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) auf, um LUT-Einträge festzulegen. Das Framework unterstützt 1D-LUTs, 3D-LUTs oder eine Kombination aus 1D- und 3D-LUTs.
  4. Rufen Sie SurfaceControl.Transaction#setLuts auf, um die LUTs auf die Ebene anzuwenden.

Kotlin

val sc = SurfaceControl.Builder().build()
val luts = DisplayLuts()
val entry = DisplayLuts.Entry(
    floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),
    LutProperties.ONE_DIMENSION,
    LutProperties.SAMPLING_KEY_MAX_RGB
)
luts.set(entry)
SurfaceControl.Transaction().setLuts(sc, luts).apply()

Java

SurfaceControl sc = new SurfaceControl.Builder().build();
DisplayLuts luts = new DisplayLuts();
DisplayLuts.Entry entry = new DisplayLuts.Entry(
  new float[]{0.5f, 0.5f, 0.5f, 0.5f},
  LutProperties.ONE_DIMENSION,
  LutProperties.SAMPLING_KEY_MAX_RGB
);
luts.set(entry);
new SurfaceControl.Transaction().setLuts(sc, luts).apply();

Sie können auch OverlayProperties.getLutProperties() verwenden, um die LUT-Eigenschaften des Geräts zu ermitteln und festzustellen, ob der Hardware Composer die ausgewählte LUT verarbeiten kann.