FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

这篇具有很好参考价值的文章主要介绍了FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、前言

H265视频压缩与解码在FPGA图传领域应用广泛,Xilinx高端器件已经内嵌了H265加速器,在Linux系统下调用API即可使用,但对于需要定制私有算法或者协议的H264视频压缩与解码应用或者学习研究者而言,纯verilog代码实现H264视频压缩依然具有实用价值,本设计采用纯verilog代码实现H265视频压缩,没有使用任何IP,具有参考价值;

本文详细描述了FPGA纯verilog代码实现H265视频压缩的设计方案,工程代码可综合编译上板调试,但目前只做到了仿真层面,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像压缩领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

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

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

3、H265–视频压缩理论

请参考这篇文章,感觉写得挺好:https://blog.csdn.net/qq_39969848/article/details/129003896

4、H265–视频压缩–性能表现

性能表现如下:
输入视频格式:YUV4:2:0;
输出视频码流:h265视频流;8位;伴随数据有效信号;
支持分辨率:最大4K@30Hz;
GOP:I/P;即帧内帧间预测算法;
多达35种预测模式;
CTU:64x64;
CU:8x8~64x64;
PU:4x4~64x64;
TU:4x4/8x8/16x16/32x32;
1/4 Sub-pixel;
Search range:64;
CABAC熵编码;
SAO(Sample Adaptive Offset);
SKIP/MERGE;

5、H265–视频压缩–设计方案

FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
视频压缩编码的基本过程可以概括如下 :
1、 利用某种方式对当前处理图像块像素进行预测 ;
2、 将原始的像素值与预测出来的像素值相减得到残差值 ;
3、 将残差进行变换及量化处理,得到输出的残差系数再进过熵编码形成最后的压缩码流 ;
4、残差系数经过反量化及反变换处理,再与之前得到的预测像素相加得到重建像素,存储作为预测的参考像素。

H264视频压缩代码顶层接口如下:

