FPGA基于VCU的H265视频解压缩,解码后HDMI2.0输出,支持4K60帧,提供工程源码+开发板+技术支持

news2024/11/24 14:00:33

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 我这里已有的视频图像编解码方案
    • 4K60帧HDMI2.0输入,H265视频压缩方案
  • 3、详细设计方案
    • 设计框图
    • FPGA开发板
    • 解压视频源
    • Zynq UltraScale+ VCU
    • Video Frame Buffer Read
    • Video Mixer
    • HDMI 1.4/2.0 Transmitter Subsystem
    • Video PHY Controller
    • PetaLinux 系统制作
    • 工程源码架构
  • 4、Vivado工程源码详解
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • 配置Xshell
    • 查询显示器分辨率
    • 配置输出分辨率
    • H265解压视频并播放
    • H265解压视频输出演示
  • 7、福利:工程源码获取

FPGA基于VCU的H265视频解压缩,解码后HDMI2.0输出,支持4K60帧,提供工程源码+开发板+技术支持

1、前言

Xilinx Zynq UltraScale+ ZUEV系列FPGA自带VCU视频编解码功能,VCU有以下特点:
• 支持多达 32 个流的同步编码和解码 (最大聚合带宽为3840x2160 @ 60fps)
• 低时延速率控制
• 灵活的速率控制:CBR、 VBR 和常量 QP
• 支持分辨率高达 4K UHD @ 60 Hz 的同步编码和解码
• 支持 8 K UHD (~15 Hz) 的降低帧速率

本设计采用Zynq UltraScale+MPSoCs–XCZU4EV的高端型号FPGA做基于VCU的H265视频压缩,输入视频源使用实现准备好的一段.ts的压缩视频,并将视频文件存放在TF卡中;启动开发板后,Linux系统会读取.ts的压缩视频,然后将其拷贝到Zynq UltraScale+的PS侧DDR4中;然后然后调用Xilinx官方的Zynq UltraScale+ VCU IP核做H265解压缩压缩操作并将解码后的视频回灌到DDR4中缓存;然后调用Xilinx官方的Video Frame Buffer Read IP核将图像从PS侧的DDR4中读出输出到下一级;然后调用Xilinx官方的Video Mixer IP核将图像加上背景合并输出到下一级;然后调用Xilinx官方的HDMI 1.4/2.0 Transmitter Subsystem IP核做4K高清视频的编码工作并输出到下一级,不包含音频流;然后调用Xilinx官方的Video PHY Controller IP核接收4K输入视频做串转换工作,将原来的并行信号转为高速串行信号,输出HDMI2.0接口,最后送显示器显示即可;

本设计提供资源如下:
• 提供一套XCZU4EV开发板
• 提供一套Vivado2020.2版本的工程源码
• 提供一套编译好的固件,可启动Linux系统

本博客详细描述了Xilinx系列Zynq UltraScale+MPSoCs–XCZU4EV的高端型号FPGA基于VCU的H265视频解压缩的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我这里已有的视频图像编解码方案

我这里有图像的JPEG解压缩、JPEG-LS压缩、H264编解码、H265编解码以及其他方案,后续还会出更多方案,我把他们整合在一个专栏里面,会持续更新,专栏地址:
直接点击前往

4K60帧HDMI2.0输入,H265视频压缩方案

前面出过一篇博客,介绍了4K60帧HDMI2.0输入,然后H265视频压缩的方案,博客链接如下
专栏地址:
直接点击前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:
在这里插入图片描述

FPGA开发板

本UP主有下列FPGA开发板均可实现4K@60Hz视频 HDMI2.0的收发,本博客仅仅是介绍了其中Zynq UltraScale+系列的开发板实现方案,需要其他方案的朋友可以在博客末尾联系到本UP,现有开发板方案如下:
1–>Xilinx Kintxe7 FPGA开发板;
2–>Xilinx Kintxe7 UltraScale FPGA开发板;
3–>Xilinx Kintxe7 UltraScale+ FPGA开发板;
4–>Xilinx Virtxe7 FPGA开发板;
5–>Zynq UltraScale FPGA开发板;
6–>Zynq UltraScale+ FPGA开发板(本博客使用到的);
关于本博客使用的这款开发板详细信息,请参考我之前的博客,对这块开发板感兴趣的朋友可以咨询本UP获得;博客链接如下:
点击直接前往

解压视频源

事先准备一个.ts的压缩视频,网上有MP4转TS的教程,并将视频文件复制到Linux启动TF卡中,如图:
在这里插入图片描述

Zynq UltraScale+ VCU

Zynq UltraScale+ VCU是Xilinx Zynq UltraScale+ ZUEV系列FPGA才有的IP,可以实现最高4K60帧的视频压缩和解压,IP的官方文档是《PG252》,读者可以自行前往阅读,Zynq UltraScale+ VCU配置如下:
在这里插入图片描述
输入视频格式为YUV420,最高分辨率配置为4K60帧;

