Les capacités HDR variables des appareils Android peuvent entraîner une fragmentation des sorties d'affichage HDR. 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 à un mécanisme de correction des couleurs par appareil non défini.
Prérequis concernant le SDK
Pour implémenter des LUT, votre version du SDK doit être 36 ou ultérieure.
Implémenter une LUT
Procédez comme suit pour appliquer une LUT à un SurfaceControl :
- Créez une
DisplayLutsinstance. - Créez une ou plusieurs instances
DisplayLuts.Entryavec le tampon de données LUT, la dimension LUT et la clé d'échantillonnage de la LUT. Pour en savoir plus, consultez la documentationLutProperties. - Appelez
DisplayLuts#set(DisplayLuts.Entry luts)ouDisplayLuts#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. - Appelez
SurfaceControl.Transaction#setLutspour 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 le compositeur matériel peut gérer
la LUT sélectionnée.