本讲是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)
-
坐标系同AE regions逻辑
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% |