Quản lý màu

Android 8.1 trở lên có hỗ trợ tính năng quản lý màu sắc. Bạn có thể dùng tính năng này để mang đến 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 để khai thác 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 sắc mà thay vào đó dựa vào khả năng tương thích của nội dung và màn hình (mục tiêu thường được ngành truyền hình hỗ trợ). Tuy nhiên, các công nghệ màn hình gần đây cho phép sử dụng màn hình có gam màu lớn hơn nhiều, nhưng lại không hiển thị nội dung hiện có như mong đợi. Với Android 8.1 trở lên, những thiết bị sử dụng màn hình có gam màu rộng (ví dụ: điốt phát sáng hữu cơ 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 xem thiết bị có hỗ trợ không

Các thiết bị có màn hình hiển thị nhiều màu chạy Android 8.1 trở lên phải hỗ trợ tính năng quản lý màu (nhiều màu). Trước khi bật tính năng này, hãy đảm bảo 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 của 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ị) nhằm điều chỉnh cho phương sai sản xuất trong hành vi hiển thị. Ít nhất, 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 kết hợp HWC2 phải báo cáo các chế độ màu Display-P3 và sRGB bằng cách sử dụng HWCDisplay::GetColorModes.

Tiếp theo, hãy bật các tiện ích OpenGL cần thiết và tính năng hỗ trợ thư viện để dịch các 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 các ứ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 sắc rộng). Cần có trình điều khiển hỗ trợ.
  • EGL_KHR_gl_colorspace. Đối với những ứng dụng muốn sử dụng bộ đệm khung hình mặc định ở định dạng sRGB để dễ dàng đạt được khả năng 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 bối cảnh OpenGL hỗ trợ khả năng đó. Yêu cầu trình điều khiển hỗ trợ hành vi sRGB.

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

  • EGL_EXT_colorspace_scrgb_linear. Tiện ích này cung cấp một lựa chọn không gian màu mới (scRGB) mà các ứ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 tuyến tính với cùng điểm trắng và dải màu sơ cấp như sRGB (do đó, tương thích ngược với sRGB). Việc này không cần đến sự hỗ trợ của trình điều khiển và có thể được triển khai trong trình bao bọc EGL của Android. Để hữu ích, tiện ích này cần 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 những ứng dụng muốn sử dụng các vùng đệm khung hình mặc định ở định dạng Display-P3 để dễ dàng đạt được khả năng 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 ở định dạng Display-P3 bằng các ngữ cảnh OpenGL hỗ trợ khả năng đó. Bạn có thể triển khai việc này trong trình bao bọc trình điều khiển EGL.
  • VK_EXT_swapchain_colorspace (Vulkan). Cho phép các ứ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 thêm chế độ hỗ trợ cho nhiều tiêu chuẩn màu như DCI-P3, AdobeRGB, Rec709 và Rec2020. Các điểm 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ị. Cho phép hỗ trợ nhiều phép biến đổi màu trong phần cứng.
  • Hỗ trợ chuyể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. Lý tưởng nhất là phép biến đổi này được cung cấp bởi công cụ hiển thị (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à một bản minh hoạ OpenGL đơn giản yêu cầu một không gian màu Display-P3.
  • EGL_testCác thử nghiệm về tiện ích cần thiết và khả năng hỗ trợ cấu hình (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. Đối với tiêu đề, hãy tham khảo: