搭載 Android 10 的裝置支援 HEIC 壓縮圖片格式,這是 品牌專屬的高效率視訊編碼 (HEVC),屬於 ISO/IEC 23008-12 規格定義的高效率圖片檔案格式 (HEIF)。與 JPEG 檔案相比,以 HEIC 編碼的圖片品質更佳,檔案大小也較小。
相機架構會向相機 HAL 要求未壓縮的圖片,並傳送至媒體子系統,由 HEIC 或 HEVC 編碼器編碼,藉此生成 HEIC 圖片。
需求條件
如要支援 HEIC 圖片格式,裝置必須具備支援MIMETYPE_IMAGE_ANDROID_HEIC
或MIMETYPE_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_DEFINED
或YCBCR_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.orientation
和 android.jpeg.quality
中繼資料標記,可用來控制 HEIC 圖片的方向和品質。
如要在應用程式中使用 HEIC 格式,請使用 HEIC 公用 API。
詳情請參閱下列來源。
相機 HAL
圖形緩衝區資料空間
圖形緩衝區用量空間
驗證
如要驗證實作項目是否支援 HEIC 圖片,請使用 TestingCamera2
測試應用程式,並執行下列攝影機 CTS 和 VTS 測試。
相機 CTS 測試
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
攝影機 VTS 測試