先上编码框图:
这个框图是基于HM5.0编码器的,整个框架和H264的编码框图基本差不多,首先我们来讨论一下框图上没有表现出来,但是在HEVC中又非常明显的一个变化。
1.编码分割的变化
众所周知,在H264中,我们编码的最小单元是宏块,整个H264的编码框图都是基于宏块的,但这个概念在HEVC中发生了本质的变化,在HEVC中我们使用CU(编码单元),PU(预测单元),TU(变换单元)来描述整个HEVC的编码过程。
为了提高高分辨率的视频的编码效率,HEVC采用了基于大尺寸的四叉树编码结构。
CU:采用四叉树的分割结构,CU的尺寸变化范围从8x8(SCU) 至64x64(LCU),编码单元的尺寸必须为2Nx2N的正方形,其中N为2为底的幂,具体如图2所示
PU:HEVC中使用PU来实现当前CU的预测,PU的尺寸不能超过其所属的CU,PU的划分方式有两类
a. 2Nx2N,NxN,Nx2N,2NxN如图三a所示
b.64x64的CU支持AMP(不对称分割),主要为了适用于CU中纹理偏差比较大的情况,增加预测的精准度,如图三b所示
TU:同样采用四叉树的分割结构,所支持的尺寸从4x4至32x32,相对于h264增加了16x16和32x32两种大尺寸的变换。和不对称的PU结构相对应,在HM4.0模型中也采用了相应的矩形四叉树的TU结构,一个CU的TU划分方式如下图所示:
结合框图,我们来描述一下各个模块的改进
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优化等。