Różne możliwości HDR na urządzeniach z Androidem mogą prowadzić do rozdrobnienia wyjść wyświetlacza HDR. Tabela LUT to nowe rozwiązanie do korekcji kolorów, które ma na celu wyeliminowanie tej niespójności. Tę niespójność rozwiązuje określenie sposobu korekcji kolorów zamiast delegowania go do niezdefiniowanego mechanizmu korekcji kolorów na urządzeniu.
Wymagania wstępne dotyczące pakietu SDK
Aby wdrożyć tablice LUT, musisz mieć pakiet SDK w wersji 36 lub nowszej.
Wdrażanie tabeli LUT
Aby zastosować LUT do SurfaceControl
:
- Utwórz instancję
DisplayLuts
. - Utwórz instancje
DisplayLuts.Entry
z buforem danych LUT, wymiarem LUT i kluczem próbkowania LUT. Więcej informacji znajdziesz wLutProperties
dokumentacji. - Zadzwoń pod numer
DisplayLuts#set(DisplayLuts.Entry luts)
lubDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)
, aby ustawić wpisy LUT. Platforma obsługuje tabele LUT 1D, 3D lub kombinację tabel LUT 1D i 3D. - Zadzwoń pod numer
SurfaceControl.Transaction#setLuts
, aby zastosować tablice LUT do warstwy.
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();
Możesz też użyć OverlayProperties.getLutProperties()
, aby poznać właściwości LUT urządzenia i sprawdzić, czy kompozytor sprzętowy może obsługiwać wybraną tabelę LUT.