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:
- Erstellen Sie eine
DisplayLuts-Instanz. - 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 zuLutProperties. - Rufen Sie
DisplayLuts#set(DisplayLuts.Entry luts)oderDisplayLuts#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. - Rufen Sie
SurfaceControl.Transaction#setLutsauf, 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.