Korekcja kolorów za pomocą tabel LUT

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:

  1. Utwórz instancję DisplayLuts.
  2. Utwórz DisplayLuts.Entry instancję lub instancje z buforem danych LUT, wymiarem LUT i kluczem próbkowania LUT. Więcej informacji, znajdziesz w LutProperties dokumentacji.
  3. Aby ustawić wpisy LUT, wywołaj funkcję DisplayLuts#set(DisplayLuts.Entry luts) lub DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second). Platforma obsługuje tabele LUT 1D, tabele LUT 3D lub połączenie tabel LUT 1D i 3D.
  4. 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.