3A 模式和狀態轉換

雖然實際的 3A 演算法取決於 HAL 實現,但 HAL 介面定義了高級狀態機描述,以允許 HAL 設備和框架就 3A 的當前狀態進行通訊並觸發 3A 事件。

當裝置開啟時,所有單獨的 3A 狀態都必須為 STATE_INACTIVE。流配置不會重置 3A。例如,必須在整個configure()呼叫中保持鎖定焦點。

觸發 3A 動作只需在設定中為下一個請求設定相關觸發條目即可指示觸發開始。例如,啟動自動對焦掃描的觸發器是將一個要求的 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) 之間進行選擇:

  • 在「關閉」模式下,每個單獨的自動對焦 (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 可能更喜歡 SCENE_MODE_NIGHT 而不是使用 CONTINUOUS_FOCUS AF 模式。對於這些場景模式,必須忽略場景時使用者對 AE/AWB/AF_MODE 的任何選擇。
  • 對於 SCENE_MODE_FACE_PRIORITY,AE/AWB/AFMODE 控制的工作方式與 ANDROID_CONTROL_MODE_AUTO 中相同,但 3A 程式必須偏向於對場景中偵測到的任何臉部進行測光和對焦。

自動對焦設定和結果條目

主要元資料條目
ANDROID_CONTROL_AF_MODE用於選擇目前自動對焦模式的控制項。由框架在請求設定中設定。
AF_模式_關閉自動對焦已停用;框架/應用程式直接控制鏡頭位置。
AF_模式_自動單次掃描自動對焦。除非觸發自動對焦,否則鏡頭不會移動。
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_模式_關閉自動曝光已停用;使用者控制曝光、增益、幀持續時間和閃光。
AE_模式_開標準自動曝光,停用閃光控制。使用者可以將閃光燈設定為閃光或手電筒模式。
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_搜尋AE 未收斂到良好的值,正在調整曝光參數。
AE_STATE_CONVERGED AE已為當前場景找到了良好的曝光值,且曝光參數沒有改變。 HAL 可能會自發性地離開此狀態以尋找更好的解決方案。
AE_狀態_鎖定AE 已使用 AE_LOCK 控制項鎖定。曝光值沒有變化。
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 區域的控制項。這適用於除“關閉”之外的所有 AE 模式。

自動白平衡設定和結果條目

主要元資料條目
ANDROID_CONTROL_AWB_MODE用於選擇目前白平衡模式的控制項。
AWB_MODE_OFF自動白平衡已停用。使用者控制顏色矩陣。
AWB_MODE_AUTO啟用自動白平衡; 3A 控制顏色變換,可能使用比簡單矩陣更複雜的變換。
AWB_MODE_INCANDESCENT適合室內白熾燈(鎢絲燈)照明的固定白平衡設置,約為 2700K。
AWB_MODE_螢光燈適合螢光燈的固定白平衡設定約為 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_MODE_AUTO 或 AF_MODE_MACRO
狀態轉型原因新狀態筆記
不活躍AF_TRIGGER主動掃描

開始 AF 掃描

鏡頭正在移動

主動掃描AF 掃描完成焦點鎖定

如果自動對焦成功

鏡頭現已鎖定

主動掃描AF 掃描完成NOT_FOCUSED_LOCKED

如果自動對焦成功

鏡頭現已鎖定

主動掃描AF_取消不活躍

取消/重設自動對焦

鏡頭現已鎖定

焦點鎖定AF_取消不活躍取消/重設自動對焦
焦點鎖定AF_TRIGGER主動掃描

開始新的掃蕩

鏡頭正在移動

NOT_FOCUSED_LOCKED AF_取消不活躍取消/重設自動對焦
NOT_FOCUSED_LOCKED AF_TRIGGER主動掃描

開始新的掃蕩

鏡頭正在移動

所有州模式變更不活躍
模式 = AF_MODE_CONTINUOUS_VIDEO
狀態轉型原因新狀態筆記
不活躍HAL 啟動新掃描被動掃描

開始 AF 掃描

鏡頭正在移動

不活躍AF_TRIGGER NOT_FOCUSED_LOCKED

AF狀態查詢

鏡頭現已鎖定

被動掃描HAL 完成目前掃描被動_聚焦

結束自動對焦掃描

鏡頭現已鎖定

被動掃描AF_TRIGGER焦點鎖定

如果焦點良好,立即轉變

鏡頭現已鎖定

被動掃描AF_TRIGGER NOT_FOCUSED_LOCKED

如果焦點不好,立即轉變

鏡頭現已鎖定

被動掃描AF_取消不活躍

重置鏡頭位置

鏡頭現已鎖定

被動_聚焦HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭正在移動

被動_聚焦AF_TRIGGER焦點鎖定

如果焦點良好,立即轉變

鏡頭現已鎖定

被動_聚焦AF_TRIGGER NOT_FOCUSED_LOCKED如果焦點不好,立即轉變

鏡頭現已鎖定

焦點鎖定AF_TRIGGER焦點鎖定沒有效果
焦點鎖定AF_取消不活躍重新啟動 AF 掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED沒有效果
NOT_FOCUSED_LOCKED AF_取消不活躍重新啟動 AF 掃描
模式 = AF_MODE_CONTINUOUS_PICTURE
狀態轉型原因新狀態筆記
不活躍HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭正在移動

不活躍AF_TRIGGER NOT_FOCUSED_LOCKED

AF狀態查詢

鏡頭現已鎖定

被動掃描HAL 完成目前掃描被動_聚焦結束自動對焦掃描

鏡頭現已鎖定

被動掃描AF_TRIGGER焦點鎖定

一旦焦點良好,最終轉變

鏡頭現已鎖定

被動掃描AF_TRIGGER NOT_FOCUSED_LOCKED

如果無法集中註意力,最終會轉變

鏡頭現已鎖定

被動掃描AF_取消不活躍

重置鏡頭位置

鏡頭現已鎖定

被動_聚焦HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭正在移動

被動_聚焦AF_TRIGGER焦點鎖定

如果焦點良好,立即轉變

鏡頭現已鎖定

被動_聚焦AF_TRIGGER NOT_FOCUSED_LOCKED

如果焦點不好,立即轉變

鏡頭現已鎖定

焦點鎖定AF_TRIGGER焦點鎖定沒有效果
焦點鎖定AF_取消不活躍重新啟動 AF 掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED沒有效果
NOT_FOCUSED_LOCKED AF_取消不活躍重新啟動 AF 掃描

AE 和 AWB 狀態機

AE 和 AWB 狀態機基本上相同。 AE 還有額外的 FLASH_REQUIRED 和 PRECAPTURE 狀態。因此,對於 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 掃描FLASH_REQUIRED會聚但太暗,沒有閃光燈
搜尋AE/AWB_LOCK 開啟鎖定值已鎖定
融合HAL 啟動 AE/AWB 掃描搜尋值已鎖定
融合AE/AWB_LOCK 開啟鎖定值已鎖定
FLASH_REQUIRED HAL 啟動 AE/AWB 掃描搜尋值已鎖定
FLASH_REQUIRED AE/AWB_LOCK 開啟鎖定值已鎖定
鎖定AE/AWB_LOCK 關閉搜尋解鎖後數值不好
鎖定AE/AWB_LOCK 關閉融合解鎖後數值不錯
鎖定AE_LOCK 關閉FLASH_REQUIRED曝光良好,但太暗
所有 AE 州PRECAPTURE_START預捕獲開始預捕獲序列
預捕獲序列完成,AE_LOCK 關閉融合為高品質拍攝做好準備
預捕獲序列完成,AE_LOCK 開啟鎖定為高品質拍攝做好準備

啟用手動控制

配置設備 3A 區塊時還涉及多個控件,以允許直接應用程式控制。

3A 控制的 HAL 模型是,對於每個請求,HAL 檢查 3A 控製字段的狀態。如果啟用了任何 3A 例程,則該例程將覆寫與該例程相關的控制變量,並且這些覆蓋值將在該捕獲的結果元資料中可用。例如,如果在請求中啟用了自動曝光,則 HAL 應覆蓋請求的曝光、增益和幀持續時間字段(以及可能的閃光字段,取決於 AE 模式)。相關控制清單如下:

控制項名稱單元筆記
android.control.模式枚舉:關閉、自動、USE_SCENE_MODE高水準 3A 控制。當設定為 OFF 時,HAL 的所有 3A 控制均已停用。應用程式必須自行設定捕獲參數的欄位。當設定為 AUTO 時,android.control.* 中的各個演算法控制項生效,例如 android.control.afMode。當設定為 USE_SCENE_MODE 時,android.control.* 中的各個控制項大部分已停用,且 HAL 根據需要實作場景模式設定之一(例如 ACTION、SUNSET 或 PARTY)。
android.control.afMode列舉OFF表示透過android.lens.focusDistance手動控制鏡頭對焦。
android.control.aeMode列舉OFF 表示透過 android.sensor.exposureTime / .sensitivity / .frameDuration 手動控制曝光/增益/幀持續時間
android.control.awbMode列舉OFF 表示手動控制白平衡。