HEVC的并行解码语法和条带结构Slice和Tile

本文内容转载自:http://blog.sina.com.cn/s/blog_520811730101ij6p.html
并部分整理自:http://blog.csdn.net/lin453701006/article/details/52748678
和http://blog.sina.com.cn/s/blog_77d329940102v6ly.html

首先是Slice和Tile这两个我一直弄不清楚的概念
1.Slice
一幅图像可以被划分为一个或多个片或称为条带(Slice),每个片的数据编码都是独立的。
如下图,一幅图像被划分为N个Slice,Slice成条带形。在编码时,每一个Slice中的CTU按光栅扫描顺序进行编码。
HEVC的并行解码语法和条带结构Slice和Tile_第1张图片
Slice头信息无法通过前一个Slice的头信息推断得到,这就要求Slice不能跨过它的边界来进行帧内或帧间预测,但环路滤波器可以跨越Slice进行滤波。使用Slice的主要目的是当数据丢失后能再次保证解码同步。(个人理解:如果Slice1的信息丢失,不会影响到整个图像,编码端读取到Slice2的头信息后,就可以重新同步)
这里加入两个概念方便理解接下来的内容:参考图像集合和参考图像表
图序计数(picture order count,POC)用以标识解码完成作为参考的图像。这些图像组成参考图像集(reference picture set,RPS)。解码图像缓存中保存两个参考图像表list 0和list 1,,单向预测时,选取二者之一作为参考,双向预测时,两个list中各选择一个作为参考。
每个slice可携带的最大比特数通常受限,因此根据视频场景的运动程度,slice所包含的的CTU数量可能有很大不同。
根据编码类型,Slice可以分为:
(1)I Slice:该Slice中所有CU的编码过程都使用帧内预测。
(2)P Slice:在I Slice的基础上,该Slice中的CU还可以使用帧间预测,每个预测块(PB)使用至多一个运动补偿预测信息。P Slice只使用图像参考列表list0。
(3)B Slice:在P Slice的基础上,B Slice中的CU也可以使用帧间预测,但是每个PB可以使用至多两个运动补偿预测信息。B Slice可以使用图像参考列表list 0和list 1。
这里有个问题:Slice和IPB帧的关系,是不是I帧只有I Slice P帧只有P Slice B帧只有B Slice?:谢谢慢慢积累博客博主岳麓吹雪的解答:I帧里面只能有I slice P帧里面可以有I、P slice B帧里面可以有I、B、P slice
一个独立的Slice可以进一步划分为若干个条带片段Slice segment(SS),包括一个独立SS和若干个依赖SS。
如图Slice以独立SS作为开始,一个SS包含整数个CTU(至少一个)。预测过程不可以跨越Slice边界,但是可以跨越依赖SS边界,一个Slice中的SS之间可以相互参考。(注意此处SS不是Slice啊,是它的一个片段)
HEVC的并行解码语法和条带结构Slice和Tile_第2张图片

2.Tile
在HEVC中一幅图像可以划分为若干个Tile(这是相比AVC的优化改进),即从从水平和垂直方向将图像分割为若干个矩形区域,把这些矩形区域称为Tile。
下图是一种划分的示例,划分的Tile并不要求均匀分布,整幅图像被划分为9个Tile,每个Tile都是矩形。通常每个Tile包含的CTU数据近似相等。
HEVC的并行解码语法和条带结构Slice和Tile_第3张图片
每个Tile包含整数个CTU,其可以独立编码,在编码时,每一个Tile包含的CTU按照扫描顺序进行编码。划分Tile的主要目的是增强并行处理能力而不引入新的错误扩散,(另外个人理解引入Tile可以对视频进行多分辨率编码)。
3、Slice与Tile的关系
一幅图像可以被划分为若干个Slice,也可以划分为若干个Tile,两者划分的目的都是为了进行独立编码。某些Slice中可以包含多个Tile,同样某些Tile中也可以包含多个Slice。Tile包含的CTU个数和Slice中的CTU个数互不影响。

不同点:
划分方式:Tile为矩形,Slice为条带形。
组成结构:Slice由一系列的SS组成,一个SS由一系列的CTU组成。而Tile直接由一系列CTU组成。

Slice/SS和Tile要遵循的一些基本原则,每个Slice/SS和Tile之间至少满足以下两个条件之一:
(1)一个Slice/SS中的所有CTU属于同一个Tile。
例如下图中一幅图像的每一个Slice的所有CTU都属于同一个Tile。
HEVC的并行解码语法和条带结构Slice和Tile_第4张图片
(2)一个Tile中所有CTU属于同一个Slice/SS。
如下图,一幅图像在垂直方向被划分为三个Tile,这三个Tile中各自的所有CTU都属于同一个Slice。
HEVC的并行解码语法和条带结构Slice和Tile_第5张图片

HEVC引入了三种新技术来增强并行处理能力和条带结构的封装性。
(1)Tiles:将图像分割为矩形区域的选项。其主要目的增强并行处理性能而非容错性。Tiles是图像中共享头信息编码但是可以独立解码的区域,并可在空间域作为图像的随机接入点。通常,每一个tile中包含的CTU的数目是接近于相等的。Tile提供了一种简单的并行处理模式,不需要复杂的线程同步。
(2)波前并行处理:该模式中,条带被分割成CTU的行。第一行按正常处理,第二行在第一行两个CTU完成后开始处理,第三行在第二行的两个CTU处理完成后开始处理,以此类推。通常该方法的压缩性能高于tiles。
(3)依赖性条带分割:允许依赖于某一特定波前入口点或者tile的数据在一个独立的NAL单元中携带传输。只有在其他条带的部分数据解码完成后,才能解码一个依赖性条带的波前入口点。(每个NAL 单元包括:一组对应于视频编码数据的 NAL 头信息和一个原始字节序列负荷(RBSP)。 头信息中包含着一个可否丢弃的指示 标记,标识着该NAL单元的丢弃能否引起错误扩散,一般,如果NAL单元中的信息不用于构建参考图像,则认为可以将其丢弃;最后包含的是NAL单元的类型信息,暗示着其内含有效载荷的内容。 送到解码器端的NAL单元必须遵守严格的顺序,如果应用程序接收到的NAL单元处于乱序,则必须提供一种恢复其正确顺序的方法。)

你可能感兴趣的:(HEVC,HEVC函数及应用入门)