camera2的一些参数

虽然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.

 (全文完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章