目录
我们先看下下图来回顾下编码流程
一个编码图像通常划分一个或多个片,每个片又可以划分成若干宏块组成,一个宏块由一个 16×16 亮度像素、一个 8×8 Cb以及一个 8×8 Cr 彩色像素块组成,即常见的420采样格式,如下图:
我们通过H264visa码流分析工具看下H264数据的第一帧数据,可以看到它是I帧,由一个个宏块组成,在帧内采用帧内预测的方式进行编码。
也看到上面宏块的type有16x16也有4x4,这是什么意思? 再通过Elecard StreamEye 来查看发现更多信息。包括pmode、ipred Intra_4x4、 ipred chroma 都代表什么意思以及里面的值有什么什么意思呐?
在帧内预测模式中,预测块 P 是基于已编码重建块和当前块形成的。对亮度像素而言,P 块用于 4×4 子块或者 16×16 宏块的相关操作。 4×4 亮度子块有 9 种可选预测模式,独立预测每一个 4×4亮度子块,适用于带有大量细节的图像编码; 16×16 亮度块有 4 种预测模式,预测整个 16×16 亮度块,适用于平坦区域图像编码; 色度块也有 4 种预测模式,类似于 16×16 亮度块预测模式。编码器 通常选择使 P 块和编码块之间差异最小的预测模式。
下面我们来看下其预测模式
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度角的方向进行推算。
需要注意的是:
Mode 2的规则可以根据A-M中样本的可用情况进行修改,因为它求的是根据参考样本求的平均值,其他的模式可能在所有需求的参考样本都可用的时候才能采用。然后需要注意的是如果样本E、F、G和H是不可用的,样本D的值可以拷贝到这些位置从而标记这些样本为可用的。 对于Mode 3-8,预测样本的值是参考样本A-M的加权平均。假设选择了Mode 4,d的预测值 = round(B/4 + C/2 + D/4)。 引用自:https://www.jianshu.com/p/4d8692d53d8c?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends
图片来自:《新一代视频压缩码标准-H.264_AVC(第二版).毕厚杰,王健编著》
模式 说明 Mode0 (vertical): 由上方的样本(H)垂直推算 Mode1 (horizontal) 由左侧的样本(V)水平推算 Mode2 (DC): 上方的样本(H)和左侧的样本(V)的平均值 Mode3 (Plane): 根据上方的样本(H)和左边的样本(V)通过一个plane函数得出,在亮度平滑变化的区域工作得很好。
下面看下《新一代视频压缩码标准-H.264_AVC(第二版).毕厚杰,王健编著》中举的一个例子:
色度的Cr和Cb分量的预测模式选择是一样的。 色度预测模式与16x16亮度预测模式的描述类似,除了模式的编号不一样。 DC (mode 0), horizontal (mode 1), vertical (mode 2), plane (mode 3).
看到这里我想对于文章开头我们通过码流分析工具H264visa以及Elecard StreamEye 查看宏块的一些问题应该有自己的答案了。
这一小节我们结合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 帧间预测,欢迎关注公众号“音视频开发之旅”,一起学习成长。 欢迎交流
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。