H.265/HEVC中比较耗时的模块介绍(与H.264/AVC对比)

Intraprediction(帧内预测):

预测方向拓展到33个,另外加上一个DC和一个planar,一共35中预测模式,使得预测更加精细,但是为了控制编码复杂度,所以对4x4和64x64的尺寸的预测模式进行了限制。下图对比了HEVC和AVC的Intra预测模式:

INTERPREDICTION(帧间预测):

             相对于AVC,HEVC进行了三个方面的改进

            a.广义B帧,对传统的P帧使用B帧的双向预测模式

            b.运动融合,结合了传统的skip mode和direct mode

           c.自适应运动矢量预测技术,即同时使用时域和空域进行MV的预测,相对于AVC来说增加了时域的预测,有利于去除时间域的相关性

Transformation(变换)

Transformation的一些改进在上一篇文章中有提及,不再重复

Quantization(量化)

        基本同AVC

loop filtering

     在原有的deblock filter的基础上增加SAO,ALF模块,不过在HM8.0中ALF已经去掉

Entropy Coding

    包含两种熵编码的方式,CAVLC和SBAC,SBAC是CABAC的个改进,是并行的CABAC算法,基于语法元素进行熵编码,在低复杂度的情况下使用CAVLC,在高效的编码中使用SBAC进行熵编码

后面的文章将对HEVC的各个模块所使用的Coding tools进行详细的分析,包括对编码器效率的影响,快速算法,SIMD优化等。



由于HEVC编码结构的基础CU,TU的是基于四叉树的划分,所以整个编码框架是一个递归的结构,编码器的优化包括两个方面
    1.预测和变换的快速模式选择
    2.关键瓶颈算法的优化
第一条预测和变换的快速模式选择,我们讲在后面的文章中进行讨论,这篇文章我们先讨论一下找出HEVC编码框架中最耗时的部分。
    为了找到编码框架中最耗时的算法,我们把编码的结构配置到最简单,即CU和TU的层数都为1,不做递归的划分,只做Intra的编码,配置如下:
#======== Unit definition ================
MaxCUWidth                    : 16          # Maximum coding unit width in pixel
MaxCUHeight                   : 16          # Maximum coding unit height in pixel
MaxPartitionDepth             : 1           # Maximum coding unit depth
QuadtreeTULog2MaxSize         : 4           # Log2 of maximum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTULog2MinSize         : 3           # Log2 of minimum transform size for
                                            # quadtree-based TU coding (2...6)
QuadtreeTUMaxDepthInter       : 1
QuadtreeTUMaxDepthIntra       : 1


CU的大小为16x16,TU的大小为8x8,开启VS2010的性能分析工具,可以找到最耗时的几个模块
1.RDOQ      量化的率失真优化 15%以上
2.HAD       harmand编码的SAD 20%
3.transform 
4.quant  
其中RDOQ不是必须的模块,但是测试发现RDOQ对编码的效果有很大的提升,在开启RDOQ的情况下,同等PNSR情况下码率会降低5%左右。
还好这几个模块都可以很好的用SIMD来进行汇编优化,由此可见标准组织设计的巧妙。这些模块的具体算法,后面将会有详尽的论述。


下面整理出HEVC中需要汇编优化的一些关键函数,其中HAD是比较简单,但是占CPU比重非常高的函数,从此入手

TComPrediction::predIntraLumaAng

TComRdCost::calcHAD, 
TEncSearch::xIntraCodingLumaBlk
TEncSearch::xIntraCodingChromaBlk
TComTrQuant::transformNxN
TComTrQuant::invtransformNxN
TComTrQuant::xDeQuant
TComTrQuant::xIT
TComRdCost::getDistPart
TComRdCost::xGetSSE32
TEncSearch::xGetIntraBitsQT
TEncSearch::xEncCoeffQT
Void TEncCu::xCheckRDCostMerge2Nx2N
TComPrediction::motionCompensation
Void TEncSearch::encodeResAndCalcRdInterCU
TComPrediction::xPredInterLumaBlk
TComRdCost::getDistPart
TComRdCost::xGetSAD64 // TComRdCost::init()
FpDistFunc DistFunc;
TEncSearch::xEstimateResidualQT
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值