HEVC函数入门(3)——参数命名及帧内预测

本文介绍了HEVC编码中的帧内预测模式,包括参数命名规范、类与变量的命名规则,以及帧内预测的三种模式:DC模式、平面模式和角度预测模式。详细解析了每种模式的实现原理,例如DC模式的像素值计算、平面模式的平均值预测以及角度预测模式的角点计算和加权平均过程。
摘要由CSDN通过智能技术生成

前面看了几个函数,里面参数极其复杂,是不是眼花了,下面将整理一下CJL大神博客的部分内容。
http://blog.csdn.net/hevc_cjl/article/details/8170646
以及今天要看的帧内预测各种模式的实现
http://blog.csdn.net/shaqoneal/article/details/38225189
这两篇博客对原理写的很详细,可以参考下http://blog.csdn.net/linpengbin/article/details/48005413
http://blog.csdn.net/shaqoneal/article/details/41643421
(1)类的命名:
一般来说,一个头文件只包含一个类的定义,文件名即为类名,且该类是属于哪个工程的,它的名字就以该工程的前几个字母开头,如类TAppEncTop,它就是以工程TAppEncoder的前7个字母开头,因此,从该类的名字,就能够看出该类是属于哪个工程的。
(2)变量的命名:
对于类的数据成员来说,一般以’m_’开头,即’member’;对于全局变量来说,一般以’g_’开头,即’global’。
对于一般的变量(包含上述两种变量)来说,有如下命名规则:’p’,该变量是指针类型,即’pointer’,n个’p’则表明该指针为n级指针;’c’,该变量是某个类的对象,即’class’;’i’,该变量是整型,即’int’;’u’,该变量是无符号型,即’unsigned’;’h’,该变量是字符型,这里不用’c’来代表’char’应该是为了避免跟前面的’class’冲突了;’b’,该变量是布尔类型,即’bool’;’d’,该变量是双精度浮点数,即’double’;’f’,该变量是单精度浮点数,即’float’;’a’,该变量是类组,即’array’;’e’,该变量是枚举类型,即’enum’;’r’,该变量是引用类型,等等。值得一提的是,不是每个变量的命名都满足这些规则,具体情况还是要具体分析的。但是,按照这些规则,80%以上的变量都能一眼看出它的特性来。

(3)函数的命名:
一般来说,对于一个类的成员函数来说,如果该函数的访问权限是’protected’,则在其函数名前加上’x’;但是,在我看代码过程中,有些’protected’的成员函数并没按照这个规则来命名,所以,这一条规则仅供参考。能够肯定的是,只要某个函数名字前有个’x’,则该函数一定是某个类的protected成员函数。

说了这么多,举个具体实例来说明下吧:
在工程TLibEncoder的头文件TEncCu.h中,定义了一个类TEncCu,有个数据成员m_ppcBestCU,根据前面的命名规则,它首先是个数据成员,是个二级指针,且是指向一个类的,实际上,它是这么声明的,TComDataCU**,TComDataCU它就是一个类,且该变量被声明为二级指针,据此,符合上述命名规则。
还有一个数据成员这么声明UChar m_uhTotalDepth; 无符号字符型,同样也是符合命名规则的。
在该类中,有这么一个成员函数xCompressCU,以’x’开头命名,在类中被声明为’protected’,符合命名规则。

HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义。其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(INTRA_ANGULAR2~INTRA_ANGULAR34),分别代表了不同的角度。具体的示意图如标准文档的图8-1所示:
这里写图片描述
这三大类的预测方法均有实现的代码。首先看最简单的Intra_DC模式,该模式同角度预测模式实现在同一个函数Void TComPrediction::xPredIntraAng(…)中:

Void TComPrediction::xPredIntraAng(       Int bitDepth,
                                    const Pel* pSrc,     Int srcStride,
                                          Pel* pTrueDst, Int dstStrideTrue,
                                          UInt uiWidth, UInt uiHeight, ChannelType channelType, ChromaFormat format,
                                          UInt dirMode, Bool blkAboveAvailable, Bool blkLeftAvailable
                                  , const Bool bEnableEdgeFilters
                                  )
{
  Int width=Int(uiWidth);
  Int height=Int(uiHeight);

  // Map the mode index to main prediction direction and angle
  assert( dirMode != PLANAR_IDX ); //no planar
  const Bool modeDC        = dirMode==DC_IDX;

  // Do the DC prediction  
  if (modeDC)
  {
    const Pel dcval = predIntraGetPredValDC(pSrc, srcStride, width, height, channelType, format, blkAboveAvailable, blkLeftAvailable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值