Duanxx的HEVC学习(二) HEVC测试代码环境搭建

一 、 HM代码和x265代码简要对比

 

         HEVC的测试代码主要有两个,一个是HEVC官网提供的测试代码HM,另一个是multicoreware提供的x265代码。

         HM代码是HEVC基础测试代码,同时拥有编码器和解码器,但是里面好像暂时并没有并行编码的内容,其整体的编码时间是非常的长的,长的我只能晚上睡觉前开始编码,第二天早上睡醒了才基本编码完成,当然我的i3的笔记本配置太低也是一个结症。但HM代码整体的可读性非常高,并不需要对C++掌握的非常的好就可以阅读。

         x265代码是在HM代码基础上优化而来的,它只有编码器没有解码器,一方面x265是在HM基础上的优化而来的代码,另一方面x265使用了WPP并行程序设计使得编码效率得到了很大的提高,我这种i3的笔记本上,喝一杯茶的功夫就将一个测试视频编码完成。

         一开始,就是感觉相对于HM代码而言,x265的代码灰常的碉堡,所以想直接看x265的代码研究HEVC编码器的实现,结果到处都是坑!x265之所以能这么快,一方面是代码本身优化的很厉害,不少操作都使用了汇编代码,另一方面这货针对Intel CPU做了优化加速,就相当于使用了IPP一样。而且这个代码的可读性比较差,代码优化的已经看不出是在干什么了,还是多线程编程,调试难度大,最坑的是代码基本上是没有注释的,我还傻不啦叽的不停的给这货写注释,最后完全看不懂这代码了的时候,我就只能放弃这货了,转向HM代码。

         不过照实说,x265代码最终还是要看的,毕竟算法上它优化的非常好,有很多值得借鉴的地方,只是因为我现在对HEVC还没有一个了解,所以看着很吃力,个人建议先看HM代码,再看x265的代码。

 

二 、HM代码下载及环境搭建

2.1 HM代码下载

         HM代码的下载是在https://hevc.hhi.fraunhofer.de/下的 SoftwareSources中,在这个页面下,还有很多其他很有用的东西,比如最有用的JCT-VC Documents等,个人建议将这个文档都下下来看看。

         到目前为止HM代码已经到了HM15了。

Duanxx的HEVC学习(二) HEVC测试代码环境搭建_第1张图片

 

2.2 HM代码环境搭建

2.2.1 工程文件说明

         HM\build\中有Vs工程对应的sln,对应VS2010之后的Vs版本,选择HM_vc10.sln就可以了。对应linux下的工程,我也试了一下,不过不喜欢用Eclipse写C++,也就放弃了。

         HM\doc\中有一些文档,和Doxyfile,可以自己下载doxygen这个软件,生成HM代码的API。

         HM\cfg\中有配置文件,其中碗面的encoder_xxxx_xxx.cfg是Profile,可根据个人需要选择profile,个人建议一开始如果编码8bit的视频流,使用encoder_intra_main.cfg即可,在8bit下这个配置和encoder_intra_main10.cfg是兼容的,在10bit视频流下使用encoder_intra_main10.cfg。

         HM\cfg\per-sequence\下是各个标准测试yuv文件的相关配置,一般都是使用BasketballDrill.yuv作为测试视频所以选用BasketballDrill.cfg,不过这个配置中有个错误:FramesToBeEncoded: 500 即要编码的帧数,这里表示的是这个视频一共有多少帧,但这个视频流我测试结果501帧,不是500。我个人建议这个值改小一点,要不然会花很长的时间编码的,我将这个值改成了50帧。

         HM\bin\下存放的是可执行文件,就是编码器和解码器的可执行文件

         HM\source\下毫无疑问存放的是源代码。     

 

2.2.2 工程配置

         我使用的是Vs2012,启动HM_vc10.sln后,将TAppEncoder设置为启动。


         然后按F6,编译整个工程,编译完成后。设置TAppEcoder的工程属性:鼠标选定TAppEncoder,然后按Alt+Enter;或者鼠标选中TAppEncoder,右键,选择Properties。

         在Configuration Properties->Debuging中设置Command Arguments和WorkingDirectory

         将配置用的两个cfg文件encoder_intra_main10.cfgBasketballDrill.cfg考到HM\bin\vc10\x64\Debug下,以及编码用的视频文件BasketballDrill.yuv也考到这个文件夹下。

         如果是x64的系统,可以将Plaform设置成Active(x64)

         确定后,按Ctrl+F5就可以运行HM代码开始编码yuv视频了。

Duanxx的HEVC学习(二) HEVC测试代码环境搭建_第2张图片


三 、x265代码下载及环境搭建

3.1 x265代码下载

         登陆http://x265.org/developers.html就可登陆到x265代码的官网上,在Developers->x265 Source Code下就有下载链接:https://bitbucket.org/multicoreware/x265/wiki/Home

         要下载这个代码,需要先安装一个软件:TortoiseHg,这是一种和git差不多的分布式代码管理软件。

         选择Clone->Clone in SourcceTree就可以下载代码。

Duanxx的HEVC学习(二) HEVC测试代码环境搭建_第3张图片

3.2 x265代码环境搭建

3.2.1 需要提前安装的软件

         在使用x265代码之前,需要下载CMake版本在2.8.8以后,下载YASM版本需要在1.2以后,还需要下载Visual Leak Deector,版本在2.3以后。

         YASM:

这个不需要安装,只需要环境变量
版本必须是1.2.0以后的,且有x86和x64平台的差别

下载后,要么放在C盘windows下,要么在系统环境变量中path为yasm添加搜索路径

 

         VisualLeak Detector

版本在2.3以后,有x86和x64平台差别

         安装过程中会提示添加环境变量,选择为所有用户添加环境变量。

 

         Cmake

         版本需要在2.8.8以后,我用的是2.8.12

 

3.2.2 编译过程

1.       进入build文件夹下,VS2012使用VC11-x86或者VC11-x86_64,

因为我是64位系统,所以我选择的是VC11-x86_64

2.      可以双击bulid-all.bat直接运行,但个人推荐运行make-solutions.bat

运行后会启动Cmake如下,注意画线的两处,如果没有,自行选择好路径

点击configure和generate后,关闭Cmake

Duanxx的HEVC学习(二) HEVC测试代码环境搭建_第4张图片

3.      找到x265.sln即可运行工程

个人建议在打开工程后将cli设置为启动项

3.      设置cli工程的属性:鼠标选定TAppEncoder,然后按Alt+Enter;或者鼠标选中TAppEncoder,右键,选择Properties。

在Configuration Properties->Debugging->CommandArguments中填写配置参数,在Woring Directory中选择Debug目录(可以根据自己的系统选择是否使用Active(x64))

将BasketballDrill_832x480_50.yuv文件考到Debug文件加下,Ctrl+F5运行即可。

我的Command Arguments是:

--input=BasketballDrill_832x480_50.yuv -o basketball.bin--input-res=832x480  --input-depth=8--fps=50 --bitrate=200 -f 50 --max-merge=1 --qp=32 --tu-inter-depth=2

Duanxx的HEVC学习(二) HEVC测试代码环境搭建_第5张图片


你可能感兴趣的:(hm,HEVC,x265)