HEIF イメージング

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 テスト

カメラ VTS テスト