雖然HAL層負責實現3A算法,但HAL interface定義了一個高層次的狀態機描述,允許HAL層設備和framework層交流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的值,都會引發一個獨立的觸發器事件。
在頂層,通過設置ANDROID_CONTROL_MODE控制3A。可以選擇沒有3A(ANDROID_CONTROL_MODE_OFF),自動模式(ANDROID_CONTROL_MODE_AUTO)和場景模式(ANDROID_CONTROL_USE_SCENE_MODE)。
· 在OFF模式下,自動聚焦(AF),自動曝光(AE)和自動白平衡(AEB)模式都被關閉。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場景中使用AF的CONTINUOUS_FOCUS模式。當這些場景模式被忽略時,將使用用戶對AE/AWB/AF_MODE的選擇。
· 對SCENE_MODE_FACE_PRIORITY的場景,AE/AWB/AFMODE工作在ANDROID_CONTROL_MODE_AUTO模式下。但是3A算法需要側重對場景中檢測出來的臉進行測光和聚焦。
1. Auto-focus settings and result entries
Main metadata entries:
ANDROID_CONTROL_AF_MODE:控制當前自動聚焦模式的選擇。通過framework層在請求中設置。
AF_MODE_OFF:AF關閉;framework/app直接控制鏡頭的位置。
AF_MODE_AUTO:Single-sweep自動聚焦。只有AF被觸發,鏡頭纔會移動。
AF_MODE_MACRO:Single-sweep微距自動聚焦。只有AF被觸發,鏡頭纔會移動。
AF_MODE_CONTINUOUS_VIDEO:平滑的持續聚焦,用於視頻錄製。觸發則立即在當前位置鎖住焦點。取消而繼續持續聚焦。
AF_MODE_CONTINUOUS_PICTURE:快速持續聚焦,用於靜態圖片的ZSL捕獲。一旦達到掃描目標,觸發則立即鎖住焦點。取消而繼續持續聚焦。
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_AFTRIGGER:控制啓動自動聚集掃描,其意義由所選擇的模式和狀態決定。Framework層在請求中設置該值。
AF_TRIGGER_IDLE:沒有觸發器。
AF_TRIGGER_START:觸發AF掃描。其作用取決於模式和狀態。
AF_TRIGGER_CANCEL:停止當前的AF掃描,重置算法到默認狀態。
其他元數據實體:
ANDROID_CONTROL_AF_REGIONS:控制視角區域的選擇,用於檢測好的聚焦點。用於所有可進行聚焦掃描的AF模式。Framework層在請求中設置該值。
2. Auto-exposure settings and result entries
Main metadata entries:
ANDROID_CONTROL_AE_MODE:控制當前自動曝光模式的選擇。Framework層在請求中設置該值。
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必須處於這個狀態。
AE_STATE_SEARCHING:AE沒有達到曝光目標,正在調整曝光參數。
AE_STATE_CONVERGED:AE已經找到當前場景的正確的曝光值,曝光參數不再改變。HAL層會自動離開這個狀態,尋找更好的解決方案。
AE_STATE_LOCKED:使用AE_LOCK已經鎖住了AE。曝光值不再改變。
AE_STATE_FLASH_REQUIRED:HAL層已經曝光成功,但爲了獲取更亮的圖片,需要開啓閃光燈。用於ZSL模式。
AE_STATE_PRECAPTURE:HAL在捕獲序列中間進行控制。根據AE模式,這種模式採用啓動閃光燈測光或者瞬間開啓關閉閃光燈預防紅眼。
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER:在捕獲一張高質量圖像之前,控制啓動一個測光序列。Framework層在請求中設置該值。
PRECAPTURE_TRIGGER_IDLE:沒有觸發器。
PRECAPTURE_TRIGGER_START:啓動一個捕獲序列。HAL層使用後續的請求爲獲取高分辨率圖像決定理想的曝光/白平衡。
Additional metadata entries:
ANDROID_CONTROL_AE_LOCK:控制鎖住AE當前的值。
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION:控制調整AE算法目標亮度點。
ANDROID_CONTROL_AE_TARGET_FPS_RANGE:控制選擇AE算法的目標幀率區間。AE事例不能使用這個區間之外的幀率值。
ANDROID_CONTROL_AE_REGIONS:控制視角區域的選擇,用於檢測好的曝光值。用於所有除了OOF的AE模式。
3. Auto-whitebalance settings and resultentries
Main metadata entries:
ANDROID_CONTROL_AWB_MODE:控制當前白平衡模式的選擇。
AWB_MODE_OFF:關閉自動白平衡。用戶控制顏色矩陣。
AWB_MODE_AUTO:使能自動白平衡;3A控制顏色轉換,可能會使用比簡單矩陣更復雜的轉換。
AWB_MODE_INCANDESCENT:用於室內白zhi燈的白平衡設置,色溫大概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必須處於這個狀態。
AWB_STATE_SEARCHING:AWB沒有收斂到目標值,在改變顏色調整參數。
AWB_STATE_CONVERGED:AWB爲當前場景已經找到了理想的顏色調整值,這些參數不再改變。HAL層會自動離開該狀態去尋找更好的解決方案。
AWB_STATE_LOCKED:使用AWB_LOCK鎖住了AWB。顏色調整值不再改變。
Additional metadata entries:
ANDROID_CONTROL_AWB_LOCK:控制鎖住當前AWB的值。
ANDROID_CONTROL_AWB_REGIONS:控制視角區域的選擇,用於檢測好的顏色平衡值。只用於自動白平衡模式。
4. General state machine transition notes
在切換AF,AE和AWB的不同模式是總會將算法的狀態重置爲INACTIVE。同樣地,在CONTROL_MODE和CONTROL_SCENE_MODE(CONTROL_MODE == USE_SCENE_MODE)之間切換時,也需要將算法的狀態重置爲INACTIVE。
5. AF state machines
mode = AF_MODE_OFF or AF_MODE_EDOF | |||
State | Transformation cause | New state | Notes |
---|---|---|---|
INACTIVE | AF is disabled | ||
mode = AF_MODE_AUTO or AF_MODE_MACRO | |||
State | Transformation cause | New state | Notes |
INACTIVE | AF_TRIGGER | ACTIVE_SCAN | Start AF sweep Lens now moving |
ACTIVE_SCAN | AF sweep done | FOCUSED_LOCKED | If AF successful Lens now locked |
ACTIVE_SCAN | AF sweep done | NOT_FOCUSED_LOCKED | If AF successful Lens now locked |
ACTIVE_SCAN | AF_CANCEL | INACTIVE | Cancel/reset AF Lens now locked |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Cancel/reset AF |
FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Start new sweep Lens now moving |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Cancel/reset AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Start new sweep Lens now moving |
All states | mode change | INACTIVE | |
mode = AF_MODE_CONTINUOUS_VIDEO | |||
State | Transformation cause | New state | Notes |
INACTIVE | HAL initiates new scan | PASSIVE_SCAN | Start AF sweep Lens now moving |
INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF state query Lens now locked |
PASSIVE_SCAN | HAL completes current scan | PASSIVE_FOCUSED | End AF scan Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Immediate transformation if focus is good Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate transformation if focus is bad Lens now locked |
PASSIVE_SCAN | AF_CANCEL | INACTIVE | Reset lens position Lens now locked |
PASSIVE_FOCUSED | HAL initiates new scan | PASSIVE_SCAN | Start AF scan Lens now moving |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Immediate transformation if focus is good Lens now locked |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate transformation if focus is bad Lens now locked |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | No effect |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | No effect |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
mode = AF_MODE_CONTINUOUS_PICTURE | |||
State | Transformation cause | New state | Notes |
INACTIVE | HAL initiates new scan | PASSIVE_SCAN | Start AF scan Lens now moving |
INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF state query Lens now locked |
PASSIVE_SCAN | HAL completes current scan | PASSIVE_FOCUSED | End AF scan Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Eventual transformation once focus good Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Eventual transformation if cannot focus Lens now locked |
PASSIVE_SCAN | AF_CANCEL | INACTIVE | Reset lens position Lens now locked |
PASSIVE_FOCUSED | HAL initiates new scan | PASSIVE_SCAN | Start AF scan Lens now moving |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Immediate transformation if focus is good Lens now locked |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate transformation if focus is bad Lens now locked |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | No effect |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | No effect |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
6. AE and AWB state machines
AE和AWB的狀態機基本上是完全相同的。AE有額外的FLASH_REQUIRED和PRECAPTURE狀態。所以下面行中涉及這兩個狀態時,AWB狀態機忽略之。
mode = AE_MODE_OFF / AWB mode not AUTO | |||
State | Transformation cause | New state | Notes |
---|---|---|---|
INACTIVE | AE/AWB disabled | ||
mode = AE_MODE_ON_* / AWB_MODE_AUTO | |||
State | Transformation cause | New state | Notes |
INACTIVE | HAL initiates AE/AWB scan | SEARCHING | |
INACTIVE | AE/AWB_LOCK on | LOCKED | Values locked |
SEARCHING | HAL finishes AE/AWB scan | CONVERGED | Good values, not changing |
SEARCHING | HAL finishes AE scan | FLASH_REQUIRED | Converged but too dark without flash |
SEARCHING | AE/AWB_LOCK on | LOCKED | Values locked |
CONVERGED | HAL initiates AE/AWB scan | SEARCHING | Values locked |
CONVERGED | AE/AWB_LOCK on | LOCKED | Values locked |
FLASH_REQUIRED | HAL initiates AE/AWB scan | SEARCHING | Values locked |
FLASH_REQUIRED | AE/AWB_LOCK on | LOCKED | Values locked |
LOCKED | AE/AWB_LOCK off | SEARCHING | Values not good after unlock |
LOCKED | AE/AWB_LOCK off | CONVERGED | Values good after unlock |
LOCKED | AE_LOCK off | FLASH_REQUIRED | Exposure good, but too dark |
All AE states | PRECAPTURE_START | PRECAPTURE | Start precapture sequence |
PRECAPTURE | Sequence done, AE_LOCK off | CONVERGED | Ready for high-quality capture |
PRECAPTURE | Sequence done, AE_LOCK on | LOCKED | Ready for high-quality capture |
7. Enabling manual control
在配置3A模塊中所涉及的一些控制,允許application直接控制。
對於每個請求,HAL層負責3A控制的模塊會檢查3A控制字段的狀態。如果有3A事例使能,這些事例可能會重置該事例相關的控制變量,重置的值會放置於此次捕獲的結果元數據中。例如,如果在一個請求中自動曝光使能,HAL層會重置這個請求中的曝光值,增益和幀週期字段(和潛在的閃光燈字段,依賴於AE模式)。相關控制如下:
Control name | Unit | Notes |
---|---|---|
android.control.mode | enum: OFF, AUTO, USE_SCENE_MODE | High-level 3A control. When set to OFF, all 3A control by the HAL is disabled. The application must set the fields for capture parameters itself. When set to AUTO, the individual algorithm controls in android.control.* are in effect, such as android.control.afMode. When set to USE_SCENE_MODE, the individual controls in android.control.* are mostly disabled, and the HAL implements one of the scene mode settings (such as ACTION, SUNSET, or PARTY) as it wishes. |
android.control.afMode | enum | OFF means manual control of lens focusing through android.lens.focusDistance. |
android.control.aeMode | enum | OFF means manual control of exposure/gain/frame duration through android.sensor.exposureTime / .sensitivity / .frameDuration |
android.control.awbMode | enum | OFF means manual control of white balance. |
(全文完)