Android 9 では、新しい論理カメラデバイスを使った、マルチカメラ デバイス向けの API サポートが導入されました。論理カメラデバイスは、同じ方向を向いた複数の物理カメラデバイスで構成されます。論理カメラデバイスは 1 つの CameraDevice または CaptureSession としてアプリに公開され、HAL 統合マルチカメラ機能の操作を可能にします。アプリは必要に応じて、基となる物理カメラのストリーム、メタデータ、コントロールにアクセスして制御できます。
図 1. マルチカメラ サポート
この図では、カメラ ID がそれぞれ色分けされています。アプリは、各物理カメラからの RAW バッファを同時にストリーミングできます。また、コントロールを個別に設定して、物理カメラごとに別々にメタデータを受け取ることもできます。
例とソース
マルチカメラ デバイスは、論理マルチカメラ機能を使用してアドバタイズする必要があります。
カメラ クライアントは getPhysicalCameraIds()
を呼び出して、特定の論理カメラを構成している物理デバイスのカメラ ID を照会できます。結果の一部として返される ID は、setPhysicalCameraId()
によって物理デバイスを個別に制御するために使用されます。結果全体に対してこのような個々のリクエスト結果を照会するには、getPhysicalCameraResults()
を呼び出します。
個々の物理カメラ リクエストでサポートされるパラメータは限られています。サポートされるパラメータのリストを確認するには、getAvailablePhysicalCameraRequestKeys()
を呼び出します。
物理カメラ ストリームは非再処理リクエストでのみサポートされ、モノクロ センサーとベイヤー センサーにのみ対応しています。
実装
サポート チェックリスト
論理マルチカメラ デバイスを HAL 側に追加するには:
- アプリにも公開されている複数の物理カメラで構成される論理カメラ デバイスに、
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
機能を追加します。 ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
静的メタデータ項目に物理カメラ ID のリストを追加します。- 物理カメラ ストリームのピクセル間の相関に必要な深度関連の静的メタデータを追加します(
ANDROID_LENS_POSE_ROTATION
、ANDROID_LENS_POSE_TRANSLATION
、ANDROID_LENS_INTRINSIC_CALIBRATION
、ANDROID_LENS_DISTORTION
、ANDROID_LENS_POSE_REFERENCE
)。 ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
静的メタデータ項目を次のように設定します。ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: マスター / マスターモードのセンサーの場合、ハードウェアのシャッターと露出は同期されません。ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: マスター / スレーブモードのセンサーの場合、ハードウェアのシャッターと露出が同期されます。
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
と、個々の物理カメラでサポートされているパラメータのリストを追加します。論理デバイスが個々のリクエストをサポートしていない場合は、リストを空にできます。個々のリクエストがサポートされている場合は、キャプチャ リクエストの一部として届く
physicalCameraSettings
を個別に処理および適用し、必要に応じて個々のphysicalCameraMetadata
を追加します。カメラ HAL デバイス バージョン 3.5(Android 10 で導入)以降の場合は、論理カメラを構成している現在アクティブな物理カメラの ID を使用して
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
結果キーを追加します。
Android 9 搭載デバイスの場合、カメラデバイスは 1 つの論理 YUV または RAW ストリームを、2 台の物理カメラからの同じサイズ(RAW ストリームには適用されない)と形式の物理ストリームで置き換えられる必要があります。これは Android 10 搭載デバイスには当てはまりません。
カメラ HAL デバイスのバージョンが 3.5 以降の Android 10 搭載デバイスの場合、物理ストリームを含む特定のストリームの組み合わせがサポートされているかどうかをアプリが照会できるように、カメラデバイスで isStreamCombinationSupported
がサポートされている必要があります。
ストリーム構成マップ
論理カメラの場合、特定のハードウェア レベルのカメラデバイスで必須となるストリームの組み合わせは、CameraDevice.createCaptureSession
で必要な組み合わせと同じです。ストリーム構成マップ内のすべてのストリームは、論理ストリームである必要があります。
サイズの異なる物理サブカメラを使用した RAW 機能をサポートする論理カメラデバイスでは、アプリで論理 RAW ストリームが構成された場合に、センサーサイズが異なる物理サブカメラに切り替える必要はありません。したがって、既存の RAW キャプチャ アプリが停止しません。
RAW キャプチャ時に物理サブカメラを切り替えて HAL 実装の光学ズームを利用するには、アプリで論理 RAW ストリームではなく物理サブカメラ ストリームが構成される必要があります。
保証されるストリームの組み合わせ
論理カメラとその構成要素である物理カメラの両方で、それぞれのデバイスレベルに必要な必須ストリームの組み合わせが保証される必要があります。
論理カメラデバイスは、ハードウェア レベルと機能に基づいて物理カメラデバイスと同様に動作する必要があります。論理カメラの機能セットは、個々の物理カメラのスーパーセットであることが推奨されます。
Android 9 搭載デバイスでは、保証されるストリームの組み合わせごとに、論理カメラで次の操作が可能である必要があります。
1 つの論理 YUV_420_888 または RAW ストリームを、各物理カメラからのサイズと形式が同じ 2 つの物理ストリームで置き換える(物理カメラでそのサイズと形式がサポートされている場合)。
論理カメラが RAW 機能をアドバタイズせずに、その構成要素である物理カメラがアドバタイズしている場合(通常は物理カメラのセンサーサイズが異なるときに発生する)、2 つの RAW ストリーム(各物理カメラから 1 つずつ)を追加する。
同じサイズと形式の論理ストリームの代わりに物理ストリームを使用する(物理ストリームと論理ストリームの最小フレーム時間が同じである場合は、キャプチャのフレームレートが下がらないようにする必要があります)。
パフォーマンスと電力に関する考慮事項
パフォーマンス:
- 物理ストリームを構成してストリーミングすると、リソースの制約により論理カメラのキャプチャ レートが低下することがあります。
- 物理カメラの設定を適用すると、基盤となるカメラのフレームレートが異なる場合に、キャプチャ レートが低下することがあります。
電力:
- デフォルトのケースでは、HAL の電力最適化が引き続き機能します。
- 物理ストリームを構成またはリクエストすると、HAL の内部電力最適化がオーバーライドされて消費電力が増える場合があります。
カスタマイズ
デバイスの実装は次の方法でカスタマイズできます。
- 論理カメラデバイスの融合出力は、HAL 実装によって異なります。物理カメラからの融合論理ストリームの導出方法に関する決定は、アプリと Android カメラ フレームワークに対して透過的です。
- 必要に応じて、個々の物理リクエストと結果をサポートできます。このようなリクエストで使用できる一連のパラメータも、HAL 実装によって異なります。
- Android 10 以降では、HAL で
getCameraIdList
の一部またはすべての PHYSICAL_ID をアドバタイズしないことを指定して、アプリで直接開けるカメラの数を減らせます。getPhysicalCameraCharacteristics
を呼び出すと、物理カメラの特性が返されます。
検証
論理マルチカメラ デバイスは、他の通常のカメラと同様にカメラ CTS に合格する必要があります。このタイプのデバイスをターゲットとするテストケースは、LogicalCameraDeviceTest
モジュールで確認できます。
次の 3 つの ITS テストは、画像の適切な融合を容易にするマルチカメラ システムをターゲットにしています。
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
scene1 テストと scene4 テストは、ITS-in-a-box テスト装置を使って行います。test_multi_camera_match
テストでは、2 台のカメラが両方とも有効になっているときに、画像の中心の明るさが一致することを確認します。test_multi_camera_alignment
テストでは、カメラの間隔、向き、歪みのパラメータが正常に読み込まれていることを確認します。マルチカメラ システムに広角(90 度を超える)カメラが含まれている場合は、リビジョン 2 バージョンの ITS ボックスが必要です。
2 つ目のテスト装置である Sensor_fusion
は、所定のスマートフォン動作の繰り返しを有効化し、ジャイロスコープとイメージ センサーのタイムスタンプが一致してマルチカメラ フレームが同期していることを確認します。
すべてのボックスは、AcuSpec, Inc.(www.acuspecinc.com、fred@acuspecinc.com)と MYWAY Manufacturing(www.myway.tw、sales@myway)から入手できます。また、リビジョン 1 の ITS ボックスは、West-Mark(www.west-mark.com、dgoodman@west-mark.com)で購入可能です。