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解码器HM源码阅读(一)介绍

HEVC解码器HM源码阅读(一)介绍 之前看HM的编码器,总觉得理解得不够深入,很多地方只是了解大概的处理流程,具体含义没有理解。为了更加深入理解HEVC,现在开始从解码器的角度分析HEVC,说不...
  • NB_vol_1
  • NB_vol_1
  • 2017年05月02日 17:52
  • 961

HEVC解码器HM源码阅读(四)解析参数集

解析视频参数集VPS     得到如果NALU的装的是VPS,那么需要从NALU中把VPS解析出来,VPS包含了全局使用的一些信息,包含Profile、Level、Tier、时域层信息、Tim...
  • NB_vol_1
  • NB_vol_1
  • 2017年05月02日 21:14
  • 724

HEVC之路(1)——HM的运行

1,HM下载 (1) HM不能直接网页下载,因为它是采用svn来管理代码的,因此需要利用svn下载,这里采用TortoiseSVN(软件下载地址为https://tortoisesvn.net/)...
  • u011025888
  • u011025888
  • 2017年12月19日 13:51
  • 144

[视频编码] 从HM 参考模型软件开始说起

从HM最基本的东西到全部
  • starperfection
  • starperfection
  • 2016年01月26日 18:19
  • 2285

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

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

【HEVC学习与研究】31、HM编码器的基本结构

通过解码器代码的研究,已经对HEVC的编解码技术有了一个初步的认识。现在我们就对照着编码器的代码进一步理解HEVC视频编码算法的各个技术细节。 编码器在整个HM解决方案中的工程名为TAppEnc...
  • u012409883
  • u012409883
  • 2014年12月17日 21:13
  • 741

HM编码器代码阅读(2)——框架以及主要流程

编码器的运行方式: encoder -c encoder_lowdelay_main.cfg -c akiyo.cfg 其中encoder就是编码器可执行文件的名字,encoder_lowdel...
  • NB_vol_1
  • NB_vol_1
  • 2016年04月12日 17:12
  • 2096

HM编码器代码阅读(1)——介绍以及相关知识

HM是HEVC(H.265)的开源实现,可以从网上直接下载。 HEVC(H.265)是新一代的视频编解码标准。 本人目前研究的只是编码器部分,而且还是入门阶段!为了提高自己,边学边记,由于理解不够深入...
  • NB_vol_1
  • NB_vol_1
  • 2016年04月12日 16:45
  • 2728

HM简单介绍

北京工业大学 朱维佳 邮箱: sparkjj@emails.bjut.edu.cn(欢迎探讨任何关于编码的问题) 如转发本文章,请注明出处 1. 环境配置 这个文档描述的版本是...
  • backmoring
  • backmoring
  • 2013年07月25日 22:32
  • 2482

【HEVC学习与研究】37、HM编码器的基本结构2:帧内编码部分的代码骨架

第31篇博文大体介绍了
  • shaqoneal
  • shaqoneal
  • 2014年10月09日 17:52
  • 3954
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HEVC官方软件HM源代码简单分析-编码器TAppEncoder
举报原因:
原因补充:

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