Corriger les couleurs avec des tables de conversion (LUT)

Les différentes fonctionnalités HDR des appareils Android peuvent entraîner des sorties d'affichage HDR fragmentées. Une table de correspondance (LUT) est une nouvelle solution de correction des couleurs conçue pour résoudre cette incohérence. Cette incohérence est résolue en prescrivant une méthode de correction des couleurs, plutôt qu'en déléguant cette tâche à un mécanisme de correction des couleurs non défini par appareil.

Prérequis pour le SDK

Pour implémenter les LUT, vous devez utiliser la version 36 ou ultérieure du SDK.

Implémenter une LUT

Pour appliquer une LUT à un SurfaceControl, procédez comme suit :

  1. Créez une instance DisplayLuts.
  2. Créez une ou plusieurs instances DisplayLuts.Entry avec le tampon de données LUT, la dimension LUT et la clé d'échantillonnage de la LUT. Pour en savoir plus, consultez la documentation sur LutProperties.
  3. Appelez DisplayLuts#set(DisplayLuts.Entry luts) ou DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) pour définir les entrées LUT. Le framework est compatible avec les LUT 1D, les LUT 3D ou une combinaison de LUT 1D et 3D.
  4. Appelez SurfaceControl.Transaction#setLuts pour appliquer les LUT au calque.

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

Vous pouvez également utiliser OverlayProperties.getLutProperties() pour comprendre les propriétés LUT de l'appareil et déterminer si Hardware Composer peut gérer la LUT sélectionnée.