Las diferentes capacidades de HDR en los dispositivos Android pueden generar salidas de visualización de HDR fragmentadas. Una tabla de búsqueda (LUT) es una nueva solución de corrección de color diseñada para resolver esta incoherencia. Esta incoherencia se resuelve prescribiendo una forma de corregir el color, en lugar de delegar en un mecanismo de corrección de color por dispositivo indefinido.
Requisitos previos del SDK
Para implementar LUT, tu versión del SDK debe ser 36 o posterior.
Implementa una LUT
Sigue estos pasos para aplicar una LUT a un SurfaceControl
:
- Crea una instancia de
DisplayLuts
. - Crea instancias de
DisplayLuts.Entry
con 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 las entradas de la LUT. El framework admite LUTs 1D, LUTs 3D o una combinación de LUTs 1D y 3D. - Llama a
SurfaceControl.Transaction#setLuts
para 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 la LUT del dispositivo y determinar si el Hardware Composer puede controlar la LUT seleccionada.