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

原创 2015年11月23日 13:49:44

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

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

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

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

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

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

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


本文记录HEVC官方参考软件HM的源代码结构。HM相比于JM来说,采用了面向对象的编程方法,因而结构相对更加清晰。HM包含了视频解码器TAppDecoder和视频编码器TAppEncoder。本文记录视频解码器TAppDecoder的结构。


函数调用关系图

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


单击查看更清晰的大图

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


函数背景色

函数在图中以方框的形式表现出来。不同的背景色标志了该函数不同的作用:
白色背景的函数:普通内部函数。
粉红色背景函数:解析函数(Parser)。这些函数用于解析SPS、PPS等信息。
紫色背景的函数:熵解码函数(Entropy Decoding)。这些函数读取码流数据并且进行CABAC熵解码。
绿色背景的函数:解码函数(Decode)。这些函数通过帧内预测、帧间预测、DCT反变换等方法解码CU压缩数据。

黄色背景的函数:环路滤波函数(Loop Filter)。这些函数对解码后的数据进行滤波,去除方块效应和振铃效应。


箭头线
箭头线标志了函数的调用关系:
黑色箭头线:不加区别的调用关系。
粉红色箭头线:解析函数(Parser)之间的调用关系。
紫色箭头线:熵解码函数(Entropy Decoding)之间的调用关系。
绿色箭头线:解码函数(Decode)之间的调用关系。
黄色箭头线:环路滤波函数(Loop Filter)之间的调用关系。

函数所在的文件

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


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

普通内部函数

普通内部函数指的是TAppDecoder中还没有进行分类的函数。例如:
解码器的main()函数中调用的TAppDecTop类相关的create()、parseCfg()、decode()、destroy()等方法。
解码器最主要的解码函数:TDecTop中的decode()、xDecodeSlice();TDecGop中的decompressSlice();TDecSlice中的decompressSlice()等。

解析函数(Parser)

解析函数(Parser)用于解析HEVC码流中的一些信息(例如SPS、PPS等)。在TDecTop的decode()中都调用这些解析函数完成了解析。下面举几个解析函数的例子。
xDecodeVPS():解析VPS;
xDecodeSPS():解析SPS;
xDecodePPS():解析PPS;

熵解码函数(Entropy Decoding)

熵解码函数(Entropy Decoding)读取码流数据并且进行CABAC熵解码。熵解码工作是在TDecCu的decodeCtu ()函数中完成的。其中递归调用了xDecodeCU()完成了具体的熵解码工作。

解码函数(Decode)

解码函数(Decode)通过帧内预测、帧间预测等方法解码CU压缩数据。解码工作是在TDecCu的decompressCtu()函数中完成的。其中递归调用了xDecompressCU()完成了具体的解码工作。
xDecompressCU()调用xReconIntraQT()完成帧内预测CU的解码;xReconInter()完成帧间预测CU的解码。
xReconIntraQT()调用xIntraRecQT(),而xIntraRecQT()调用xIntraRecBlk()。xIntraRecBlk()调用了TComPrediction类的predIntraAng()完成了帧内预测的工作;调用了TComTrQuant类的invTransformNxN()完成了残差数据DCT反变换的工作。
xReconInter()调用TComPrediction的motionCompensation()完成了运动补偿的工作;调用xDecodeInterTexture()完成了残差数据的DCT反变换工作。motionCompensation()调用了xPredInterUni()完成了单向预测的运动补偿;而调用xPredInterBi()完成了双向预测的运动补偿。其中xPredInterUni()调用xPredInterBlk()完成一个分量块的运动补偿,而xPredInterBlk()调用了TComInterpolationFilter类的filterHor()和filterVer()完成了亚像素的插值工作。
xDecodeInterTexture()调用TComTrQuant类的invRecurTransformNxN(),而invRecurTransformNxN()调用了invTransformNxN()。invTransformNxN()调用xDeQuant()完成了反量化的工作,调用了xIT()完成了DCT反变换的工作。xIT()调用了xITrMxN()完成MxN维的DCT反变换,而xITrMxN()根据DCT矩阵维度的不同,分别调用了partialButterflyInverse4()、partialButterflyInverse8()、partialButterflyInverse16()、partialButterflyInverse32()几种蝶形算法。

环路滤波函数(Loop Filter)

环路滤波函数(Loop Filter)对解码后的数据进行滤波,去除方块效应和振铃效应。去块效应滤波是在TDecTop 的executeLoopFilters()中完成的。executeLoopFilters()调用了TDecGop 的filterPicture()。filterPicture()调用了TComLoopFilter类的loopFilterPic()完成了去块效应滤波器的工作;调用TComSampleAdaptiveOffset类的SAOProcess()完成了去除振铃效应的SAO滤波器的工作。




雷霄骅
leixiaohua1020@126.com
http://blog.csdn.net/leixiaohua1020



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

相关文章推荐

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

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

HEVC代码学习0:HM使用方法

HM初步学习:HM使用方法

HEVC之1 HM的使用

HEVC之1:HM的使用 此文章参考了多位大神的文章,自己也跟着实践了。 HEVC的官方测试程序为HM。 HM的代码见:https://hevc.hhi.fraunhofer.de/svn/svn_H...

HEVC学习 —— HM的使用

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

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

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

HM-16.0的解码过程:将编码后的*.bin文件解码

文章描写了HM16.0将HEVC格式的码流(*.bin)文件解码的过程

HM编码器代码阅读(3)——一些比较容易混淆的类和结构

TcomPic 是图片类,它包含TComPicSym(图像符号类)和TComPicYuv(yuv数据类:包括原始数据,预测数据、惨差数据) TvideoIOYuv 是用来读取yuv文件的类,读取出来之...

HEVC/H.265参考代码跟踪

这篇博客写得不错,觉得对我对大家刚开始学习时会有帮助,于是转载之。原文地址:http://blog.csdn.net/feixiang_john/article/details/7876227#com...

HEVC代码解读

学了一段时间的hevc,理论基本了解了,开始读代码,看看能不能搞出点什么名头吧。...
  • Villa_7
  • Villa_7
  • 2017年04月10日 12:07
  • 561

ffmpeg的HEVC解码源代码分析(一)整体框架

通过调试ffmpeg对HEVC码流(格式为es流,就是rawvideo)的解码过程,分析ffmpeg的HEVC解码过程和实现方法。 首先要说的是调试所用的工程的config为:./configure ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HEVC官方软件HM源代码简单分析-解码器TAppDecoder
举报原因:
原因补充:

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