更新时间 内容
2020.12.11 初版
2021.01.26 更新预测方式内容

mpeg2是mpeg1标准(mpeg1介绍请点这里)的扩展,主要增加以下特性:

  • 支持interlace视频
  • 支持可伸缩编码(由于该特性工作中用不到,没有深入分析)

1.码流结构

Mpeg2的码流语法结构大致与mpeg1一致,只增加了部分扩展元素。

  1. 如果第一个sequence_header之后没有紧跟一个sequence_extension结构,则该码流遵循mpeg1标准,否则是mpeg2;
  2. 如果第一个sequence_header之后紧跟一个sequence_extension结构,则后续所有sequence_header之后都需要有sequence_extension结构。也就是说,MPEG2标准中sequence_header后需要紧跟sequence_extension,而mpeg1没有这个规定,因此可以用该规则判定码流是否为mpeg1;
  3. 两个sequence_header之间至少存在一个picture数据,这也意味着sequence_extension后不能紧跟这sequence_end语法;
  4. 如果码流中存在sequence_extension(即该码流为mpeg2),picture_header后需紧跟一个picture_coding_extension,并且picture_coding_extension只能在picture_header之后,不能在其他位置;
  5. Group_of_picture_header后的第一帧需要是一个I帧。

2.解码过程

解码流程如下图所示:

按流程图中各个模块可以把解码过程分为以下几个步骤:

2.1 variable length decoding

mpeg2变长编码的解码过程与mpeg1类似,主要解析码流中的存放的DC、AC系数,分为帧内编码宏块DC和其他系数解码。差异主要有以下两点:

  1. 帧内编码DC系数重置值,mpeg2会根据picture_coding_extension中的intra_dc_precision值做DC系数重置。
  2. 帧内编码宏块VLC解析表不同,mpeg2会根据intra_vlc_format选择使用不同的VLC表。

2.1.1 DC coefficients in intra blocks

I宏块DC系数解析与其他系数解析有些差异,因为DC参数数值较大,而相邻块DC系数具有相关行,因此DC系数解析会用上一个块的DC系数做预测值。
DC系数最终会根据码流中的元素dc_dct_size 和dc_dct_differential以及DC预测值来计算,计算过程如下:

在以下几种情况,DC系数预测值需要重置。重置的数值与intra_dc_precision相关。

  • slice的第一个宏块
  • 遇到非I宏块时
  • 遇到skipped 宏块时

2.2 inverse scan

上一步解析出来的DC、AC系数是以游程编码方式存放,反扫描这一步主要把系数处理成矩阵格式。Mpeg1/2主要差异在于:mpeg1只支持zigzag扫描,而mpeg2需要通过picture_coding_extension中的alternate_scan选择两种扫描方式。

2.3 inverse quantisation

量化计算过程与量化权重矩阵quant_weight_matrix和量化系数q_scale相关,mpeg1/2主要差异在于:

  1. mpeg2标准中的帧内编码宏块DC系数需要乘以intra_dc_mult,该值与intra_dc_precision相关;
  2. 量化权重矩阵可以存放在sequence_header中,也可以由quantiser_matrix_extension更新;
  3. Mpeg1标准在slice header或mb header中直接编码q_scale,而mpeg2在slice header或mb header中编码q_scale_code,并在picture_coding_extension中编码q_scale_type,再由两者共同决定q_scale;
  4. Mismatch control计算公式不一样。

2.4 inverse DCT

Mpeg12反DCT变换过程是一样的,不再赘述。

2.5 motion compensation

由于mpeg2支持场格式,运动补偿方式要考虑场预测,因此与mpeg1由较大差异。流程如下图所示:

2.5.1 预测方式

Mpeg2由两种主要的预测方式场预测和帧预测和两种特殊的预测方式16x8块运动补偿和dual-prime方式;

  1. 场预测。使用之前解码的场作为参考进行预测;
  2. 帧预测。使用之前解码的帧作为参考进行预测;
  3. 16x8运动补偿。6x16宏块分为上下两个16x8块,对于每个预测方向,都有两个mv,第一个用于宏块上方的16x8块,第二个用于宏块下方的16x8块。如果是双向预测,则存在4个mv。
  4. Dual-prime

宏块的预测方式选择与当前当前宏块所在帧的格式(帧/场格式)相关,由宏块头语法元素(frame_motion_type/field_motion_type)指定。帧格式支持的预测方式包括:场预测、帧预测、dual_prime;场格式支持的预测方式包括:场预测、16x8预测以及dual-prime。

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

  • 帧预测
    帧预测处理方式与mpeg1一致。预测宏块的依赖信息包括参考帧和mv,根据预测宏块以及参考帧数据可以得到预测宏块数据。
  • 场预测
    帧图像的场预测依赖的信息有mv、field_select。前向或后向预测有两个mv,分别表示顶场和底场运动矢量信息。如上图所示,预测过程可分为以下几个步骤。
  1. 以顶场为例,根据mv可以找到顶场对应的参考宏块。由于参考图像为帧格式,需要把参考宏块分为顶场(宏块数据的奇数行)和底场(宏块数据的偶数行);
  2. 根据field_select选择宏块的顶场或顶场作为预测场,再由mv判断是否需要做插值,可以得到顶场的预测场;(如果field_select等于0,使用顶场做预测,否则使用底场)
  3. 同理可得到底场的预测场结果,把顶场和底场的预测场结果分别作为宏块的奇数/偶数行,从而得到预测宏块。
  • 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]。根据当前重建场类型可分为两种:

  1. 重建场为顶场
  2. 重建场为底场

