首页天道酬勤mpeg-2是什么格式,编码器mpeg4和h264

mpeg-2是什么格式,编码器mpeg4和h264

张世龙 05-13 03:26 50次浏览

更新时间内容2020.12.11初版2021.01.26更新预测方式内容mpeg2是mpeg1标准(mpeg1介绍如下)的扩展,主要增加以下特性:

支持交错视频支持可伸缩编码(由于该特性在工作中不可用,因此未进行深入分析)1.码流结构Mpeg2的码流语法结构与mpeg1基本一致,仅添加了部分扩展元素。

如果紧接在第一个sequence_header之后没有sequence_extension结构,则码流符合mpeg1标准,否则为mpeg2; 如果sequence_extension结构紧跟在第一个sequence_header之后,则所有后续sequence_header之后都需要sequence_extension结构。 即,在MPEG2标准中,紧接在sequence_header之后需要sequence_extension,但在mpeg1中没有该规定,因此可以利用该规则来判断码流是否为mpeg1; 两个sequence_header之间至少存在一个图片数据。 也就是说,不能在sequence_extension之后立即使用此sequence_end语法。 如果码流中有sequence_extension (即码流为mpeg2),则picture_header之后需要picture_coding_extension,picture _ header _ er

2 .解码过程的解码流程如下图所示。

流程图中的每个模块可以将解码过程分为以下步骤。

2.1可变长度解码mpeg1可变长度编码的解码过程与mpeg1类似,主要分析存储在码流中的DC、AC系数,分为帧内编码宏块DC和其他系数解码。 区别主要有以下两点。

帧内编码的DC系数重置值,mpeg2根据picture_coding_extension中的intra_dc_precision值重置DC系数。 帧内编码宏块VLC的分析表不同,mpeg2根据intra_vlc_format选择使用不同的VLC表。 2.1.1 dccoefficientsinintrablocksi宏块DC系数分析与其他系数分析略有不同。 DC参数的值大,而相邻块DC系数具有相关的行,因此DC系数分析使用前一块的DC系数作为预测值。

DC系数最终根据码流中的元素dc_dct_size、dc_dct_differential和DC预测值计算,计算公式如下:

在以下情况下,需要重置直流系数的预测值: 重置的数值与intra_dc_precision相关。

当slice的第一宏块遇到非I宏块时,遇到skipped宏块时,在2.2反向扫描的上一步骤中分析的DC、AC系数以行程长度编码的形式存储,在反向扫描的步骤中主要以矩阵形式存储系数Mpeg1/2的主要区别在于,mpeg1仅支持zigzag扫描,而mpeg2需要在picture_coding_extension的alternate_scan中选择两种扫描方式

2.3逆量化计算过程与量化权重矩阵quant_weight_matrix和量化系数q_scale相关,mpeg1/2的主要区别如下:

mpeg2标准中的帧内宏块DC系数需要乘以intra_dc_mult,该值与intra_dc_precision相关。

量化权重矩阵可以存储在sequence_header中,也可以通过quantiser_matrix_extension更新; Mpeg1标准将q_scale直接编码到slice header或mb header中,mpeg2将q_scale_code编码到slice header或mb header中,然后将picture _ codidier

2.4反向DCT mpeg 12反向DCT变换过程相同,不再赘述。

2.5运动补偿mpeg1支持场格式,运动补偿方案考虑场预测,因此与mpeg1有很大不同。 流程如下图所示。

2.5.1预测方式Mpeg2是两种主要预测方式场预测和帧预测,两种特殊预测方式16x8块运动补偿和双prime方式;

现场预测。 参考以前解码的字段进行预测的帧预测。 参考以前解码的帧进行预测; 16x8运动补偿。 6x16宏块分为上下两个16x8块,每个预测方向有两个mv。 第一个用于宏块上方的16x8块,第二个用于宏块下方的16x8块。 在双向预测的情况下,存在4个mv。 Dual-prime宏块的预测模式选择与当前宏块所在的帧的格式(帧/场格式)相关联,宏块标题语法元素(frame _ motion _ type ) 帧格式支持的预测方案包括场预测、帧预测、dual_prime; 字段格式支持的预测方法包括字段预测、16x8预测和du

al-prime。

不同预测方式预测宏块获取步骤如下:

帧预测
帧预测处理方式与mpeg1一致。预测宏块的依赖信息包括参考帧和mv,根据预测宏块以及参考帧数据可以得到预测宏块数据。场预测
帧图像的场预测依赖的信息有mv、field_select。前向或后向预测有两个mv,分别表示顶场和底场运动矢量信息。如上图所示,预测过程可分为以下几个步骤。 以顶场为例,根据mv可以找到顶场对应的参考宏块。由于参考图像为帧格式,需要把参考宏块分为顶场(宏块数据的奇数行)和底场(宏块数据的偶数行);根据field_select选择宏块的顶场或顶场作为预测场,再由mv判断是否需要做插值,可以得到顶场的预测场;(如果field_select等于0,使用顶场做预测,否则使用底场)同理可得到底场的预测场结果,把顶场和底场的预测场结果分别作为宏块的奇数/偶数行,从而得到预测宏块。
Dual_prime
Dual-prime预测方式只存在于P帧,因此只有前向预测。帧格式需要分为顶场和底场分别预测,两场预测分别通过参考顶场和底场运动补偿并取均值,每一场需要用到两个mv,因此一共需要用到4个mv。
以mv[0]-mv[4]分别表示4个mv。mv[0]用于获取顶场预测块,参考场为顶场时使用的运动矢量;mv[1]用于获取底场预测块,参考场为底场时使用的运动矢量;mv[2]用于获取顶场预测块,参考场为底场时使用的运动矢量;mv[3]用于获取底场预测块,参考场为顶场时使用的运动矢量; 2.5.1.2 场格式中的宏块预测方式

