欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

H264---H.264/AVC 的分层结构与画面划分

程序员文章站 2022-07-06 22:53:29
...

可以参考毕厚杰的《新一代视频压缩编码标准》

H.264的分层结构和画面划分是和MPEG-2、MPEG-1不同的地方,也是预测图块可以小到4x4像素的基础

1、H.264/AVC(数据处理流程)的分层结构

(1)视像编码层(Video Coding Layer, 简称VCL),用于有效的表达视像内容,主要负责数据编码。
(2)网络抽象层(Network Abstraction Layer,简称NAL),用于按照一定格式,对视像编码层输出的数据进行打包和封装,并提供包头(header)等信息,以在不同速率的网络上传输或进行存储。
这两个层次,完成了从RGB/YUV像素数据输入,到编码并输出适应不同速率网络的H264码流的过程。
H264---H.264/AVC 的分层结构与画面划分

2、H.264/AVC画面划分

与MPEG-2和MPEG-1不同的是,H.264/AVC把一帧画面当做一片(或若干)像片(slice)
H264---H.264/AVC 的分层结构与画面划分
没有使用FMO的标准的H.264像片

在MPEG-2和MPEG-1中也有类似的将一帧拆分为多个像片(每个像片16行)
但区别在于FMO

FMO(Flexible Macroblock Ordering,灵活宏块次序)

要详细的了解FMO,还得从图像的扫描方式说起。我们都知道,图像扫描的顺序,是从左上角,一行行扫到右下角。而一帧图片由单个或多个像片组成,每个像片(slice)包含了一系列的宏块(MB),这些宏块的处理顺序,和扫描顺序一致,也即像片中的所有MB,均按照光栅扫描的次序被编码。故解码时,需要先接收到所有的片,并按照扫描的顺序排好后,再解码。这样一来,解码端是很受限制的

而当使用了任意像片次序(Arbitrary slice ordering,ASO)之后,就能够以数据接收的顺序进行解码。

而FMO呢,则是建立在ASO之上,所以它不仅有任意像片次序的功能,还在这个基础上,增加了像片分组的功能。而像片分组这个功能,不仅是FMO,也是H.264的一大重点。

那什么是像片分组(简称:片组)呢?不同片组有各自的宏块扫描方式

片组,其实就是使用某一规则,将一帧画面中的某些宏块划分成一个组,也即片组。

1、不使用FMO:帧包含一个”片组“,一个片组包含一个或多个“像片”,“像片”由宏块组成
			//近似:帧由片组成    默认只有一个”片组“   即上图的标准H264像片
2、使用FMO:帧包含若干”片组“,一个片组包含一个或多个“像片”,“像片”由宏块组成

当使用FMO时,图像根据不同宏块需要的扫描方式的不同,划分成多个片组,这样一来,不同片组的扫描方向和顺序互不影响。

H.264规定了6种典型的分组模式,也即宏块到片组的映射规则,这几种模式使用 slice_group_map_type 来指定,数值分别为0~5,如果设置为6则需要自定义映射规则。

下面就是FMO规定的几种分组模式:
类型0 为不使用FMO时的标准的H.264像片,而Type 1 至Type 5依次对应规则1 至 规则5。
H264---H.264/AVC 的分层结构与画面划分
H264---H.264/AVC 的分层结构与画面划分

从规则1到规则5,在*上有几张彩图:
H264---H.264/AVC 的分层结构与画面划分

相关标签: H264