




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上下文建模为基本的CABAC 编码过程 , 一种regular coding mode 另一种为 bypass coding mode.只有regular coding mode 应用了上下文模型,而直通模式用于加速编码流程,当概率近似为50%的时候。这部分主要说明regular coding mode的进程。这里,先说理论,再讲流程。理论:1,CABAC算术编码基础算术编码的复杂度主要体现在概率的估计和更新,CABAC建立了一个基于查表的概率模型,将00.5划分为64个概率量化值,这些概率对应于LPS字符,而MPS的概率为(1Plps),概率的估计值被限制在查表内,概率的刷新也是依据于查表。如果当前出现的字符是MPS,则Plps 变小。划分子区间的乘法运算 RR x Px对于这里的乘法运算,CABAC首先建立了一个二维表格,存储预先计算好的乘法结果,表格的入口参数一个来自Px( 对应于theta,概率量化值),另一个来自R(R的量化为:p=(R6)&3 ),流程图:图中,灰色部分是概率的刷新部分,表TABRangeLPS存储预先计算好的乘法结果,表TransIDxLPS是与对应的概率表。有三个值是比较特殊的,:theata=0时,LPS的概率已达到了最大值0.5,如果下一个出现的是LPS,则此时LPS和MPS的字符交换位置.Theta=63对应着LPS的最小概率值,但它并没有纳入CABAC的概率估计和更新的范围,这个值被用做特殊场合,传递特殊信息,比如,当解码器检测到当前区间的划分依据是这个值时,认为表示当前流的结束.Theta=62 ,这是表中的最小值,它对应的刷新值是它自身,当MPS连续出现,LPS的概率持续减小,到62保持不变。2 CABAC上下文模型CABAC将片作为算术编码的生命周期,h.264将一个片内可能出现的数据划分为399个上下文模型,每个模型均有自己的CtxIdx(上下文序号 ),每个不同的字符依据对应的上下文模型,来索引自身的概率查找表。即收到字符后,先索引该字符的上下文模型序号(CtxIdx),才能找到它的概率查找表(TransIdxLPS),再做上图上的操作。这些模型的划分精确到比特,几乎大多数的比特和它们邻近的比特处于不同的上下文模型中。查找每个比特所对应的上下文模型有两个步骤:1确定该比特所属的句法元素。即例如:mb_type, mb_field_decoding_flag 等。h.264为每个句法元素分配了一个上下文模型区间,T9-11该句法元素的所有比特位的上下文模型的上下文序号(ctxIdx)都处于这个区间中,2按照某一个法则为当前比特在步骤1中得到的区间中找到对应的CtxIdx。该法则对不同的句法元素各不相同。这个法则通常用表来表示,下表列出了大多数句法元素为所各比特查找CtxIdx的法则。其中CtxOffset为步骤1中所处区间起始点的偏移。但是在表中也可以看到,某些比特对应多个上下文模型,这时,需要在解码中根据前后宏块的空间相关性进一步确定。对应标准中的Table 9-29即当1.索引ctxIdx 小于等于72时,是关于宏块类型,子宏块类型,预测模式,以及基于片层和宏块层的控制信息句法元素。此时,CtxIdx = Ts (步骤1中的初值)Ctxoffset ;2.索引ctxIdx大于72时,是残余数据编码,其中Coded_block_pattern 句法元素的索引同上式,其余残余数据公式为:CtxIdx = Ts (步骤1中的初值)Ctxoffset Q(ctx_cat)其中Q(ctx_cat)为其上下文范畴context category决定。帧模式中,实际只用到399上句法模型的277个。3码流输出在实际过程中,编码器并不是等递进到最终区间才办出码字的,这里有两个方面的原因,一个是在编码器在递过运算过程中,如果没有输出,信道会出现空闲,形成浪费,二是输入流较长时,最终区间非常小,必须以极高的精度来记录L和R,幸运的时,在二进制编友中,区间的上下限以二进制形式表示,每当下限的最高有效位与上限的最高有效位一样时,就可以移出这个比特。这样的方法可以保证编码器在递同时不断的输出码流。序列出现的可能性越大,区间就越长,确定该区间所需要的比特数就越少。实际上,编码过程中所有变量的值都不超过1,编码器中只保存小数点后的数字仍然可以正确编码,这样我们就可以用整数运算来完成上述算法。更进一步我们可以看到,在编码过程中随着概率区间的不断减小,上限和下限会越来越接近,一旦两者的最高有效位的值相等,这一位上的数值就不再改变。这时我们就可以将该有效位输出,同时将上限和下限左移一位,并将上限的最低有效位置9,下限的最低有效位置0,这个过程称为归一化,实际上是将编码器中序列的概率区间放大以保证编码器的精度。然后对下一符号编码,直至序列结束。经过上述改进,算术编码就可以在实际中应用了。但是,新的问题又出现了。在使用上述算法进行编码时,可能会遇到这样的情况:假设上、下限用6 位数表示,上限值为500004,下限值为499997,由于最高位不相等不能输出,而序列对应的区间却已经非常小了,继续编码,可能会出现上限值为500000,下限值为499999,这时无论再输入什么符号,上、下限都不再改变,因此编码器也不会有任何输出,这种情况就称为编码器下溢。我们假设上限值为500004,下限值为499997 来说明解决下溢的方法。每次循环中对上、下限的次高有效位进行检查,如果(1)上限的次高有效位为0,(2)下限的次高有效位为9,这就表示编码器存在下溢的可能,这时将上、下限的次高有效位都去掉,并将剩余有效位都左移一位,上限的最低有效位移进一个9,下限的最低有效位移进一个0,继续对上、下限的次高有效位进行检查。如果(1)(2)两个条件仍然满足,继续上述操作,否则记下从次高有效位移出比特数m,例子中m=4,经过多次循环,上、下限的值分别等于549999 和470000,继续下一符号的编码直至有数字输出,显然编码器输出的下一个数字是4 和5 中的一个。假设输出4,编码器接着要再输出m 个9,将m 置0 后,继续对下一符号编码;相反地如果输出5,就接着输出m 个0。这个方法的实质是在编码器没有输出情况下,扩大编码区间长度以保证编码器的精度。流程:在一帧的开始的时候, 先看是否字节对齐, 没有对齐则补1, 直到字节对齐。初始化:CABAC的生命期是片,每个片开始,要对399种上下文模型全部过行初始化工作,初始化的步骤是:1, 将过区间复位到0,12, 为每一个上下文模型指定一个初始w 和theta(a) h.264 为每个上下文模型定义了初始常量m,n,通过查表T9-12 T 9-22 可得上下文模型相对应的m,n .(b) 按照如下算法计算w,theta.preCtxState = Clip3( 1, 126, ( ( m * SliceQPY) 4 ) + n )if( preCtxState = 63 ) pStateIdx = 63 - preCtxStatevalMPS = 0 else pStateIdx = preCtxState - 64valMPS = 1其中clip3(a, b ,c )表示将c 的值限制在a ,b之间。CABAC首先要说明的是CABAC的生命期是SLICE,因此本篇所讲的也是一个SLICE里CABAC的流程,其次对于我们来说场模式几乎用不到,所以本文的编码流程只使用帧模式,因此实际上用到的表只有277个, 当然如果我写成399, 不是说里面所有表都用到的. 这里只是声明一下这个问题, 如果大家实际操作的时候发现模型表序号始终不过276那是很正常的. 本文参考了T264的代码, 应此一帧里只有一个SLICE. 而本文用的变量则采用标准里的变量.本文不会讲CABAC的原理, 想要了解原理请参考FTP上的片级:即以下步骤在片期间只做1次1,在一帧的开始的时候, 先看是否字节对齐, 没有对齐则补1, 直到字节对齐2,先根据SliceQP算出399个模型表里的pStateIdx和valMPS, 构成一张初始表,根据标准里的公式, 同时可以参考T264_cabac_context_init函数. 这张表不要和模型表弄混,虽然都是399维的, 但我们宏块级编码过程中实际用的只是这张表, 而不是标准里的那张模型表Table 9-23, 9-23这张表是用来算由pStateIdx和valMPS构成的初始表的.3,然后就是初始化CABAC的初值, 下界指针,区间范围 (0x1FE)等等,可参考T264_cabac_encode_init函数.宏块级:以下则是每个宏块都要做一次的, 这一级中会处理很多的语法元素, 这里我只用前2个语法元素做为例子: mb_skip_flag, mb_type4,重整区间, 确保在区间在28-29内.如果这里的区间概念来自BAC,如果不明白先google算术编码,然后再看上面那个参考文献.5,首先mb_skip_flag标志进行CABAC编码, 由于这个元素本身就是2值的,所以直接就可以进行上下文模型选择了:1. 由标准Table 9-24知道, P帧(这里要注意是slice_type=P, 不是mb_type)的这个元素用11号表, B帧用24号表. 可以参考T264中的T264_cabac_mb_skip函数.2. 由于这个元素只有1个bit, 因此只要算第一个bit的ctxIdxInc就可以了, 参考标准Table 9-29, 可以看到表中11 和 24号表确实只有第一个bit是可用的, 根据.1子条款可以知道这一位的ctxIdxInc可能是0, 1, 2中的一个, 在T264中简单的说就是看左边和上边宏块是否是Skip模式, 有一个是skip模式ctxIdxInc就加1. 也就是全不是skip为0, 有一个skip则ctxIdxInc就是1,全是skip则ctxIdxInc就是2.3. 下来就是算术编码部分了, 简单提一下基本原理: 在CABAC中为了减少RLPS= R*pLPS这个区间变换公式的开销, 用128个有限状态(实际可用的为126)代替pLPS, 用rangeTab这张表代替了RLPS, 见标准Table 9-33. 可以参考T264中的T264_cabac_encode_decision函数, 看一下具体流程:? 获得当前bin的pStateIdx和valMPS(来自片级计算的那张初始表)? 根据标准.1子条款, 求得qCodIRangeIdx用来索引表rangeTab, 即可以求得变换后的区间了.? 修正区间codIRange = codIRange codIRangeLPS? 判断当前的bin是否为最有可能的值, 如果不是(binVal!= valMPS),则更新区间下边界codILow = codILow + codIRange, 同时修正区间codIRange = codIRangeLPS;然后判断当前状态, 如果已经达到状态0, 是则把valMPS的值取反(即0,1互换), 如果还有没达到0, 则进行LPS的状态迁移,具体参看标准Table 9-34的状态迁移表中的transIdxLPS? 如果当前的binVal值等于valMPS, 就比较简单了, 直接进行状态迁移, MPS的状态迁移也很简单, 直接数据+1就可以了(最大63),具体参考标准Table 9-34的状态迁移表中的transIdxMPS, 状态的转移其实就是修改了399个模型的初始表.? 区间重整, 如果区间过小则输出一些bit, 这样可以不用把数据全部编码完再输出, 可以编一部分输出一些.? 已编码的2进制值bin总数+1, 即SymCnt+1, 这个值用于字节填充, 可以参考标准, 其中的BinCountsInNALunits就是指这个值,至此算术编码部分就结束了.6,下面就是开始编码第二个语法元素了: mb_type1) 不同于上一个语法元素mb_skip_flag, mb_type这个语法元素本身并不是二值化的, 因此编码的第一步是进行二值化, 查阅标准Table 9-24可知mb_type的二值化方法需要参考子条款, 由该条款可知mb_type的二值化相对简单, 可以直接参考表得到, 例如I片中某宏块mb_type为I_16x16时则二值化后bin0=1, 且非I_PCM则bin1=0, 亮度AC无非0系数则bin2=0, 色度有非0系数则bin3=1, 色度DC,AC都无非0系数时,bin4=0, 帧内预测模式为0时则bin5=0, bin6=0, 因此我们就得到了标准中I_16x16_0_1_0的二值化串为10010002) 下来是上下文模型选择, 由Table 9-24可知 I的mb_type元素起始表是3号表, 然后参考标准表Table 9-29, 计算bin串中每个bin的ctxIdxInc值,由表可知bin0要参考.1.3才能确定ctxIdxInc值, 简单的说就是如果上边和左边的块模式有一个不是I_4x4则ctxIdxInc+, 这样就有0,1,2这3种可能的结果了; bin1的ctxIdx固定是276, 直接就调用了encoder_terminal模块, 即标准Figure 9-11的右分支;bin2的ctxIdxInc是3;bin3的ctxIdxInc是4,; bin4和bin5要参考.2子条款, 由该条款可知如果bin3是1则bin4的ctxI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 往届文科高考试题及答案
- 2025年惠州社工考试试题及答案
- 2025年海洋科技前沿:海水提锂吸附分离技术创新动态分析
- 2025年国际商法自考试题及答案
- 婴儿护理考试试题及答案
- 2025年口腔颌面外科手术操作规范与术前准备考试答案及解析
- 最近的文学考试题及答案
- 2025年海水提溴吸附剂制备技术革新实现绿色环保新突破
- 植物源绿色建材示范工程原料创新创业项目商业计划书
- 病死动物无害化处理合同10篇
- 汾酒白酒招商手册
- 甜米酒创业计划书
- 塔吊租赁服务技术实施方案技术标
- 员工组织承诺的形成过程内部机制和外部影响基于社会交换理论的实证研究
- 优质课件:几代中国人的美好夙愿
- 2023年真空镀膜机行业市场分析报告及未来发展趋势
- 物业礼仪规范培训方案
- 约谈记录表模板
- 外科护理学阑尾炎教案
- 注塑成型技术培训之工艺理解课件
- 广西佑太药业有限责任公司医药中间体项目环评报告书
评论
0/150
提交评论