首页 > 其他分享 >【HEVC简介】High Level Syntax

【HEVC简介】High Level Syntax

时间:2024-05-06 14:57:31浏览次数:17  
标签:slice HEVC pictures VCL NAL Syntax High Leading IRAP

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由slice header(包含control information)后跟slice coded sample 组成,其中slice的第一个slice segment称为独立的slice segment,与其他slice segment无关。后续slice segment(如果有的话)称为从属slice segment,因为它们依赖于先前的slice segment。
其中slice内第一个slice segment 的header为slice header,包含整个slice的control information。         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 举例         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:三者的结构和关系如上图。

标签:slice,HEVC,pictures,VCL,NAL,Syntax,High,Leading,IRAP
From: https://www.cnblogs.com/lanlancky/p/18174990

相关文章

  • 【HEVC简介】CTU、CU、PU、TU结构
     参考文献:见《HighEfficiencyVideoCoding(HEVC)》BlockStructuresandParallelism FeaturesinHEVC章节 CTU:codingtreeunit,编码树单元,LCU    对于YUV=420格式的彩色视频:一个CTU由一个CTBofthelumasamples、2个CTBsofthechromasamples和相关的语法......
  • You have an error in your SQL syntax; check the manual that corresponds to your
    在进行增加User对象时采用了PreparedStatement对象,方法executeQuery()和executeUpdate()都是无参方法,所以不要写成prepareStatement.executeQuery(sql)或prepareStatement.executeUpdate(sql)publicintadd(Useruser){Connectionconnection=JDBCTools.getConnecti......
  • 【智应数】High Dimensional Geometry
    HighdimensiongeometryissurprisinglydifferentfromlowdimensionalgeometryExample1:Volumeconcentratesonshell.Example2:As\(d\rightarrow\infty\),theareaandthevolumnof\(d\)-dimensionalunitball\(\rightarrow\infty\).......
  • CSS Custom Highlight API
    CSSCustomHighlightAPICSSCustomHighlightAPIJavaScript创建范围并使用CSS定义样式来设置文档中任意文本范围的样式该API允许开发者通过CSS自定义属性来设置文本的样式,并将其应用到文档中的任意文本范围。本质就是查找所有文本节点,收集匹配内容的Range,最后......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
    1.简介在之前的文章中宏哥讲解和分享了,为了看清自动化测试的步骤,通过JavaScript添加高亮颜色,就可以清楚的看到执行步骤了。在学习和实践Playwright的过程中,偶然发现了使用Playwright中的highlight()方法也突出显示Web元素。与之前的方法有异曲同工之妙。而且很简单。highlight()......
  • HighPrecision
    \(HighPrecision\)​包含了四种高精度的基本运算,\(A\)为大整数,\(B\)在除法中为\(int\),在其余三种运算中为大整数,\(n\)为\(A\)的长度,\(m\)为\(B\)的长度。\(add(A,B)\):返回\(A+B\),时间复杂度:\(O(\max(n,m))\)。\(sub(A,B)\):返回\(A-B\),时间复杂度:\(O(\ma......
  • SQL语法错误-java.sql.SQLSyntaxErrorException: You have an error in your SQL synt
    频繁爆出这样的错误:java.sql.SQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear''atline1查阅了许多资料后,我怀疑报错可能与字段名不小心用了关键字有关......
  • Vault high availability with Consul
    VaulthighavailabilitywithConsulhttps://developer.hashicorp.com/vaultWhatisVault?Secure,store,andtightlycontrolaccesstotokens,passwords,certificates,encryptionkeysforprotectingsecrets,andothersensitivedatausingaUI,CLI,orH......
  • How to change Google Chrome DevTools codes highlight theme color All In One
    HowtochangeGoogleChromeDevToolscodeshighlightthemecolorAllInOne如何更改GoogleChromeDevTools代码高亮主题颜色demosLightPink(......
  • 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
    解决badSQLgrammar[];nestedexceptionisjava.sql.SQLSyntaxErrorException解决SpringBoot中MySQL数据库报错“BadSQLGrammar”的问题目录解决SpringBoot中MySQL数据库报错“BadSQLGrammar”的问题问题描述解决步骤解决方案结论附:MySql常用配置参数及使用场景......