本讲是android camera专题系列的第43讲,我们介绍android camera2 api专题的af自动对焦第二部分。
更多资源:
资源 | 描述 |
---|---|
在线课程 | |
知识星球 | 星球名称:深入浅出android camera 星球id: 17296815 |
极客笔记圈 |
af trigger
capturerequest控制是否要触发auto focus
control_af_trigger取值 | 描述 |
---|---|
control_af_trigger_idle | 未触发auto focus |
control_af_trigger_start | 触发auto focus,如果是manual focus模式,触发无效。通常我们只需要在单个capturerequest中触发auto focus。如果在repeating的capturerequest中设置了触发,则auto focus会不停地一直重复对焦 |
control_af_trigger_cancel | 取消正常进行中的auto focus,让af state恢复到初始状态 |
可以在一个capturerequest中同时使能af trigger和ae precapture trigger,hal这边可能会串行完成每类trigger
af regions
control_af_regions
- 设置af算法的roi
-
只有当cameracharacteristics#control_max_regions_af > 0时才能设置af regions(通常该值是1)
-
坐标系同逻辑
af scene change
captureresult#control_af_scene_change
- 在当前设置的af rois内是否检测到显著的场景变化,需要重新对焦了
注:并非所有设备都支持上报该值,使用前需要检查cameracharacteristics#getavailablecaptureresultkeys
control_af_scene_change取值 | 描述 |
---|---|
control_af_scene_change_detected | 比如fov(视场角)发生变化、场景发生明显地运动、光照发生变化 |
control_af_scene_change_not_detected | 未检测到变化 |
manual focus
是否支持手动控制对焦距离
- cameracharacteristics#lens_info_minimum_focus_distance
- 如果该值为0表示不支持手动调整对焦距离
-
manual_sensor capability的camera该值必须 > 0
如何控制对焦距离
-
capturerequest#lens_focus_distance
- 从镜头最前面的表面测量。
-
0.0, 表示焦点无穷大
-
取值范围是:[0.0f, android.lens.info.minimumfocusdistance]
-
这个设置不会当帧生效,可能需要几帧,镜头才能移动到要求的焦点距离。移动过程中android.lens.state会被设置为moving
focus range
captureresult#lens_focus_range
- 当前景深范围,以(near, far)表示
-
该值在某些设备上可能为null
超焦距点
cameracharacteristics#lens_info_hyperfocal_distance
- 当前镜头的超焦距点
-
当你对焦在这个超焦距上时,能够得到在这个光圈和焦距组合下的最大景深范围
lens state
captureresult#lens_state
- 表示当前镜头是否在移动
lens_state取值 | 描述 |
---|---|
lens_state_stationary | 镜头处于静止状态 |
lens_state_moving | 镜头正在移动 |
focus distance校准质量
cameracharacteristics#lens_info_focus_distance_calibration
- focus distance的校准质量,描述focus distance相关参数的可靠性(focus distance,focus range,hyperfocaldistance)
lens_info_focus_distance_calibration取值 | 描述 |
---|---|
lens_info_focus_distance_calibration_uncalibrated = 0 | 未校准过,focus distance没有任何物理含义,相同的focus distance可能有不同的对焦结果。 capturerequest设置的focus distance与最终captureresult生效的focus distance误差不超过25% |
lens_info_focus_distance_calibration_approximate = 1 | 近似校准过,focus distance以屈光度来衡量。相同的focus distance可能有不同的对焦结果。 capturerequest设置的focus distance与最终captureresult生效的focus distance误差不超过10% |
lens_info_focus_distance_calibration_calibrated = 2 | 校准过,focus distance以屈光度来衡量。相同的focus distance有相同的对焦结果。 capturerequest设置的focus distance与最终captureresult生效的focus distance误差不超过5% |