Video Frame Buffer Read

Video Frame Buffer Read相当于精简版的VDMA,只具有视频从DDR读出的功能,与VDMA相比具有YUV视频读出的功能,配置如下:
在这里插入图片描述
在Linux设计中可以对视频写入的基地址进行配置,通过终端指令配置;

Video Mixer

采用Xilinx官方的Video Mixer IP核实现视频背景叠加,Video Mixer最多只能实现16路视频拼接,Video Mixer的资源消耗截图如下:
在这里插入图片描述
Video Mixer IP配置如下:这里配置为最高4K;
在这里插入图片描述
在Linux设计中可以对输入视频进行缩放,通过终端指令配置缩放视频分辨率;

关于Video Mixer的详细用法,请参考我之前的博客,博客地址如下:
点击直接前往

HDMI 1.4/2.0 Transmitter Subsystem

用XIlinx方案做4K HDMI视频收发必须要用到此IP,HDMI 1.4/2.0 Transmitter Subsystem配置如下:
在这里插入图片描述
关于HDMI 1.4/2.0 Transmitter Subsystem发送HDMI2.0的用法,请参考我之前的博客,博客地址如下:
点击直接前往

Video PHY Controller

用XIlinx方案做4K HDMI2.0视频收发必须要用到此IP,Video PHY Controller IP核主要做解串和串化的工作,利用FPGA GT资源,即利用GTH;在接收端接收4K 高清视频并做解串工作,将原来高速串行信号解为3路20bit的AXI4-Stream并行数据,在发送端做4K 高清视频并做串化工作,将原3路20bit的AXI4-Stream并行数据串化为高速串行信号;Video PHY Controller配置如下:
在这里插入图片描述
关于Video PHY Controller收发HDMI2.0的用法,请参考我之前的博客,博客地址如下:
点击直接前往

PetaLinux 系统制作

PetaLinux版本为2020.2,提供一套编译好的固件,文件复制到TF卡后,可启动Linux系统;

工程源码架构

工程源码架构包括vivado Block Design逻辑设计和PetaLiux软件设计;
Block Design逻辑设计架构截图如下:
在这里插入图片描述
综合后的源码架构如下:
在这里插入图片描述

4、Vivado工程源码详解

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
开发环境:Vivado2020.2;
输入:.ts压缩视频,分辨率1080P @60Hz;
输出:HDMI2.0,分辨率1080P @60Hz;
视频解压缩方案:Zynq UltraScale+ VCU–H265;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于VCU的H265视频解压缩的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证并演示

准备工作

FPGA开发板,推荐使用本博的开发板;
显示器;
开发板连接如下:
在这里插入图片描述
插上TF卡,然后将串口线和网线连接到电脑,安装串口驱动,资料包中已经提供,上电;

配置Xshell

我们使用Xshell连接开发板模拟Linux终端的操作,Xshell配置如下:
在这里插入图片描述
在这里插入图片描述

查询显示器分辨率

首先需要查询与开发板连接的显示器支持的做大分辨率,输入指令如下:
• 终端指令:modetest -D a0000000.v_mix
在这里插入图片描述

配置输出分辨率

然后配置输出分辨率,这个分辨率必须和上面查到的显示器分辨率相适应,不然无法显示;
• 终端指令:modetest -D a0000000.v_mix -s 38:1920x1080-60@BG24
在这里插入图片描述

H265解压视频并播放

然后可执行H265解压视频操作,并输出HDMI接口;
• 终端指令:gst-launch-1.0 uridecodebin uri=“file:///mnt/sd-mmcblk1p1/record.ts” ! queue max-size-bytes=0 ! kmssink
bus-id=“a0000000.v_mix”
在这里插入图片描述
连接HDMI线到显示器即可播放;

H265解压视频输出演示

播放H265解压视频演示:

FPGA实现H265视频解压

7、福利:工程源码获取

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM内核、内核寄存器及作用、ARM最小系统、半导体器件、存储器、ARM工作方式、ARM寄存器个数、立即数、汇编指令的s/c后缀

我要成为嵌入式高手之4月10日51单片机第五天!! ———————————————————————————— 单片机最小系统板: 单片机内部的CPU: CPU定义的变量都在ram中、编写的程序代码都在rom中 CPU在次细化:ker…

计算机导论——C语言001