module helai_h265_encode_2023(
  input                         clk                   ,	//系统时钟,最大支持 400MHz
  input                         rstn                  ,	//系统复位--低电平有效 
  //初始化配置
  //db -->Deblocking filter 块滤波器
  //sao-->sample adaptive offseta 自适应采样偏移  
  input                         i_h265_start          ,	//输入--开启h265压缩--高电平有效
  output                        o_h265_ec_OK          ,	//输出--h265压缩完成标志--高电平有效
  input  [`PIC_WIDTH -1 :0]     i_yuv_width           , //输入--压缩视频总宽度
  input  [`PIC_HEIGHT-1 :0]     i_yuv_height          , //输入--压缩视频总高度
  input  [5             :0]     i_init_QP             , //输入--初始化QP值--例程给的27
  input                         i_DataRate_type       , //输入--码流类型: 0-->Intra ; 1-->Inter
  input                         i_IinP_en             , //输入--enable I block in P frame
  input                         i_db_en               ,	//输入--块滤波器使能
  input                         i_sao_en              ,	//输入--SAO使能--SAO(Sample Adaptive Offset)
  input  [5-1:0]                i_blok4x4bit          ,	//输入--4X4模块则填入4                               
  input   [32-1:0]              i_skip_cost_thre_08   ,	//输入--skip开销阈值;例程设置为0
  input   [32-1:0]              i_skip_cost_thre_16   ,
  input   [32-1:0]              i_skip_cost_thre_32   ,
  input   [32-1:0]              i_skip_cost_thre_64   ,
  // RC(Rate control) 配置
  // roi(region of interest_--图像感兴趣区域
  output [32             -1 :0] o_rc_mod64_sum        ,	//输出--mod64校验
  input  [32             -1 :0] i_rc_bitnum           ,	//输入--cabac编码bit数,一般为10000
  input  [16             -1 :0] i_rc_k                ,	//输入--rc k 值,一般给0
  input  [6              -1 :0] i_rc_roi_height       ,	//输入--roi 高度
  input  [7              -1 :0] i_rc_roi_width        ,	//输入--roi 宽度
  input  [7              -1 :0] i_rc_roi_x            ,	//输入--roi 起始 X 轴坐标
  input  [7              -1 :0] i_rc_roi_y            ,	//输入--roi 起始 Y 轴坐标
  input                         i_rc_roi_en           ,	//输入--roi 使能
  input  [10             -1 :0] i_rc_L1_frame_byte    , //输入--一级流水线处理帧数
  input  [10             -1 :0] i_rc_L2_frame_byte    , //输入--二级流水线处理帧数
  input                         i_rc_lcu_en           ,	//输入--LCU 使能
  input  [6              -1 :0] i_rc_QP_max           ,	//输入--QP最大值
  input  [6              -1 :0] i_rc_QP_min           ,	//输入--QP最小值
  input  [6              -1 :0] i_rc_QP_delta         ,	//输入--roi QP值
  //IME 配置                                           
  input  [CMD_NUM_WIDTH  -1 :0] i_IME_cmd_num         ,	//输入--IME指令
  input  [CMD_DAT_WIDTH  -1 :0] i_IME_cmd_data        ,	//输入--IME数据
  //外部缓存包括(原始输入视频缓存--重构缓存)   
  //ori-->original : ori_yuv_mem-->原始输入视频缓存器
  //rb -->rebuild  : rb_pix_mem -->像素重构缓存器
  output [1-1              : 0] o_rb_pix_mem_video_vs ,	//输出--告诉像素重构缓存开始接收,相当于VGA时序的vs
  input  [1-1              : 0] i_rb_pix_mem_video_OK ,	//输入--像素重构缓存告诉h265压缩模块,接收一帧视频结束
  output [5-1              : 0] o_ext_mem_do_mode     ,	//输出--告诉外部缓存操作指示,详情请看文章
  output [6+`PIC_X_WIDTH -1: 0] o_ext_mem_x_position  ,	//输出--告诉外部缓存当前视频的 X 坐标
  output [6+`PIC_Y_WIDTH -1: 0] o_ext_mem_y_position  ,	//输出--告诉外部缓存当前视频的 Y 坐标
  output [8-1              : 0] o_ext_mem_video_width ,	//输出--告诉外部缓存--视频总宽度
  output [8-1              : 0] o_ext_mem_video_height,	//输出--告诉外部缓存--视频总高度
  input                         i_ori_yuv_mem_video_de,	//输入--原始输入视频缓存--输入的 yuv4:2:0 视频数据有效
  input  [16*`PIXEL_WIDTH-1: 0] i_ori_yuv_mem_video   ,	//输入--原始输入视频缓存--输入的 yuv4:2:0 视频数据
  input                         i_rb_pix_mem_video_de ,	//输入--像素重构缓存告诉h265压缩模块--我需要像素数据
  output [16*`PIXEL_WIDTH-1: 0] o_rb_pix_mem_video    ,	//输出--给像素重构缓存灌的像素数据 
  // h265 output
  output                        o_h265_video_de       ,	//输出--压缩后的 h265 视频数据有效	
  output  [7               : 0] o_h265_video           	//输出--压缩后的 h265 视频数据
  );

6、H265–视频压缩–时序

输入输出操作时序图请参考资料包里的vivado工程里的仿真波形图,料包里有仿真教程;
输入部分时序如下:
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
输出部分时序如下:
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

7、Vivado工程详解

建立Vivado工程,将源码复制进去,目的是进行功能仿真和综合;
开发板FPGA型号:xc7k410tffg676-2;
输入:测试激励YUV 4:2:0视频流文件;
应用:功能仿真和综合;
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA资源消耗如下:
资源消耗比较大,请参考自己的FPGA是否满足资源要求;
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

8、移植上板应用

由于我这里只做到了仿真层面,还没上板调试,但你可以拿去移植上板,移植上板只需解决两个问题,1是输入时序,2是预估FPGA资源;
输入时序请参考vivado工程的仿真文件和仿真波形,查看仿真输入激励文件和波形就能了解驶入时序,然后对应着灌入数据即可;FPGA资源消耗请看上面的“7、Vivado工程详解中的FPGA资源消耗”;另外,移植上板可提供技术支持;

9、Vivado功能仿真

由于仿真过程比较复杂,我专门做了一个PPT教程,详细讲述了仿真流程,手把手教程,PPT教程一并在资料包里给出;位置如下:
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
正确仿真的结果如下:
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

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

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:文章末尾的V名片。
网盘资料如下:
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持
FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持文章来源地址https://www.toymoban.com/news/detail-470516.html

