H264-帧内预测
帧内预测分为两步走,分别是推导预测模式和获取预测数据。
1推导预测模式
根据相邻块的预测模式推导当前块的预测模式。
现在我们已经获得的信息有:
- 左方相邻块A的预测模式;
- 上方相邻块B的预测模式;
- 码流中读取的语法元素prev_intra4x4_pred_mode_flag;
从上述数据中获取当前块的预测模式的方式在文档8.3.1.1中如下表示:
predIntra4x4PredMode = Min( intraMxMPredModeA, intraMxMPredModeB )
if( prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] )
Intra4x4PredMode[ luma4x4BlkIdx ] = predIntra4x4PredMode
else
if( rem_intra4x4_pred_mode[ luma4x4BlkIdx ] < predIntra4x4PredMode )
Intra4x4PredMode[ luma4x4BlkIdx ] = rem_intra4x4_pred_mode[ luma4x4BlkIdx ]
else
Intra4x4PredMode[ luma4x4BlkIdx ] = rem_intra4x4_pred_mode[ luma4x4BlkIdx ]
- 从左侧和上方相邻块的预测模式中选取较小的一个作为预先定义模式。
- 判断码流中读取的标志位prev_intra4x4_pred_mode_flag,如果该标志位为1,则预先定义模式就是当前块的预测模式;
- 如果标志位prev_intra4x4_pred_mode_flag为0,则根据码流中解析出的语法元素 rem_intra4x4_pred_mode判断。如果rem_intra4x4_pred_mode的值小于预定义模式的值则选用rem_intra4x4_pred_mode;如果大于等于预定义模式,则当前块的预测模式设为rem_intra4x4_pred_mode + 1。
2 获取预测数据
通过相邻块的数据和当前块的预测模式,计算出当前块的预测数据。再将当前块的预测数据减去码流中的残差数据,即可计算出当前块的实际数据。
首先获取相邻像素的数据,并判断是否可用。