1 Windows下编译X265

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

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

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

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

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

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

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

x265的cmake编译参数含义

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

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

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

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

h、在Release路径下,执行x265.exe --input E:\video\bxjg_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版本代码解释系列博文

开源项目:X265的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  4. iOS开源项目周报0105

    由OpenDigg 出品的iOS开源项目周报第四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. He ...

  5. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  10. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

随机推荐

  1. 一.OSI与TCP

    一. TCP/IP的由来 OSI参考模型由来 计算机网络产生的最初阶段,每个计算机厂商都实现了自己的一套计算机网络体系结构;异构的网络之间无法进行通信.因此,ISO委员会推出了一种用于开放系统互联的网 ...

  2. JVM 类型的生命周期学习

    Java虚拟机通过装载.连接和初始化一个JAVA类型,使该类型可以被正在运行的JAVA程序所使用,其中,装载就是把二进制形式的JAVA类型读入JAVA虚拟机中:而连接就是把这种读入虚拟机的二进制形式的 ...

  3. DBA_Oracle海量数据处理分析(方法论)

    2014-12-18 Created By BaoXinjian

  4. BIP_开发案例09_结合JavaCP通过BIP API输出报表dataprocess / rtfprocess / foprocess(案例)

    20150814 Created By BaoXinjian

  5. jQuery-ajax: 取消关注|关注

    ylbtech-jQuery-ajax: 取消关注|关注 1.A,jQuery-效果图返回顶部   1.B,jQuery-Source Code(源代码)返回顶部 <script src=&qu ...

  6. 30天轻松学习javaweb_https协议的密码学

    https通过非对称加密实现数据安全1.CA机构提供数字证书,其中数字证书包含公钥.2.浏览器自带功能验证数字证书是否是CA机构颁发的.3.根据数字证书包含的公钥对表单数据进行加密.4.公钥提供方再根 ...

  7. 拥抱高效、拥抱 Bugtags 之来自用户的声音(四)

    小编按:这是一篇 Bugtags 用户来稿,经过一段时间的密集使用,他已然觉得 Bugtags 是 App 开发者的好帮手,感谢解铃 App - 楚琪同学对 Bugtags 的信赖和支持.小编在这里诚 ...

  8. jsLint配置参数解释

    转自: http://www.cnblogs.com/elementstorm/archive/2013/04/10/3012679.htmlanon :true //匿名函数声明中function关 ...

  9. Nginx 配置指令location 匹配符优先级和安全问题【转】

    Nginx配置指令location匹配符优先级和安全问题 使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";&q ...

  10. PHP 连接 MSSQL

    1 设置 2 php 代码: <?php header('Content-Type:text/html; charset=GBK'); define('DB_HOST','localhost') ...