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

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

Предварительные требования SDK

Для реализации LUT ваша версия SDK должна быть 36 или выше.

Реализовать LUT

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

  1. Создайте экземпляр DisplayLuts .
  2. Создайте экземпляр(ы) DisplayLuts.Entry с буфером данных LUT, измерением LUT и ключом выборки LUT. Подробнее см. в документации LutProperties .
  3. Для установки записей LUT вызовите DisplayLuts#set(DisplayLuts.Entry luts) или DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) . Фреймворк поддерживает одномерные LUT, трёхмерные LUT или их комбинацию.
  4. Вызовите 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()

Ява

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.