3A モードと状態遷移

実際の 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 はホワイトバランスの手動制御を意味します。