HEVC的參考队列解码

參考队列是指在进行帧间解码时。P或者B slice所參考的已解码的。位于解码图像缓存中(DPB, decoded picture buffer)中的图像队列,类似h264中的reflist0和reflist1。涉及到整个DPB的管理和參考帧的选择。

本文中讨论的都是slice为P,B的情况,slice为I类型时,没有參考帧。

1. 短期參考图像參数集

首先介绍一下短期參考图像參数集(Short-term reference picture set ), 简称short-term RPS,储存着有关short term參考帧选择的信息。

short-term RPS可能会出如今SPS或者slice header中。

否则(short_term_ref_pic_set(stRpsIdx )出如今SPS中)。short_term_ref_pic_set( stRpsIdx) 结构代表short-termRPS的一个候选值。在SPS中最多有64个short term RPS。

当解码到一个slice的时候。该使用哪个short term RPS呢?有两种情况:

情况1:參数short_term_ref_pic_set_sps_flag(位于slice header中)为0时。这样的情况下,码流中会有一个參数short_term_ref_pic_set_idx。这个參数给出当前slice该选择的short term RPS的序号。在SPS中有0~64个short term RPS以供检索。

情况2:short_term_ref_pic_set_sps_flag为1时,slice header中会有一个short term RPS的结构。供整个picture使用。

short term RPS的解析也有两种情况:

情况1.參数inter_ref_pic_set_prediction_flag为1。RPS的内容从还有一个RPS预測得来。

情况2.inter_ref_pic_set_prediction_flag为0,直接解析得到。

short term RPS的解析过程不在这里具体说明,具体可见HEVC标准。

经过解析后。我们可以得到一系列的entry和两个值NumNegativePics和NumPositivePics,分别给出poc小于和大于当前slice的poc的參考帧的数量,每个entry包括两个值:

1.UsedByCurrPic:表示是否被当前帧使用

2.DeltaPoc:与当前帧的POC的差值

如图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

图中,NumNegativePics=5,NumPositivePics = 4。

分析到这里先放一放。我们来看还有一组參数。

2.长期參考图像參数集

假设码流採用了long term 參考时。

在SPS中存储着num_long_term_ref_pics_sps(设为n0)个entry。每一个entry也包括两项UsedByCurrPicDeltaPoc

slice header中的參数num_long_term_sps(设为n1)给出从sps中採用的long term entry的个数,參数num_long_term_pics(设为n2)给出包括在slice
header中的long term entry的个数。

slice header中还包括n1个的lt_idx_sps,依据这些lt_idx_sps给出的序号,从SPS的n0个long term entry中选择n1个和slice header中的n2个组成long term entry的序列。

如图:n1 = 3, n2 = 2;

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

3.參考图像列表修正

參考图像列表修正结构(Reference picture list modification)位于sliceheader中。

參数ref_pic_list_modification_flag_l0:若其值为1表示參考图像列表0通过list_entry_l0[i]被显式指定,默认值为0。

參数list_entry_l0[i]:给出RefPicListTemp0中用以替代当前值的索引。

參数ref_pic_list_modification_flag_l1:若其值为1表示參考图像列表0通过list_entry_l1[i]被显式指定,默认值为0。

參数list_entry_l1[i]:给出RefPicListTemp1中用以替代当前值的索引。

4.RPS解码过程和RefList的构建

遍历short term RPS的全部entry。利用deltapoc计算得到參考帧的poc,并将used = 1且poc小于当前slice的放入PocStCurrBefore组。

将used = 1且poc大于当前slice的放入PocStCurrAfter组。

将used = 0的放入PocStFoll组。

遍历long term RPS的全部entry,利用deltapoc计算得到參考帧的poc。并将used = 1的放入PocLtCurr组,将used = 0的放入PocLtFoll组。

整个过程如图所看到的:

图中给每个entry都加入了标号。依据deltaPoc计算得出的poc记做Pn(P1,P2,.... P14)。这样就得到了PocStCurrBefore。PocStCurrAfter,PocStFoll,PocLtCurr和PocLtFoll共5组poc。

