接着上面说,此时我们要用的是cabac熵编码,那么这种熵编码,我们之前就已经说了,会分成三步:
1、二值化;也就是把1,2,3,4,5,6这些转成0101的样子;
2、上下文建模:建立概率模型;上一篇文章说了,要做算数编码,就要有概率模型;
3、算数编码;
自然,我们需要一个一个的看;首先要看二值化的方式;二值化的方式有三种,一个是我们上面说的哥伦布指数编码,就一个地方用,然后还是1阶的;其实还有两种,一个是定长编码,在表示里面的话,就是用FL代替,如下图:
其中,方框的是代表的是使用的定长编码的方式完成的二值化,圆圈部分代表的是使用的截断rice码来进行二值化的:
1、先看定长编码:
很简单;定长编码就是将数值直接转化成为二进制;这就是定长编码;如果计算长度的话,那么长度就是以2为底的log;
不过这里面有个地方需要注意;如果cmax是31,长度是5,但是我的值是3,编码后是11怎么办?那么需要在前面补0补齐;为00011;
2、截断rice编码:
还是老办法,解释一下这个截断rice编码:
这种编码方式其实也不难,标准给出cMax以及cRiceParam的值,通过这两个值然后计算前缀prefix和后缀suffixval;一切按照标准即可;
现在来看已经有了二进制的码流了,我们是不是可以直接输出了,此时输出,肯定输出不知道多少位了,因为位数是在是太多了;所以我们要想办法进行熵编码;熵编码这块内容较多,理解起来也比较难,所以在下一章节对照代码来进行梳理