実際の 3A アルゴリズムは HAL 実装に依存しますが、高レベルのステート マシン記述は HAL インターフェイスによって定義され、HAL デバイスとフレームワークが 3A の現在の状態について通信し、3A イベントをトリガーできるようにします。
デバイスが開いているときは、すべての個々の 3A 状態が STATE_INACTIVE である必要があります。ストリーム構成は 3A をリセットしません。たとえば、ロックされたフォーカスはconfigure()
呼び出し全体にわたって維持される必要があります。
3A アクションをトリガーするには、次のリクエストの設定で関連するトリガー エントリを設定してトリガーの開始を示すだけです。たとえば、オートフォーカス スキャンを開始するトリガーは、1 つのリクエストに対してエントリ ANDROID_CONTROL_AF_TRIGGER を ANDROID_CONTROL_AF_TRIGGER_START に設定することです。オートフォーカス スキャンのキャンセルは、ANDROID_CONTROL_AF_TRIGGER を ANDROID_CONTRL_AF_TRIGGER_CANCEL に設定することでトリガーされます。それ以外の場合、エントリは存在しないか、ANDROID_CONTROL_AF_TRIGGER_IDLE に設定されます。トリガー エントリが非 IDLE 値に設定されている各リクエストは、独立したトリガー イベントとして扱われます。
トップレベルでは、3A は ANDROID_CONTROL_MODE 設定によって制御されます。 3A なし (ANDROID_CONTROL_MODE_OFF)、通常の AUTO モード (ANDROID_CONTROL_MODE_AUTO)、およびシーン モード設定の使用 (ANDROID_CONTROL_USE_SCENE_MODE) を選択します。
- OFF モードでは、個々のオートフォーカス (AF)、自動露出 (AE)、および自動ホワイトバランス (AWB) モードはそれぞれ事実上オフになり、キャプチャ制御はいずれも 3A ルーチンによってオーバーライドされません。
- AUTO モードでは、AF、AE、および AWB モードはすべて独自の独立したアルゴリズムを実行し、次のセクションにリストされているように、独自のモード、状態、トリガーのメタデータ エントリを持ちます。
- USE_SCENE_MODE では、ANDROID_CONTROL_SCENE_MODE エントリの値を使用して 3A ルーチンの動作を決定する必要があります。 FACE_PRIORITY 以外の SCENE_MODE では、HAL は ANDROID_CONTROL_AE/AWB/AF_MODE の値をオーバーライドして、選択された SCENE_MODE に優先されるモードにする必要があります。たとえば、HAL は CONTINUOUS_FOCUS AF モードを使用するよりも SCENE_MODE_NIGHT を優先する場合があります。シーン時の AE/AWB/AF_MODE のユーザー選択は、これらのシーン モードでは無視されます。
- SCENE_MODE_FACE_PRIORITY の場合、AE/AWB/AFMODE コントロールは ANDROID_CONTROL_MODE_AUTO と同様に機能しますが、3A ルーチンはシーン内で検出された顔の測光と焦点合わせに偏る必要があります。
オートフォーカスの設定と結果の入力
主なメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AF_MODE | 現在のオートフォーカス モードを選択するためのコントロール。リクエスト設定のフレームワークによって設定されます。 |
AF_MODE_OFF | AFは無効です。フレームワーク/アプリはレンズの位置を直接制御します。 |
AF_MODE_AUTO | シングルスイープオートフォーカス。 AFが作動しない限りレンズは動きません。 |
AF_MODE_MACRO | シングルスイープアップクローズオートフォーカス。 AFが作動しない限りレンズは動きません |
AF_MODE_CONTINUOUS_VIDEO | スムーズな連続フォーカス、ビデオ録画用。トリガーするとすぐにフォーカスが現在の位置にロックされます。キャンセルすると連続フォーカスが再開されます。 |
AF_MODE_CONTINUOUS_PICTURE | シャッターラグゼロの静止画撮影のための高速連続フォーカシング。現在アクティブなスイープが終了すると、ロックをトリガーしてフォーカスを設定します。キャンセルすると連続フォーカスが再開されます。 |
AF_MODE_EDOF | 高度な被写界深度の拡大によるフォーカシング。オートフォーカス スキャンがないため、スキャンをトリガーしてもキャンセルしても効果はありません。画像の焦点は HAL によって自動的に調整されます。 |
ANDROID_CONTROL_AF_STATE | 現在の AF アルゴリズムの状態を記述する動的メタデータ。結果メタデータで HAL によって報告されます。 |
AF_STATE_INACTIVE | フォーカスが行われていないか、アルゴリズムがリセットされています。レンズは動いていません。常に MODE_OFF または MODE_EDOF の状態です。デバイスが開かれるときは、この状態で起動する必要があります。 |
AF_STATE_PASSIVE_SCAN | 連続フォーカス アルゴリズムは現在、適切なフォーカスを求めてスキャン中です。レンズが動いています。 |
AF_STATE_PASSIVE_FOCUSED | 連続フォーカスアルゴリズムは、十分に焦点が合っていると判断します。レンズは動いていません。 HAL は自発的にこの状態を終了する場合があります。 |
AF_STATE_PASSIVE_UNFOCUSED | 連続フォーカス アルゴリズムは、十分にフォーカスされていないと判断します。レンズは動いていません。 HAL は自発的にこの状態を終了する場合があります。 |
AF_STATE_ACTIVE_SCAN | ユーザーによってトリガーされたスキャンが進行中です。 |
AF_STATE_FOCUSED_LOCKED | AF アルゴリズムは焦点が合っていると判断します。レンズは動いていません。 |
AF_STATE_NOT_FOCUSED_LOCKED | AFアルゴリズムによりピントが合わなくなりました。レンズは動いていません。 |
ANDROID_CONTROL_AF_TRIGGER | オートフォーカス スキャンを開始するためのコントロール。その意味はモードと状態によって異なります。リクエスト設定のフレームワークによって設定されます。 |
AF_TRIGGER_IDLE | 現在のトリガーはありません。 |
AF_TRIGGER_START | AFスキャンの開始をトリガーします。効果はモードと状態によって異なります。 |
AF_TRIGGER_CANCEL | 現在の AF スキャンがあればキャンセルし、アルゴリズムをデフォルトにリセットします。 |
追加のメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AF_REGIONS | 適切な焦点を決定するために使用する視野 (FOV) の領域を選択するためのコントロール。これは、フォーカスをスキャンするすべての AF モードに適用されます。リクエスト設定のフレームワークによって設定されます。 |
自動露出設定と結果エントリ
主なメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AE_MODE | 現在の自動露出モードを選択するためのコントロール。リクエスト設定のフレームワークによって設定されます。 |
AE_MODE_OFF | 自動露出は無効になっています。ユーザーは露出、ゲイン、フレーム継続時間、フラッシュを制御します。 |
AE_MODE_ON | 標準自動露出、フラッシュ制御は無効。ユーザーはフラッシュを発射モードまたはトーチ モードに設定できます。 |
AE_MODE_ON_AUTO_FLASH | 標準の自動露出。プレキャプチャと静止画キャプチャでは HAL の裁量でフラッシュがオンになります。フラッシュのユーザー制御が無効になりました。 |
AE_MODE_ON_ALWAYS_FLASH | 標準の自動露出。キャプチャ時は常にフラッシュが発光し、プリキャプチャ時は HAL の裁量で発光します。フラッシュのユーザー制御が無効になりました。 |
AE_MODE_ON_AUTO_FLASH_REDEYE | 標準の自動露出。プレキャプチャと静止画キャプチャでは HAL の裁量でフラッシュがオンになります。プリキャプチャ シーケンスの最後にフラッシュ バーストを使用して、最終的な画像の赤目を軽減します。フラッシュのユーザー制御が無効になりました。 |
ANDROID_CONTROL_AE_STATE | 現在の AE アルゴリズムの状態を記述する動的メタデータ。結果メタデータで HAL によって報告されます。 |
AE_STATE_INACTIVE | モード切り替え後の初期AE状態。デバイスが開かれるときは、この状態で起動する必要があります。 |
AE_STATE_SEARCHING | AE が適切な値に収束せず、露出パラメータを調整しています。 |
AE_STATE_CONVERGED | AE は現在のシーンに適切な露出値を見つけました。露出パラメータは変更されていません。 HAL は、より良い解決策を探すために自発的にこの状態を離れる場合があります。 |
AE_STATE_LOCKED | AE_LOCK コントロールで AE がロックされています。露出値は変化しません。 |
AE_STATE_FLASH_REQUIRED | HAL は露出が収束していますが、十分に明るい画像を得るにはフラッシュが必要であると考えられています。ゼロ シャッター ラグ フレームを使用できるかどうかを判断するために使用されます。 |
AE_STATE_PRECAPTURE | HAL はプリキャプチャ シーケンスの途中です。 AE モードに応じて、このモードでは測光のためにフラッシュを発光したり、赤目軽減のためにフラッシュ パルスをバーストしたりする必要があります。 |
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER | 高画質画像を取得する前に測光シーケンスを開始するための制御。リクエスト設定のフレームワークによって設定されます。 |
PRECAPTURE_TRIGGER_IDLE | 現在のトリガーはありません。 |
PRECAPTURE_TRIGGER_START | プリキャプチャ シーケンスを開始します。 HAL は、後続のリクエストを使用して、今後の高解像度キャプチャのために適切な露出/ホワイト バランスを測定する必要があります。 |
追加のメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AE_LOCK | AE コントロールを現在の値にロックするためのコントロール。 |
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION | AEアルゴリズムの目標輝度点を調整するためのコントロール。 |
ANDROID_CONTROL_AE_TARGET_FPS_RANGE | AE アルゴリズムのターゲット フレーム レート範囲を選択するためのコントロール。 AE ルーチンは、フレーム レートをこれらの境界外に変更することはできません。 |
ANDROID_CONTROL_AE_REGIONS | 適切な露出レベルを決定するために使用する必要がある FOV の領域を選択するためのコントロール。 OFFを除くすべてのAEモードに適用されます。 |
自動ホワイトバランスの設定と結果のエントリ
主なメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AWB_MODE | 現在のホワイトバランス モードを選択するためのコントロール。 |
AWB_MODE_OFF | オートホワイトバランスは無効になっています。ユーザーはカラー マトリックスを制御します。 |
AWB_MODE_AUTO | 自動ホワイトバランスが有効になっています。 3A は、単純なマトリックスよりも複雑な変換を使用して色変換を制御します。 |
AWB_MODE_INCANDESCENT | 屋内の白熱灯 (タングステン) 照明に適した固定ホワイト バランス設定 (約 2700K)。 |
AWB_MODE_FLUORESCENT | 蛍光灯に適した固定ホワイト バランス設定 (約 5000K)。 |
AWB_MODE_WARM_FLUORESCENT | 蛍光灯に適した固定ホワイト バランス設定 (約 3000K)。 |
AWB_MODE_DAYLIGHT | 日光に適した固定ホワイトバランス設定、約 5500K。 |
AWB_MODE_CLOUDY_DAYLIGHT | 曇った日光に適したホワイト バランス設定を固定し、約 6500K にしました。 |
AWB_MODE_TWILIGHT | 日没/日の出近くに適した固定ホワイト バランス設定 (約 15000K)。 |
AWB_MODE_SHADE | 太陽によって間接的に照らされている領域に適した固定ホワイト バランス設定 (約 7500K)。 |
ANDROID_CONTROL_AWB_STATE | 現在の AWB アルゴリズムの状態を記述する動的メタデータ。結果メタデータで HAL によって報告されます。 |
AWB_STATE_INACTIVE | モード切り替え後の初期 AWB 状態。デバイスが開かれるときは、この状態で起動する必要があります。 |
AWB_STATE_SEARCHING | AWB が適切な値に収束せず、色調整パラメータが変更されています。 |
AWB_STATE_CONVERGED | AWB は現在のシーンに適切なカラー調整値を見つけました。パラメータは変更されていません。 HAL は、より良い解決策を探すために自発的にこの状態を離れる場合があります。 |
AWB_STATE_LOCKED | AWB は AWB_LOCK コントロールでロックされています。カラー調整値は変化しません。 |
追加のメタデータ エントリ | |
---|---|
ANDROID_CONTROL_AWB_LOCK | AWB カラー調整を現在の値にロックするためのコントロール。 |
ANDROID_CONTROL_AWB_REGIONS | 良好なカラーバランスを決定するために使用する必要がある FOV の領域を選択するためのコントロール。これはオートホワイトバランスモードにのみ適用されます。 |
ステートマシン移行に関する一般的な注意事項
AF、AE、または AWB モードを切り替えると、アルゴリズムの状態は常に INACTIVE にリセットされます。同様に、CONTROL_MODE == USE_SCENE_MODE の場合に CONTROL_MODE または CONTROL_SCENE_MODE を切り替えると、すべてのアルゴリズム状態が INACTIVE にリセットされます。
以下の表はモードごとです。
AF ステート マシン
モード = AF_MODE_OFF または AF_MODE_EDOF | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | AFは無効です |
モード = AF_MODE_AUTO または AF_MODE_MACRO | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | AF_TRIGGER | アクティブスキャン | AFスイープ開始 レンズが動いています |
アクティブスキャン | AFスイープ完了 | FOCUSED_LOCKED | AFが成功した場合 レンズがロックされました |
アクティブスキャン | AFスイープ完了 | NOT_FOCUSED_LOCKED | AFが成功した場合 レンズがロックされました |
アクティブスキャン | AF_キャンセル | 非活性 | AFのキャンセル/リセット レンズがロックされました |
FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFのキャンセル/リセット |
FOCUSED_LOCKED | AF_TRIGGER | アクティブスキャン | 新しいスイープを開始する レンズが動いています |
NOT_FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFのキャンセル/リセット |
NOT_FOCUSED_LOCKED | AF_TRIGGER | アクティブスキャン | 新しいスイープを開始する レンズが動いています |
すべての州 | モード変更 | 非活性 |
モード = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | HAL が新しいスキャンを開始します | パッシブスキャン | AFスイープ開始 レンズが動いています |
非活性 | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF状態クエリ レンズがロックされました |
パッシブスキャン | HAL は現在のスキャンを完了します | パッシブ_フォーカス | AFスキャン終了 レンズがロックされました |
パッシブスキャン | AF_TRIGGER | FOCUSED_LOCKED | 焦点が合えば即変身 レンズがロックされました |
パッシブスキャン | AF_TRIGGER | NOT_FOCUSED_LOCKED | ピントが悪い場合は即変換 レンズがロックされました |
パッシブスキャン | AF_キャンセル | 非活性 | レンズ位置をリセット レンズがロックされました |
パッシブ_フォーカス | HAL が新しいスキャンを開始します | パッシブスキャン | AFスキャンを開始する レンズが動いています |
パッシブ_フォーカス | AF_TRIGGER | FOCUSED_LOCKED | 焦点が合えば即変身 レンズがロックされました |
パッシブ_フォーカス | AF_TRIGGER | NOT_FOCUSED_LOCKED | ピントが悪い場合は即変換 レンズがロックされました |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | 無効 |
FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFスキャンを再開する |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | 無効 |
NOT_FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFスキャンを再開する |
モード = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | HAL が新しいスキャンを開始します | パッシブスキャン | AFスキャンを開始する レンズが動いています |
非活性 | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF状態クエリ レンズがロックされました |
パッシブスキャン | HAL は現在のスキャンを完了します | パッシブ_フォーカス | AFスキャン終了 レンズがロックされました |
パッシブスキャン | AF_TRIGGER | FOCUSED_LOCKED | 焦点が合えば最終的には変化する レンズがロックされました |
パッシブスキャン | AF_TRIGGER | NOT_FOCUSED_LOCKED | 集中できない場合の最終的な変換 レンズがロックされました |
パッシブスキャン | AF_キャンセル | 非活性 | レンズ位置をリセット レンズがロックされました |
パッシブ_フォーカス | HAL が新しいスキャンを開始します | パッシブスキャン | AFスキャンを開始する レンズが動いています |
パッシブ_フォーカス | AF_TRIGGER | FOCUSED_LOCKED | 焦点が合えば即変身 レンズがロックされました |
パッシブ_フォーカス | AF_TRIGGER | NOT_FOCUSED_LOCKED | ピントが悪い場合は即変換 レンズがロックされました |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | 無効 |
FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFスキャンを再開する |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | 無効 |
NOT_FOCUSED_LOCKED | AF_キャンセル | 非活性 | AFスキャンを再開する |
AE および AWB ステート マシン
AE ステート マシンと AWB ステート マシンはほとんど同じです。 AE には追加の FLASH_REQUIRED 状態と PRECAPTURE 状態があります。したがって、これら 2 つの状態を参照する以下の行は、AWB ステート マシンでは無視される必要があります。
モード = AE_MODE_OFF / AWB モードが AUTO ではない | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | AE/AWB無効 |
モード = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
州 | 変形原因 | 新しい状態 | ノート |
非活性 | HAL が AE/AWB スキャンを開始します | 検索中 | |
非活性 | AE/AWB_LOCKオン | ロックされています | 値がロックされました |
検索中 | HAL が AE/AWB スキャンを終了 | 収束 | 良い値、変わらない |
検索中 | HAL が AE スキャンを終了 | フラッシュ_必須 | 収束したがフラッシュなしでは暗すぎる |
検索中 | AE/AWB_LOCKオン | ロックされています | 値がロックされました |
収束 | HAL が AE/AWB スキャンを開始します | 検索中 | 値がロックされました |
収束 | AE/AWB_LOCKオン | ロックされています | 値がロックされました |
フラッシュ_必須 | HAL が AE/AWB スキャンを開始します | 検索中 | 値がロックされました |
フラッシュ_必須 | AE/AWB_LOCKオン | ロックされています | 値がロックされました |
ロックされています | AE/AWB_LOCKオフ | 検索中 | ロック解除後の値が良くない |
ロックされています | AE/AWB_LOCKオフ | 収束 | ロック解除後の値は良好です |
ロックされています | AE_LOCK オフ | フラッシュ_必須 | 露出はいいけど暗すぎる |
すべての AE 状態 | プレキャプチャ_スタート | 先取り | プリキャプチャシーケンスの開始 |
先取り | シーケンス完了、AE_LOCK オフ | 収束 | 高品質のキャプチャの準備ができました |
先取り | シーケンスが完了しました。AE_LOCK がオンです | ロックされています | 高品質のキャプチャの準備ができました |
手動制御を有効にする
アプリケーションの直接制御を可能にするデバイス 3A ブロックの構成には、いくつかの制御も含まれます。
3A コントロールの HAL モデルでは、リクエストごとに HAL が 3A コントロール フィールドの状態を検査します。いずれかの 3A ルーチンが有効になっている場合、そのルーチンはそのルーチンに関連する制御変数をオーバーライドし、これらのオーバーライド値はそのキャプチャの結果メタデータで使用できるようになります。したがって、たとえば、リクエストで自動露出が有効になっている場合、HAL はリクエストの露出、ゲイン、フレーム継続フィールド (AE モードによってはフラッシュ フィールドも) を上書きする必要があります。関連するコントロールのリストは次のとおりです。
コントロール名 | ユニット | ノート |
---|---|---|
android.control.mode | 列挙型: OFF、AUTO、USE_SCENE_MODE | 高度な3A制御。 OFF に設定すると、HAL によるすべての 3A 制御が無効になります。アプリケーションはキャプチャ パラメータ自体のフィールドを設定する必要があります。 AUTO に設定すると、android.control.afMode など、android.control.* の個々のアルゴリズム コントロールが有効になります。 USE_SCENE_MODE に設定すると、android.control.* の個々のコントロールはほとんど無効になり、HAL は必要に応じてシーン モード設定 (ACTION、SUNSET、PARTY など) の 1 つを実装します。 |
android.control.afMode | 列挙型 | OFF は、android.lens.focusDistance によるレンズの焦点合わせの手動制御を意味します。 |
android.control.aeMode | 列挙型 | OFF は、android.sensor.exposureTime / .sensitivity / .frameDuration による露出/ゲイン/フレーム期間の手動制御を意味します |
android.control.awbMode | 列挙型 | OFF はホワイトバランスの手動制御を意味します。 |