对H264的FMO功能研究 视频标准 视频解码 赤兔英语网

2009-08-26  sunnymov

对H264的FMO功能研究

FMO功能的研究(一)

来自:http://lottoyou.blog.hexun.com/10234914_d.html

 

FMO(flexible Macroblock Order)意即灵活宏块顺序,应用在baseline profileextended profile.
FMO
是对Slice而言,Slice是一个独立的预测编码单元,假如你愿意,还可以作为一个独立传输单元
,一个Slice的宏块不能采用另一个Slice的宏块预测,当一个Slice出现问题,另一个Slice还可以独立解码,这样子就不会导致误差扩散,通常情况下,H264对一个PIC编码,采取从上到下,从左到右的自然宏块光栅扫描顺序进行编码.
如果启用FMO功能,那么JM,将打乱宏块自然顺序,采用某种乱序方式,通过宏块映射方式,分配到不同的Slice中间
.
FMO
映射划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。FMO打乱了正常的宏块编号,也就是可能把相邻
的宏块分开,干扰了预测机制,增大了编码延时,但是增强了码流的健壮性,在恶劣的传输信道里,误码率较高的情况下
表现依然良好,下面对JM采用的各种宏块分组模式映射到Slice机制进行说明.
首先打开JM支持FMO的选项,改配置为如下,JM最大支持8
Slice.
num_slice_groups_minus1 = 1  # Number of Slice Groups Minus 1, 0 == no FMO, 1 == two slice groups, etc.
slice_group_map_type    = 0  # 0:  Interleave, 1: Dispersed,    2: Foreground with left-over,
                             # 3:  Box-out,    4: Raster Scan   5: Wipe
                             # 6:  Explicit, slice_group_id read from SliceGroupConfigFileName
此时,JM对一个PIC会映射出两个Slice,映射机制按照interleave方式,每个Slice多少MB,请读配置文件
sg0conf.cfg.
Interleave
就是Slice交积方式
,
|-------------------------|
|XX0 Slice 0    |
|-------------------------|
|XX1 Slice 1    |
|-------------------------|
|XX2 Slice 0    |
|-------------------------|
|XX3 Slice 1    |
|-------------------------|
编码顺序
Slice0-->Slice1
假如Slice1第一个宏块序号是XX1,那么如果按照光栅扫描序,XX1上面一个宏块位于
Slice0.
由于Slice规定预测宏块不可以位于另外一个Slice之中,另外当编码XX2宏块时,由于先对Slice0编码,Slice1还没有编码完成,

当然也不能供预测,注意提供预测的必须是重建后的PIC(帧间)或者宏块(帧内),XX1,XX2宏块的B,C,D子块预测都不可用.
至此,FMO问题到此结束
.
判断宏块是否可用
:
nt mb_is_available(int mbAddr, int currMbAddr)
{
  if ((mbAddr < 0) || (mbAddr > ((int)img->PicSizeInMbs - 1)))
    return 0;

  // the following line checks both: slice number and if the mb has been decoded
  if (!img->DeblockCall)
  {
    if (img->mb_data[mbAddr].slice_nr != img->mb_data[currMbAddr].slice_nr)
   //
判断Slice编号,如果不属于同一个Slice,那么该宏块不能用来作为自己的预测.
      return 0;
  }
 
  return 1;

 

FMO功能的研究(二)

来自:新一代视频压缩编码标准——H.264/AVC

 

6.3.5.2片组

片组是一个编码图象中若干MB的一个子集,它可包含一个或若干个片。

在一个片组中,每片的MB按光栅扫描次序被编码,如果每幅图象仅取一个片组,则该图象中所有的MB均按光栅扫描次序被编码(除非使用ASO,即任意的片次序,即一个编码帧中的片之后可跟随任一解码程序的片)。

还有一种片组,叫灵活宏块次序(FMO),它可用灵活的方法,把编码MB序列映射到解码图象中MB的分配用MB到片组之间的映射来确定,它表示每一个MB属于哪个片组。表6.2MB到片组的各种映射类型。

6.2  MB到片组的映射

类型

名称

描述

0

交错

MB游程被依次分配给每一块组(图6.8

1

散乱

每一片组中的MB被分散在整个图象中(图6.9

2

前景和背景

例见图6.10

3

Boxout

从帧的中心开始,产生一个箱子,其MB属于片组0,其它MB属于片组(图6.11

4

光栅扫描

片组0包含按光栅扫描次序从顶-左的所有MB,其余MB属片组1(图6.11

5

手绢

片组0包含从顶-左垂直扫描次序的MB,其余MB属片组1(图6.11

6

显式

每一Mbslice_group_id,用于指明它的片组(即MB映射完全是用户定义的)

       

6.8 交错型片组                                6.9 散乱型片组

6.10 前景和背景型片组

6.11 片组

 

9.3.1 H.264的视频编码层的错误恢复

l         片、片组和FMO

一幅图像由若干片组成,每片包含一系列的宏块(MB)。MB的排列可按光栅扫描顺序,也可不按扫描顺序。每个片独立解码,不同片的宏块不能用于自身片中作预测参考。因此,片的设置不会造成误码扩散。如图9.13所示,片0、片1和片2中的宏块相互之间不能作为预测参考。

9.13  不采用FMO的片划分

灵活的宏块排序FMOH.264一大特色,适用于H.264的基本档次和扩展档次的应用。FMO通过宏块分配映射技术,把每个宏块分配到不按扫描顺序的片中,图像内部预测机制,例如帧内预测或运动矢量预测,仅允许用同一片组里的空间相邻的宏块。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络的MTU尺寸,经过FMO模式分割后的图像数据分开进行传输。

以图9.14所示,所有的MB被分成了片组0和片组1,相应地分别采用黑色和白色表示。当白片丢失时,因为其周围的宏块都属于其他片的宏块,利用邻域相关性,黑片宏块的某种加权可用来代替白片相应宏块。这种错误隐藏机制可以明显提高抗误码性能。实验证明,在CIF图象的视频会议中,在丢包率达10%时,视频失真低到需要训练有素的眼睛才能识别。使用FMO的代价是稍微降低了编码效率,(因为它打破了原先非邻居MB之间的预测),而且在高度优化的环境中,有比较高的延迟。

9.14 FMO棋盘分片例图

 

    原创网址:http://www.chituwang.com

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多