ความสามารถของ HDR ที่แตกต่างกันในอุปกรณ์ Android อาจทำให้เอาต์พุตการแสดงผล HDR กระจัดกระจาย ตารางการค้นหา (LUT) เป็นโซลูชันการแก้ไขสีแบบใหม่ ที่ออกแบบมาเพื่อแก้ปัญหาความไม่สอดคล้องกันนี้ ความไม่สอดคล้องนี้ได้รับการแก้ไขโดยการกำหนดวิธีแก้สี แทนที่จะมอบหมายให้กลไกการแก้สีต่ออุปกรณ์ที่ไม่ได้กำหนด
ข้อกำหนดเบื้องต้นของ SDK
หากต้องการใช้ LUT คุณต้องใช้ SDK เวอร์ชัน 36 ขึ้นไป
ใช้ LUT
ทำตามขั้นตอนต่อไปนี้เพื่อใช้ LUT กับSurfaceControl
- สร้างอินสแตนซ์
DisplayLuts
- สร้างอินสแตนซ์
DisplayLuts.Entry
ด้วยบัฟเฟอร์ข้อมูล LUT, มิติข้อมูล LUT และคีย์การสุ่มตัวอย่างของ LUT ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของLutProperties
- โทรหา
DisplayLuts#set(DisplayLuts.Entry luts)
หรือDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)
เพื่อตั้งค่ารายการ LUT เฟรมเวิร์กรองรับ LUT แบบ 1 มิติ, LUT แบบ 3 มิติ หรือการผสมผสานระหว่าง LUT แบบ 1 มิติและ 3 มิติ - เรียกใช้
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 ที่เลือกได้หรือไม่