“单个生产者-多个消费者”摄像头缓冲区传输

该功能引入了一组方法,当拍摄会话处于活动状态且摄像头流式传输正在进行时,摄像头客户端可通过该功能动态添加和移除输出 Surface。新的输出可以映射到用户选择的特定共享摄像头信息流。Surface 添加后,您可以随时将其移除。

其总体思路是在多个输出 Surface 中共享与特定摄像头信息流关联的缓冲区。当缓冲区准备好在消费方端进行进一步处理时,内部引用计数器便开始跟踪缓冲区。当所有消费方完成各自的任务后,缓冲区便会离开队列,并可供摄像头使用。

缓冲区共享

图 1. 缓冲区共享

图 1 描绘了一个示例场景:系统采用动态方式连接和分离由相机信息流 2 处理的缓冲区,并由相机服务内的专用共享输出流内部的信息流分流器组件对引用进行计数和管理。

示例和源代码

可在 Camera3StreamSplitter 模块中找到该功能的核心实现,并可在面向开发者的参考资料中找到关于该功能的文档:

实现

相机 HAL 端不需要任何实现,因为该功能在框架端实现。

验证

您的实现必须通过 MultiViewTest 模块中以及原生 API 的原生 JNI 库中涵盖该功能的 CTS 测试。