您的位置:首页 > 移动开发 > Android开发

android camera系统3A模式及其状态转换(一)

2015-12-21 11:08 357 查看
虽然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。

(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: