參考队列是指在进行帧间解码时。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" alt="">

图中,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" alt="">

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" alt="">

对于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就能够进行运动向量的解码,预測和计算了,运动补偿也要用到。

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

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

    基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 原文转自http://blog.csdn.net/wangpengqi/article/details/8115614 感谢 ...

  2. 我经常使用的DOS命令參考

    我经常使用的DOS命令參考         这个C:\>叫做提示符.这个闪动的横线叫做光标. 这样就表示电脑已经准备好,在等待我们给它下命令了.我们如今所须要做的,就是对电脑发出命令.给电脑什么 ...

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

                WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...

  4. (十)unity4.6学习Ugui中文文档-------參考-UGUI Canvas Components

     大家好,我是孙广东.   转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unit ...

  5. ANTLR4权威參考手冊(一)

    写在前面的话: 此文档是对伟大的Terence Parr的著作<the definitive antlr4 reference>的翻译本.致敬!欢迎转载,请注明原地址,请尊重劳动成果.翻译 ...

  6. 《C++语言基础》实践參考——数组作数据成员

    返回:贺老师课程教学链接 [项目5 - 数组作数据成员]阅读教材P255例8.4.注意到类中的数据成员能够是数组.设计一个工资类(Salary),当中类的数据成员例如以下: class Salary ...

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

    1.协议的分层      ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...

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

    我之前编写并公布了<Windows8.1安装Ubuntu14.04双系统參考教程及双硬盘注意事项>这篇教程,而本文提供的卸载Ubuntu方法适用于这篇教程,其它方法安装的Ubuntu可适当 ...

  9. Hadoop 2.6.0分布式部署參考手冊

    Hadoop 2.6.0分布式部署參考手冊 关于本參考手冊的word文档.能够到例如以下地址下载:http://download.csdn.net/detail/u012875880/8291493 ...

随机推荐

  1. Win7通知区域的图标怎么去除?

    由于本人有洁癖,最近在用win7的时候,很收不了已经卸载了的一些软件,在win7右下角的通知区域图标中还留有痕迹,于是上网查找了下解决方案. 用以下方法完美解决问题. 这里依然是以注册表的修改方法为主 ...

  2. day01_04.变量

    变量的命名规则 变量名由字母小写a-z,大写A-Z,_下划线,数字0-9组成,php的变量名区分大小写;python的变量名也是区分大小写的 注意: PHP变量名必须以美元$符号开始; 变量名开头可以 ...

  3. dubbo控制台在tomcat上的部署

    1.下载dubbo-admin的war包,比如dubbo-admin-2.5.4.war 2.因为在tomcat上部署,所以务必确认安装了JDK和tomcat,以及配置好了环境变量. 3.将dubbo ...

  4. CM10 WIFI连不上解决方案

    手机是Moto Mileston2 ,好久之前就刷成了CM10, 但是一直没出问题. 最近,发现在某些路由器上连接不上,总是 在验证账户或者获取IP. 解决办法如下: http://moto.zol. ...

  5. Django模板导入和替换、以及对数据库的增加、查看

    静态文件引入的3中方式:例如对html模板里面对css样式的引入 STATIC_URL = '/static666/'STATICFILES_DIR=[ os.path.join(BASE_DIR,' ...

  6. Linux Shell系列教程之(九)Shell判断 if else 用法

    本文是Linux Shell系列教程的第(九)篇,更多shell教程请看:Linux Shell系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外.今天就给大家介绍下Shel ...

  7. 关于后台返回excel文件的问题

    一般情况ajax请求只能获取解析非流文件类型,而excel是流文件类型,这个时候获取到的数据会是一串乱码的字符串 想要下载这个excel文件,通过form表单模拟的方式可以解决 var form = ...

  8. C#函数多返回值的方法

    C#以前都是不支持多返回值,当需要返回多个值的时候,就会感觉比较麻烦,通常的做法有 1.采用ref,out 关键字返回 2.定义类或者结构体 返回对象 C# 6.0出来了新的语法 Tuple 支付返回 ...

  9. 最短Hamilton路径-状压dp解法

    最短Hamilton路径 时间限制: 2 Sec  内存限制: 128 MB 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamil ...

  10. bzoj 3625小朋友和二叉树 多项式求逆+多项式开根 好题

    题目大意 给定n种权值 给定m \(F_i表示权值和为i的二叉树个数\) 求\(F_1,F_2...F_m\) 分析 安利博客 \(F_d=F_L*F_R*C_{mid},L+mid+R=d\) \( ...