DPB中的图像会被标记为used for short-term reference(短期參考),used for long-term reference(长期參考)或者unused for reference(不被參考),且仅仅能为当中的一种状态。

然后进行例如以下步骤:

1.

遍历PocLtCurr组中的POC,假设DPB中某帧图像的poc和组中的某个poc同样。则这帧图像属于RefPicSetLtCurr组。

遍历PocLtFoll组中的POC,假设DPB中某帧图像的poc和组中的某个poc同样,则这帧图像属于RefPicSetLtFoll组。

2.

RefPicSetLtCurrRefPicSetLtFoll组中的图像都被标记为used for long-term reference。

3.

遍历PocStCurrBefore组中的POC,假设DPB中某帧图像的poc和组中的某个poc同样,则这帧图像属于RefPicSetStCurrBefore组。

遍历PocStCurrAfter组中的POC。假设DPB中某帧图像的poc和组中的某个poc同样。则这帧图像属于RefPicSeStCurrAfter组。

遍历PocStFoll组中的POC。假设DPB中某帧图像的poc和组中的某个poc同样,则这帧图像属于RefPicSetStFoll组。

4.

凡是不在RefPicSetStCurrBefore, RefPicSetStCurrAfter, RefPicSetStFoll, RefPicSetLtCurr和RefPicSetLtFoll这5个组中的图像即被标记为unused for reference。(也就是说,RefPicSetStCurrBefore。RefPicSetStCurrAfterRefPicSetStFoll组中的图像标记为了used
for short-term reference)

如图,如果DPB中共同拥有6帧图像。其POC各自是P1, P2, P6, P10, P11和P15。则依据以上步骤。得到图中结果,P15被标记为unused for reference。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

对于P slice来说。仅仅有前向參考列表RefPicList0,对于B slice来说。有RefPicList0和后向參考列表RefPicList1.

RefPicListTemp0依照顺序RefPicSetStCurrBefore,RefPicSetStCurrAfter和RefPicSetLtCurr组成。

RefPicListTemp1依照顺序RefPicSetStCurrAfter。RefPicSetStCurrBefore和RefPicSetLtCurr组成。

依照Reference picture list modification中的内容,能够得到终于的參考list,RefPicList0RefPicList1

如图所看到的:

依据以上步骤,能够得到RefPicListTemp0中图像的POC为P1,P6和P10,RefPicListTemp1中的图像为P6。P1和P10。

ref_pic_list_modification_flag_l0为0。则RefPicList0全然和RefPicListTemp0同样。

ref_pic_list_modification_flag_l1为1,则RefPicList1须要依据list_entry_l1改动顺序得到。

有了RefPicList0和RefPicList1就能够进行运动向量的解码,预測和计算了,运动补偿也要用到。

时间: 2024-08-03 15:47:06

HEVC的參考队列解码的相关文章

基于TI Davinci架构的多核/双核开发高速扫盲(以OMAP L138为例),dm8168多核开发參考以及达芬奇系列资料user guide整理

基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 原文转自http://blog.csdn.net/wangpengqi/article/details/8115614 感谢wangpengqi的共享. 一.简单介绍 TI的达芬奇架构嵌入式应用处理器使用DSP与ARM结合的非对称多核结构,当然如今也有管脚全兼容的单核.本文要介绍的就是当中的一款低功耗处理器OMAP L138. OMAP L138包含一个主频300M的ARM9处理器内核和一个300M的C6748DSP内核

Windows8.1和Ubuntu14.04双系统卸载Ubuntu參考教程[图]

我之前编写并公布了<Windows8.1安装Ubuntu14.04双系统參考教程及双硬盘注意事项>这篇教程,而本文提供的卸载Ubuntu方法适用于这篇教程,其它方法安装的Ubuntu可适当做參考.但本人建议您先大致通读本文,再做决定. 本文所述方法,个人測试无误,如因本文所述造成不论什么损失,本人无法负责,请谨慎! 如若转载,请注明博文地址及原作者(RisingWonderland). 准备条件 请再次确认对Ubuntu系统做好文件备份: 本文适用于Win7.Win8.1: Windows操作

