Как корректировать цвета с помощью таблиц преобразования (LUT)

Различные возможности HDR на устройствах Android могут привести к фрагментации вывода HDR-дисплея. Таблица преобразования (LUT) – это новое решение для коррекции цвета, предназначенное для устранения этого несоответствия. Это несоответствие устраняется путем предписания способа коррекции цвета, а не делегирования неопределенному механизму коррекции цвета для каждого устройства.

Требования к SDK

Чтобы использовать LUT, у вас должна быть установлена версия SDK 36 или выше.

Как использовать LUT-файл

Чтобы применить LUT к SurfaceControl, выполните следующие действия:

  1. Создайте экземпляр DisplayLuts.
  2. Создайте экземпляры DisplayLuts.Entry с буфером данных LUT, размером LUT и ключом выборки LUT. Подробнее читайте в документации по LutProperties.
  3. Вызовите метод DisplayLuts#set(DisplayLuts.Entry luts) или DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second), чтобы задать записи LUT. Фреймворк поддерживает 1D LUT, 3D LUT или комбинацию 1D и 3D LUT.
  4. Вызовите SurfaceControl.Transaction#setLuts, чтобы применить LUT к слою.

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

Вы также можете использовать OverlayProperties.getLutProperties(), чтобы узнать свойства LUT устройства и определить, может ли Hardware Composer обрабатывать выбранную LUT.