单生产者、多消费者相机缓冲区传输

此功能引入了一组方法,允许相机客户端在捕获会话处于活动状态且相机流式传输正在进行时动态添加和移除输出图面。新的输出可以映射到用户选择的特定共享相机流。添加图面后,可以随时移除。

总体思路是在多个输出图面中共享与特定相机流相关联的缓冲区。内部引用计数器会跟踪缓冲区,因为当缓冲区准备好在消费者端进行进一步处理时。当所有消费者完成各自的任务后,缓冲区将被取消排队,并可供相机使用。

Buffer sharing

图 1. 缓冲区共享

图 1 描述了一个示例场景,其中相机流 2 处理的缓冲区在相机服务中专用共享输出流内的流拆分器组件中进行动态附加和分离、引用计数和管理。

示例和源代码

此功能的核心实现可以在 Camera3StreamSplitter 模块中找到。有关此功能的文档,请参阅开发者参考

实现

由于此功能在框架侧实现,因此 Camera HAL 侧不需要实现。

验证

您的实现必须通过 CTS 测试用例,这些用例涵盖了来自 MultiViewTest 模块和 native JNI library(用于原生 API)的此功能。