Różne możliwości HDR na urządzeniach z Androidem mogą prowadzić do rozbieżności w wyświetlaniu HDR. Nowym rozwiązaniem do korekcji kolorów, które ma na celu wyeliminowanie tej niespójności, jest tabela LUT. Ta niespójność jest rozwiązywana przez określenie sposobu korekcji kolorów, a nie delegowanie jej do niezdefiniowanego mechanizmu korekcji kolorów na urządzeniu.
Wymagania wstępne dotyczące pakietu SDK
Aby zaimplementować tabele LUT, musisz mieć pakiet SDK w wersji 36 lub nowszej.
Implementowanie tabeli LUT
Aby zastosować tabelę LUT do SurfaceControl:
- Utwórz instancję
DisplayLuts. - Utwórz
DisplayLuts.Entryinstancję lub instancje z buforem danych LUT, wymiarem LUT i kluczem próbkowania LUT. Więcej informacji, znajdziesz wLutPropertiesdokumentacji. - Aby ustawić wpisy LUT, wywołaj funkcję
DisplayLuts#set(DisplayLuts.Entry luts)lubDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second). Platforma obsługuje tabele LUT 1D, tabele LUT 3D lub połączenie tabel LUT 1D i 3D. - Aby zastosować tabele LUT do warstwy, wywołaj funkcję
SurfaceControl.Transaction#setLuts.
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ć funkcji OverlayProperties.getLutProperties(), aby poznać właściwości LUT
urządzenia i sprawdzić, czy Hardware Composer może obsługiwać wybraną tabelę LUT.