参考文献:见《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简介】High Level Syntax的更多相关文章

  1. 【HEVC简介】CTU、CU、PU、TU结构

     参考文献:见<High Efficiency Video Coding (HEVC)>Block Structures and Parallelism Features in HEVC章 ...

  2. 【HEVC简介】ALF-Adative Loop Filter

    由于HEVC在HM4.0之后,就把ALF去掉,所以ALF的介绍是基于AVS2. <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com ...

  3. 【HEVC简介】SAO-Sample Adaptive Offset, 样本自适应偏移量

    paper: Sample Adaptive Offset for HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/ ...

  4. 【HEVC简介】DB-DeBlock Filter

    参考论文:HEVC Deblocking Filter <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/ ...

  5. 【HEVC简介】Inter Prediction Tools

    参考文献:见<High Efficiency Video Coding (HEVC)>Inter-Picture Prediction in HEVC章节 <HEVC标准介绍.HEV ...

  6. HEVC简介】CTU、CU、PU、TU结构

    https://www.cnblogs.com/DwyaneTalk/p/5711342.html

  7. HEVC标准介绍+论文阅读笔记

    脱离视频编解码.投入计算机视觉一年,这个博客也歇业一年,最近偷些时间回顾一下编解码,毕竟花费了整个研一的时间(虽然这一年基本上在上课). 之前写过几篇H.264标准的几篇介绍文章,详见:http:// ...

  8. H264编码profile & level控制

    背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high:  1.Baseli ...

  9. H.264编码profile & level控制

    背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high:  1.Baseli ...

随机推荐

  1. 使用pt-query-digest进行日志分析

    使用pt-query-digest sudo apt install percona-toolkit 也可以到官网 https://www.percona.com/downloads/percona- ...

  2. async-await原理解析

    在用async包裹的方法体中,可以使用await关键字以同步的方式编写异步调用的代码.那么它的内部实现原理是什么样的呢?我们是否可以自定义await以实现定制性的需求呢?先来看一个简单的例子: cla ...

  3. macbook pro 配置jdk,maven环境变量

    https://blog.csdn.net/vvv_110/article/details/72897142(1)下载jdk安装包,进行安装,maven安装包,进行解压 (2)改写环境变量的配置文件/ ...

  4. [SDOI 2008] 洞穴勘测

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2049 [算法] LCT动态维护森林连通性 时间复杂度 : O(NlogN ^ 2) ...

  5. web.xml配置之<context-param>

    <context-param>的作用和用法: 1.<context-param>配置是是一组键值对,比如: <context-param>        <p ...

  6. iOS多线程 NSThread/GCD/NSOperationQueue

    无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPA ...

  7. js获取动态日期时间

    var timer=null; function tt(n){ if(n<10){ return '0'+n }else{ return n+'' } } timer=setInterval(f ...

  8. Gulp安装及配合组件构建前端开发一体化(转)

    Gulp安装及配合组件构建前端开发一体化 所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3p484). Gulp 是一款基于任务的设计模式的自动化工具 ...

  9. 51nod 1596 搬货物(二进制处理)

    传送门 题意 分析 只要从小到大二进制处理即可 我一直遍历了1->n,应该是0->1e6+1000 果然智障 trick 代码 #include<cstdio> #includ ...

  10. 51nod1256【exgcd求逆元】

    思路: 把k*M%N=1可以写成一个不定方程,(k*M)%N=(N*x+1)%N,那么就是求k*M-N*x=1,k最小,不定方程我们可以直接利用exgcd,中间还搞错了: //小小地讲一下exgcd球 ...