1、前言
在实际进行预测残差的解析之前,还需要明确几个概念。我们已经知道一个宏块从亮度角度是16 * 16,然后编码器是不可能对一个16 * 16 的宏块整体编码的,在实际的编码中一个16 * 16 = 256个像素的编码,会进行两次分级。并且在两次分级中进行一系列的控制操作。
2、宏块分级
首先在两次分级中:
- 第一次采用的是cbp信息,在解析宏块结构中会得到一项非常重要的数据是coded_block_pattern,在一个宏块中,cbp会将这16 * 16的像素分为4个8 * 8的像素,并且通过CBP中每一位的值来指定这某一个8 * 8的子宏块究竟是包含实际的预测残差呢还是一个空的数据块;我们假设某一个宏块它的CBP将这个宏块分割模式就如同下图所示,分为4个8 * 8的子块,这个cbp中会有4个bit,根据是0还是1,判断4个子块是否有残差数据;如果某一个cbp中表示的是某一个子宏块的bit是0了,那么这一个子块就是一个空块,不包含任何残差信息,如果为1,按照规定的算法解析出相应的语法元素,这是由cbp控制的第一层的分级
- 第二层分割是由CAVLC的block来实现的,在CAVLC算法中,它的编码基本单元为4 * 4的像素块,也就是说,在8 * 8 的像素块中再进行一次分割