相机焦外成像

摄像头焦外成像是一种浅景深效果,可通过以下方式实现:对一个场景中的多个部分进行模糊处理,以使这些部分不处于聚焦状态。在移动设备的摄像头上,可使用从两个摄像头的立体视觉或单摄像头的双光电二极管 (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