场格式图像预测方式如下图所示,包括三种预测方式:field_based场预测方式、16x8块预测方式、dual-prime预测方式。
其中,根据预测方向场预测可以再细分为4种方式:

前向后向双向没有预测,这种方式可以转变为mv为0的前向预测来实现。

同理,16x8块预测方式根据预测方向也可以再细分为3种方向

2.5.1.1 帧格式中的宏块预测方式

帧格式预测方式如下表所示,包括frame_based帧预测方式、field_based场预测方式以及dual-prime预测方式。其中帧预测和场预测根据预测方向还可以再细分三种方式(前向/后向/双向)。
不同预测方式预测宏块获取步骤如下:

场预测
场格式的场预测的几个关键因素有:
1)预测用到的顶场或底场参考场可能来自于不同帧。如果重建为当前帧第二场,并且与参考场场类型(top/bottom field)不一样,参考场为当前帧的第一场,具体可参考2.5.1.3节;
2)通过field_select选择参考场。(field_select=0,选择顶场做参考;field_select=1,选择底场做参考)
3)根据当前参考场类型可以确定当前场数据在重建帧的存放位置;

16x8块预测
16x8块预测就是把16x16宏块分为两个16x8 块(其中一个16x8块包含一个16x8Y分量块、一个8x4 Cb分量块和一个8x4 Cr分量块),然后分别对每个16x8块做预测。预测过程与场预测类似。

Dual-prime预测
场格式的dual-prime预测使用顶场和底场分别预测结果,然后取平均值。预测过程中,当重建场与预测场类型相同时,使用运动矢量mv[0];当长类型不同时,使用运动矢量mv[2]。根据当前重建场类型可分为两种:

重建场为顶场
重建场为底场
2.5.1.3 场预测参考场选择

场预测需要根据帧类型做不同处理。
P帧中的场预测两个参考场是指最近一次解码的顶场和底场。存在以下几种场景:

当前解码图像为帧格式,则其参考场为同属于上一个重建帧的顶场和底场;
当前解码图像为场格式,并且为重建帧的第二场,因此其中一个参考场为当前帧的第一场。
当前解码图像为顶场,参考场如下图:

当前解码图像为底场,参考场如下图:

B帧中的场预测是用两个最近重建帧中的两场作为参考,如下图
2.5.1.4 帧预测参考帧选择过程

Mpeg2的帧预测与mpeg1没有差异。分为如下两种情况:

当前解码帧为P帧,以最近解码的I/P帧作为参考;
当前解码帧为B帧,以最近解码的两个I/P帧作为参考;
2.5.2 motion vector

由于相邻块mv具有相关性,编码mv时可以使用相邻块mv做预测,而只编码mv差值可以减少编码数据量。解码mv过程中会使用已解码的相邻块的mv做预测。

2.5.3 forming predictions

生成预测块主要是从参考帧或场中读取参考像素。由于mv是半像素精度,半像素需要通过对相邻像素值线性差值方式获取。
对于场预测,每一个宏块必须从两个可用的参考场中选择一个作为参考。场预测或16x8MC再宏块头中编码选择模式motion_vertical_filed_select。

motion_vertical_filed_select为0,选择顶场做参考;motion_vertical_filed_select为1,选择底场做参考。

根据mv和选定的参考场/帧可以得到当前宏块的预测块。

2.5.4 skipped macroblock

Skipped 宏块是指没有编码数据的宏块。如果当前宏块索引macroblock_addr – prev_macroblock_addr > 1,则当前宏块与上一解码宏块间存在skipped宏块。Skipped宏块重建像素值就等于预测像素值。
B帧和P帧中的skipped宏块处理方式不一样,而且帧格式和场格式skipped宏块处理方式也大相径庭。

2.5.4.1 P filed picture

1)如果filed_motion_type是filed_base,需要做预测;
2)需要以同样类型的场做参考;
3)预测mv(下一宏块做mv预测使用)设为0;
4)mv设为0;

2.5.4.2 P frame picture

1)如果frame_motion_type是framed_base,需要做预测;
2)预测mv(下一宏块做mv预测使用)设为0;
3)mv设为0;

2.5.4.3 B field picture

1)如果filed_motion_type是filed_base,需要做预测;
2)需要以同样类型的场做参考;
3)前向/后向/双向预测方向需要与前一宏块一致;
4)预测mv不变;
5)当前块mv与上一宏块mv一样(直接从mv预测获取)

2.5.4.4 B frame picture

1)如果frame_motion_type是framed_base,需要做预测;
2)前向/后向/双向预测方向需要与前一宏块一致;
3)预测mv不变;
4)当前块mv与上一宏块mv一样(直接从mv预测获取)

2.6 combining predictions

最终的预测块需要融合多个预测结果。B帧融合方式为前向预测和后向预测取均值。

2.7 Adding prediction and coefficient data

宏块最终重建结果等于预测结果和变换结果之和。
需要注意的是,对于帧格式最终重建数据的存放与dct_type这个语法元素相关。

对于frame dct,16x16宏块内的6个block是由两场数据交错存放,如下图所示。其中左边为16x16宏块数据,右边为解码输出的宏块中block。
2)对于field dct,16x16宏块内解码输出的block只包含一个场的数据,如下图所示。因此在重建宏块数据时,需要把解码输出的block按行交错存放
mpeg2视频,mp3格式 stm32做函数信号发生器,stm32实现DDS