Farbkorrektur mit Look-up-Tabellen (LUTs)

Die unterschiedlichen HDR-Funktionen von Android-Geräten können zu einer fragmentierten HDR-Anzeige führen. Eine Lookup-Tabelle (LUT) ist eine neue Lösung zur Farbkorrektur, die diese Inkonsistenz beheben soll. Diese Inkonsistenz wird behoben, indem eine Methode zur Farbkorrektur vorgeschrieben wird, anstatt sie an einen undefinierten gerätespezifischen Farbkorrekturmechanismus zu delegieren.

SDK-Voraussetzungen

Wenn Sie LUTs implementieren möchten, muss Ihre SDK-Version 36 oder höher sein.

LUT implementieren

So wenden Sie eine LUT auf ein SurfaceControl an:

  1. Erstellen Sie eine DisplayLuts-Instanz.
  2. Erstellen Sie DisplayLuts.Entry-Instanzen mit dem LUT-Datenpuffer, der 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-LUT, 3D-LUT 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();

Du kannst 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.