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. C语言基础学习

    汇编语言又叫符号语言 出来机器语言和汇编语言外其他语言必须经过翻译(编译,和解释行)才可以执行 .c --> 编译(翻译成二进制代码 .obj) 链接 把目标程序和库函数以及其他目标程序链接起来 ...

  2. 获取js提交数据

    无论是ajax(以XMLHttpRequest方式传输)还是表单的Get或Post方式提交(以HTTP方式传输),在asp.net中,get都是通过Request.QueryString[" ...

  3. vs2015-Azure Mobile Service

    /App_Data /App_Start/ WebApiConfig.cs using System; using System.Collections.Generic; using System.C ...

  4. 关于this指向思考

    事情起因为<js函数式编程指南>里面看到这段话: 上例DB对象中的save方法作为参数传入到fs的readFile,按道理this指向DB,为啥作者的意思是存在this指针可能会指向其他地 ...

  5. javascript的关于刷新页面给出提示框的代码

    // 页面刷新事件 ,或者关闭事件的3中方法!测试都可以!参考官方文档: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHan ...

  6. Delphi ServerSocket,ClientSocket示例

    Delphi ServerSocket,ClientSocket示例 2008-05-09 16:20 Delphi TServerSocket,TClientSocket实现传送文件代码 1.建立两 ...

  7. Gradle多渠道打包[umeng]

    前言 国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App! 正文 Umen ...

  8. [SQL]SQL语言入门级教材_SQL语法参考手册(三)

    SQL 语法参考手册 DB2 提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化.既易学又易懂的语法. 此语言几乎是每个资料库系统都必须提供 ...

  9. 9.链式A+B

    题目描述 有两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表的首部.编写函数对这两个整数求和,并用链表形式返回结果. 给定两个链表ListNode* A,ListN ...

  10. 为textarea增加maxlength属性(转)

    如果只是單純地想限制 textarea 中的字數,不想寫太多的話,可用:   <textarea onkeyup="this.value = this.value.slice(0, 8 ...