高動態範圍 (HDR) 影片推出後,影視串流服務開始串流播放 HDR 影片,著重於全螢幕體驗。社群媒體應用程式現在支援 HDR 影片和 Ultra HDR,表示越來越多應用程式有意採用 HDR。
Android 支援 HDR
Android 在多個里程碑中支援 HDR 技術:
Android 7
- 初步支援 HDR 影片解碼和顯示。
- HDR 功能持續進步。
Android 13
Android 14
- 支援 Ultra HDR 格式的 HDR 圖片。
HDR 螢幕截圖支援功能也已演進並有所變更。
HDR 螢幕截圖功能進展
本節說明 Android 更新中,HDR 螢幕截圖功能的進展。
Android 9
Android 的圖像合成器 SurfaceFlinger 導入 HDR 影片支援功能。HDR 影片和螢幕截圖的 GPU 算繪作業會使用複雜的多項式色調對應器。這條色調映射曲線不一定等同於顯示色調映射器,因此螢幕截圖與螢幕上的內容不同。
Android 13
SurfaceFlinger 的 GPU 算繪區塊包含色調映射外掛程式,可讓原始設備製造商提供 GPU 著色器,以符合螢幕的色調映射曲線。螢幕截圖與螢幕內容幾乎相同,但有以下差異:
- 螢幕截圖會維持 SDR 格式。因此,與 HDR 場景並列顯示時,螢幕截圖中的 HDR 區域會顯得較暗。
- 系統不會管理 SDR 亮度,因此螢幕截圖中的 SDR 內容會與 HDR 內容一樣明亮。
換句話說,系統會將螢幕截圖中擷取的任何 HDR 影片轉換為 SDR 影片。
Android 14
Ultra HDR 對螢幕截圖功能是一大挑戰。與影片不同的是,系統通常會在 UI 影格緩衝區中算繪圖片,這有兩個主要影響:
- 圖片不得採用與周圍 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 比較。
Android 16
與 Ultra HDR 類似,HDR 螢幕截圖會在螢幕截圖檔案中儲存增益對應,以便在算繪期間還原 HDR 呈現方式。不過,與 Ultra HDR 不同的是,螢幕截圖仍會以 PNG 格式儲存,以便與可擷取 PNG 螢幕截圖的系統向後相容。
生成螢幕截圖的過程如下:
- 當裝置顯示 HDR 內容時,系統會使用 FP16 像素產生螢幕截圖。
- Android 15 QPR1 中所述的本機色調對應器會產生 8 位元的基本 SDR 轉譯版本。
- 將 SDR 基本轉碼版本與 HDR 轉碼版本合併,即可產生 8 位元增益圖。
- SDR 基本轉譯和增益對映會編碼為單一 PNG 檔案。
PNG 編碼包含下列項目:
- 增益對映會編碼為 PNG 圖片,其中包含
gmAP區塊,內含增益對映的 ISO 21496-1 中繼資料。 - SDR 基本轉碼版本會編碼為 PNG 圖片,其中包含
gmAP區塊,內含 ISO 21496-1 中繼資料的版本。這個 PNG 圖片也包含gdAT區塊,內含整個編碼增益對映 PNG。
下圖顯示 PNG 區塊的版面配置:
圖 3. PNG 區塊的版面配置。
在 Android 16 中,PNG 編碼器支援這些 PNG 的編碼和解碼作業。應用程式可以顯示含有增益圖的 PNG,方式與 Ultra HDR 相同。