Các tính 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 mà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 hiệu chỉnh màu, thay vì uỷ quyền cho một cơ chế hiệu chỉnh màu không xác định cho mỗi 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:
- Tạo một
DisplayLutsthực thể. - Tạo
DisplayLuts.Entrythực thể(các) bằng bộ đệm dữ liệu LUT, kích thước LUT và khoá lấy mẫu của LUT. Để biết thêm thông tin, hãy xemLutPropertiestài liệu. - Gọi
DisplayLuts#set(DisplayLuts.Entry luts)hoặcDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)để đặt các mục LUT. Khung này hỗ trợ LUT 1D, LUT 3D hoặc tổ hợp LUT 1D và 3D. - 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ể sử dụng OverlayProperties.getLutProperties() để hiểu các thuộc tính LUT của thiết bị và xác định xem Trình soạn thảo phần cứng có thể xử lý LUT đã chọn hay không.