开源项目:X265

1 Windows下编译X265

具体的编译环境: Windows 7(64bit) + Visual Stdio 2010 + Cmake 3.4.3 + vsyasm-1.3.0-win64

a、从X265官方网站获取源代码,然后使用Cmake编译生成VS2010工程。

image

代码克隆命令中的hg表示Mercurial的缩写(水银在元素周期表中符号),在Windows环境下安装TortoiseHg工具获取源代码。

在X265源代码的build路径下README.txt具体说明X265编译需要的环境以及编译过程的详细说明。

b、下载Cmake,并配置环境变量Path

c、下载yasm,并将yasm.exe可执行文件复制到C:WindowsSysWOW64(64bit)或者C:WindowsSystem32(32bit)路径下

d、运行${x265}uildvc10-x86_64路径下build-all.bat启动cmake配置界面

image

x265的cmake编译参数含义

e、点击Configure,若没有显示Found Yasm 1.3.0 to build assembly primitives,则表示YASM未配置正确;然后点击Generate,输出界面中显示Generate Done表示完成;最后,关闭cmake窗口,在DOS窗口中,看到编译过程的输出。

image

f、使用VS2010打开${x265}uildvc10-x86_64路径下的x265.sln,点击生成解决方案,提示如下错误信息,错误原因是使用汇编器yasm对asm源代码文件进行汇编后生成的obj文件与链接时的文件名不一致:pixel-a.asm文件生成的文件名不是pixel-a.asm.obj,而是pixel-a.obj;其中所有obj文件位于${x265}uildvc10-x86_64下。

image

image

最简单的解决方案就是对上述全部的obj文件重命名,修改成*.asm.obj,然后重新生成解决方案。

g、获取X265的版本以及编译平台和指令集信息等

image

h、在Release路径下,执行x265.exe --input E:videoxjg_352x288.yuv  --fps 30 --input-res 352x288 --output out_2.h265 --bitrate 512对yuv文件进行编码,可以使用Elecard HEVC Player Sample对编码后的文件进行解码播放。

2 常用名词解释

本文以下部分为翻译G. J. Sullivan, J.-R. Ohm, W.-J. Han, and T. Wiegand, "Overview of the High Efficiency Video Coding (HEVC) Standard", IEEE Trans. Circuits and Systems for Video Technology, Vol. 22, No. 12, pp. 1649-1668, Dec. 2012.与CU、PU、TU相关所得,因本人水平有限,如翻译有误,敬请指正。

(1)   编码树单元(CTU)和编码树块(CTB)结构:

在之前的标准中,编码层的核心是宏块,一个宏块包含一个16×16的亮度块,以及对于常用的4:2:0采样格式来说还包含两个8×8的色度块;而在HEVC中类似的结构为编码树单元(CTU),其尺寸由编码器进行指定且可以比传统的宏块大。一个CTU包含一个亮度CTB和两个对应的色度CTB及句法元素。一个L×L的亮度CTB的L可以设置为16,32或者64。一般来说,L越大,可以获得越好的压缩性能。HEVC支持使用树结构和类四叉树的标志来将CTB划分成更小的块。

(2)   编码单元(CU)和编码块(CB):

CTU的四叉树句法指定了它所属的亮度和色度CB的尺寸和位置。四叉树的根与CTU相关联。因此,亮度CB的最大尺寸为其所属的亮度CTB的尺寸。对于一个CTU来说,其亮度CB和色度CB的划分标志都是使用的同一个。一个亮度CB通常和两个色度CB及它们相关的句法共同组成一个编码单元(CU)。一个CTB可能只包含一个CU,也可能被划分成多个CU,每个CU包含着与之相关联的预测单元(PU)和变换单元(TU)。

(3)   预测单元(PU)和预测块(PB):

决定一个图像区域是以帧间还是帧内方式进行预测是在CU层进行的。一个PU划分结构的根在CU层。根据基本的预测类型,亮度CB和色度CB可以继续进行划分并利用其它的亮度PB和色度PB进行预测。HEVC支持多种PB尺寸,最大为64×64到最小4×4。

(4)   变换单元(TU)和变换块(TB):

预测残差以块变换的方式进行编码。一个变换单元树结构的根在CU层。亮度CB残差的尺寸可能与亮度变换块TB的尺寸相等,也可能会被划分成更小的亮度TB。色度CB的情况也是一样的。定义了与离散余弦变换(DCT)类似的整数变换的基本函数提供给尺寸为4×4,8×8,16×16,32×32的TB。对于尺寸为4×4且残差由帧内预测得到的TB来说,一种以离散正弦变换(DST)为基础的整数变换可供采用。

上述内容转载链接http://blog.csdn.net/hevc_cjl/article/details/9352027

参考资料

X265各个平台官方编译指南

X265官方说明文档

压制记-失败的x265编译

Build with assembly enabled fails with Visual Studio (2010 tested) due to missing .asm in file names

Elecard HEVC Player Sample播放器

x265-1.8版本代码解释系列博文

原文地址:https://www.cnblogs.com/zhouLee/p/5207347.html