本文介绍 由复旦大学专用集成电路与系统国家重点实验室(State Key Lab of ASIC & System,Fudan University)视频图像处理实验室(VIP Lab)范益波教授研究团队开发完成H.264 视频编码IP RTL 开源工程代码。本文内容来自于该项目的官方网站:openasic.org。了解更多信息,请访问官网。
项目官方网站:
http://www.openasic.org/
该项目介绍网页链接:
http://www.openasic.org/topic/80/开源h-264-video-encoder-ip-core-v2-0-发布
开源H.264 硬件视频编码器IP核
H.264 Video Encoder IP Core 是开源的H.264硬件视频编码器,实现了H.264(AVC)的大部分功能。它由复旦大学专用集成电路与系统国家重点实验室(State Key Lab of ASIC & System,Fudan University)视频图像处理实验室(VIP Lab)范益波教授研究团队开发完成,并开放源代码。任何组织个人可以无偿使用上述代码用于研究和生产目的,VIP Lab将会持续更新并维护编码器的软硬件开发。
基本FEATURE
- AVC/H.264 Baseline Profile
- YUV 4:2:0
- Bitdepth 8
- FHD@60fps
- GOP:I/P
- MB: 16x16
- 1/4 Sub-pixel interpolation
- Search range: 16
- All Inter Partition mode
- All 9 Intra prediction mode
- CAVLC
- Deblocking Filter
本次更新内容
- H265ENC V2.0 功能更新内容
- h264enc v2.0 a.修复了1.0版本中存在的bug
- INTRA – Intra mode decision & partition decision a.调整C model的预测优先级从而匹配硬件代码
- IME – Integer motion estimation a.修改生成mv_cost的方式,提高预测准确性
- FME– Fractional motion estimation a.修复在fmv计算和亮度预测块生成上的bug b.重新实现了1/2插值的逻辑
- TQ - Transformation & Quantization a.增加QPc,使之符合标准 b.增加量化和idct模块的位宽,防止发生溢出
- CAVLC - Entropy coding a.修改状态机从而正确编码色度分量 b.修复从TQ模块读取残差时的bug
- FETCH a.修复取预测像素时的一些bug b.修改模块内对RAM读逻辑
- 完成测试项目 我们测试了416x240到1920x1080的多个序列,确认在不同分辨率下以及在不同QP下编码器能够正常工作。测试中发现1.0版本中各个模块的已知bug均已修复。 测试结果如下图所示: Intra test:CAVLC,10 frames
- Inter test:CAVLC,DB on,10 frames
- 关于H.265硬件IP
复旦大学VIP实验室专注于从事下一代视频、图像、AI硬件处理器研究,包括超高清视频、图像编解码器(CODEC IP),图像处理器(ISP IP),神经网络处理器(NN IP)等。 实验室网站 http://viplab.fudan.edu.cn
代码下载
http://openasic.org/topic/79/h264-video-encoder-rtl-ip-core-version-2-0
关于H.265硬件IP
很多人搞不清楚本项目和x265等软件开源H.265编码器区别 简单的讲,x265是运行在CPU、DSP平台上,它是个软件,而本次开源项目是用于制作芯片、可运行于FPGA平台上的硬件。本项目采用Verilog HDL语言编写,是可综合的RTL代码,代码表述的是电路,是硬件。
开源的软件H.265编码器很多,最著名的是x265,而开源的硬件H.265编码器没有。据我孤陋寡闻,这个项目是第一个。大概是硬件开发人员太少了的缘故吧,一般人不会接触芯片开发。
关于本次开源
开源就是好玩,让更多的人有个更好玩的玩具而已,并且是免费的。
随着FPGA的普及,越来越多高性能应用需要用FPGA这种硬件平台,而不是CPU/DSP软件平台,对于视频编码这种需要极大计算能力的应用,软件是无法实时的,大家平时使用的手机芯片内部都有专门的硬件视频编解码器。没有硬件编码支持,估计现在手机还停留在只能拍照不能拍视频的阶段吧。
另外,看过代码的同学应该好奇为什么代码内部最后注释更新的都是2015年? 其实,这个项目2015年就已经完成,相关FPGA Demo也于1年多前就已经完成。 为什么迟迟不发,到现在才发? 一方面本人一直觉得代码不够好,架构还不完善,远达不到完美,过不了自己这关,觉得拿不出手,另一方面也欠缺跟其他的商业版本对比(我们也没用过商业版本,买不起),指标太差,岂不自取其辱,最后还有点拖延症因素,拖一天是一天。 那为什么现在发出来了? 直白点是拖不下去了,事情总得有个交代。算是对我本人从学术角度从事视频编码芯片研究这么多年的一个交代吧,搞了这么些年,总得有点东西拿出来反馈社会吧,碰巧今年是我的自然基金结题年,拿了纳税人的钱研究了这么些年,不出点东西怪不好意思,哪怕东西不够好 。况且确实目前的FPGA还不够好玩,大大小小的IP很多都是收费的,不像软件领域开源项目多如牛毛,硬件开源的项目确实很少,并且大多欠缺维护。
代码
开源代码只包含了核心的H.265编码器代码,懂得同学应该很容易集成总线模块和SoC系统。本实验室开发的Demo系统受限于采用了一些第三方IP,不能开源SoC总线集成的代码。相信能玩转FPGA、芯片设计的同学,应该不是问题啦。
为什么不托管到Github 首先,Github是一个软件开发者常用的分享代码网站,本项目是一个硬件IP项目,放到Github上意义不大(放个链接告诉大家有这么个东西就行)。其次,因为本项目开发团队都在一个房间里,没有外援参与,同步代码吼一声就行,如果后期有外援加入,可以考虑用一个更好的方式分享代码。
后记
这个项目本实验室一直有同学在做,东西虽然拿不出手,但本人不敢懈怠,还在努力改进中,将作为一个长期维护项目,逐步更新功能、架构。包括BitDepth扩展、集成MCU进行编码控制、更好的流水线架构、更准确的预测算法、B帧等。