色彩管理

Android 8.1 以上版本支援色彩管理功能,可用於在各種顯示技術中提供一致的體驗。在 Android 上執行的應用程式可存取廣色域螢幕的完整功能,充分發揮顯示裝置的效能。

先前的 Android 版本並未提供色彩管理支援,而是依賴內容和螢幕的相容性 (電視產業通常會協助達成這個目標)。不過,最新的顯示技術可提供更大的色域,但無法如預期顯示現有內容。在 Android 8.1 以上版本中,使用廣色域螢幕 (例如主動矩陣有機發光二極體或 AMOLED、部分 LCD) 的裝置,可以觀看應用程式中的廣色域內容。

判斷裝置支援

搭載 Android 8.1 以上版本且具備寬色顯示功能的裝置應支援色彩管理 (寬色)。啟用這項功能前,請確認裝置符合下列需求:

  • 裝置螢幕符合硬體需求,包括支援 Display-P3 色彩空間的特性化螢幕。如果螢幕不符合這項規定,請不要啟用色彩管理功能。為減少 CPU 和 GPU 的影響,建議在顯示管道中支援擴充 sRGB 和 HDR10。
  • 裝置支援工廠校正程序,可產生校正資料 (儲存在裝置上),以便調整顯示行為的製造差異。至少應提供校正資料,讓螢幕能夠準確顯示 sRGB 內容,以及 D65 和 D73 白點。

如果符合這些要求,您就可以為裝置啟用色彩管理功能。

實作色彩管理

如要實作色彩管理,請先更新 Hardware Composer 2 (HWC2) 驅動程式,以便瞭解色彩模式,並將這些模式套用至硬體。具體來說,HWC2 編寫器必須使用 HWCDisplay::GetColorModes 回報 Display-P3 和 sRGB 色彩模式。

接著,請啟用必要的 OpenGL 擴充功能和程式庫支援,將 OpenGL 色彩空間轉換為 HAL 資料空間。必要的 OpenGL 擴充功能包括:

  • EGL_EXT_pixel_format_float。允許應用程式使用 16 位元浮點顏色元件建立可顯示的 EGLSurface。優先順序:高 (這應是支援寬色彩的應用程式的預設像素格式)。需要驅動程式支援。
  • EGL_KHR_gl_colorspace。如果應用程式想要使用 sRGB 格式的預設 framebuffer,以便更輕鬆地在顯示裝置上算繪 sRGB,這個擴充功能可讓您建立 EGLSurface,並由支援該功能的 OpenGL 情境算繪 sRGB。需要驅動程式支援 sRGB 行為。

Android 也提供下列選用擴充功能:

  • EGL_EXT_colorspace_scrgb_linear。這項擴充功能提供新的 scRGB 色域選項,應用程式可在建立 EGLSurface 時選擇該選項。scRGB 色彩空間定義了線性顯示參考空間,其白點和主色與 sRGB 相同 (因此可向下相容 sRGB)。這項作業不應需要驅動程式支援,而且可在 Android EGL 包裝函式中實作。為了讓這個擴充功能發揮效用,必須支援 16 位元浮點 (FP16)。
  • EGL_EXT_gl_colorspace_display_p3EGL_EXT_gl_colorspace_display_p3_linear。如果應用程式想要使用 Display-P3 格式的預設 framebuffer,以便更輕鬆地在顯示裝置上進行 sRGB 算繪,這個擴充功能可讓您建立 EGLSurface,並由支援該功能的 OpenGL 情境算繪至 Display-P3。這可在 EGL 驅動程式包裝函式中實作。
  • VK_EXT_swapchain_colorspace (Vulkan)。允許應用程式使用目前使用的色彩空間標記交換鏈結。包含多個常見的色彩空間,例如 DCI-P3、Display-P3、AdobeRGB 和 BT2020。

自訂

您可以自訂色彩管理功能,加入支援各種色彩標準,例如 DCI-P3、AdobeRGB、Rec709 和 Rec2020。其他自訂選項包括:

  • 硬體支援在顯示管道中進行色彩轉換。啟用硬體中的多種色彩轉換支援功能。
  • 支援在多個圖層上進行獨立的顏色轉換 (例如,部分圖層可能是 sRGB,其他則是擴充 sRGB,每個圖層都有各自的顏色管道)。當可顯示的色彩空間不只一個時,部分色彩空間需要轉換為螢幕的色彩空間。理想情況下,顯示引擎最適合提供此轉換 (否則 Android 必須執行 GPU 合成)。

測試

如要測試色彩管理,請在 opengl/tests 中使用下列資源:

  • gl2_basic 是要求 Display-P3 色彩空間的簡單 OpenGL 示範。
  • EGL_test 會測試是否支援必要的擴充功能和設定 (10:10:10:2 和 FP16)。
  • test_wide_color 會以與 SurfaceFlinger 相同的方式建立途徑,例如設定、色彩空間和像素格式。

參考實作

如需參考實作方式,請參閱 frameworks/native。如需標頭資訊,請參閱: