HEVC官方软件HM源代码简单分析-编码器TAppEncoder

原创 2015年11月23日 22:46:49

=====================================================

H.264/H.265 官方源代码分析文章:

H.264官方软件JM源代码简单分析-编码器lencod

H.264官方软件JM源代码简单分析-解码器ldecod

HEVC官方软件HM源代码简单分析-编码器TAppEncoder

HEVC官方软件HM源代码简单分析-解码器TAppDecoder

=====================================================


上一篇文章总结了HEVC官方参考软件HM中的视频解码器TAppDecoder的结构,本文继续分析HM中的视频编码器TAppEncoder。


函数调用关系图

HM中的HEVC视频编码器TAppEncoder的函数调用关系图如下所示。


单击查看更清晰的大图


下面解释一下图中关键标记的含义。


函数背景色

函数在图中以方框的形式表现出来。不同的背景色标志了该函数不同的作用:
白色背景的函数:不加区分的普通内部函数。
黄色背景函数:滤波函数(Filter)。用于环路滤波,半像素插值,SSIM/PSNR的计算。
绿色背景的函数:CU编码函数(Encode)。通过对残差的DCT变换、量化等方式对CU进行编码。
紫色背景的函数:熵编码函数(Entropy Coding)。对CU编码后的数据进行CABAC熵编码。
浅蓝色背景函数:码率控制函数(Rate Control)。对码率进行控制的函数。

箭头线
箭头线标志了函数的调用关系:
黑色箭头线:不加区别的调用关系。
黄色箭头线:滤波函数(Filter)之间的调用关系。
绿色箭头线:CU编码函数(Encode)之间的调用关系。
紫色箭头线:熵编码函数(Entropy Coding)之间的调用关系。
 
函数所在的文件

每个函数标识了它所在的文件路径。


下文记录结构图中的几个关键部分。


普通内部函数

普通内部函数指的是TAppEncoder中还没有进行分类的函数。例如:
编码器的main()函数中调用的TAppEncTop类的配置读取函数parseCfg()、编码函数encode()等。
编码器最主要的函数:TEncTop中的encode()、TEncGOP中的compressGOP()、TEncSlice的compressSlice()等。

CU编码函数

CU编码函数通过运动估计、DCT变换、量化等步骤对图像数据进行编码。编码的工作都是在TEncCu类中的compressCtu()中完成的。compressCtu()调用了xCompressCU()完成了CU的编码工作。xCompressCU()本身是一个递归调用的函数,其中的xCheckRDCostInter()完成了分析帧间CU编码代价的工作;其中的xCheckRDCostIntra()则完成了分析帧内CU编码代价的工作。

熵编码函数

熵编码函数使用CABAC的方式对CU编码后的数据进行熵编码。熵编码的工作都是在TEncCu类中的encodeCtu()中完成的。


环路滤波函数

环路滤波函数对重建帧数据进行滤波,去除方块效应和振铃效应。TComLoopFilter类的loopFilterPic()完成了去块效应滤波器的工作; TComSampleAdaptiveOffset类的SAOProcess()完成了去除振铃效应的SAO滤波器的工作。

码率控制函数

码率控制模块函数分布在lencod源代码不同的地方,包括rc_init_seq()、rc_init_GOP()、rc_init_frame()、rc_handle_mb()等。



雷霄骅

leixiaohua1020@126.com

http://blog.csdn.net/leixiaohua1020


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【HEVC学习与研究】42、HEVC帧内编码的原理和实现(下)

4、编码帧内预测模式 大量增加可选择的预测模式可以提供更高的编码效率,同时要求编码预测模式有更加高效的方法降低更多模式带来的负担。与H.264采用一个最可能模式不同的是,对于亮度分量,三个最可能模式用...

HM编码器代码阅读(46)——SAO总结

SAO总结 理论 HEVC/H.265理论知识(7)——环路滤波 代码解读 HM编码器代码阅读(27)——样点自适应补偿SAO(一)SAO介绍以及入...

转.搞定百度图片防盗链

提到可以采用新出的 Data URL Schema ,以不发送referer的形式,绕过百度的referer检验。但这种方式只有FF支持,IE还不支持,所以尚未采用。这些天来SECINN深受百度图 片...

HM编码器代码阅读(35)——帧内预测(二)帧内预测总流程

亮度块的帧内预测 帧内预测的流程 (1)遍历所有的预测模式,得到每种模式下的残差信号,再对残差信号进行Hadamard变换计算SATD值 (2)利用SATD值计算每种预测模式的率失真代价,选取率失...

HM编码器代码阅读(40)——帧内预测的总结

帧内预测的总结 原理 HEVC/H.265理论知识(3)——帧内预测 代码实现 HM编码器代码阅读(34)——帧内预测(一) HM编码器代码阅读(35)——帧...

HEVC学习(三) —— 帧内预测系列之一

今天开始进入实质性内容的讨论,主要是从代码实现的角度比较深入地研究帧内预测算法。由于帧内预测涉及到的函数的数量相对于编解码器复杂部分来说少,但事实上大大小小也牵涉到了十几二十个函数(没具体统计过,只是...

HEVC学习(二) —— HM的整体结构及一些基本概念

在刚开始看HM的时候,对着7个工程,可能有人会感到困惑,该从哪里看起呢?当然了,对于已经有一定代码量积累的人或者之前研究过H.264代码如JM的人来说,从何入手应该不成问题。但我写这篇出来,一方面是自...

一个不错的CSS_FORM在线支持所见即所得的设计工具

http://www.jotform.com/

HEVC学习(一) —— HM的使用

从今天开始,会陆续发表HEVC学习过程中的一些总结,主要目的是与大家一起交流学习,由于水平有限,恳请大家能够不吝赐教。   由于这是第一次写博客,而且学习也是个循序渐进的过程,第一篇文章就简单介绍...

HEVC学习 —— HM的使用

从今天开始,会陆续发表HEVC学习过程中的一些总结,主要目的是与大家一起交流学习,由于水平有限,恳请大家能够不吝赐教。   由于这是第一次写博客,而且学习也是个循序渐进的过程,第一篇文章就简单介绍...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)