相机背景虚化

相机散景是一种通过模糊场景的部分区域以使其失焦而产生的浅景深效果。 在移动设备上的相机上,散景是通过使用从两个摄像头或单个摄像头的双光电二极管 (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_CAPTUREANDROID_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
  • CameraBokehTest in CTS Verifier