参考文献:见《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. 第一次往github上传文件步骤

    第一次往github上传文件步骤: 1> 从右上角 '+' 位置下拉菜单中,创建一个repository 2>从右上角头像位置下拉菜单 setting中设置 SSH keys 3>打 ...

  2. RxJava 参考文档

    /*************************************************************** * RxJava 参考文档 * 说明: * 最近无意中发现RxJava ...

  3. TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

    报错原因:numpy不能读取CUDA tensor 需要将它转化为 CPU tensor. 所以如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tenso ...

  4. Laravel 在 Nginx 中的参考配置两份

    此份参考自网络: server { listen 80; server_name laravel.app; root /项目目录/public; index index.php index.html ...

  5. Appium+python自动化

    名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appi ...

  6. 如何 Xcode 开发工具里安装一个空的项目末模板

    很多朋友因为Xcode升级取消了空工程模板而发愁  今天给大家推荐一个简单方便的方法,导入空工程模板 对于 xcode7 来说可以使用下面的方法添加空模板.建议在升级的时候,不要下载beta版,最好下 ...

  7. 由mysql分区想到的分表分库的方案

    在分区分库分表前一定要了解分区分库分表的动机. 对实时性要求比较高的场景,使用数据库的分区分表分库. 对实时性要求不高的场景,可以考虑使用索引库(es/solr)或者大数据hadoop平台来解决(如数 ...

  8. E20170507-ts

    prompt  n. 提示; 提示符 object    n. 物体; 目标; 宾语; asterisk  * n. 星号,星状物; Ampersand   & Slash   n. 斜线; ...

  9. YCOJ-DFS

    DFS搜索是搜索中的一种,即深度优先搜索(Depth First Search),其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次. 图示: 如图,这是邻接矩阵,我 ...

  10. Jquery实现相对浏览器位置固定、悬浮

      <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></sc ...