カメラHAL

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android のカメラ ハードウェア アブストラクション レイヤー (HAL) は、 android.hardware.camera2の高レベルのカメラ フレームワーク API を、基盤となるカメラ ドライバーとハードウェアに接続します。 Android 13 以降、カメラ HAL インターフェースの開発ではAIDLが使用されます。 Android 8.0 ではTrebleが導入され、Camera HAL API が HAL インターフェース記述言語 (HIDL) で定義された安定したインターフェースに切り替わりました。以前に Android 7.0 以前用のカメラ HAL モジュールとドライバーを開発したことがある場合は、カメラ パイプラインの大幅な変更に注意してください。

AIDL カメラ HAL

Android 13 以降を実行しているデバイスの場合、カメラ フレームワークには AIDL カメラ HAL のサポートが含まれています。カメラ フレームワークは HIDL カメラ HAL もサポートしていますが、Android 13 以降で追加されたカメラ機能は、AIDL カメラ HAL インターフェースを介してのみ使用できます。 Android 13 以降にアップグレードするデバイスにこのような機能を実装するには、デバイス メーカーは HAL プロセスを HIDL カメラ インターフェースの使用から AIDL カメラ インターフェースの使用に移行する必要があります。

AIDL の利点については、HAL の AIDLを参照してください。

AIDL カメラ HAL を実装する

AIDL カメラ HAL のリファレンス実装については、 hardware/google/camera/common/hal/aidl_service/を参照してください。

AIDL カメラの HAL 仕様は次の場所にあります。

AIDL に移行するデバイスの場合、デバイス メーカーは、コード構造に応じてAndroid SELinux ポリシー (sepolicy)と RC ファイルを変更する必要がある場合があります。

AIDL カメラ HAL を検証する

AIDL カメラ HAL 実装をテストするには、デバイスがすべての CTS および VTS テストに合格することを確認します。 Android 13 では、AIDL VTS テストVtsAidlHalCameraProvider_TargetTest.cppが導入されています。

カメラ HAL3 の機能

Android Camera API の再設計の目的は、アプリが Android デバイスのカメラ サブシステムを制御する機能を大幅に向上させると同時に、API を再編成してより効率的で保守しやすくすることです。追加のコントロールにより、Android デバイス上で高品質のカメラ アプリを簡単に構築できます。このアプリは、複数の製品で確実に動作し、可能な限りデバイス固有のアルゴリズムを使用して品質とパフォーマンスを最大化できます。

バージョン 3 のカメラ サブシステムは、操作モードを 1 つの統合ビューに構造化します。これを使用して、以前のモードのいずれか、およびバースト モードなどの他のいくつかのモードを実装できます。これにより、フォーカスと露出のユーザー制御が向上し、ノイズ リダクション、コントラスト、シャープネスなどの後処理が向上します。さらに、この簡略化されたビューにより、アプリケーション開発者はカメラのさまざまな機能を簡単に使用できます。

API は、カメラ サブシステムをパイプラインとしてモデル化し、フレーム キャプチャの着信要求を 1:1 ベースでフレームに変換します。要求は、フレームのキャプチャと処理に関するすべての構成情報をカプセル化します。これには、解像度とピクセル形式が含まれます。手動センサー、レンズ、フラッシュ制御。 3A 動作モード; RAW->YUV 処理制御;統計生成;等々。

簡単に言うと、アプリケーション フレームワークがカメラ サブシステムにフレームを要求し、カメラ サブシステムが結果を出力ストリームに返します。さらに、結果セットごとに、色空間やレンズ シェーディングなどの情報を含むメタデータが生成されます。カメラ バージョン 3 は、カメラ バージョン 1 の一方向ストリームへのパイプラインと考えることができます。各キャプチャ リクエストは、センサーによってキャプチャされた 1 つの画像に変換され、次のように処理されます。

  • キャプチャに関するメタデータを含む結果オブジェクト。
  • 画像データの 1 ~ N バッファー。それぞれが独自の宛先サーフェスに格納されます。

可能な出力サーフェスのセットは事前に構成されています。

  • 各サーフェスは、固定解像度のイメージ バッファのストリームの宛先です。
  • 一度に少数のサーフェスのみを出力として構成できます (~3)。

要求には、必要なすべてのキャプチャ設定と、この要求のためにイメージ バッファーをプッシュする出力サーフェスのリストが含まれます (構成されたセット全体から)。リクエストは、( capture()を使用して) ワンショットにすることも、( setRepeatingRequest()を使用して) 無期限に繰り返すこともできます。繰り返しのリクエストよりもキャプチャが優先されます。

カメラ データ モデル

図 1.カメラ コアの動作モデル

カメラ HAL1 の概要

カメラ サブシステムのバージョン 1 は、高レベルのコントロールと次の 3 つの動作モードを備えたブラック ボックスとして設計されました。

  • プレビュー
  • ビデオ録画
  • まだキャプチャ

各モードには、わずかに異なる重複する機能があります。これにより、2 つの動作モードの中間に位置するバースト モードなどの新機能の実装が困難になりました。

カメラブロック図

図 2.カメラ コンポーネント

Android 7.0 は、多くのデバイスがまだカメラ HAL1 に依存しているため、引き続きカメラ HAL1 をサポートしています。さらに、Android カメラ サービスは両方の HAL (1 と 3) の実装をサポートしています。これは、カメラ HAL1 で機能の少ない前面カメラをサポートし、カメラ HAL3 でより高度な背面カメラをサポートする場合に役立ちます。

単一のカメラ HALモジュール(独自のバージョン番号を持つ) があり、それぞれ独自のバージョン番号を持つ複数の独立したカメラ デバイスが一覧表示されます。デバイス 2 以降をサポートするには、カメラ モジュール 2 以降が必要であり、そのようなカメラ モジュールにはカメラ デバイスのバージョンが混在している可能性があります (これは、Android が両方の HAL の実装をサポートしているという意味です)。