到了这里,关于FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA实现LVDS视频输出,纯verilog代码驱动,提供2套工程源码和技术支持

    FPGA实现LVDS视频输出,纯verilog代码驱动,提供2套工程源码和技术支持 LVDS协议作为中等速率的差分信号,在笔记本电脑和手机等消费电子领域应用广泛,FPGA实现LVDS视频协议也有广泛应用,一般在军工和医疗领域,LVDS视频相比RGB并行视频传输而言,图像质量和IO数量都有优势

    2024年02月04日
    浏览(59)
  • FPGA实现UDP视频传输,带抓拍和录像功能,纯verilog代码 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月07日
    浏览(55)
  • FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供4套工程源码和技术支持

    FPGA实现HDMI转LVDS视频输出,纯verilog代码驱动,提供工程源码和技术支持 LVDS协议作为中等速率的差分信号,在笔记本电脑和手机等消费电子领域应用广泛,FPGA实现LVDS视频协议也有广泛应用,一般在军工和医疗领域,LVDS视频相比RGB并行视频传输而言,图像质量和IO数量都有优

    2024年03月20日
    浏览(42)
  • 【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解

    大家好,欢迎来到停止重构的频道。 本期我们讨论音视频文件 转编码 ,如将视频H264转H265等。 内容中所提及的 代码都会放在GitHub ,感兴趣的小伙伴可以到GitHub下载。 我们按这样的顺序展开讨论:​ 1、  编码的作用  2、  转编码的工作原理 3、  编解码器安装  4、  示

    2024年02月11日
    浏览(48)
  • 基于GB28181-2022实现web无插件播放H265视频

            目前发布的GB28181-2022增加了对前端设备视频H265编码格式的支持,所以实现国标平台通过浏览器对H265视频流的无插件的解码播放将是未来的趋势。         目前大多的方案都是通过平台端把H265转码为H264,再推送到web前端进行解码播放,这种方式因为需要中间的媒体

    2024年02月06日
    浏览(44)
  • 微信小程序支持h5实现webrtc h264 h265低延迟传输渲染

    微信小程序自成体系,自身也带了很强的rtc音视频能力,但是他捆绑了他自己的服务,开发也相对受限于他的api。基于以前的了解可以采webview的方式内嵌h5网址来实现自定义的webrtc.但实践起来并不轻松,主要是小程序的严格限制,各平台的兼容,不得不使出吃奶的力气来实现

    2024年02月04日
    浏览(35)
  • FPGA纯verilog实现 LZMA 数据压缩,提供工程源码和技术支持

    目录 1、前言 2、我这儿已有的FPGA压缩算法方案 3、FPGA LZMA数据压缩功能和性能 4、FPGA LZMA 数据压缩设计方案 输入输出接口描述 数据处理流程 LZ检索器 数据同步 LZMA 压缩器 为输出LZMA压缩流添加文件头 5、vivado仿真 6、福利:工程代码的获取 说到FPGA的应用,数据压缩算法的硬

    2024年02月03日
    浏览(44)
  • 前端实现H265编码的m3u8视频流播放

    前言 视频监控是智慧城市、智慧园区等WebGIS类系统中最为常见的硬件对接设备,最常用的监控视频流格式为m3u8格式,但是m3u8格式通常都是h.265编码格式的,我搜遍了几乎所有前端视频播放插件,几乎普通的播放器插件都不支持h.265格式的视频编码。本文就带领大家了解H265视

    2024年01月18日
    浏览(50)
  • FPGA纯verilog代码解码CameraLink视频,附带工程源码和技术支持

    CameraLink的详细不必深究,作为FPGA数据采集者而言,我们只需关心他的传输时序和传输协议。 CameraLink相机输出分三种模式: Base模式:称之为基本模式或初级模式,通常配置为一个CameraLink芯片和一根电源线;有1个标准CameraLink接口,对应的是1对时钟差分信号和4对数据差分信

    2024年02月01日
    浏览(34)
  • H265视频硬解

    硬解,使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。目前的主流GPU加速平台:INTEL、AMD、NVIDIA。 一、软编码和硬编码比较 软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。 硬编码:性能高

    2024年02月10日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包