Android 螢幕截圖中的 HDR

自從高動態範圍 (HDR) 影片推出後,串流服務開始串流播放 HDR 影片,著重於全螢幕體驗。最近,社群媒體應用程式已開始支援 HDR 影片和 Ultra HDR,這表示各種應用程式對採用 HDR 技術的興趣日益濃厚。

Android 支援 HDR

以下是 Android 在過去幾年支援 HDR 技術的里程碑:

Android 7

  • 初步支援 HDR 影片解碼和顯示。
  • HDR 功能持續進步。

Android 13

  • 端對端支援 HDR 影片擷取、編碼和顯示。
  • 推出混合 SDR 和 HDR 合成, 定義 SDR 和 HDR 之間不同的可顯示亮度範圍。

Android 14

HDR 螢幕截圖支援功能也經過演進,多年來歷經多次變更。

HDR 螢幕截圖功能進展

本節追蹤近期 Android 更新中 HDR 螢幕截圖功能的進展。

Android 9

Android 的圖像合成器 SurfaceFlinger 導入了 HDR 影片支援功能。複雜的多項式色調對應器支援 HDR 影片和螢幕截圖的 GPU 算繪作業。這個色調對應曲線不一定等同於螢幕色調對應器,因此螢幕截圖與螢幕上的內容不同。

Android 13

色調對應外掛程式會新增至 SurfaceFlinger 的 GPU 算繪區塊,讓原始設備製造商 (OEM) 提供 GPU 著色器,以符合螢幕的色調對應曲線。螢幕截圖幾乎與螢幕上的內容相同,但有以下差異:

  • 螢幕截圖仍會以 SDR 格式儲存。因此,與 HDR 場景並列顯示時,螢幕截圖中的 HDR 區域會顯得較暗。
  • 系統不會管理 SDR 亮度,因此螢幕截圖中的 SDR 內容會像 HDR 內容一樣明亮。

換句話說,螢幕截圖中的所有 HDR 影片都會轉換為 SDR 影片。

Android 14

Ultra HDR 對螢幕截圖功能造成重大挑戰。與影片不同,圖片通常會在 UI Framebuffer 中算繪,這有兩個主要影響:

  • 圖片的影像處理作業 (包括色調對應) 不得與周圍的 UI 不同。
  • 應用程式在算繪 UI 時,必須負責執行以來源為準的色調對應。

為減輕這項挑戰,我們提供三種可能的螢幕截圖實作方式:

  • 保留 Ultra HDR 圖片的 HDR 詳細資料,導致螢幕截圖中的應用程式 UI 變暗。
  • 保留應用程式 UI 詳細資料,導致 Ultra HDR 圖片遭到裁剪。
  • 在調亮應用程式 UI 的同時,剪輯 HDR 亮部,以達到折衷效果。

Android 14 採用第三種方法,可調亮應用程式 UI 並裁剪 HDR 亮部。

Android 15-QPR1

SurfaceFlinger 包含螢幕截圖的本機色調對應演算法。這項程序包括:

  • 將輸入圖片分割為較小的圖片。
  • 計算每張圖片的最大亮度,並捨棄每個區段內的低亮度值。
  • 透過模糊和重新取樣,插補計算出的亮度。
  • 根據內插的亮度值,將參數化 Reinhard 色調對應器套用至輸入圖片。

這個演算法可大幅改善 Android 14 和 Android 15-QPR1 之間的螢幕截圖品質,如下列範例所示:

  • 範例 1 是 HDR 影片的螢幕截圖,疊加在包含 Ultra HDR 的 Chrome 網頁上。新實作方式大多會保留 UI 顏色,且圖片不會再遭到裁剪。

    Android 14 Android 15-QPR1
    Android 14 中的範例 1 Android 15qpr 中的範例 1

    圖 1. 範例 1 的 Android 14 和 Android 15-QPR1 比較。

  • 範例 2 是 HDR 影片的螢幕截圖,疊加在「設定」上,並附上後續的螢幕截圖。在 Android 14 中,螢幕截圖的顏色會越來越深。在 Android 15-QPR1 中,色調對應器會正確複製並保留 UI 顏色。

    Android 14 Android 15-QPR1
    Android 14 中的範例 2 Android 15qpr 中的範例 2

    圖 2. 範例 2 的 Android 14 和 Android 15-QPR1 比較結果。

Android 16

Ultra HDR 類似,HDR 螢幕截圖會在螢幕截圖檔案中儲存增益對應,以便在算繪期間還原 HDR 呈現方式。不過,與 Ultra HDR 不同的是,螢幕截圖仍會保留 PNG 格式,以便與擷取 PNG 螢幕截圖的系統向後相容。

螢幕截圖生成詳細資料如下:

  • 在裝置上顯示 HDR 內容時,系統會使用 FP16 像素產生螢幕截圖。
  • Android 15-QPR1 中所述的本機色調對應器會產生 8 位元基本 SDR 轉譯。
  • 8 位元增益對映是透過合併 SDR 基礎影像和 HDR 影像產生。
  • SDR 基礎轉譯和增益對映會編碼為單一 PNG 檔案。

PNG 編碼詳細資料如下:

  • 增益對映會編碼為 PNG 圖片,其中包含 gmAP 區塊,內含增益對映的 ISO 21496-1 中繼資料。
  • SDR 基礎轉譯會編碼為 PNG 圖片,其中包含 gmAP 區塊,內含 ISO 21496-1 中繼資料版本。這個 PNG 圖片也包含 gdAT 區塊,內含整個編碼增益對應 PNG。

下圖顯示 PNG 區塊的版面配置:

PNG 區塊的版面配置

圖 3. PNG 區塊的版面配置。

在 Android 16 中,PNG 編碼器支援這些 PNG 的編碼和解碼作業。應用程式可以顯示含有增益對應的 PNG,方式與Ultra HDR 相同。