[Java] 实验5參考代码

实验4月3日晚截止,实验截止后将在此给出完整的參考代码. 1. 怎样使用以下的代码模板: 1.1 在eclipse中创建相应名称的类     1.2 将代码拷贝到类文件中 1.3 在//todo凝视中输入你用于解题的代码. 1.4 样例:參考第一题"显示两级名字".大家就能够这么做 1.4.1 在eclipse中创建类.名字叫做PassOrFail 1.4.2 将以下的代码拷贝到.java文件里.并删除//todo凝视,開始在while循环里写代码 (推断成绩是否大于60, 输出等)

烟花散尽漫说无(參考资料)

烟花散尽漫说无 --试解李商隐<锦瑟>"沧海月明珠有泪,蓝田日暖玉生烟."句 參考资料 在梳理索解史以及解诗时主要參考了下面资料(清曾经的不列): X<朱自清全集>第二卷 ("<唐诗三百首>指导大概") 朱自清著江苏人民出版社 1988年8月第1版,1990年5月第2刷 <李商隐诗选注>陈伯海 选注 上海古籍出版社 1982年2月第1版/第1刷 <唐诗三百首全译>汉灵娜 译诗 何年 凝视 陈敬容 校订 贵州

四旋翼飞行器Quadrotor飞控之 PID调节(參考APM程序)

做四轴也有一段时间了.近期一直在做PID方面的工作. 如今四轴基本能够实现室内比較稳定的飞行,操控手感也能够接受.稍后上试飞视频.在此把一些PID方面的经验总结总结和大家分享一下. 首先介绍一下大概的硬件组成: MCU:Freescale MK60D 传感器(IMU):GY-86模块(MPU6050 + HMC5883L + MS5611) 433MHz传输数据模块 DC-DC可调式开关稳压模块 遥控设备:JR XG7发射机 + JR 611B接收机 机架:普通红白f450机架 电机:朗宇221

学习笔记之TCP/IP协议分层与OSI參考模型

1.协议的分层      ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些分层,使得那些比較复杂的网络协议更加简单化. 在这一模型中,每一个分层都接收由它下一层所提供的特定服务,而且负责为自己的上一层提供特定的服务.上下层之间进行交互时所遵循的约定叫做"接口".同一层之间的交互所遵循的约定叫做"协议". 协议分层就如同计算机软件中的模块化开发

SQLIO 磁盘測试工具參考

SQLIO 下载地址:id=20163">SQLIO Disk Subsystem Benchmark Tool 默认文件夹:C:\Program Files\SQLIO 以命令行执行,进入到安装文件夹(C:\Program Files\SQLIO)执行 SQLIO 执行測试 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravi

WPS2012交叉引用技巧,word比wps这点强更新參考文献

            WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非常麻烦,删除一个,加入一个,就须要改一长串数字.怎么办呢. 本人推荐一种简单方法:尾注法. 2.光标移到要插入參考文献的地方,菜单中"引用->脚注和尾注". 把插入的"1"设置为正常,就是选择上下标那个地方. 3.确定后在该处就插入了一个上标"1&quo

4. GC 算法(实现篇) - GC參考手冊

您应该已经阅读了前面的章节: 垃圾收集简单介绍 - GC參考手冊 Java中的垃圾收集 - GC參考手冊 GC 算法(基础篇) - GC參考手冊 学习了GC算法的相关概念之后, 我们将介绍在JVM中这些算法的详细实现. 首先要记住的是, 大多数JVM都须要使用两种不同的GC算法 -- 一种用来清理年轻代, 还有一种用来清理老年代. 我们能够选择JVM内置的各种算法. 假设不通过參数明白指定垃圾收集算法, 则会使用宿主平台的默认实现. 本章会详细介绍各种算法的实现原理. 以下是关于Java 8中各