目录
- 编码流程和数据格式回顾
- 4 × 4亮度块的9中预测模式
- 16 × 16亮度块的4种预测模式
- 8 × 8 色度块的4种预测模式
- JM代码
- 资料
- 收获
一、编码流程和数据格式回顾
我们先看下下图来回顾下编码流程
一个编码图像通常划分一个或多个片,每个片又可以划分成若干宏块组成,一个宏块由一个 16×16 亮度像素、一个 8×8 Cb以及一个 8×8 Cr 彩色像素块组成,即常见的420采样格式,如下图:
我们通过H264visa码流分析工具看下H264数据的第一帧数据,可以看到它是I帧,由一个个宏块组成,在帧内采用帧内预测的方式进行编码。
也看到上面宏块的type有16x16也有4x4,这是什么意思?
再通过Elecard StreamEye 来查看发现更多信息。包括pmode、ipred Intra_4x4、 ipred chroma 都代表什么意思以及里面的值有什么什么意思呐?
下面我们来看下其预测模式
二、4 × 4亮度块的9种预测模式
4x4预测块的像素使用小写字母a-p标示,预测块左侧和上方的参考像素使用大写字母A-M标示:
4x4亮度块有9中预测模式,分别如下
其中预测模式2 的所有样本预测值都等于A-D以及I-L的平均值。
其他8中模式的8歌方向的预测示意图如下所示:
9种预测模式说明如下:
模式 说明
Mode0 (Vertical): 由上方的A、B、C、D进行垂直推算
Mode1 (Horizontal) : 由左侧的I、J、K、L进行水平推算
Mode2 (DC) : P中的所有样本预测值都等于AD及IL的平均值
Mode3 (Diagonal Down-Left): 由45度角方向的左下和右上的样本内插得出
Mode4 (Diagonal Down-Right): 以45度角往右下的方向进行推算
Mode5 (Vertical-Right) : 以垂直向下方向右偏大约26.6度角(即width/height = 1/2)的方向推行推算。
Mode6 (Horizontal-Down): 以水平向右方向下偏大约26.6度角的方向进行推算。
Mode7 (Vertical-Left): 以垂直向下方向左偏大约26.6度角的方向推行推算。
Mode8 (Horizontal-Up): 以水平向右方向上偏大约26.6度角的方向进行推算。
需要注意的是:
图片来自:《新一代视频压缩码标准-H.264_AVC(第二版).毕厚杰,王健编著》
三、16 × 16亮度块的4种预测模式
模式 说明
Mode0 (vertical): 由上方的样本(H)垂直推算
Mode1 (horizontal) 由左侧的样本(V)水平推算
Mode2 (DC): 上方的样本(H)和左侧的样本(V)的平均值
Mode3 (Plane): 根据上方的样本(H)和左边的样本(V)通过一个plane函数得出,在亮度平滑变化的区域工作得很好。
下面看下《新一代视频压缩码标准-H.264_AVC(第二版).毕厚杰,王健编著》中举的一个例子:
四、8 × 8 色度块的4种预测模式
色度的Cr和Cb分量的预测模式选择是一样的。
色度预测模式与16x16亮度预测模式的描述类似,除了模式的编号不一样。
DC (mode 0), horizontal (mode 1), vertical (mode 2), plane (mode 3).
看到这里我想对于文章开头我们通过码流分析工具H264visa以及Elecard StreamEye 查看宏块的一些问题应该有自己的答案了。
五、JM代码
这一小节我们结合JM源码来简单分析下帧内预测的实现
JM包括JM encoder和JM decoder, JM encoder是H.264标准的一个具体实现, JM decoder是对应的解码器.
JM encoder和 x264一样,都是H.264标准的实现, 但它严格按照H264的协议来进行实现,而x264 简化了JM的代价计算方法,去掉了一些代码,进行了估算等优化,编码速度上JM会很慢,不适用于生产环境,
查看其源码对于了解H264协议时很有帮助。
JM的源码下载地址:http://iphome.hhi.de/suehring/tml/download/old_jm/,可以选择一个版本进行下载查看
这个源码还没真正的看,先做个记录吧,根据需要进行学习。
具体可以参考雷神的文章 : 雷神-H.264官方软件JM源代码简单分析-编码器lencod
六、资料
- 图书:《新一代视频压缩码标准-H.264_AVC(第二版).毕厚杰,王健编著》- 第 6 章 H.264/AVC 编码器原理
- H.264 帧内预测
- 雷神-H.264官方软件JM源代码简单分析-编码器lencod
- JM源码下载
- [JM官方文档]
七、收获
通过本篇的学习实践
- 了解了帧内编码的方式以及在整个编码过程中起的作用
- 了解4x4亮度块的9种预测模式、16x16亮度块以及8x8色度块的预测方式
- 通过码流分析工具查看宏块信息,加深理解。