แก้ไขสีด้วยตารางการค้นหา (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 ที่เลือกได้หรือไม่