Android 10 を搭載するデバイスは、HEIC 圧縮画像形式をサポートしています。HEIC は、ISO/IEC 23008-12 が規定する、高効率動画エンコーディング(HEVC)を採用した高効率画像ファイル形式(HEIF)の一種です。HEIC で画像をエンコードすることで、JPEG ファイルと比べてファイルサイズを抑え、画質を向上させることができます。
HEIC 形式の画像は、カメラ フレームワークが Camera HAL から取得した非圧縮画像をメディア サブシステムに送信し、その非圧縮画像がメディア サブシステムで HEIC または HEVC エンコーダによってエンコードされることで生成されます。
要件
HEIC 画像形式をサポートするには、固定品質モードを備えた MIMETYPE_IMAGE_ANDROID_HEIC
または MIMETYPE_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 出力ストリームの場合、カメラサービスは次の 2 つの HAL 内部ストリームを作成します。
- アプリ セグメント(EXIF セグメントとサムネイル セグメントを含む)を格納するための
JPEG_APPS_SEGMENT
使用フラグを持つ BLOB ストリーム IMPLEMENTATION_DEFINED
ストリームまたはYCBCR_420_888
ストリーム(HEIC ストリームのサイズはターゲット コーデックおよび HEIC ストリームのサイズに応じて変化)
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
に基づいて、カメラ フレームワークは Camera HAL が JPEG アプリ セグメントにデータを入力するのに十分なバッファを割り当てます。APP1
セグメントは必須ですが、APP1
に続くセグメント(APP2
以上)はオプションです。カメラ フレームワークは、キャプチャ結果メタデータから取得できる、またはメイン画像のビット ストリームに関連付けられた APP1
セグメントの EXIF タグをオーバーライドし、その EXIF タグを MediaMuxer
に送信します。
メディア エンコーダは出力画像のメタデータに画像の向きを埋め込むため、メイン画像とサムネイルの向きを一致させるには、Camera HAL で android.jpeg.orientation.
に基づいてサムネイル画像を回転しないようにする必要があります。フレームワークは、画像の向きを EXIF メタデータと HEIC コンテナに書き込みます。
また、JPEG 形式に関連する静的、制御、および動的メタデータタグは HEIC 形式に適用できます。たとえば、キャプチャ リクエストの android.jpeg.orientation
および android.jpeg.quality
メタデータタグを使用して、HEIC 画像の向きと画質を制御できます。
アプリで HEIC 形式を使用するには、 HEIC 公開 API。
詳細については、次のソースを参照してください。
Camera HAL
グラフィック バッファのデータスペース
グラフィック バッファの使用スペース
検証
実装が HEIC 画像をサポートしているかどうかを検証するには、
TestingCamera2
テストアプリを実行し、次のカメラ CTS テストとカメラ VTS テストを実行します。
カメラ CTS テスト
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
カメラ VTS テスト