2.5.1.3 场预测参考场选择

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

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

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

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

2.5.1.4 帧预测参考帧选择过程

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

  1. 当前解码帧为P帧,以最近解码的I/P帧作为参考;
  2. 当前解码帧为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这个语法元素相关。

  1. 对于frame dct,16x16宏块内的6个block是由两场数据交错存放,如下图所示。其中左边为16x16宏块数据,右边为解码输出的宏块中block。
  2. 2)对于field dct,16x16宏块内解码输出的block只包含一个场的数据,如下图所示。因此在重建宏块数据时,需要把解码输出的block按行交错存放

mpeg2视频解码标准简介相关推荐

  1. mpeg1视频解码标准简介

    1.概述 Mpeg1是上世纪90年代提出来的视频标准,比较古老了.其特性包括: 视频压缩编码,压缩后码率在 1.5Mbps,可用于视频传输和视频存储:编码前必须将视频图像转换成逐行扫描图像. 录像机的 ...

  2. MPEG-2标准简介

    现有MPEG-2视频标准的技术规范集包括6类(profile)4级(level)组成,并采用分级编码.所谓级是指MPEG-2的输入格式,标识从有限清晰度的VHS 质量图象到HDTV图象,每一种输入格式 ...

  3. MPEG2视频编码简介

    MPEG-2视频编码简介 MPEG-2是一组用于视音频压缩编码及其数据流封装的国际标准.它定义了编解码技术及数据流的传输协议:制定了MPEG-2解码器之间的共同标准.编码是MPEG-2标准的核心内容之 ...

  4. 【转】dicom通讯的工作方式及dicom标准简介!!

    转自:dicom通讯的工作方式及dicom标准简介 - assassinx - 博客园 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是 ...

  5. 以太网标准-802.3各个标准简介

    以太网标准-802.3各个标准简介 1 Experimental Ethernet 1973 2.94 Mbit/s (367 kB/s) over coaxial cable (coax) bus, ...

  6. BT.656标准简介-内同步并口-以及波形测量

    BT.656标准简介-以及波形测量 1.定义 2.协议 2.1. 帧的概念(Frame) 2.2. 场的概念(field) 2.3. 每一行的组成(Lines) 2.4. EAV和SAV 3 波形测量 ...

  7. [医疗信息化][DICOM教程]DICOM标准简介

    [医疗信息化][DICOM教程]DICOM标准简介 使用OsiriX的DICOM标准简介 内容 介绍 什么是DICOM 医院系统内的图像传输 了解DICOM服务 OsiriX提供的DICOM服务 其他 ...

  8. dicom通讯的工作方式及dicom标准简介

    转自:http://www.cnblogs.com/assassinx/p/3223460.html 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两 ...

  9. RS-232、RS-422与RS-485串口标准简介

    RS-232.RS-422与RS-485串口标准简介 一.RS-232C.RS-422与RS-485的由来 RS-232.RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA ...

最新文章

  1. 转载 Sqlerver 计算 MD5
  2. 由《惊天魔盗团》改编的VR游戏登陆Gear VR
  3. test argument is not supported anymore. Use chainer.using_config
  4. jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
  5. 剑指offer--不用加减乘除做加法
  6. Linus中帮助命令man
  7. 私有静态成员变量,在多线程环境,别的线程会修改当前线程的变量值
  8. 11gR2集群件任务角色分离(Job Role Separation)简介
  9. of python检索文献 science web_查SCI文献,不知道检索方法怎么行!
  10. python3+selenium入门12-警告框处理
  11. Single-Shot Calibration:基于全景基础设施的多相机和多激光雷达之间的外参标定(ICRA2021)...
  12. 录计算机,电脑屏幕上的操作怎么录制下来?
  13. [笔记]_ELVE_正则表达式
  14. 关于 WARN conf.Configuration: bad conf file: element not property
  15. 无论夫妻还是情人,能陪你一生的男人,都有这个特征
  16. 世博之旅 (1/2)
  17. [note] 微电子学概论(二) PN结 MOS和MOSFET
  18. python安装及环境配置
  19. 哈工大形式语言与自动机2022期末试题
  20. 《痞子衡嵌入式半月刊》 第 13 期

热门文章

  1. 8tupian图片加密平台v2.7 对图片进行加密的网络平台+包含三种模式上传图片+可二次开发修改
  2. (推荐)关分布式系统的几个核心问题
  3. SQL Server中的LAG函数与LEAD函数介绍
  4. 支持swift3.0的开源库
  5. Java Types
  6. OpenGL函数思考-glRotatef
  7. 机器人 郑佳佳_华为牛人表白女神遭拒,自制女机器人结婚,牛!
  8. 有道云笔记新版上线 深化本土应用合作
  9. innblock | InnoDB page观察利器
  10. vue项目实战-4.前端渲染.微信小程序