Различия в возможностях HDR на разных устройствах Android могут приводить к фрагментированному отображению HDR-контента. Таблица преобразования цветов (LUT) — это новое решение для коррекции цвета, разработанное для устранения этой несогласованности. Эта несогласованность устраняется путем предписания способа коррекции цвета, а не путем делегирования этой задачи неопределенному механизму коррекции цвета для каждого устройства.
Предварительные требования к SDK
Для реализации таблиц поиска (LUT) версия вашего SDK должна быть 36 или выше.
Реализуйте таблицу поиска (LUT).
Чтобы применить таблицу поиска (LUT) к SurfaceControl , выполните следующие действия:
- Создайте экземпляр
DisplayLuts. - Создайте экземпляр(ы)
DisplayLuts.Entry, указав буфер данных LUT, размерность LUT и ключ выборки LUT. Для получения дополнительной информации см. документациюLutProperties. - Для установки элементов LUT вызовите
DisplayLuts#set(DisplayLuts.Entry luts)илиDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second). Фреймворк поддерживает одномерные LUT, трехмерные LUT или комбинацию одномерных и трехмерных LUT. - Вызовите
SurfaceControl.Transaction#setLuts, чтобы применить таблицы поиска (LUT) к слою.
Котлин
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();
Также можно использовать OverlayProperties.getLutProperties() , чтобы узнать свойства LUT устройства и определить, может ли Hardware Composer обрабатывать выбранный LUT.