Quản lý màu

Android 8.1 trở lên hỗ trợ tính năng quản lý màu mà bạn có thể dùng để mang lại trải nghiệm nhất quán trên các công nghệ hiển thị. Các ứng dụng chạy trên Android có thể truy cập vào toàn bộ chức năng của màn hình có gam màu rộng để tận dụng tối đa thiết bị hiển thị.

Các bản phát hành Android trước đây không hỗ trợ tính năng quản lý màu mà thay vào đó dựa vào nội dung và màn hình tương thích (mục tiêu thường được ngành truyền hình hỗ trợ). Tuy nhiên, các công nghệ hiển thị gần đây cho phép màn hình có gam màu rộng hơn nhiều, nhưng không hiển thị nội dung hiện có như mong đợi. Với Android 8.1 trở lên, các thiết bị sử dụng màn hình có gam màu rộng (ví dụ: đi-ốt hữu cơ phát sáng ma trận chủ động hoặc AMOLED, một số màn hình LCD) có thể xem nội dung có gam màu rộng từ các ứng dụng.

Xác định khả năng hỗ trợ của thiết bị

Các thiết bị có màn hình màu rộng chạy Android 8.1 trở lên phải hỗ trợ tính năng quản lý màu (màu rộng). Trước khi bật tính năng này, hãy đảm bảo rằng thiết bị đáp ứng các yêu cầu sau:

  • Màn hình thiết bị đáp ứng các yêu cầu về phần cứng, bao gồm cả màn hình được đặc trưng hoá tốt hỗ trợ không gian màu Display-P3. Nếu màn hình không đáp ứng yêu cầu này, đừng bật tính năng quản lý màu. Để giảm tác động đến CPU và GPU, bạn nên hỗ trợ sRGB mở rộng và HDR10 trong quy trình hiển thị.
  • Thiết bị hỗ trợ quy trình hiệu chuẩn tại nhà máy tạo dữ liệu hiệu chuẩn (được lưu trữ trên thiết bị) để điều chỉnh phương sai sản xuất trong hành vi hiển thị. Ở mức tối thiểu, dữ liệu hiệu chuẩn phải cho phép màn hình hiển thị chính xác nội dung sRGB và các điểm trắng D65 và D73.

Nếu đáp ứng các yêu cầu này, bạn có thể bật tính năng quản lý màu cho thiết bị.

Triển khai tính năng quản lý màu

Để triển khai tính năng quản lý màu, trước tiên, hãy cập nhật trình điều khiển Hardware Composer 2 (HWC2) để hiểu các chế độ màu và áp dụng các chế độ đó cho phần cứng. Cụ thể, trình soạn thảo HWC2 phải báo cáo các chế độ màu Display-P3 và sRGB bằng HWCDisplay::GetColorModes.

Tiếp theo, hãy bật các tiện ích OpenGL cần thiết và hỗ trợ thư viện để chuyển đổi không gian màu OpenGL sang không gian dữ liệu HAL. Các tiện ích OpenGL bắt buộc bao gồm:

  • EGL_EXT_pixel_format_float. Cho phép ứng dụng tạo EGLSurface có thể trình bày với các thành phần màu dấu phẩy động 16 bit. Mức độ ưu tiên: cao (dự kiến đây là định dạng pixel mặc định cho các ứng dụng nhận biết màu rộng). Yêu cầu hỗ trợ trình điều khiển.
  • EGL_KHR_gl_colorspace. Đối với các ứng dụng muốn sử dụng bộ đệm khung mặc định ở định dạng sRGB để dễ dàng đạt được kết xuất sRGB cho các thiết bị hiển thị, tiện ích này cho phép tạo EGLSurface sẽ được kết xuất ở sRGB bằng các ngữ cảnh OpenGL hỗ trợ chức năng đó. Yêu cầu hỗ trợ trình điều khiển cho hành vi sRGB.

Android cũng cung cấp các tiện ích không bắt buộc sau đây:

  • EGL_EXT_colorspace_scrgb_linear. Tiện ích này cung cấp một tuỳ chọn không gian màu mới, scRGB, mà ứng dụng có thể chọn khi tạo EGLSurface. Không gian màu scRGB xác định một không gian được tham chiếu hiển thị tuyến tính có cùng điểm trắng và màu cơ bản như sRGB (và do đó, tương thích ngược với sRGB). Điều này không yêu cầu hỗ trợ trình điều khiển và có thể được triển khai trong trình bao bọc EGL Android. Để hữu ích, tiện ích này yêu cầu hỗ trợ dấu phẩy động 16 bit (FP16).
  • EGL_EXT_gl_colorspace_display_p3EGL_EXT_gl_colorspace_display_p3_linear. Đối với các ứng dụng muốn sử dụng bộ đệm khung mặc định ở định dạng Display-P3 để dễ dàng đạt được kết xuất sRGB cho các thiết bị hiển thị, tiện ích này cho phép tạo EGLSurface sẽ được kết xuất ở Display-P3 bằng các ngữ cảnh OpenGL hỗ trợ chức năng đó. Bạn có thể triển khai tiện ích này trong trình bao bọc trình điều khiển EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Cho phép ứng dụng gắn thẻ chuỗi hoán đổi bằng không gian màu mà chúng đang sử dụng. Bao gồm một số không gian màu phổ biến như DCI-P3, Display-P3, AdobeRGB và BT2020.

Tuỳ chỉnh

Bạn có thể tuỳ chỉnh tính năng quản lý màu bằng cách hỗ trợ nhiều tiêu chuẩn màu như DCI-P3, AdobeRGB, Rec709 và Rec2020. Các tuỳ chỉnh khác bao gồm:

  • Hỗ trợ phần cứng cho việc chuyển đổi màu trong quy trình hiển thị. Hỗ trợ nhiều biến đổi màu trong phần cứng.
  • Hỗ trợ biến đổi màu độc lập trên nhiều lớp (ví dụ: một số lớp có thể là sRGB và các lớp khác là sRGB mở rộng, mỗi lớp có quy trình màu riêng). Khi có nhiều không gian màu hiển thị, một số không gian màu cần được chuyển đổi thành không gian màu của màn hình. Tốt nhất là công cụ biến đổi này do công cụ hiển thị cung cấp (nếu không, Android phải thực hiện thành phần GPU).

Thử nghiệm

Để kiểm thử tính năng quản lý màu, hãy sử dụng các tài nguyên sau trong opengl/tests:

  • gl2_basic là bản minh hoạ OpenGL đơn giản yêu cầu không gian màu Display-P3.
  • EGL_test kiểm thử khả năng hỗ trợ tiện ích và cấu hình cần thiết (10:10:10:2 và FP16).
  • test_wide_color tạo một giao diện theo cách tương tự như SurfaceFlinger (ví dụ: cấu hình, không gian màu và định dạng pixel).

Triển khai tham chiếu

Để biết thông tin về cách triển khai tham chiếu, hãy tham khảo frameworks/native. Để biết thông tin về tiêu đề, hãy tham khảo: