FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

之前写过一篇FPGA纯verilog实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持的文章,讲述了基于AXI协议的FDMA实现任意分辨率视频输出显示,但对于习惯使用zynq或者Microblaze的兄弟来说,更喜欢用VDMA,本设计就是基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,适用于医疗、军工等图像相关项目。

2、任意分辨率视频输出理论基础

关于理论部分,请参考我之前写的文章:点击查看:任意分辨率视频输出

3、VDMA实现数据缓存

VDMA是Xilinx发布的基于AXIS数据流的图像缓存方案,该IP使用稳定、方便,仅需简单界面配置加SDK配置即可使用,关于VDMA的讲解,Xilinx有官方文档,网上也有各种文档,感兴趣的可以去详细读读,但恕我直言,说多了都是扯淡,读了半天不知道怎么用有意义吗?先用起来再说,在使用过程中去慢慢理解才是最有效的学习方式,就算最后还是不懂也没关系,能用就行,VDMA本身就是一个黑箱IP,你本来就看不到源码,怎么可能真正理解,Xilinx根本就没想让你真正理解;
VDMA界面配置如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
VDMA配置界面几乎不需要更改,保持官方默认配置已经够了,只是buffer深度需要关注一下,比如1080P视频可以适当将buffer深度增大到1024或者2048;还有就是选择缓存帧数,如果嫌延迟太高了可以选择缓存2帧;
拿我的工程去就能直接把VDMA用起来,该IP简单来说就是实现视频到DDR的三帧缓存,使得读写错开,输出完美视频,仅此而已;

4、工程1:Kintex7使用VDMA

开发板:Xilinx Kintex7开发板;
开发环境:Vivado2019.1;
输入:Ov5640摄像头,分辨率由SDK配置;
输出:HDMI,分辨率1920x1080;
Kintex7使用VDMA需要引入Microblaze软核,图像缓存进DDR3;
工程BD如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
导出硬件后的代码架构如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
SDK主函数如下:

int main(){
	XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);
	XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);
	XGpio_SetDataDirection(&led_gpio, 1, 0);	//output
	XGpio_DiscreteWrite(&led_gpio, 1, 0);
	oak_i2c_init(OV5640_IIC_BASEADDR, 1000000, 0x78>>1, IIC_REG_LEN16, IIC_DATA_LEN8);
	OV5640_Init(OV5640_IIC_BASEADDR,1280,720);
	helai_vdma();
	while(1){
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 1);
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 0);
	}
}

5、工程2:Zynq7100使用VDMA

开发板:Xilinx Zynq7100开发板;
开发环境:Vivado2019.1;
输入:Ov5640摄像头,分辨率由SDK配置;
输出:HDMI,分辨率1920x1080;
VDMA运行与PL端,图像缓存进PS端DDR3,PL端系统时钟由PS提供;
工程BD如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
导出硬件后的代码架构如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
SDK主函数如下:

void main()
{
	// Initialize OV5640 regesiter
	I2C_config_init();
	//璁剧疆鍐呭瓨涓殑鑳屾櫙
	for(i=0;i<SUM;i++){
		Xil_Out16((VIDEO_BASEADDR0 + i), 0x00);
		Xil_Out16((VIDEO_BASEADDR1 + i), 0x00);
		Xil_Out16((VIDEO_BASEADDR2 + i), 0x00);
	}
	//VDMA_WRITE
	Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode
	Xil_Out32((VDMA_BASEADDR + 0x0AC), VIDEO_BASEADDR0);	// start address
	Xil_Out32((VDMA_BASEADDR + 0x0B0), VIDEO_BASEADDR1);	// start address
	Xil_Out32((VDMA_BASEADDR + 0x0B4), VIDEO_BASEADDR2);	// start address
	Xil_Out32((VDMA_BASEADDR + 0x0A8), (H_STRIDE*3));		// h offset (H_STRIDE* 3) bytes
	Xil_Out32((VDMA_BASEADDR + 0x0A4), (H_ACTIVE*3));		// h size (H_ACTIVE * 3) bytes
	Xil_Out32((VDMA_BASEADDR + 0x0A0), V_ACTIVE);			// v size (V_ACTIVE)
	//VDMA_READ
	Xil_Out32((VDMA_BASEADDR + 0x000), 0x8B); 		// enable circular mode
	Xil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR0); 	// start address
	Xil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR1); 	// start address
	Xil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR2); 	// start address
	Xil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*3)); 		// h offset (H_STRIDE * 3) bytes
	Xil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*3)); 		// h size (H_ACTIVE * 3) bytes
	Xil_Out32((VDMA_BASEADDR + 0x050), V_ACTIVE); 			// v size (V_ACTIVE)
	while (1) ;
}

6、上板调试验证并演示

以工程1为例,动态ov5640分辨率500x500演示如下:

K7 500X500 VDMA


以工程2为例,静态ov5640分辨率1280x720演示如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码
动态ov5640分辨率500x500演示:

FPGA基于VDMA实现任意分辨率视频输出显示

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持,菜鸟FPGA图像处理专题,fpga开发,图像处理,VDMA,Zynq,源码文章来源地址https://www.toymoban.com/news/detail-521053.html

到了这里,关于FPGA基于VDMA实现任意分辨率视频输出显示,高度贴近真实项目,提供工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【视频超分辨率】视频超分辨率的介绍(定义,评价指标,分类)

    视频超分率起源于图像超分率,旨在根据已有的低分辨率视频序列生成具有真实细节和内容连续的高分辨率视频序列。视频超分辨率技术可以将 低分辨率(低清晰度)视频转换为高分辨率(高清晰度)视频 ,以提供更多的细节和清晰度。 视频超分辨率技术主要分为 传统方法

    2024年02月04日
    浏览(49)
  • STM32驱动ST7735彩色屏幕(任意分辨率),驱动不了你来打我

    驱动方式 硬件SPI 适用STM32型号 带SPI的任意型号,驱动不了你来打我(内心OS:HAL真好) 特别提醒 以下内容介绍如何使用HAL方式驱动ST7735,所以默认 你已经了解并且会使用STM32CubeMX软件 (如果没有接触过的话建议先安装尝试一下再继续以下内容,不然有种囫囵吞枣的意思了)

    2023年04月15日
    浏览(63)
  • STM32驱动ST7735彩色屏幕(任意分辨率),驱动不了你顺着网线来打我

    驱动方式 硬件SPI 适用STM32型号 带SPI的任意型号,驱动不了你来打我(内心OS:HAL真好) 特别提醒 以下内容介绍如何使用HAL方式驱动ST7735,所以默认 你已经了解并且会使用STM32CubeMX软件 (如果没有接触过的话建议先安装尝试一下再继续以下内容,不然有种囫囵吞枣的意思了)

    2023年04月23日
    浏览(50)
  • Python获取视频分辨率大小

    可以使用 Python 的 cv2 库来获取视频的分辨率大小。具体来说,需要执行以下步骤: 1、首先,你需要安装 cv2 库。你可以使用 pip 安装: 2、然后,需要导入 cv2 库并打开视频文件。就可以使用 cv2.VideoCapture 函数来打开视频文件: 3、接着,可以使用 cv2.VideoCapture.get 函数获取视

    2024年02月15日
    浏览(63)
  • 视频分辨率/帧率/码率选择参考

    1. 视频码率与分辨率的参考表     1080*720的分辨率,用5000K左右;     720*576的分辨率,用3500K左右;     640*480的分辨率,用1500K左右。 2. 计算公式 基本算法:码率(kbps)=文件大小(KB)*8/时间(秒) 举例:视频文件的容量为3.446G,视频长度100分钟(6000秒), 计

    2024年02月06日
    浏览(41)
  • ffmpeg 视频分辨率修改 质量压缩

    随着手机像素的提高,拍摄视频也越来越大,10秒的视频动辄 二三十兆,这给视频传输和播放都带来了 诸多不变。一般都需要 前端或或者后端  对视频进行压缩。由于我这边前端是 H5,所以只能后端进行压缩, 采用主流压缩库采用 ffmpeg 进行,我这边是 nodejs 环境 先说下我

    2024年02月02日
    浏览(69)
  • java获取视频时长、分辨率、帧率、码率

    1、先导包 2、获取时长

    2024年02月15日
    浏览(54)
  • 使用ffmpeg修改视频分辨率同时压缩视频的质量

    调整视频的质量和码率可以使用FFmpeg中的编码选项。以下是一些常用的选项: 1 质量选项 :使用 -q:v 参数设置视频的质量等级。质量等级的范围是 0-51,其中 0 表示无损压缩,51 表示最低质量。质量等级越低,视频的文件大小就越小,但是视频的质量也会降低。 2 码率选项

    2024年02月10日
    浏览(42)
  • FFmpeg零基础学习(三)——视频分辨率更改

    本篇文章的需求为: 1、输入视频文件的路径。 2、输入要输出的视频的分辨率。 3、将视频文件转为指定分辨率的视频。 当前进展:目前仅将数据解码出,且使用sws_scale 更改为其他分辨率的AVFrame,但将该帧编码成视频的方式,目前还未成功。后续完善。 code 1、avcodec_send_fra

    2024年01月21日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包