Korekcja kolorów za pomocą tabel LUT

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:

  1. Utwórz instancję DisplayLuts.
  2. Utwórz instancje DisplayLuts.Entry z buforem danych LUT, wymiarem LUT i kluczem próbkowania LUT. Więcej informacji znajdziesz w LutProperties dokumentacji.
  3. Zadzwoń pod numer DisplayLuts#set(DisplayLuts.Entry luts) lub DisplayLuts#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.
  4. 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.