小米开放平台相机各场景下3A操作适配说明
1.Preview
在预览时AF可以由App控制触发对焦,也可以底层自动对焦,推荐使用底层自动对焦。
1.1.App手动对焦设置
- CONTROL_AF_MODE_AUTO并不是AF自动模式,根据Google定义,是由App进行手动触发。App控制触发对焦逻辑是设置AF为Auto,然后App主动触发对焦。
- App使用CONTROL_AF_TRIGGER触发对焦。CONTROL_AF_TRIGGER使用建议,CANCEL – START – IDLE;App何时触发对焦由App决定,比方App检测到加速度计和陀螺仪变化达到一定的阈值或者app为扫码软件,检测扫码一直无法解析扫码结果等(因为出现这种场景时物距发生了变化或者焦点模糊),具体场景具体调整。对于扫码等APP还可以设置AF测量区域,CONTROL_AF_REGIONS,尽量使用中心区域作为对焦点。
1.2.AF自动对焦设置
可以先检测AF有效模式,如果支持CONTINUOUS_PICTURE,设置即可,具体如下:
mCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES),CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE))。
CONTROL_AF_MODE设置为CONTROL_AF_MODE_CONTINUOUS_PICTURE。
2.Video
- 可以先检测AF有效模式,如果支持CONTINUOUS_VIDEO,设置即可,具体如下:
mCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES),CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_VIDEO))。
CONTROL_AF_MODE设置为CONTROL_AF_MODE_CONTINUapp打包OUS_VIDEO。
- 注释
CONTROL_AF_MODE_CONTINUOUS_PICTURE和CONTROL_AF_MODE_CONTINUOUS_VIDEO的区别是前者在AF时会快速收敛,后者在AF时慢速收敛,因为录制视频时为了防止图像抖动,收敛过程需要慢一点,共同点是二者都为自动对焦。
3.Touch
Touch是为了在预览时对特定的区域进行3A权重提高,以便于得到预期的图像。当touch预览窗口某区域时,通用的操作流程是设置CONTROL_AF_REGIONS,CONTROL_AF_TRIGGER的流程还是CANCEL – START – IDLE。
4.Flash
Flash的实用场景通常在Touch,拍照和录像情况下使用,flash有两种操作模式,手动模式和自动模式,具体操作如下:
4.1.手动模式,即Torch模式
当需要打开flash时,设置CONTROL_AF_MODE为OFF/AUTO模式,同时设置FLASH_MODE为torch即可。
4.2.自动模式
自动模式是flash交给底层AE算法控制,具体如下两种常用模式:
ON_AUTO_FLASH:设置AF_Mode为此模式表示flash由AE根据当前亮度进行打开,关闭。
ON_ALWAYS_FLASH:设置AF_Mode为此模式表示flash每次操作都会打开。
5.拍照
拍照操作流程通常为触发3A,等待3A收敛,获取到3A收敛结果,进行拍照请求。
5.1.触发3A操作
CONTROL_AE_MODE根据是否需要闪光灯设置为ON_AUTO_FLASH,ON_ALWAYS_FLASH,ON。
CONTROL_AE_PRECAPTURE_TRIGGER设置建议 CANCEL-START-IDLE。
CONTROL_AF_MODE设置为AUTO,CONTINUOUS_VIDEO都可以。
CONTROL_AF_TRIGGER设置建议CANCEL-START-IDLE。
5.2.等待3A状态收敛
根据CaptureResult的metadata获取3A状态,如果3A都收敛了即可请求拍照
result.get(CaptureResult.CONTROL_AF_STATE); //AF_State
result.get(CaptureResult.CONTROL_AE_STATE); //AE_State
result.get(CaptureResult.CONTROL_AWB_STATE); //AEB_State
5.3进行拍照请求
CONTROL_AE_MODE根据是否需要闪光灯设置为ON_AUTO_FLASH,ON_ALWAYS_FLASH,ON。
CONTROL_AF_MODE设置为AUTO,CONTINUOUS_VIDEO都可以。
最终下发拍照请求:
mCaptureSession.capture(request, mCaptureCallback, mBackgroundHandler);
6.参考
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12506/
部分内容来自网络投稿,如有侵权联系立删