前言 学习一门语言不是要记住所有这些函数,而是要懂得在哪里找到解决问题的答案 学习英语不是要记住所有单词,而是要懂得查字典(因为这样就可以理解单词,并会用单词造句子了) 以下侧重于了解输出(side eff…

new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数,用于创建软体物体的辅助对象,提供了一些方法来创建软体物体

demo案例 new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数,用于创建软体物体的辅助对象,提供了一些方法来创建软体物体。以下是它的一些重要信息: 入参:通常不需要传入参数。 出参:创建的新的软体辅助对…

软件设计师-基础知识科目-面向对象技术知识7

七、面向对象技术知识: 面向对象基础知识: 对象: 对象的组成部分包括:对象名,状态(属性),行为(操作)。 类: 类的分类:实体类、接口类(边界类)和控制类。 实体类的对象&#xff…

CentOS7 boa服务器的搭建和配置

环境是CentOS7,但方法不局限于此版系统,应该是通用的。 具体步骤如下: 1. 下载boa源码 下载地址: Boa Webserver 下载后,进入压缩包所在目录,进行解压: tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

信息系统项目管理师——第23章组织通用管理

本章在第三版流程和知识管理的基础上新增了2节内容,从2023年上半年的考情来看来 选择题,考1分左右,知识点比较分散,刷下题,考前突击下即可。 案例题,不考。 论文题,不考。 1人力资源管理 1.人…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟

原文链接:结合ArcGISSWAT模型Century模型:流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2NV9sMGRZNUJoVkNVc1ZzSzRuMl9XXzhqX0R3cXpESWFwM1E4cFY4ejNqWFh3VUl0dlZkNWk4b20ydFdFTy1xS2ZObGN0Z0ZXSjly…

交流电源的频率如何测试

交流电源的频率是指每秒钟交流电源周期的数量,通常是50Hz和60Hz。但是在实际使用中会有一定的波动,一般交流电源频率的波动范围是10%。 交流电源频率的高低对电路有很大的影响,直接影响着电能质量和电路的稳定性。此外,交流电源的…

Docker核心特征

Docker的基本概念 Dockerfile:制作进行的文件,可以理解为制作镜像的一个清单。 镜像:用来创建容器的安装包,可以理解为给电脑安装操作系统的系统镜像。 容器:通过镜像来创建的一套运行环境,一个容器里可…

eBPF 主题分享:Kindling-OriginX 解密如何揭开可观测性盲区实现根因推导

“第二届eBPF开发者大会”将于2024年4月13日在陕西省西安市线下召开,由西安邮电大学主办。本次大会以“发挥eBPF技术力量,提升计算机系统可观测性和性能”为主题,涵盖了eBPF技术及发展、eBPF网络安全应用、eBPF可观测性及应用、软件性能工程等方面&#…

代理模式:控制对象访问的智能方式

在面向对象的软件开发中,代理模式是一种结构型设计模式,它为其他对象提供一个代理或占位符以控制对这个对象的访问。代理模式在实现权限控制、延迟初始化和远程对象访问等方面非常有用。本文将详细介绍代理模式的定义、实现、应用场景以及优缺点&#xf…

Tomcat以服务方式启动,无法访问网络共享目录问题

关于“Tomcat以服务方式启动,无法访问网络共享目录问题”解决方式如下: 1、通过doc命令【services.msc】打开本地服务找到,找到tomcat服务所在位置 2、右键打开Tomcat服务的属性 3、选择 登陆选项卡 4、选择“此账户”选项,并…

预告:(阶乘)+统计读取的单个字符+把我电脑给干关机了的题,还好在tmp里面找到(穷举法编程)+(双循环算法)+(最大公约数,最小公倍数)

在赶一篇作业出来 第一个: 题目:编程实现,求saaaaaaaa⋯an个a的值,其中a是一个数字。例如当a为2,n为5时,计算,2+22+222+2222+22222的值。 #inc…

elementUI 下拉框加提示文案

效果如下&#xff1a; 展示文案在最下面&#xff0c;跟选项有个分割线 <el-select v-model"value" placeholder"请选择" clearable popper-class"addNotice" class"addNoticeS" visible-change"(v) >selectNotice(v,展示…

物联网SaaS平台

在信息化、智能化浪潮席卷全球的今天&#xff0c;物联网SaaS平台作为推动工业数字化转型的重要工具&#xff0c;正日益受到广泛关注。那么&#xff0c;物联网SaaS平台究竟是什么&#xff1f;HiWoo Cloud作为物联网SaaS平台又有哪些独特优势&#xff1f;更重要的是&#xff0c;它…

Docker 学习笔记(三):Centos7 中 Docker 使用,镜像、容器,以及操作等常用命令小结

一、前言 记录时间 [2024-4-7] 前置文章&#xff1a; Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#…

IDEA2023连接服务器docker并部署ruoyi-cloud-plus项目

文章目录 TCP 方式连接docker1. 服务器docker配置修改查看虚拟机中Docker配置文件位置修改配置文件重启docker服务关闭防火墙 2. idea安装docker插件3. idea连接docker服务 部署ruoyi-cloud-plus项目1. 项目环境说明2. 安装Centos73. 安装docker4. idea配置服务器SSH连接5. ide…

SHAP安装问题

一、安装 pip install shap -i https://pypi.tuna.tsinghua.edu.cn/simple 二、遇到问题 1、提示报错如下&#xff1a; ModuleNotFoundError: No module named numba.core 安装numba&#xff1a; pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple 提示已经…

【go从入门到精通】作用域,包详解

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…