แก้ไขสีด้วยตารางการค้นหา (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 เฟรมเวิร์กรองรับ LUT แบบ 1 มิติ, LUT แบบ 3 มิติ หรือการผสมผสานระหว่าง LUT แบบ 1 มิติและ 3 มิติ
  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 ที่เลือกได้หรือไม่