知者何南 发表于 2024-6-19 20:40:43

12.自界说的多帧缓存架构

1.简介

  在数字图像处置惩罚中,经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂征象,图像处置惩罚中也需要帧差法来做移动目的检测。因此一个多帧缓存架构在图像体系的筹划中好坏常重要的。
2.多帧缓存

  在视频流中,通常不能包管数据的写入和读取是同样帧率的,写快读慢大概写慢读快都是常见征象。假如读写都在同一片内存地址中,那么将不能包管读出的一帧是完备的一帧图像,它很有可能是写入的图像中前多帧拼接而成的,这样就会造成帧撕裂的情况。
  假设写是读的三倍速率,且只缓存一帧图像,且读写同时开始操纵同一片内存地址。来看看写三帧图像的同时读出的三帧分别发生了什么。
https://img-blog.csdnimg.cn/direct/f8bc42537bc34850a0134164c6e21fd3.png#pic_center
  (1)可以看出在写完第一帧的时间,读只读了写入第一帧的三分之一。
  (2)开始写第二帧的时间,读的还是第一帧的部分内容。
  (3)第二帧写到中途时,写追上读,第二帧写完后,读的第一帧中心有部分第二帧内容。
  (3)开始写第三帧内容时,由于写是读的三倍速率,此时当读一帧完成时,写第三帧也刚好完成。
  由图可以看出,当写时是读的三倍时,读出的像素不是一副完备的图像,而是有前两帧拼接而成的一副图像。当读写差异过大时,读出的一副图像可能由多幅写入的图像构成,这种征象被叫做帧撕裂。
2.1 乒乓操纵

  为了避免帧撕裂,我们通常将读写的地址分开,来确保读出的是一幅完备的图像。最常见的就是乒乓操纵。将读写分两片地址来进行。
  乒乓操纵将读写分两块内存来进行操纵,同一片地址读写交错进行。核心操纵就是快等慢。
https://img-blog.csdnimg.cn/direct/0d96ac6e20e54a8f8a2196d22209c698.png#pic_center
  读写地址同时从图像缓存区一进行读写,快的操纵第一个到达地区二,慢的操纵还在地区一。当快的操纵先写完操纵完一帧图像后,查看慢操纵是否在和本身操纵同一帧,是的话跳转下一片地区,不是的话继续操纵本内存地区,等候慢操纵到来。而慢操纵只需要按照顺序来操纵内存地区即可,不需要查看快操纵所操纵的内存地区。这就是快等慢。
  假如快操纵在操纵本身的一片内存地区的时间慢操纵到来了,由于快操纵比慢操纵快,所以也不用担心在一副图像中读出两帧图像。
  由乒乓操纵延申出了三帧缓存,多帧缓存架构,多帧缓存的核心头脑就是快操纵会直接跳过慢操纵地点的内存地区。但是这样做有一个缺点,即事先需要知道读写操纵的快慢来引导谁跳谁,来确定编程代码
  可不可以做到自适应呢?个人想法:读写操纵刚开始时,谁先操纵完一副图像,就可以在程序中标记谁是快操纵,谁是慢操纵,后续根据这个标记来引导读写的内存跳转,即可以做到自适应的多帧缓存布局。编程可能轻微复杂,但是节省内存空间。
2.2 自适应的多帧缓存架构

  另一种的通用自适应多帧缓存架构也是基于多帧缓存的头脑提出的。核心操纵就是读操纵永远是写操纵的上一片内存,而写操纵就依次操纵分配的内存地区。总结就是多帧缓存+写比读低一帧缓存区。这种操纵在读写速率同等和读快写慢的时间都可以有效包管帧的完备性,但是在写比读快许多的且读写缓存地区分配不足的时间依然有写追上读而造成帧撕裂的情况。因此需要根据读写速率来分别足够的内存地区来满足多缓存架构的需要。
3 多缓存架构的实现

  在数字图像处置惩罚中,视频流通常由SDRAM大概DDR3来进行缓存。SDRAM一样平常本身编写驱动,DDR3一样平常借由mig IP核驱动大概用ZYNQ的PS由AXI协议DMA访问。此中mig IP核可以选择AXI接口大概本身的接口。这里我们选择例化mig ip核并启用AXI接口。
  一个完备的视频流传输体系的上电顺序应该为:
     基于DDR3以及AXI协议多帧缓存架构的体系图如下:
https://img-blog.csdnimg.cn/direct/1d865fe2b9e1411b96314fafd634d29b.png#pic_center
  图中的红色地区是为了防止帧断流导致图像错位而无法规复。每一帧开始时清空fifo和数据拼接地区,帧竣事时复位DMA的地址部分,

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 12.自界说的多帧缓存架构