dsp下基于双循环缓冲队列的视频采集和显示记录

对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用。

视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制。简单的就是ping-pong双缓冲。

本人分别设计了in和out的两个buffer queue。每个queue分为8个子buffer,如下所示。

 

其中,分别用类似于指针的frame和free两个偏移量,来维护整个队列的运行。

xxx_offset = (xxx_offset + 1)& 7;//每当发生一次采集图像完成的中断,就对其进行做该操作。

将最新的free地址所在的buffer作为采集buffer。当然在下次中断到来时,采集的图像是放在free帧的黑色位置。

 

类似的outbuffer显存也采用该种模式,free用于接收处理好的数据,frame作为显存空间。:

而在显示中,中断产生主要做如下工作:

frame_offset = (frame_offset + 1) & 7进行缓冲循环显示,每次中断后切换到红色位置,但是当前显存地址仍是frame_offset,黑色位置。

 

主程序在循环中对采集的图形做处理,处理的缓冲由frame buffer来维护。处理的图像维护到outbuffer的free 中去。

其实就类似于双缓冲的ping-pong机制,介绍如下:

2组队列,inbuffer1 ,outbuffer1. inbuffer2,outbuffer2.

其实inbuffer1用于采集,outbuffer1用于显示。同时inbuffer2被CPU处理,处理好的数据送outbuffer2。整个周期完成后,下个周期。

切换数据采集到inbuffer2,outbuffer2的数据被用于去显示。下一inbuffer1的数据将被CPU处理存储到outbuffer1中。循环.......

 

在设计上只是为了处理显示更加高效,采用了8对乒乓buffer,来实现类似的功能,运行起来如下图所示:

上图的5个过程大致如下分析:

1:表示当前frame处的图像处理完成

2:表示当前图像采集缓冲地址发送切换,发生在中断过程中。

3:表示显存地址发生切换,发送在中断过程中。

4:表示当前free的缓冲放入了处理的数据。

5:数据处理的一个过程,从frame区域经过处理后存放到free中。

以上5个工程,循环工作就构成了双循环缓冲队列的采集、处理和显示过程。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值