Correggere il colore con le tabelle di ricerca (LUT)

Le diverse funzionalità HDR dei dispositivi Android possono portare a output di visualizzazione HDR frammentati. Una tabella di ricerca (LUT) è una nuova soluzione di correzione del colore progettata per risolvere questa incoerenza. Questa incoerenza viene risolta prescrivendo un modo per correggere il colore, anziché delegare a un meccanismo di correzione del colore per dispositivo non definito.

Prerequisiti dell'SDK

Per implementare le LUT, la versione dell'SDK deve essere 36 o successive.

Implementare una LUT

Per applicare una LUT a un SurfaceControl:

  1. Crea un'istanza DisplayLuts.
  2. Crea una o più istanze DisplayLuts.Entry con il buffer di dati LUT, la dimensione LUT e la chiave di campionamento della LUT. Per saperne di più, consulta la documentazione LutProperties.
  3. Chiama il numero DisplayLuts#set(DisplayLuts.Entry luts) o DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) per impostare le voci LUT. Il framework supporta LUT 1D, LUT 3D o una combinazione di LUT 1D e 3D.
  4. Chiama SurfaceControl.Transaction#setLuts per applicare le LUT al livello.

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();

Puoi anche utilizzare OverlayProperties.getLutProperties() per comprendere le proprietà della LUT del dispositivo e determinare se Hardware Composer può gestire la LUT selezionata.