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" alt="">
图中,NumNegativePics=5,NumPositivePics = 4。
分析到这里先放一放。我们来看还有一组參数。
2.长期參考图像參数集
假设码流採用了long term 參考时。
在SPS中存储着num_long_term_ref_pics_sps(设为n0)个entry。每一个entry也包括两项UsedByCurrPic和DeltaPoc。
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.
RefPicSetLtCurr和RefPicSetLtFoll组中的图像都被标记为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。RefPicSetStCurrAfter和RefPicSetStFoll组中的图像标记为了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,RefPicList0和RefPicList1。
如图所看到的:
依据以上步骤,能够得到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的參考队列解码的更多相关文章
- 基于TI Davinci架构的多核/双核开发高速扫盲(以OMAP L138为例),dm8168多核开发參考以及达芬奇系列资料user guide整理
基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 原文转自http://blog.csdn.net/wangpengqi/article/details/8115614 感谢 ...
- 我经常使用的DOS命令參考
我经常使用的DOS命令參考 这个C:\>叫做提示符.这个闪动的横线叫做光标. 这样就表示电脑已经准备好,在等待我们给它下命令了.我们如今所须要做的,就是对电脑发出命令.给电脑什么 ...
- WPS2012交叉引用技巧,word比wps这点强更新參考文献
WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...
- (十)unity4.6学习Ugui中文文档-------參考-UGUI Canvas Components
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unit ...
- ANTLR4权威參考手冊(一)
写在前面的话: 此文档是对伟大的Terence Parr的著作<the definitive antlr4 reference>的翻译本.致敬!欢迎转载,请注明原地址,请尊重劳动成果.翻译 ...
- 《C++语言基础》实践參考——数组作数据成员
返回:贺老师课程教学链接 [项目5 - 数组作数据成员]阅读教材P255例8.4.注意到类中的数据成员能够是数组.设计一个工资类(Salary),当中类的数据成员例如以下: class Salary ...
- 学习笔记之TCP/IP协议分层与OSI參考模型
1.协议的分层 ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...
- Windows8.1和Ubuntu14.04双系统卸载Ubuntu參考教程[图]
我之前编写并公布了<Windows8.1安装Ubuntu14.04双系统參考教程及双硬盘注意事项>这篇教程,而本文提供的卸载Ubuntu方法适用于这篇教程,其它方法安装的Ubuntu可适当 ...
- Hadoop 2.6.0分布式部署參考手冊
Hadoop 2.6.0分布式部署參考手冊 关于本參考手冊的word文档.能够到例如以下地址下载:http://download.csdn.net/detail/u012875880/8291493 ...
随机推荐
- Win7通知区域的图标怎么去除?
由于本人有洁癖,最近在用win7的时候,很收不了已经卸载了的一些软件,在win7右下角的通知区域图标中还留有痕迹,于是上网查找了下解决方案. 用以下方法完美解决问题. 这里依然是以注册表的修改方法为主 ...
- day01_04.变量
变量的命名规则 变量名由字母小写a-z,大写A-Z,_下划线,数字0-9组成,php的变量名区分大小写;python的变量名也是区分大小写的 注意: PHP变量名必须以美元$符号开始; 变量名开头可以 ...
- dubbo控制台在tomcat上的部署
1.下载dubbo-admin的war包,比如dubbo-admin-2.5.4.war 2.因为在tomcat上部署,所以务必确认安装了JDK和tomcat,以及配置好了环境变量. 3.将dubbo ...
- CM10 WIFI连不上解决方案
手机是Moto Mileston2 ,好久之前就刷成了CM10, 但是一直没出问题. 最近,发现在某些路由器上连接不上,总是 在验证账户或者获取IP. 解决办法如下: http://moto.zol. ...
- Django模板导入和替换、以及对数据库的增加、查看
静态文件引入的3中方式:例如对html模板里面对css样式的引入 STATIC_URL = '/static666/'STATICFILES_DIR=[ os.path.join(BASE_DIR,' ...
- Linux Shell系列教程之(九)Shell判断 if else 用法
本文是Linux Shell系列教程的第(九)篇,更多shell教程请看:Linux Shell系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外.今天就给大家介绍下Shel ...
- 关于后台返回excel文件的问题
一般情况ajax请求只能获取解析非流文件类型,而excel是流文件类型,这个时候获取到的数据会是一串乱码的字符串 想要下载这个excel文件,通过form表单模拟的方式可以解决 var form = ...
- C#函数多返回值的方法
C#以前都是不支持多返回值,当需要返回多个值的时候,就会感觉比较麻烦,通常的做法有 1.采用ref,out 关键字返回 2.定义类或者结构体 返回对象 C# 6.0出来了新的语法 Tuple 支付返回 ...
- 最短Hamilton路径-状压dp解法
最短Hamilton路径 时间限制: 2 Sec 内存限制: 128 MB 题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamil ...
- 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\) \( ...