HEIF 顯像

搭載 Android 10 的裝置支援 HEIC 壓縮圖片格式,這是 品牌專屬的高效率視訊編碼 (HEVC),屬於 ISO/IEC 23008-12 規格定義的高效率圖片檔案格式 (HEIF)。與 JPEG 檔案相比,以 HEIC 編碼的圖片品質更佳,檔案大小也較小。

相機架構會向相機 HAL 要求未壓縮的圖片,並傳送至媒體子系統,由 HEIC 或 HEVC 編碼器編碼,藉此生成 HEIC 圖片。

需求條件

如要支援 HEIC 圖片格式,裝置必須具備支援MIMETYPE_IMAGE_ANDROID_HEICMIMETYPE_VIDEO_HEVC的硬體編碼器,並採用恆定品質模式

實作

如要在裝置上支援 HEIC 圖片格式,請實作 HEIC/HEVC 編碼器,並支援必要的串流設定,也就是 IMPLEMENTATION_DEFINED/YUV 串流和 JPEG 應用程式區段串流。

媒體

針對相應硬體,以恆定品質 (CQ) 模式實作 HEIC/HEVC 編碼器,如下所示:

  • 視圖片大小而定,HEVC 類型轉碼器會耗用 IMPLEMENTATION_DEFINED 格式 (搭配 GRALLOC_USAGE_HW_VIDEO_ENCODER 用法) 或 HAL_PIXEL_FORMAT_YCBCR_420_888 格式。
  • HEIC 類型轉碼器會使用 IMPLEMENTATION_DEFINED 格式,並搭配 GRALLOC_USAGE_HW_IMAGE_ENCODER 用法。

相機

在靜態中繼資料中,將 ANDROID_HEIC_INFO_SUPPORTED 設為 true,並將 ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT 設為介於 [1, 16] 之間的值,表示 JPEG 應用程式區段的數量。

對於每個必要串流組合,攝影機裝置必須支援將 JPEG 串流換成相同大小的 HEIC 串流。

如果是公開 API 的 HEIC 輸出串流,攝影機服務會建立兩個 HAL 內部串流:

  • 含有 JPEG_APPS_SEGMENT 使用狀況旗標的 BLOB 串流,用於儲存應用程式區段,包括 EXIF 和縮圖區段
  • IMPLEMENTATION_DEFINEDYCBCR_420_888 串流,大小取決於目標轉碼器和 HEIC 串流大小

相機架構會根據 ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT 分配足夠大的緩衝區,供相機 HAL 填入 JPEG 應用程式區段。APP1 區隔為必要項目,但 APP1 後的區隔 (APP2 以上) 為選用項目。相機架構會覆寫 APP1 區段中可從擷取結果中繼資料衍生或與主要圖片位元串流相關的 EXIF 標記,並將這些標記傳送至 MediaMuxer

由於媒體編碼器會將方向嵌入輸出圖片的中繼資料,為確保主圖片和縮圖的方向一致,相機 HAL 不得根據 android.jpeg.orientation. 旋轉縮圖。架構會將方向寫入 EXIF 中繼資料和 HEIC 容器。

與 JPEG 格式相關的靜態、控制和動態中繼資料標記也適用於 HEIC 格式。舉例來說,擷取要求中的 android.jpeg.orientationandroid.jpeg.quality 中繼資料標記,可用來控制 HEIC 圖片的方向和品質。

如要在應用程式中使用 HEIC 格式,請使用 HEIC 公用 API

詳情請參閱下列來源。

相機 HAL

圖形緩衝區資料空間

圖形緩衝區用量空間

驗證

如要驗證實作項目是否支援 HEIC 圖片,請使用 TestingCamera2 測試應用程式,並執行下列攝影機 CTS 和 VTS 測試。

相機 CTS 測試

攝影機 VTS 測試