自從推出高動態範圍 (HDR) 影片後,串流服務已開始串流 HDR 影片,並著重於全螢幕體驗。近期,社群媒體應用程式已推出 HDR 影片和 Ultra HDR 支援功能,顯示各式應用程式對 HDR 採用率的興趣日益增加。
Android 支援 HDR
以下是 Android 多年來支援 HDR 技術的里程碑:
Android 7
- 初步支援 HDR 影片解碼和顯示功能。
- 持續改善 HDR 功能。
Android 13
- 端對端支援 HDR 影片擷取、編碼和顯示功能。
- 推出混合 SDR 和 HDR 合成的功能,可在 SDR 和 HDR 之間定義不同的可顯示亮度範圍。
Android 14
- 支援 HDR 圖片和 Ultra HDR。
支援 HDR 的螢幕截圖功能也不斷演進,並在多年後經歷了許多變化。
HDR 螢幕截圖功能的進展
本節將追蹤 HDR 螢幕截圖功能在近期 Android 更新中的進展。
Android 9
Android 的圖形合成器 SurfaceFlinger 推出 HDR 影片支援功能。複雜的多項式色調對應器支援 GPU 算繪 HDR 影片和螢幕截圖。這個色調對應曲線不一定等同於顯示器色調對應器,因此螢幕截圖與螢幕上的內容會有所差異。
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 圖片裁剪。
- 在 HDR 亮點中截斷應用程式 UI 亮度,以達到折衷。
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 圖 1. 範例 1 的 Android 14 和 Android 15-QPR1 比較。
範例 2 是 HDR 影片疊加在「設定」畫面上的螢幕截圖,後續的螢幕截圖也是如此。在 Android 14 中,螢幕截圖的顏色會逐漸變暗。在 Android 15-QPR1 中,色調轉換器會正確複製及保留 UI 顏色。
Android 14 Android 15-QPR1 圖 2. 範例 2 中 Android 14 與 Android 15-QPR1 的比較。