参考文献:见《High Efficiency Video Coding (HEVC)》High Level Syntax章节
《HEVC标准介绍、HEVC帧间预测论文笔记》系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/p/5711333.html
NAL
NAL:Network Abstract Layer,网络抽象层,编码后的bitstream就是由一个个NAL组成。NAL由一个2 Bytes的NAL header和NAL payload data两部分组成。NAL分为VCL(video coding layer) NAL和non-VCL NAL两类,其中VCL NAL包含一个picture的数据,而non-VCL NAL包含与多个picture相关的控制信息。
slice、segment:编码过程中,视频分为GOP(group of picture),对于每个picture,分成彼此独立的slice(不同slice之间,编码相互独立,不存在相互依赖的关系)。每个slice可以分为一个或多个slice segment,slice segment由header(包含control information)和coded sample,其中slice内第一个segment header为slice header,包含整个slice的control information,之后的slice segment依赖前面的slice segment。
access unit:一般是以picture为单位进行访问的点。
NAL header(16 bits):如上图,第一bit‘F’固定为0,6-bits NALType 确定NAL的类型,其中VCL NAL和non-VCL NAL各有32类。LayerID表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置。TID确定了NAL所在的unit的时域上的层次,如下图:对于a、b而言,虚线下TID都是0,虚线上TID都是1。同一picture内的NAL,TID字段内容相同,作用:TID小的NAL不能依赖TID大的NAL,还可用于控制视频选择部分帧播放。
decoding order VS output order:decoding order就是编解码顺序,也是bitstream中的顺序。output order是视频输出播放的顺序,由POC(picture output count)指定,且每个CVS(coded video sequence)的POC是相互独立的。
VCL NAL
NAL Type:(如上表2.1)同一个access unit的picture中所有的VCL NAL有相同的NAL Type。对于VCL NAL,包括IRAP(intra random access point,6种)、leading pictures(4种)和trailing pictures(6种)三类和其他16个保留类型。
IRAP:是指使用帧内编码,不参考其他图像。所以IRAP一定是TID为0,编码方式为intra,但是编码方式为intra不一定是IRAP。IRAP解码时不需要依靠其他参考帧,所以在视频随机访问、频道切换、视频编辑等操作时,有重要作用。
Leading pictures VS Trailing pictures:Leading pictures(RASL和RADL) 和 Trailing pictures(TSA、STSA和TRAIL)都是相对于decoding顺序上在前面的一个IRAP,如上图,B2-4和B6-8、P5就associated with I1。Leading pictures是指decoding order在IRAP之后,而output order在IRAP之前的帧,Trailing pictures是指decoding order和output order都在IRAP之后的帧。要求:Trailing pictures只能参考相关的IRAP和相关于同一个IRAP的Trailing pictures,且对于同一个IRAP,必须按照IRAP、Leading pictures、Trailing pictures的顺序进行编解码。
TSA:Temporal Sub-layer Access,时域分层编码,定义了时域分层切换点。TSA帧要满足TSA帧和其编码顺序上随后的TSA帧不会参考TSA帧之前的、TID大于等于TSA帧的任何帧,如上图,P6和P7就是TSA帧。
STSA:Step-wise Temporal Sub-layer Access,步进时域分层编码。STSA帧要满足STSA帧及其编码顺序后面的相同TID的STSA帧不会参考该STSA帧编码顺序前面、有相同TID的帧。如上图,P2属于STSA帧。
TRAIL:Trailing pictures中,除了TSA和STSA之外,其他的都定义为TRAIL帧。
IDR:Instantaneous Decoding Refresh,即刻解码刷新帧,解码时彻底清空解码缓冲区,更新解码过程并重新开始一段新的CSV(coding sequence video),因此IDR及其之后的所有帧都不允许参考IDR之前的帧。根据IDR帧是否有可解码的Leading pictures,IDR可分为IDR_W_RADL和IDR_N_RASL,IDR_W_RADL在解码顺序上有RADL pictures,而IDR_N_RASL帧没有任何Leading pictures。对于IDR,POC一定是0.
CRA:Clean Random Access,对于CRA帧,它的Leading pictures帧可以参考CRA帧之前的帧,所以解码CRA帧时,不会刷新解码器,也不会重新开始一段新的CSV。对于CRA,POC不一定是0.
RADL:Random Access Decodable Leading,RADL帧是IRAP帧的Leading pictures。对于RADL帧,它只能参考关联的IRAP帧和对应的RADL帧,不能参考关联的IRAP帧解码顺序前面的帧。
RASL:Random Access Skipped Leading,RASL帧是CRA帧的Leading pictures。对于RASL帧,它可以参考关联的CRA帧解码顺序前面帧,因此IDR只能有RADL的Leading pictures,而CRA可以有RADL和RASL的Leading pictures。而且,对于CRA帧,RASL要在RADL之前解码。
BLA:Broken Link Access,针对视频链接所定义的IRAP类型,因为CRA类型相对IDR类型有更高的编码效率,所以视频序列中更多地使用CRA。但是由于CRA的Leading pictures可以是RASL,所以当从CRA帧开始进行视频拼接、访问时,RASL需要参考CRA编码顺序之前的帧,但是这些帧是无法获得的,所以就定义成BLA帧。遇到BLA帧时,对于其编码顺序后与其关联的RASL,直接舍弃。与IDR帧类似,BLA帧解码时从新开始一个新的CSV,但是不同之处在于:BLA并不会把POC设置为0(IDR会),而是设置成BLA header中的值。有三种类型的BLA:BLA_N_LP、BLA_W_RADL和BLA_W_LP,分别代表禁止所有Leading pictures、仅禁止RASL的Leading pictures和RADL、RASL的Leading pictures都允许。
sub-Layer reference VS sub-layer non-reference:如表2.1,对于Leading 和Trailing,每一个种类都有_R和_N两种类型,分别表示sub-Layer reference和sub-layer non-reference。sub-Layer non-reference是指不能够被相同Temporal Layer的帧参考的帧,如上图中B3-4、B6-8和P1;sub-layer reference是指可以被相同Temporal Layer参考的帧,如上图B2。这些在对视频帧进行选择性丢弃时,可以根据这些帧类型进行判断决策。
non-VCL NAL
Non-VCL NAL Type:Non-VCL NAL的种类如上图,Parameter sets包括VPS、SPS和PPS。
Delimiters(分隔符)包括AUD_NUT、EOS_NUT、EOB_NUT,其中AUD_NUT用于指示access unit的边界,所以和access unit内的VCL NAL有相同的TID,是access unit内的第一个NAL。EOS_NUT、EOB_NUT分别表示CVS和bitstream的结束,它们的TID为0,没有payload,只有2-Type的header。
Filler Data对解码过程并没有任何影响,payload就是由一串'11111111'和1-Type的'10000000'组成,主要用来填充数据以满足达到一定的码率。Filler Data要在Access UNIT的第一个VCL NAL之后,并且和access unit有相同的TID。
SEI:supplemental enhancement informatyion,辅助增强信息,提供可选的解码支持元数据。在HEVC中,SEI是prefix(SEI必须在Access unit的所有VCL NAL之前)或者suffix(SEI可以在Access unit的VCL NAL之后)的,而且SEI有些是只对当前Access unit有效,有些作用范围可能是多个Access unit甚至整个SVC。VUI是在SPS中的可选信息,VUI不直接影响解码过程,但是提供两个方面的信息:1、解码图像的展示信息,包括宽高比、扫描、分时等信息;2、限制解码端的一些信息,包括tiles、MV、参考图像等。
VPS、SPS、PPS:三者的结构和关系如上图。
- 【HEVC简介】CTU、CU、PU、TU结构
参考文献:见<High Efficiency Video Coding (HEVC)>Block Structures and Parallelism Features in HEVC章 ...
- 【HEVC简介】ALF-Adative Loop Filter
由于HEVC在HM4.0之后,就把ALF去掉,所以ALF的介绍是基于AVS2. <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com ...
- 【HEVC简介】SAO-Sample Adaptive Offset, 样本自适应偏移量
paper: Sample Adaptive Offset for HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/ ...
- 【HEVC简介】DB-DeBlock Filter
参考论文:HEVC Deblocking Filter <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/ ...
- 【HEVC简介】Inter Prediction Tools
参考文献:见<High Efficiency Video Coding (HEVC)>Inter-Picture Prediction in HEVC章节 <HEVC标准介绍.HEV ...
- HEVC简介】CTU、CU、PU、TU结构
https://www.cnblogs.com/DwyaneTalk/p/5711342.html
- HEVC标准介绍+论文阅读笔记
脱离视频编解码.投入计算机视觉一年,这个博客也歇业一年,最近偷些时间回顾一下编解码,毕竟花费了整个研一的时间(虽然这一年基本上在上课). 之前写过几篇H.264标准的几篇介绍文章,详见:http:// ...
- H264编码profile & level控制
背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseli ...
- H.264编码profile & level控制
背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseli ...
随机推荐
- codeforces B. Sereja and Mirroring 解题报告
题目链接:http://codeforces.com/contest/426/problem/B 题目意思:给出一个n * m的矩阵a,需要找出一个最小的矩阵b,它能通过several次的mirror ...
- Intel® Media SDK(一)
A cross-platform API for developing media applications on Windows* Fast video playback, encode, proc ...
- Ubuntu 12.04 nethogs 流量监控查看
/*************************************************************** * Ubuntu 12.04 流量监控查看 * 说明: * 今天打算从 ...
- 「LuoguP3252」 [JLOI2012]树
Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...
- 使用lsyncd配置数据库备份多异地同步
lsyncd配置文件 settings { logfile = "/var/log/lsyncd.log", --日志路径 status = "/var/log/lsyn ...
- C++实现查找链表中环的入口节点
/* * 寻找链表中环的入口节点.cpp * * Created on: 2018年4月10日 * Author: soyo */ #include<iostream> using nam ...
- Android HandlerThread源码解析
在上一章Handler源码解析文章中,我们知道App的主线程通过Handler机制完成了一个线程的消息循环.那么我们自己也可以新建一个线程,在线程里面创建一个Looper,完成消息循环,可以做一些定时 ...
- Gradle系列之二 Groovy对文件的操作
Groovy对文件的操作 对文件的遍历 假设文件的原始内容为: hello,world 这里是北京 andorid and ios are good system 第一种方法:使用 eachLine( ...
- [MySQL] LIMIT 分页优化
背景:LIMIT 0,20 这种分页方式,随着 offset 值的不断增大,当达到百万级时,一条查询就需要1秒以上,这时可以借助索引条件的查询来优化. SQL:select * from member ...
- .NET Core WebAPI Swagger使用
相对于普通的webapi而言,.net core webapi本身并不具备文档的功能,所以可以借助第三方插件:swagger,使用的话很简单. 步骤一. Nuget Packages安装,使用程序包管 ...