- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 H.264/AVC 编码器原理 第6章 H.264/AVC 编码器原理 6.8 CAVLC(基于上下文自适应的可变长编码) 6.9 CABAC(基于上下文的自适应二进制算术熵编码) 6.10 码率控制 6.11 去方块滤波 6.12 其余特征 6.8 CAVLC(基于上下文自适应的可变长编码) 1.CAVLC概念 CAVLC即基于上下文的自适应变长编码。CAVLC的本质是变长编码,它的特性主要体现在自适应能力上,CAVLC可以根据已编码句法元素的情况动态的选择编码中使用的码表,并且随时更新拖尾系数后缀的长度,从而获得极高的压缩比。H.264标准中使用了CAVLC对4*4模块的亮度和色度残差数据进行编码。 2.CAVLC 的基本原理 CAVLC用于亮度和色度残差数据的编码。残差经过变换量化后的数据表现出如下特性: 4*4块数据经过预测、变换、量化后,非零系数主要集中在低频部分,而高频系数大部分是零; 量化后的数据经过zig-zag扫描,DC系数附近的非零系数值较大,而高频位置上的非零系数值大部分是+1和-1 ; 相邻的4*4块的非零系数的数目是相关的。 CAVLC充分利用残差经过整数变换、量化后数据的特性进行压缩,进一步减少数据中的冗余信息,为H.264卓越的编码效率奠定了基础。 3.CAVLC 的上下文模型 利用相邻已编码符号所提供的相关性,为所要编码的符号选择合适的上下文模型。利用合适的上下文模型,就可以大大降低符号间的冗余度。 4.CAVLC 的编码过程 4.1 重排序 在编码器中,16*16帧内模式编码的宏块里,每个已量化变换系数的4*4亮度块的DC系数首先以图1所示的顺序扫描。剩余的15个AC系数从第二个位置开始扫描。类似的,色度的2*2DC系数以光栅顺序首先扫描,剩余的15个AC系数从从第二个位置开始扫描。 例:设有一个4*4块数据(假定NC=0) 数据重排列: 0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0 4.2 编码非零系数的数目(TotalCoeffs)以及拖尾系数的数目(TrailingOnes) 非零系数数目的范围是从0到16,拖尾系数数目的范围是从0到3。如果±1的个数大于3个,只有最后3个被视为拖尾系数,其余的被视为普通的非零系数。 例:设有一个4*4块数据(假定NC=0) 非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; 最后一个非零系数前零的数目(Total_zeros)=3; 对非零系数数目和拖尾系数数目的编码是通过查表的方式,共有4个变长表格和1个定长表格可供选择。表格的选择是根据变量NC(Number Current,当前块值)的值来选择的,在求变量NC值的过程中,体现了基于上下文的思想。 例:设有一个4*4块数据(假定NC=0) ∵非零系数的数目(TotalCoeffs) = 5; 拖尾系数的数目(TrailingOnes)= 3; NC=0 ∴经查表可知码流为0000100 ∴code=0000100 4.3 编码每个拖尾系数的符号 对于每个拖尾系数(±1)只需要指明其符号, 其符号用一个比特表示(0表示+ ,1表示-)。编 码的顺序是按照反向扫描的顺序,从高频数据 开始。 例:设有一个4*4块数据(假定NC=0) ∵逆序编码,三个拖尾系数的符号依次是+,-,-; ∴码流为011 ∴code=0000100 011 4.4 编码除了拖尾系数之外的非零系数的幅值(Levels) 非零系数的幅值(Levels)按照反向扫描顺序进行编码,即从高频向低频顺序编码。 非零系数的幅值(Levels)的组成分为两个部分,前缀(level_prefix)和后缀(level_suffix)。 变量suffixLength 是基于上下文模式自适应更新的,suffixLength 的更新与当前的suffixLength 的值以及已经解码好的非零系数的值(Level)有关。 suffixLength数值的初始化以及更新过程如下所 示: ?普通情况下suffixLength初始化为0 ,但是当块中有多于10个非零系数并且其中拖尾系数的数目少于3个,suffixLength 初始化为 1 。 ?编码在最高频率位置上的非零系数。 ?如果当前已经解码好的非零系数值大于预先定义好
文档评论(0)