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) 之間進行選擇:

  • 在 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 可能更喜歡 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_MODE_OFF自動對焦被禁用;框架/應用程序直接控製鏡頭位置。
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取消當前的自動對焦掃描(如果有),並將算法重置為默認值。
其他元數據條目
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 已被 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 區域的控件。這適用於除 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_MODE_AUTO 或 AF_MODE_MACRO
狀態轉型原因新狀態筆記
不活躍AF_TRIGGER ACTIVE_SCAN

開始自動對焦掃描

鏡頭現在移動

ACTIVE_SCAN AF掃描完成FOCUSED_LOCKED

如果AF成功

鏡頭現已鎖定

ACTIVE_SCAN AF掃描完成NOT_FOCUSED_LOCKED

如果AF成功

鏡頭現已鎖定

ACTIVE_SCAN AF_CANCEL不活躍

取消/重置自動對焦

鏡頭現已鎖定

FOCUSED_LOCKED AF_CANCEL不活躍取消/重置自動對焦
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

開始新的掃蕩

鏡頭現在移動

NOT_FOCUSED_LOCKED AF_CANCEL不活躍取消/重置自動對焦
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

開始新的掃蕩

鏡頭現在移動

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

開始自動對焦掃描

鏡頭現在移動

不活躍AF_TRIGGER NOT_FOCUSED_LOCKED

AF狀態查詢

鏡頭現已鎖定

被動掃描HAL 完成當前掃描PASSIVE_FOCUSED

結束自動對焦掃描

鏡頭現已鎖定

被動掃描AF_TRIGGER FOCUSED_LOCKED

如果焦點好,立即轉變

鏡頭現已鎖定

被動掃描AF_TRIGGER NOT_FOCUSED_LOCKED

如果焦點不好,立即轉變

鏡頭現已鎖定

被動掃描AF_CANCEL不活躍

重置鏡頭位置

鏡頭現已鎖定

PASSIVE_FOCUSED HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭現在移動

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

如果焦點好,立即轉變

鏡頭現已鎖定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED如果焦點不好,立即轉變

鏡頭現已鎖定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED沒有效果
FOCUSED_LOCKED AF_CANCEL不活躍重新啟動自動對焦掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED沒有效果
NOT_FOCUSED_LOCKED AF_CANCEL不活躍重新啟動自動對焦掃描
模式 = AF_MODE_CONTINUOUS_PICTURE
狀態轉型原因新狀態筆記
不活躍HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭現在移動

不活躍AF_TRIGGER NOT_FOCUSED_LOCKED

AF狀態查詢

鏡頭現已鎖定

被動掃描HAL 完成當前掃描PASSIVE_FOCUSED結束自動對焦掃描

鏡頭現已鎖定

被動掃描AF_TRIGGER FOCUSED_LOCKED

一旦聚焦好,最終轉型

鏡頭現已鎖定

被動掃描AF_TRIGGER NOT_FOCUSED_LOCKED

無法集中註意力的最終轉型

鏡頭現已鎖定

被動掃描AF_CANCEL不活躍

重置鏡頭位置

鏡頭現已鎖定

PASSIVE_FOCUSED HAL 啟動新掃描被動掃描

開始自動對焦掃描

鏡頭現在移動

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

如果焦點好,立即轉變

鏡頭現已鎖定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

如果焦點不好,立即轉變

鏡頭現已鎖定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED沒有效果
FOCUSED_LOCKED AF_CANCEL不活躍重新啟動自動對焦掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED沒有效果
NOT_FOCUSED_LOCKED AF_CANCEL不活躍重新啟動自動對焦掃描

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.mode枚舉:關閉、自動、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 表示手動控制白平衡。