【Codecs】CABAC深入分析与理解

### Date:2018.4.9

=======================================================

算术编码的本质是为整个输入序列分配一个码字。

1、浮点算术编码:

步骤:1、编码器在开始时将“当前区间”设为[0,1];

           2、对每一事件,按照a,b进行处理:

               a)编码器将当前区间分为子区间,每个事件一个;

               b)一个子区间的大小与下一个将出现的事件的概率成比例,编码器选择子区间与下一个确切发生的事件相对应,并使其成为新的当前区间。

               c)最后输出当前区间的下边界就是该给定事件序列的算术编码。

2、定点算术编码:

     在浮点算法中区间范围为[0,1),在定点算法中区间范围由寄存器位数而定。以32位寄存器为例,在定点算法中low=0x00000000 , high=0x11111111。由于寄存器位数的限制,可以假设在限制的位数以后还存在着无数个后缀,low后面有无数个0,high后面有无数个1。

      由浮点算法可以得到规律:

1.low逐步递增;

2.high逐步递减

3. high > low

    所以在定点算法过程中,low的最高为1或者high的最高位为0时,在以后的编码中最高位都不会变。当low和high的最高位相同的时候,已经不会影响精度,可以直接移出寄存器,同时在低位补0(low)或者补1(high)。注意:由于high>low,当low的最高位为1的时候,high的最高为必定为1;当high的最高位为0时,low的最高位必定为0。

3、深入分析和理解

在此就不重复造轮子了,详细分析可以参考:https://blog.csdn.net/shakingwaves/article/details/52426244




猜你喜欢

转载自blog.csdn.net/soaringlee_fighting/article/details/79874004