帧内宏块预测编码模式的改进:主要是提前退出,从而减少运算次数,达到提高运动估计速度的目标。
或者根据周围块的预测编码模式提前预判本块可能的编码模式,减少计算量。
还可以采取减少编码模式的策略,将很少使用的编码模式直接省略。
利用纹理信息预先排除不可能的编码模式。
1、提前预判编码模式:根据周围块的预测模式提前预判本块编码模式。
(1)16X16块时
当LEFT和TOP都存在时,其编码模式最多有4种,I_PRED_16x16_V | I_PRED_16x16_H | I_PRED_16x16_DC | I_PRED_16x16_P;
当只有左块LEFT存在时,其编码模式有两种:I_PRED_16x16_DC_LEFT | I_PRED_16x16_H;
当只有上块TOP存在时,其编码模式有两种:I_PRED_16x16_DC_TOP | I_PRED_16x16_V;当左块和上块都不存在时,其编码模式只能为:I_PRED_16x16_DC_128。
(2)4X4块时
当LEFT和TOP都存在时,可能编码模式分两种情形:
(A)当左上块也存在时,有9种:I_PRED_4x4_DC | I_PRED_4x4_H | I_PRED_4x4_V | I_PRED_4x4_DDL | I_PRED_4x4_DDR | I_PRED_4x4_VR | I_PRED_4x4_HD | I_PRED_4x4_VL | I_PRED_4x4_HU;
(B)当左上块不存在时,有6种:I_PRED_4x4_DC | I_PRED_4x4_H | I_PRED_4x4_V | I_PRED_4x4_DDL | I_PRED_4x4_VL | I_PRED_4x4_HU;
当只有左块存在时,可能编码模式有3种:I_PRED_4x4_DC_LEFT | I_PRED_4x4_H | I_PRED_4x4_HU;
当只有上块存在时,可能编码模式有4种:I_PRED_4x4_DC_TOP | I_PRED_4x4_V | I_PRED_4x4_DDL | I_PRED_4x4_VL;
当左块与上块都不存在时,其编码模式只能为:I_PRED_4x4_DC_128。
(3)提前预判准则:在预测编码中,由于每帧图像的第一列宏块和第一行宏块的编码模式对其他块的编码模式起着非常重要的作用,所以对第一行和第一列宏块的编码模式不进行提前预判别。
除此之外,当左块和上块都存在且它们的编码模式相同时:PRED_MODE = LEFT_MODE = TOP_MODE。
(包括4X4分块及16X16宏块)考虑其最可能的预测模式为垂直模式,所以当垂直模式与水平模式代价相等时,首选垂直模式为其最优模式。
2、提前跳出:主要针对是否进行4X4分块;如果进行4X4分块,能否提前结束4X4块的编码模式代价运算。
(1)当左块和上块都存在,且其最小代价编码模式都为16X16时,不进行4X4分块运算。
(2)对于16X16宏块,当该16X16块的某次编码模式代价很小时(某个阈值),直接结束代价运算,并把该次编码模式选定为该16X16块代价最小16X16编码模式
(3)如果进行4X4分块运算,当该4X4块的某个编码模式代价很小时(某个阈值),直接结束代价运算,并把该次编码模式选定为该4X4块代价最小4X4编码模式。
(4)如果4X4块编码代价和已经大于16X16模式时,提前结束4X4分块代价运算,并且选用16X16模式为最小代价编码模式。
3、利用纹理信息:根据纹理信息预先排除或者选择可能的编码模式
(1)16X16块时
(A)当纹理信息极其复杂(可以计算宏块像素点差值的平方和,即当其大于某个阈值时,也即无明显边界),直接将该16X16块编码模式设置为I_PRED_16x16_DC_128。
(B)如果纹理很复杂时,直接进行4X4块子编码模式代价计算(可以计算宏块像素点差值的平方和,即当其大于某个阈值且不满足A中的条件时)
(C)如果纹理信息很简单,则直接跳过4X4编码模式代价计算(可以计算宏块像素点差值的平方和,即当其小于某个阈值时),且将其编码模式预设为水平模式或垂直模式。
(2)4X4块时
(A)当4X4块像素点差值的平方和为0时或者小于某个阈值时,可将其编码模式预设为水平模式或垂直模式。
(B)当纹理信息极其复杂,(可以计算宏块像素点差值的平方和,即当其大于某个阈值时,也即无明显边界),直接将该4X4块编码模式设置为I_PRED_4x4_DC_128。
(3)其他更精确的纹理信息获取方式。