当前位置: 首页 > news >正文

Zynq非Video Mixer方案实现视频叠加输出,无需SDK配置,提供工程源码和技术支持

目录

  • 1、前言
  • 2、Video Mixer的不便之处
  • 3、FDMA取代Video Mixer实现视频叠加输出
  • 4、Vivado工程详解
  • 5、上板调试验证并演示
  • 6、福利:工程代码的获取

1、前言

关于Zynq使用Video Mixer方案实现视频叠加输出方案请参考点击查看:Video Mixer方案
对于Zynq和Microblaze的用户而言,要想实现视频叠加输出,多半要使用Xilinx推荐的Video Mixer方案,该方案目前来说稳定可靠,但并非完美,需要SDK配置,且配置C语言程序比较复杂,对于不熟悉嵌入式c开发的FPGA工程师而言比较困难,本文就是要去掉Video Mixer直接实现于Zynq和Microblaze的视频叠加输出;
本文详细描述了设计方案,工程代码编译通过后上板调试验证,文章末尾有演示视频;
可直接项目移植,适用于在校学生做毕业设计、研究生项目开发;
也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
前面写过一篇Zynq中取代VDMA的文章点击查看:取代VDMA
前面写过一篇在纯FPGA上实现视频叠加输出的文章纯FPGA上实现视频叠加本文也是基于该设计修改的;

2、Video Mixer的不便之处

就目前而言,Video Mixer有如下不便之处:

1:需要将视频转为AXI4-Stream流,然后经VDMA缓存,无论是自己用fifo转还是使用官方的Video In to AXI4-Stream IP转,无疑都增加了资源消耗,对资源紧张的FPGA不宜,再者也加大了FPGA开发难度,对于刚入门的兄弟而言望而却步,最后,Video In to AXI4-Stream这个 IP也是个黑箱,出了问题排查问题太繁琐;
2:需要SDK配置,跑个Video Mixer还要打开SDK去调用官方库函数进行一大堆配置,无疑是烦,加之有些做硬件的兄弟c语言水平跟我一样菜,根本就搞不定嵌入式C,只想安安心心地干点儿FPGA的活儿就这么难吗?哈哈。。。
3:Video Mixer输出还要调用VDMA、Video Time Controller和AXI4-Stream to Video Out这两个IP才能实现AXI4-Stream视频流到VGA时序的转换,实属费力又不讨好,还是同样的问题,增加资源消耗,黑箱操作,出了问题排查太繁琐;

3、FDMA取代Video Mixer实现视频叠加输出

前面的文章大量使用过FDMA,但都是讲图像缓存至FPGA的DDR,这次用FDMA将图像缓存至Zynq器件PS端的DDR,FDMA具有以下优势:

1:不需要将输入视频转为AXI4-Stream流;节约资源,开发难度低;
2:不需要VDMA做图像缓存;
3:不需要SDK配置,不要要会嵌入式C,纯FPGA开发者的福音;
4:看得到的源码,不存在黑箱操作问题;

FDMA与Zynq的PS端DDR图像缓存后叠加输出大体架构如下:
在这里插入图片描述
就这么简单的实现了Zynq系列PL与PS交互的图像缓存方案;

4、Vivado工程详解

开发板:Xilinx Zynq7100开发板;
开发环境:Vivado2019.1;
输入:Ov5640摄像头,分辨率960x540;
输出:HDMI,分辨率1920x1080;

工程架构如下:
在这里插入图片描述
整个处理过程Zynq的PS端仅仅提供了一个时钟给到PL端而已,其他任何事儿没干,够简单了吗?正因为PS端除了时钟外啥事儿没干,所以在SDK里只需要跑一个Hello Word死循环就足矣;而且还是官方自己生成的Hello Word,根本不需要写任何c语言代码,玩儿zyqn就这么简单。。。
ov5640配置为960x540分辨率,并复制为4路模拟4路图像输入,调用4路FDMA实现图像缓存,然后分地址读出4路图像叠加在1080P的VGA时序上输出。
工程BD如下:
在这里插入图片描述
Ov5640摄像头分辨率设置如下:这里设置分辨率为960x540;
在这里插入图片描述
VGA时序输出图像起始坐标和显示总大小设置如下:这里设置为1920x1080;
在这里插入图片描述
图像起始坐标设置为0,也就是从屏幕左上角处开始显示;
显示总大小设置为1920x1080,刚好放得下4路960x540的视频叠加;
导出硬件后的代码架构如下:
在这里插入图片描述
SDK代码如下:真的就只有Hello Word;

int main()
{init_platform();print("Hello World\n\r");cleanup_platform();return 0;
}

5、上板调试验证并演示

静态演示如下:
在这里插入图片描述
动态演示如下:

Zynq非Video Mixer方案实现视频叠加输出

6、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

http://www.lryc.cn/news/9536.html

相关文章:

  • 从零实现Web服务器(二): 线程池以及线程池的作用,Get和Post的区别,项目中如何编写数据库连接池,定时器优化非活跃连接
  • 为什么伟大的产品只专注做一件事
  • pycharm远程连接服务器,并单步调试服务器上的代码
  • JVM05 方法区
  • 盘点3个.Net开发的WMS仓库管理系统
  • Linux下Java项目开机自动启动
  • 基于SpringBoot的智慧社区网站
  • 数据分析与SAS学习笔记3
  • 天干地支蓝桥杯国赛
  • Source lnsight工具的简单使用
  • 100个变态的软件测试面试题及答案!——看完变态面试官对你竖起大拇指!
  • Windows保护机制GS:原理及SEH异常处理突破
  • 大彩 串口屏
  • 安装 cplex 求解器
  • DPR-34 AC22V【双位置继电器】
  • Ubuntu16.04搭建Fabric1.4环境
  • 【JavaScript】深度剖析prototype与__proto__到底是什么以及他们的关系
  • css选择器
  • MyBatis详解2——增删改查操作
  • 最大连续子列和
  • 线性基 学习笔记
  • 算法-回溯算法-组合问题
  • ABAP中的Null值与space 以及 BW中ADSO的Key值
  • JavaScript库之Lodash常用方法
  • Kotlin新手教程二(Kotlin基本数据类型及基础语法)
  • git idea创建新分支,获取/合并主支代码的2个方法
  • CF1714A Everyone Loves to Sleep 题解
  • oracle官方下载历史版本JDK版本
  • 双击-jar包无法运行解决方法
  • 程序员的自我修养第七章——动态链接 (下)