Las diferentes capacidades de HDR en los dispositivos Android pueden generar salidas de pantalla HDR fragmentadas. Una tabla de consulta (LUT) es una nueva solución de corrección de colores diseñada para resolver esta inconsistencia. Esta inconsistencia se resuelve prescribiendo una forma de corregir el color, en lugar de delegar en un mecanismo de corrección de color indefinido por dispositivo.
Requisitos previos del SDK
Para implementar LUT, la versión del SDK debe ser la 36 o una posterior.
Implementa una LUT
Sigue estos pasos para aplicar una LUT a un SurfaceControl:
- Crea una instancia de
DisplayLuts. - Crea instancias de
DisplayLuts.Entrycon el búfer de datos de la LUT, la dimensión de la LUT y la clave de muestreo de la LUT. Para obtener más información, consulta la documentación deLutProperties. - Llama a
DisplayLuts#set(DisplayLuts.Entry luts)oDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)para establecer entradas de LUT. El framework admite LUT 1D, LUT 3D o una combinación de LUT 1D y 3D. - Llama a
SurfaceControl.Transaction#setLutspara aplicar las LUT a la capa.
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();
También puedes usar OverlayProperties.getLutProperties() para comprender las propiedades de LUT del dispositivo y determinar si Hardware Composer puede controlar la LUT seleccionada.