3A 模式和狀態轉換

本頁面說明 Android 裝置的 3A 模式和狀態機器。相機 HAL 介面會定義高階狀態機器,讓 HAL 實作和 Android 架構傳遞目前的 3A 狀態,並觸發 3A 事件。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。每個要求的觸發條件項目都會設為非閒置值,並視為獨立的觸發事件。

在頂層,3A 會由 ANDROID_CONTROL_MODE 設定控制。它會在「不使用 3A」(ANDROID_CONTROL_MODE_OFF)、「一般自動模式」(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_MODE_OFF 自動對焦功能已停用;架構/應用程式會直接控制鏡頭位置。
AF_MODE_AUTO 單掃瞄自動對焦。除非觸發自動對焦功能,否則鏡頭不會移動。
AF_MODE_MACRO 單次掃描近距離自動對焦。除非觸發自動對焦功能,否則鏡頭不會移動
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 自動對焦演算法無法對焦。鏡頭未移動。
ANDROID_CONTROL_AF_TRIGGER 用於啟動自動對焦掃描的控制項,其意義取決於模式和狀態。由架構在要求設定中設定。
AF_TRIGGER_IDLE 目前沒有觸發條件。
AF_TRIGGER_START 觸發自動對焦掃描作業。效果取決於模式和狀態。
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 的判斷決定是否開啟閃光燈。在預拍序列結束時使用閃光燈連拍,以減少最終相片中的紅眼效果。使用者無法控制閃光燈。
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY 在低光源環境中,低光源強化功能會自動調整預覽串流的亮度。這可能會導致在低光源環境下產生更多運動模糊和雜訊。 裝置製造商必須確保影格速率不會低於 10 fps。
ANDROID_CONTROL_AE_STATE 動態中繼資料,描述 HAL 在結果中繼資料中回報的目前 AE 演算法狀態。
AE_STATE_INACTIVE 模式切換後的初始 AE 狀態。裝置開啟時,必須處於這個狀態。
AE_STATE_SEARCHING AE 未收斂至適當值,並正在調整曝光參數。
AE_STATE_CONVERGED AE 已為目前的場景找到適當的曝光值,且曝光參數不會變更。HAL 可能會自行離開這個狀態,以尋找更佳的解決方案。
AE_STATE_LOCKED 使用 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 控制選取應用於判斷適當曝光值的視野範圍區域。這項設定適用於所有 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 動態中繼資料,可描述 HAL 在結果中繼資料中回報的目前 AWB 演算法狀態。
AWB_STATE_INACTIVE 模式切換後的初始 AWB 狀態。裝置開啟時,必須處於這個狀態。
AWB_STATE_SEARCHING AWB 未收斂至適當值,且正在變更色彩調整參數。
AWB_STATE_CONVERGED AWB 已為目前場景找到適當的色彩調整值,且參數不會變更。HAL 可能會自行離開這個狀態,以尋找更佳的解決方案。
AWB_STATE_LOCKED 使用 AWB_LOCK 控制項鎖定 AWB。色彩調整值未變更。
其他中繼資料項目
ANDROID_CONTROL_AWB_LOCK 控制鎖定 AWB 色彩調整至目前值。
ANDROID_CONTROL_AWB_REGIONS 控制選取應用於判斷良好色彩平衡的視野範圍。這項設定僅適用於自動白平模式。

一般狀態機轉換的注意事項

切換 AF、AE 或 AWB 模式時,演算法一律會將狀態重設為 INACTIVE。同樣地,如果 CONTROL_MODE == USE_SCENE_MODE,則切換 CONTROL_MODE 或 CONTROL_SCENE_MODE 會將所有演算法狀態重設為 INACTIVE。

下表為各模式的資料。

AF 狀態機器

mode = AF_MODE_OFF 或 AF_MODE_EDOF
狀態 轉換原因 新狀態 附註
已停用 AF 已停用
mode = AF_MODE_AUTO 或 AF_MODE_MACRO
狀態 轉換原因 新狀態 附註
已停用 AF_TRIGGER ACTIVE_SCAN

開始自動對焦掃描

鏡頭現在正在移動

ACTIVE_SCAN 自動對焦掃描完成 FOCUSED_LOCKED

如果 AF 成功

智慧鏡頭已鎖定

ACTIVE_SCAN 自動對焦掃描完成 NOT_FOCUSED_LOCKED

如果 AF 成功

智慧鏡頭已鎖定

ACTIVE_SCAN AF_CANCEL 已停用

取消/重設 AF

智慧鏡頭已鎖定

FOCUSED_LOCKED AF_CANCEL 已停用 取消/重設 AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

開始新的掃描

鏡頭現在正在移動

NOT_FOCUSED_LOCKED AF_CANCEL 已停用 取消/重設 AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

開始新的掃描

鏡頭現在正在移動

所有狀態 模式變更 已停用
mode = AF_MODE_CONTINUOUS_VIDEO
狀態 轉換原因 新狀態 附註
已停用 HAL 啟動新的掃描作業 PASSIVE_SCAN

開始自動對焦掃描

鏡頭現在正在移動

已停用 AF_TRIGGER NOT_FOCUSED_LOCKED

AF 狀態查詢

智慧鏡頭已鎖定

PASSIVE_SCAN HAL 完成目前的掃描作業 PASSIVE_FOCUSED

結束自動對焦掃描

智慧鏡頭已鎖定

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

立即轉換 (如果焦點良好)

智慧鏡頭已鎖定

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

如果焦點不佳,則立即轉換

智慧鏡頭已鎖定

PASSIVE_SCAN AF_CANCEL 已停用

重設鏡頭位置

智慧鏡頭已鎖定

PASSIVE_FOCUSED HAL 啟動新的掃描作業 PASSIVE_SCAN

開始 AF 掃描

鏡頭現在正在移動

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

立即轉換 (如果焦點良好)

智慧鏡頭已鎖定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED 立即轉換 如果焦點不佳

智慧鏡頭已鎖定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 沒有效果
FOCUSED_LOCKED AF_CANCEL 已停用 重新啟動 AF 掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 沒有效果
NOT_FOCUSED_LOCKED AF_CANCEL 已停用 重新啟動 AF 掃描
mode = AF_MODE_CONTINUOUS_PICTURE
狀態 轉換原因 新狀態 附註
已停用 HAL 啟動新的掃描作業 PASSIVE_SCAN

開始 AF 掃描

鏡頭現在正在移動

已停用 AF_TRIGGER NOT_FOCUSED_LOCKED

AF 狀態查詢

智慧鏡頭已鎖定

PASSIVE_SCAN HAL 完成目前的掃描作業 PASSIVE_FOCUSED 結束自動對焦掃描

智慧鏡頭已鎖定

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

最終轉換,一旦聚焦良好

智慧鏡頭已鎖定

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

無法聚焦時的最終轉換

智慧鏡頭已鎖定

PASSIVE_SCAN AF_CANCEL 已停用

重設鏡頭位置

智慧鏡頭已鎖定

PASSIVE_FOCUSED HAL 啟動新的掃描作業 PASSIVE_SCAN

開始 AF 掃描

鏡頭現在正在移動

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

焦點良好時立即轉換

智慧鏡頭已鎖定

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

焦點不佳時立即轉換

智慧鏡頭已鎖定

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 沒有效果
FOCUSED_LOCKED AF_CANCEL 已停用 重新啟動 AF 掃描
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 沒有效果
NOT_FOCUSED_LOCKED AF_CANCEL 已停用 重新啟動 AF 掃描

AE 和 AWB 狀態機器

AE 和 AWB 狀態機器幾乎相同。AE 有額外的 FLASH_REQUIRED 和 PRECAPTURE 狀態。因此,下方參照這兩種狀態的資料列應在 AWB 狀態機制中忽略。

mode = AE_MODE_OFF / AWB 模式不是 AUTO
狀態 轉換原因 新狀態 附註
已停用 已停用 AE/AWB
mode = AE_MODE_ON_* / AWB_MODE_AUTO
狀態 轉換原因 新狀態 附註
已停用 HAL 啟動 AE/AWB 掃描 搜尋中
已停用 AE/AWB_LOCK 已開啟 已鎖定 值已鎖定
搜尋中 HAL 完成 AE/AWB 掃描 CONVERGED 良好的值,不會變更
搜尋中 HAL 完成 AE 掃描 FLASH_REQUIRED 聚焦但沒有閃光燈太暗
搜尋中 AE/AWB_LOCK 已開啟 已鎖定 值已鎖定
CONVERGED HAL 啟動 AE/AWB 掃描 搜尋中 值已鎖定
CONVERGED AE/AWB_LOCK 已開啟 已鎖定 值已鎖定
FLASH_REQUIRED HAL 啟動 AE/AWB 掃描 搜尋中 值已鎖定
FLASH_REQUIRED AE/AWB_LOCK 已開啟 已鎖定 值已鎖定
已鎖定 AE/AWB_LOCK 關閉 搜尋中 解鎖後的值不正確
已鎖定 AE/AWB_LOCK 關閉 CONVERGED 解鎖後的值
已鎖定 AE_LOCK 關閉 FLASH_REQUIRED 曝光良好,但太暗
所有 AE 狀態 PRECAPTURE_START PRECAPTURE 開始預擷影序列
PRECAPTURE 完成序列,AE_LOCK 關閉 CONVERGED 準備好拍攝高畫質相片
PRECAPTURE 完成序列,開啟 AE_LOCK 已鎖定 準備好拍攝高畫質相片

啟用手動控制

設定裝置 3A 區塊時,也需要使用多個控制項,才能允許直接應用程式控制。

3A 控制的 HAL 模型是,對於每項要求,HAL 都會檢查 3A 控制欄位的狀態。如果啟用任何 3A 例行程序,該例行程序會覆寫與該例行程序相關的控制變數,這些覆寫值會顯示在該擷取結果的中繼資料中。舉例來說,如果在要求中啟用自動曝光功能,HAL 應覆寫要求的曝光、增益和影格持續時間欄位 (以及可能的閃光欄位,視 AE 模式而定)。相關控制項清單如下:

控制項名稱 單位 附註
android.control.mode 枚舉:OFF、AUTO、USE_SCENE_MODE 高階 3A 控制。如果設為「關閉」,HAL 的所有 3A 控制都會停用。應用程式必須設定擷取參數的欄位。設為 AUTO 時,android.control.* 中的個別演算法控制項 (例如 android.control.afMode) 會生效。設定為 USE_SCENE_MODE 時,android.control.* 中的個別控制項會大多數都會停用,而 HAL 會依照需求實作其中一個場景模式設定 (例如 ACTION、SUNSET 或 PARTY)。
android.control.afMode 列舉 關閉表示透過 android.lens.focusDistance 手動控制鏡頭對焦。
android.control.aeMode 列舉 OFF 表示透過 android.sensor.exposureTime / .sensitivity / .frameDuration 手動控制曝光/增益/影格持續時間
android.control.awbMode 列舉 OFF 表示手動控制白平衡。