本实验结合信号量实现有界安全FIFO环形缓冲,利用二级指针创建分流矩阵,每个支流均包含一个fifo,各支流fifo之间互不影响。
- 进行图像采集前,先根据分流路数创建对应数量的fifo环形缓冲区;
- 每个环形缓冲区直接分配n帧图像的内存空间;
- 支流进行图像采集时,先判断fifo空间大小,当fifo未满时,先分配一帧图像大小的内存,并拷贝原始数据,直接将新建帧写入fifo缓冲区尾部;当fifo空间大小已达到n帧时,忽略原始帧,不进行拷贝;当从fifo中读取一帧即出队,开始处理帧数据,结束后释放该帧内存。
通过对原始流复制进行分流,各支流能根据不同业务进行相应的处理,如录制、推流、预览。该分流方法可以应用于其他字节流分流场景。
1、在RK android12中基于V4L2、uvc相机驱动、OpenGL es、ffmpeg、libx264、native mediacodec、native media muxer框架采集、编码、渲染USB uvc camera yuv图像。
1路编码录像+9路gpu渲染
2、在Linux环境中,利用QT验证了以上思路。验证过程中,各路支流几乎能保持与原始流一致的帧率。无论支流出队多么耗时,都不影响原始流、其他支流的渲染过程。实验结果如下: