HEIF 成像

運行 Android 10 的裝置支援 HEIC 壓縮影像格式,這是ISO/IEC 23008-12中指定的高效視訊編碼 (HEVC) 特定品牌的高效影像檔案格式 (HEIF)。與 JPEG 檔案相比,HEIC 編碼的影像可提供更好的影像品質和更小的檔案大小。

HEIC 影像由相機框架生成,該框架從相機 HAL請求未壓縮的影像並將其發送到媒體子系統以由 HEIC 或 HEVC 編碼器進行編碼。

要求

若要支援 HEIC 影像格式,您的裝置必須具有支援MIMETYPE_IMAGE_ANDROID_HEICMIMETYPE_VIDEO_HEVC的硬體編碼器以及恆定品質模式

執行

要在設備上支援 HEIC 影像格式,請實現 HEIC/HEVC 編解碼器並提供對所需流配置的支持,這些配置是IMPLEMENTATION_DEFINED / YUV流和 JPEG 應用程式段流。

媒體

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

  • HEVC 類型編解碼器使用GRALLOC_USAGE_HW_VIDEO_ENCODER用法的IMPLEMENTATION_DEFINED格式或HAL_PIXEL_FORMAT_YCBCR_420_888格式,視影像大小而定。
  • HEIC 類型編解碼器使用帶有GRALLOC_USAGE_HW_IMAGE_ENCODER用法的IMPLEMENTATION_DEFINED格式。

相機

在靜態元資料中,將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 流的大小取決於目標編解碼器和 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

有關更多信息,請參閱以下來源。

相機哈爾

圖形緩衝區資料空間

圖形緩衝區使用空間

驗證

若要驗證您的實作是否支援 HEIC 影像,請使用TestingCamera2測試應用程式並執行下列相機 CTS 和 VTS 測試。

相機CTS測試

攝影機 VTS 測試