对于多路视频传输的场合,需要正确设置同步。 uifdma_dbuf0 的写通道输出帧同步计数器直接接入 uifdma_dbuf0,uifdma_dbuf1, uifdma_dbuf2, uifdma_dbuf3 的写通道同步计数输入。uifdma_dbuf0 的读通道,延迟 1 帧于 uifdma_dbuf0 的写通道帧计数器。
多路视频同频显示的原理如下图所示:
hsize表示像素实际显示的位置,在本次工程中用32为表示一个像素,因此一行像素所占用地址大小为hsize*4(32位数据为四字节)。
hstride则用于设置每行像素的第一个地址或者说用来表示显示器的一行像素数据需要占用的内存大小。例如我的显示器为1920*1080则每一行的起始地址需要上一行的起始地址加1920*4。
vsize则是对有效的行进行计数,每显示完一行数据进行加一。每行像素的起始地址可表示为vsize*hstride*4。
本次工程将进行四路图像的拼接,每一路的分辨率为960*540,第一路数据的起始地址为0x01000000,第二路视频的起始地址应该为0x01000000+(1920-960)*4=0x01000F00,第三路视频的起始地址应该为0x01000000+(1080-540)*1920*4=0x013F4800,第四路视频的起始地址应该为0x01000000+(1080-540)*1920*4+(1920-960)*4=0x013F5700。
计算完成地址之后我们就可以用Block Design搭建一个四输入的视频拼接缓存系统。框图如下所示:
输入的数据和场同步信号等均来自摄像头输入,从DDR3中读取的数据将传输给HDMI输出驱动模块。
地址分配如下图所示:
工程整体结构如下图所示:
结果如下图所示:
只要把前面的OV5640图像采集弄懂,四路图像拼接就需要计算每一路视频的起始地址即可,ip核参考米联客,本文仅用于记录学习。