Android 8.1 trở lên bao gồm hỗ trợ quản lý màu sắc có thể được sử 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 toàn bộ khả năng của màn hình 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 bao gồm hỗ trợ quản lý màu sắc 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 công nghiệp TV hỗ trợ). Tuy nhiên, các công nghệ hiển thị gần đây cho phép hiển thị gam màu lớn 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 gam màu rộng (ví dụ: điốt phát sáng hữu cơ ma trận hoạt động hoặc AMOLED, một số màn hình LCD) có thể xem nội dung gam màu rộng từ ứng dụng.
Xác định hỗ trợ 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ợ 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 của thiết bị đáp ứng các yêu cầu về phần cứng, bao gồm màn hình có đặc tính 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 quản lý màu. Để giảm tác động đến CPU và GPU, cần hỗ trợ sRGB và HDR10 mở rộng trong hệ thống hiển thị.
- Thiết bị hỗ trợ quy trình hiệu chuẩn tại nhà máy tạo ra dữ liệu hiệu chuẩn (được lưu trữ trên thiết bị) để điều chỉnh sự khác biệt trong hoạt động hiển thị của nhà sản xuất. Ở 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 những yêu cầu này thì bạn có thể kích hoạt tính năng quản lý màu sắc cho thiết bị.
Thực hiện quản lý màu sắc
Để triển khai 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ể, nhà soạn thảo HWC2 phải báo cáo chế độ màu Display-P3 và sRGB bằng cách sử dụng HWCDisplay::GetColorModes
.
Tiếp theo, kích hoạt các tiện ích mở rộng OpenGL cần thiết và hỗ trợ thư viện để dịch không gian màu OpenGL sang không gian dữ liệu HAL. Các phần mở rộng OpenGL bắt buộc bao gồm:
-
EGL_EXT_pixel_format_float
. Cho phép ứng dụng tạo EGLSurfaces đẹp mắt với các thành phần màu nổi 16 bit. Mức độ ưu tiên: cao (có thể đâ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 hiển thị sRGB hơn trên các thiết bị hiển thị, tiện ích mở rộng này cho phép tạo EGLSurfaces sẽ được hiển thị ở dạng sRGB bởi các bối cảnh OpenGL hỗ trợ khả 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 mở rộng tùy chọn sau:
-
EGL_EXT_colorspace_scrgb_linear
. Tiện ích mở rộng này cung cấp tùy 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 không gian 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 Android EGL. Để hữu ích, tiện ích mở rộng này yêu cầu hỗ trợ dấu phẩy động 16 bit (FP16). -
EGL_EXT_gl_colorspace_display_p3
vàEGL_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 hiển thị sRGB hơn trên các thiết bị hiển thị, tiện ích mở rộng này cho phép tạo các EGLSurfaces sẽ được hiển thị trong Display-P3 bằng ngữ cảnh OpenGL hỗ trợ khả năng đó. Điều này có thể được thực hiện 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 trao đổi với 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.
Tùy chỉnh
Bạn có thể tùy 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 khác nhau như DCI-P3, AdobeRGB, Rec709 và Rec2020. Các tùy chỉnh khác bao gồm:
- Hỗ trợ phần cứng để chuyển đổi màu sắc trong quy trình hiển thị. Cho phép hỗ trợ chuyển đổi nhiều 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 có thể là sRGB mở rộng, mỗi lớp có đường dẫn 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 công cụ hiển thị cung cấp tốt nhất (nếu không, Android phải thực hiện việc cấu thành GPU).
Kiểm tra
Để kiểm tra khả 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 demo OpenGL đơn giản yêu cầu không gian màu Display-P3. - Kiểm tra
EGL_test
để biết hỗ trợ cấu hình và tiện ích mở rộng cần thiết (10:10:10:2 và FP16). -
test_wide_color
tạo bề mặt theo cách tương tự như SurfaceFlinger (ví dụ: cấu hình, không gian màu và định dạng pixel).
Thực hiện tham khảo
Để biết 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:
-
system/core/include/system/graphics.h
-
system/core/include/system/graphics-base.h
-
HAL_DATASPACE_*
-
HAL_COLOR_MODE_*
-