Chỉnh màu bằng bảng tra cứu (LUT)

Khả năng HDR khác nhau trên các thiết bị Android có thể dẫn đến đầu ra hiển thị HDR bị phân mảnh. Bảng tra cứu (LUT) là một giải pháp hiệu chỉnh màu mới được thiết kế để giải quyết sự không nhất quán này. Sự không nhất quán này được giải quyết bằng cách quy định một cách chỉnh màu, thay vì uỷ quyền cho một cơ chế chỉnh màu không xác định cho từng thiết bị.

Điều kiện tiên quyết về SDK

Để triển khai LUT, phiên bản SDK của bạn phải là 36 trở lên.

Triển khai LUT

Hãy làm theo các bước sau để áp dụng LUT cho SurfaceControl:

  1. Tạo một thực thể DisplayLuts.
  2. Tạo(các) thực thể DisplayLuts.Entry bằng vùng đệm dữ liệu LUT, phương diện LUT và khoá lấy mẫu của LUT. Để biết thêm thông tin, hãy xem tài liệu về LutProperties.
  3. Gọi DisplayLuts#set(DisplayLuts.Entry luts) hoặc DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) để đặt các mục LUT. Khung này hỗ trợ LUT 1D, LUT 3D hoặc kết hợp LUT 1D và 3D.
  4. Gọi SurfaceControl.Transaction#setLuts để áp dụng LUT cho lớp.

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

Bạn cũng có thể dùng OverlayProperties.getLutProperties() để tìm hiểu các thuộc tính LUT của thiết bị và xác định xem Hardware Composer có thể xử lý LUT đã chọn hay không.