Mengoreksi warna dengan tabel pemeta (LUT)

Kemampuan HDR yang bervariasi di seluruh perangkat Android dapat menyebabkan output tampilan HDR yang terfragmentasi. Tabel pencarian (LUT) adalah solusi koreksi warna baru yang dirancang untuk mengatasi inkonsistensi ini. Ketidakkonsistenan ini diselesaikan dengan menentukan cara mengoreksi warna, bukan mendelegasikan ke mekanisme koreksi warna per perangkat yang tidak ditentukan.

Prasyarat SDK

Untuk menerapkan LUT, versi SDK Anda harus 36 atau yang lebih tinggi.

Menerapkan LUT

Ikuti langkah-langkah berikut untuk menerapkan LUT ke SurfaceControl:

  1. Buat instance DisplayLuts.
  2. Buat instance DisplayLuts.Entry dengan buffer data LUT, dimensi LUT, dan kunci pengambilan sampel LUT. Untuk mengetahui informasi selengkapnya, lihat dokumentasi LutProperties.
  3. Panggil DisplayLuts#set(DisplayLuts.Entry luts) atau DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) untuk menyetel entri LUT. Framework ini mendukung LUT 1D, LUT 3D, atau kombinasi LUT 1D dan 3D.
  4. Panggil SurfaceControl.Transaction#setLuts untuk menerapkan LUT ke lapisan.

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

Anda juga dapat menggunakan OverlayProperties.getLutProperties() untuk memahami properti LUT perangkat, dan menentukan apakah Hardware Composer dapat menangani LUT yang dipilih.