本頁面說明 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 表示手動控制白平衡。 |