摄像头焦外成像是一种浅景深效果,可通过以下方式实现:对一个场景中的多个部分进行模糊处理,以使这些部分不处于聚焦状态。在移动设备的摄像头上,可使用从两个摄像头的立体视觉或单摄像头的双光电二极管 (PD) 获取的深度信息实现焦外成像。
从 Android 11 开始,Android 平台支持焦外成像实现,并提供 API 以使该功能可供第三方应用使用。
实现
如需启用您设备上的摄像头焦外成像功能,请执行以下操作:
播发
ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES
:此标记采用三整数元组数组的格式,每个元组的格式为
{mode, maxWidth, maxHeight}
。除{ANDROID_CONTROL_EXTENDED_SCENE_MODE_DISABLED, 0, 0}
外,摄像头 HAL 还必须列出ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE
和/或ANDROID_CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS
模式及其相应的最大流式传输大小。播发
ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES
:此标记采用
{minZoomRatio, maxZoomRatio}
数组的格式,该数组包含已启用扩展取景模式的所有缩放比例范围,顺序与ANDROID_CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES
相同。[1.0, 1.0]
缩放范围表示不支持缩放。在
ANDROID_CONTROL_AVAILABLE_MODES
中填充ANDROID_CONTROL_USE_EXTENDED_SCENE_MODE
。
如需触发焦外成像功能,应用必须将 ANDROID_CONTROL_MODE
设置为 ANDROID_CONTROL_USE_EXTENDED_SCENE_MODE
,并将 ANDROID_CONTROL_EXTENDED_SCENE_MODE
设置为受支持的扩展取景模式中的一种。请注意,由于立体视觉计算,实现焦外成像可能会消耗额外的内存。
如果受支持的扩展取景模式无法按帧应用,并且会导致在启用/停用时出现意外延迟,请在 ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
中添加 ANDROID_CONTROL_EXTENDED_SCENE_MODE
。同时,实现 ICameraDeviceSession::isReconfigurationRequired()
方法以避免针对不需要重新配置的扩展取景模式重新配置。
验证
如需验证设备上的焦外成像功能,请运行以下 CTS、VTS 和 CTS 验证程序测试:
CtsCameraTestCases
VtsHalCameraProviderV2_4TargetTest
- CTS 验证程序中的
CameraBokehTest