Kemampuan HDR yang bervariasi di berbagai perangkat Android dapat menyebabkan output tampilan HDR yang terfragmentasi. Tabel pencarian (LUT) adalah solusi koreksi warna baru yang dirancang untuk mengatasi inkonsistensi ini. Inkonsistensi ini diatasi dengan menentukan cara untuk mengoreksi warna, bukan mendelegasikannya ke mekanisme koreksi warna per perangkat yang tidak ditentukan.
Prasyarat SDK
Untuk menerapkan LUT, versi SDK Anda harus 36 atau yang lebih tinggi.
Mengimplementasikan LUT
Ikuti langkah-langkah berikut untuk menerapkan LUT ke SurfaceControl:
- Buat instance
DisplayLuts. - Buat instance
DisplayLuts.Entrydengan buffer data LUT, dimensi LUT, dan kunci sampling LUT. Untuk mengetahui informasi selengkapnya, lihat dokumentasiLutProperties. - Panggil
DisplayLuts#set(DisplayLuts.Entry luts)atauDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)untuk menetapkan entri LUT. Framework ini mendukung LUT 1D, LUT 3D, atau kombinasi LUT 1D dan 3D. - Panggil
SurfaceControl.Transaction#setLutsuntuk 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.