Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.asp"></script>
帧:逐行扫描的图像。
图像:场和帧都可认为是图像。
(4)宏块、片:
宏块:一个宏块由一个16×16亮度块、一个8×8Cb和一个8×8Cr组成。
片:一个图像可以划分成一个或多个片,一个片由一个或多个宏块组成。 5.2编码数据格式
5
.2.1 h264支持4:2:0的连续或隔行视频编码解码。
5.2.2 h264的编码格式
制定h264的主要目标有两个:
(1)得到高的视频压缩比
(2)具有良好的网络亲和性,即可适应于各种传输网络。
为此,h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)
VCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。NAL单元格式如下图:
Nal头 Rbsp Nal头 Rbsp Nal头 Rbsp
5.2.3 h264码流结构 5.3参考图像
H264为提高精度,H264最多可从15个图像总进行选择,选出最佳的匹配图
优点: 大大提高预测精度
缺点: 复杂度大为增加
参考图像由参考列表(list0,list1)管理,
P帧有一个参考列表list0
B帧有两个参考列表list0和list1 5.4帧内预测
预测块P是基于已编码重建块和当前块形成的.
对于亮度的预测:4×4亮度预测,16×16亮度预测
对于色度象素预测: 8×8色度预测
5.4.1 4×4亮度预测
4×4亮度预测有9种预测模式
(a)利用上面和左面的象素,对a~q进行帧内4×4预测
(b)帧内4×4预测的8个方向
模式 描述 模式0(垂直)
由上边象素垂直推出相应象素值 模式1(水平)
由左边象素水平推出相应象素值 模式2(DC)
由上边及左边平均值推出所有象素值 模式3(下左对角)
由45度方向象素内插得出相应象素值
模式4(下右对角线)
由45度方向象素内插得出相应象素值 模式5(右垂直)
由26.6度方向象素值内插得出相应象素值 模式6(下水平)
由26.6度方向象素值内插得出相应象素值 模式7(左垂直)
由26.6度方向象素值内插得出相应象素值 模式8(上水平)
由26.6度方向象素值内插得出相应象素值
9种预测模式计算产生的相应的预测块(SAE定义了每种预测的预测误差),其中SAE最小的预测块与当前块最匹配
5.4.2 16×16亮度预测模式―――共有4种预测模式
模式 描述 模式0(垂直)
由上边象素推出相应象素值 模式1(水平)
由左边象素推出相应象素值 模式2(DC)
由上边和左边象素平均值推出相应象素值 模式3(平面)
利用线性"plane"函数推出相应象素值,适用于亮度变化平缓区域
5.4.3 8×8色度块预测模式
4种预测模式,类似帧内16*16预测,只是编号不同
DC为模式0,水平为模式1,垂直为模式2,平面为模式3 5.5帧间预测
H264帧间预测是利用已编码的帧或场和基于块的运动补偿。在h264中,块的尺寸更加灵活(16×16到4×4)。
5.5.1 基本概念
活动图像临近帧中的景物存在一定的相关性,因此将图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的便宜量.得到的相对偏移量就是通常所指的运动矢量(MV).
到运动矢量的过程称为运动估计(ME).
5.5.2树状运动补偿
每个宏块(16×16)的亮度,可以按4种方式分割:1个16×16,2个16×8,2个8×16,4个8×8。8×8模式的子块可以继续划分:1个8×8,2个4×8,2个8×4,4个4×4。这种分割的运动补偿,称为树状运动补偿。
树状运动补偿,灵活和细致的划分,大提高了运动估计的精确程度
块的大小可变。在运动估计时,可以灵活地选择块的大小。在宏块(MB)划分上,H.264采用了16×6,16×8,8×16,8×8四种模式;当划分为8×8模式时,又可进一步采用8×4,4×8,4×4三种子宏块划分模式进一步划分,这样做既可以使运动物体的划分更加精确,减小运动物体边缘的衔接误差,又可以减小变换过程中的计算量。当对较大的平滑区域采用Intra_16×16的帧间预测方式时,为减小小尺寸变换带来的块间灰度差异,H.264采用了对亮度数据的16个4×4块的DC系数进行第二次4×4变换,对色度数据的4个4×4块的DC系数进行2×2变换的方式。
5.5.3运动矢量
帧间编码宏块的每个子宏块都是从参考图像的某一相同尺寸区域进行预测得到的。两者之间的差异(MV),对亮度成分采用1/4象素精度,色度1/8象素精度。 附录: 264 学习指南
―――分三个阶段学习 1、第一个阶段:
学习H.264,首先要把最基本最必要的资料拿在手里(//172.22.113.200/share/h264/H.264相关论文/其他/经典文章)。这些资料包括:标准文档+测试模型+经典文章。首先看《H.264_MPEG-4Part10WhitePaper》,看完之后再看《VideocodingusingtheH.264MPEG-4AVCcompressionstandard》和《Halsted.Press.H.264.And.MPEG-4.Video.Compression.Video.Coding.For.Next.Generation.Multimedia.eBook-LiB》,然后可以抽空看《OverviewoftheH.264_AVCVideoCodingStandard.pdf》。这几篇文章看完后,你应该对H.264的整体框架有个比较深入的了解了。前三篇文章可能需要花费你两~三周的时间。 2、第二阶段:
看代码。这个时候你最常用的工具就是标准文档和测试模型(建议使用 JM86
)。看代码也要先从整体框架入手。先搞懂H.264的整体框架在代码里是怎么分布的,一个功能模块的前伸模块和后继模块是什么。也就是搞清楚整个代码流程。这个阶段对标准文档的使用可能很少。 3、第三阶段:
然后你找到一个自己感兴趣的切入点,开始以此为中心研究这个问题。你研究问题的时候应该是联系测试模型来研究,这个时候你就需要仔细看代码中对这个问题的实现了。这个阶段我绝对支持你一行行代码跟踪,一个参数一个参数地跟踪。而代码中不懂的地方可能需要查标准。这时你再来看标准文档就有了针对性。也因为能将标准文档和代码对应起来,从而看标准文档也不觉得有太大困难,也能明白标准文档说的是什么问题,在测试模型中是如何通过代码实现的。在这个阶段中,会牵连到很多H.264的相关知识,这样通过以点带线,以线带面。会对H.264的内容认识越来越多。而你也就找到了自己的方向。
==========【注意事项】==========
1、切忌将代码和标准文档独立开看,否则,你的困难会很大。
2、对于刚开始接触H.264的人,切忌直接看代码和标准,哪怕是将标准和代码结合起来看,你也会不太顺利。换句话说:在没有了解H.264整体框架之前,你最好什么都不要做。 相关文档:《 H.264码流结构 》 下一篇:《
H.264/AVC技术进展及其务实发展策略思考 》
H.264简单总结(下) src="http://www.023rcsc.com/count/iframe2.asp" frameborder="0" width="650" scrolling="no" height="160">
H.264简单总结(下)
奇数行成为底场行。所有顶场行称为顶场。所有底场行称为底场。帧:逐行扫描的图像。
图像:场和帧都可认为是图像。
(4)宏块、片:
宏块:一个宏块由一个16×16亮度块、一个8×8Cb和一个8×8Cr组成。
片:一个图像可以划分成一个或多个片,一个片由一个或多个宏块组成。 5.2编码数据格式
5
.2.1 h264支持4:2:0的连续或隔行视频编码解码。
5.2.2 h264的编码格式
制定h264的主要目标有两个:
(1)得到高的视频压缩比
(2)具有良好的网络亲和性,即可适应于各种传输网络。
为此,h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)
VCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。NAL单元格式如下图:
Nal头 Rbsp Nal头 Rbsp Nal头 Rbsp
5.2.3 h264码流结构 5.3参考图像
H264为提高精度,H264最多可从15个图像总进行选择,选出最佳的匹配图
优点: 大大提高预测精度
缺点: 复杂度大为增加
参考图像由参考列表(list0,list1)管理,
P帧有一个参考列表list0
B帧有两个参考列表list0和list1 5.4帧内预测
预测块P是基于已编码重建块和当前块形成的.
对于亮度的预测:4×4亮度预测,16×16亮度预测
对于色度象素预测: 8×8色度预测
5.4.1 4×4亮度预测
4×4亮度预测有9种预测模式
(a)利用上面和左面的象素,对a~q进行帧内4×4预测
(b)帧内4×4预测的8个方向
模式 描述 模式0(垂直)
由上边象素垂直推出相应象素值 模式1(水平)
由左边象素水平推出相应象素值 模式2(DC)
由上边及左边平均值推出所有象素值 模式3(下左对角)
由45度方向象素内插得出相应象素值
模式4(下右对角线)
由45度方向象素内插得出相应象素值 模式5(右垂直)
由26.6度方向象素值内插得出相应象素值 模式6(下水平)
由26.6度方向象素值内插得出相应象素值 模式7(左垂直)
由26.6度方向象素值内插得出相应象素值 模式8(上水平)
由26.6度方向象素值内插得出相应象素值
9种预测模式计算产生的相应的预测块(SAE定义了每种预测的预测误差),其中SAE最小的预测块与当前块最匹配
5.4.2 16×16亮度预测模式―――共有4种预测模式
模式 描述 模式0(垂直)
由上边象素推出相应象素值 模式1(水平)
由左边象素推出相应象素值 模式2(DC)
由上边和左边象素平均值推出相应象素值 模式3(平面)
利用线性"plane"函数推出相应象素值,适用于亮度变化平缓区域
5.4.3 8×8色度块预测模式
4种预测模式,类似帧内16*16预测,只是编号不同
DC为模式0,水平为模式1,垂直为模式2,平面为模式3 5.5帧间预测
H264帧间预测是利用已编码的帧或场和基于块的运动补偿。在h264中,块的尺寸更加灵活(16×16到4×4)。
5.5.1 基本概念
活动图像临近帧中的景物存在一定的相关性,因此将图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的便宜量.得到的相对偏移量就是通常所指的运动矢量(MV).
到运动矢量的过程称为运动估计(ME).
5.5.2树状运动补偿
每个宏块(16×16)的亮度,可以按4种方式分割:1个16×16,2个16×8,2个8×16,4个8×8。8×8模式的子块可以继续划分:1个8×8,2个4×8,2个8×4,4个4×4。这种分割的运动补偿,称为树状运动补偿。
树状运动补偿,灵活和细致的划分,大提高了运动估计的精确程度
块的大小可变。在运动估计时,可以灵活地选择块的大小。在宏块(MB)划分上,H.264采用了16×6,16×8,8×16,8×8四种模式;当划分为8×8模式时,又可进一步采用8×4,4×8,4×4三种子宏块划分模式进一步划分,这样做既可以使运动物体的划分更加精确,减小运动物体边缘的衔接误差,又可以减小变换过程中的计算量。当对较大的平滑区域采用Intra_16×16的帧间预测方式时,为减小小尺寸变换带来的块间灰度差异,H.264采用了对亮度数据的16个4×4块的DC系数进行第二次4×4变换,对色度数据的4个4×4块的DC系数进行2×2变换的方式。
5.5.3运动矢量
帧间编码宏块的每个子宏块都是从参考图像的某一相同尺寸区域进行预测得到的。两者之间的差异(MV),对亮度成分采用1/4象素精度,色度1/8象素精度。 附录: 264 学习指南
―――分三个阶段学习 1、第一个阶段:
学习H.264,首先要把最基本最必要的资料拿在手里(//172.22.113.200/share/h264/H.264相关论文/其他/经典文章)。这些资料包括:标准文档+测试模型+经典文章。首先看《H.264_MPEG-4Part10WhitePaper》,看完之后再看《VideocodingusingtheH.264MPEG-4AVCcompressionstandard》和《Halsted.Press.H.264.And.MPEG-4.Video.Compression.Video.Coding.For.Next.Generation.Multimedia.eBook-LiB》,然后可以抽空看《OverviewoftheH.264_AVCVideoCodingStandard.pdf》。这几篇文章看完后,你应该对H.264的整体框架有个比较深入的了解了。前三篇文章可能需要花费你两~三周的时间。 2、第二阶段:
看代码。这个时候你最常用的工具就是标准文档和测试模型(建议使用 JM86
)。看代码也要先从整体框架入手。先搞懂H.264的整体框架在代码里是怎么分布的,一个功能模块的前伸模块和后继模块是什么。也就是搞清楚整个代码流程。这个阶段对标准文档的使用可能很少。 3、第三阶段:
然后你找到一个自己感兴趣的切入点,开始以此为中心研究这个问题。你研究问题的时候应该是联系测试模型来研究,这个时候你就需要仔细看代码中对这个问题的实现了。这个阶段我绝对支持你一行行代码跟踪,一个参数一个参数地跟踪。而代码中不懂的地方可能需要查标准。这时你再来看标准文档就有了针对性。也因为能将标准文档和代码对应起来,从而看标准文档也不觉得有太大困难,也能明白标准文档说的是什么问题,在测试模型中是如何通过代码实现的。在这个阶段中,会牵连到很多H.264的相关知识,这样通过以点带线,以线带面。会对H.264的内容认识越来越多。而你也就找到了自己的方向。
==========【注意事项】==========
1、切忌将代码和标准文档独立开看,否则,你的困难会很大。
2、对于刚开始接触H.264的人,切忌直接看代码和标准,哪怕是将标准和代码结合起来看,你也会不太顺利。换句话说:在没有了解H.264整体框架之前,你最好什么都不要做。 相关文档:《 H.264码流结构 》 下一篇:《
H.264/AVC技术进展及其务实发展策略思考 》
H.264简单总结(下) src="http://www.023rcsc.com/count/iframe2.asp" frameborder="0" width="650" scrolling="no" height="160">