H.265的参考帧管理

原文地址:https://blog.csdn.net/VioletHan7/article/details/81384424


HM参考帧管理分析

HEVC采用了参考帧集(RPS)的技术来管理已解码的帧,用作后续图像的参考。与之前的视频编码标准中参考帧管理策略不同的是,HEVC中的RPS技术,通过直接在每一帧开始的片头码流中传输DPB中各个帧的状态变化,而H.264/AVC中的滑动窗和MMCO(Memory Management Control Opreation) 这两种参考帧管理技术,是通过传输每一个片的DPB的相对变化来实现,一旦发生数据丢失,将会有持续的影响。

H.265帧间预测帧分为:低延时P帧、低延时B帧,随机接入B帧。

  • P帧为单向预测帧–前向预测,但是P帧中的编码单元可以为帧间预测块(前向预测)也可以为帧内预测块。P帧一般有4个参考帧,编码器根据率失真代价准则,在4个参考帧中搜索当前块的匹配块;
  • B帧采用双向预测,B帧中的编码单元可以采用帧间预测(前向预测、后向预测、双向预测都可以),也可以是帧内预测。B帧一般有2个参考帧列表(List0、List1),一般每个参考列表都有两个参考帧。List0为前向参考列表,存放都是当前帧前面的帧(即POC小于当前帧的POC),List1为后向参考列表,存放当前帧后面的帧(即POC大于当前帧的POC),有时候也有前面的帧,但是对于LowDelay B则不然,List0和List1存放的都是当前帧前面的帧,这是为了适应低延时 的要求

1、参考帧管理的基本知识

H.263 H.264/AVC HEVC中都采用了多帧参考技术,来提高帧间预测的准确性。解码已经完成的图像,被缓存在DPB中,供后续帧用作参考图像,因此,标准需要对DPB中的图像进行管理。DPB中的每一个图像,有3种状态“Unused for reference”、“Used for short-term reference”和“Used for long-term reference”,这3种状态之间的转化,是通过解码图像标记过程进行控制的。
H.264/AVC中采用了滑动窗和MMCO两种方式。滑动窗管理方式,是以DPB可以存放的帧数为窗口,随着当前解码的图像,以先入先出的方式,将新的解码图像移入,将超出窗口的解码图像移出,因此,DPB中保存的是最近解码的多个图像。MMCO是通过在码流中传输控制命令,完成对DPB中图像的状态标记的,它可以将一个“Used for reference(short-term or long-term)”标记为“Unused for reference”,也可以将当前帧或者“Used for short-term referene”的帧标记为“Used for long-term reference”等。

2、HEVC参考帧集技术(RPS)

为了增强参考帧管理的抗差错能力,HEVC采用了参考帧集技术,它通过直接在每一帧开始的片头码流中传输DPB中各个帧的状态变化,将当前帧以及后续帧可能用到的参考帧在DPB中都进行描述,描述以POC作为一帧的身份标识。因此,它不需要依赖于前面帧的DPB状态,从而增强了抗差错性能。简言之,每帧的第一个片中包含一个RPS,它是由一组“δ POC”(当前帧POC与其POC的差)和“是否用作当前帧/后续帧的参考”这些标识信息组成,DPB根据片头中RPS的描述,对参考帧进行标记。例如,POC=4的B帧,只能参考POC=0的I帧,其RPS为{(δPOC=3,UsedByCurPic)};POC=3的B帧,可以参考POC=4和POC=2的两个B帧,其RPS为{(δPOC=-1,UsedByCurPic),(δPOC=1,UsedByCurPic)};若POC=0的I帧,不再出现在RPS中,则它被标记为“Unused for reference”,然后从DPB中移除。

参考帧RPS更新:

  1. 在解码POC=1的帧前,DPB中3个参考帧,分别是POC=0,4,2的帧;
  2. 当接到POC=1的片头中传输的RPS信息(描述了解码POC=1的帧时,DPB的状态,即POC=0和2的帧用作当前帧的short-term参考,POC=4的帧用作后续帧的参考)后,对DPB中的帧进行状态标记,将POC=0和2的帧标记为“Used for short-term reference”,并且保留POC=4的帧,以用作后续参考;然后解码POC=1的帧,解码完成,将POC=1的帧放入DPB中。此时,DPB中有POC=0,4,2,1四帧;
  3. 当接收到POC=3的片头中传输的RPS信息(描述了解码POC=3的帧时,DPB中,POC=2和4的帧用作当前帧的short-term参考,POC=0的帧用作后续帧的参考,POC=1的帧不再用作参考)后,对DPB中的帧进行状态标记,将POC=2和4的帧标记为“Used for short-term reference”,将POC=1的帧移出DPB,然后解码POC=3的帧,解码完成,将其放入DPB中。此时,DPB中有POC=0,4,2,3四帧;

3、RPS预测

从上述描述中可以看出,在用POC值对参考帧进行身份描述时,不同帧的RPS中的多个δPOC值的差值是相同的,例如上述中,POC为1的帧的RPS描述中,δPOC值分别是{1,-3,1},POC为3的帧的RPS描述中,δPOC值分别为{3,-1,1}。因此不同帧的RPS描述中,δPOC值仍然可以进行预测,即δRPS=δPOC(RPScurr)-δPOC(RPSref),以进一步减少传输代价。

4、HM中的多参考帧配置

参考软件HM在RA配置中采用了Hierachical-B的GOP结构,参考帧数目为4(或者3),但在编码配置中,活动的参考帧数目为2,即只对最近的两个参考帧进行运动估计和运动补偿。与此类似,在LowDelay配置下,参考帧数目为4,活动的参考帧数目为4

5、HM多参考帧优化选择

从前分析中,HEVC及其参考软件HM都支持多参考帧技术,HM中可以配置4或者2个活动参考帧,这使得每个PU的运动估计的复杂度成倍增加。HEVC参考软件中仍然采用传统的块匹配技术进行运动矢量的搜索,并选择最佳的预测方向和参考帧索引。其过程可以简单总结为一下流程:

  1. ListX=0开始(即前向预测),将参考帧索iRefIndex设置为0;
  2. 在当前iRefIndex下,生成高级运动矢量预测(AMVP)候选列表,并进行AMVP索引的选择;
  3. 以 2 中选中的AMVP为起始点,在当前iRefIndex帧内,以SA(T)D+λpred*Bits为代价进行运动估计,得到最佳的运动矢量和最小代价;
  4. 设置iRefIndex=iRefIndex+1,重复步骤 2 到 3,得到当前iRefIndex下的最佳运动矢量和最小代价;直到参考帧队列ListX中的所有标记为“Used for reference”的参考帧都完成最佳运动矢量和最小代价计算,并从中挑选出代价最小的iRefIndex作为当前预测方向下,最佳的参考索引;
  5. ListX=1(即后向预测),重复 2 到 4,并挑选代价最小的iRefIndex作为当前预测方向下的最佳参考索引;
  6. 固定以List0(或List1)中最佳的参考索引和运动矢量为双向预测中的其中之一,对List1(或者List0)中所有参考索引进行 2 到 4 步骤,并找到最佳的双向预测参考索引和运动矢量;
  7. 比较前向预测、后向预测、以及双向预测的最小代价,选择出最佳的预测方向;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值