MPEG-4/H.264视频编解码工程实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第3章 Xvid实现MPEG-4视频编解码

本章要点:

▶ Xvid是优秀的MPEG-4视频编解码开源算法

▶ Xvid CODEC的结构及功能函数结构清晰,并共用底层基础模块

▶ 剖析Xvid视频编码过程

▶ 剖析Xvid视频解码过程

▶ MMX/SSE实现Xvid的底层模块汇编优化

视频编码及解码是数字视频应用的核心技术,如可视电话、视频监控、视频点播等均需要视频的编解码处理。基于MPEG-1的VCD,以及基于MPEG-2的DVD在过去几十年风靡一时。为满足多媒体技术的发展以及人们更高的质量需求,国际标准组织ISO于1998年制定了MPEG-4音视频编解码标准,其码流更低、工作档级更丰富,如在兼容传统视频编码标准的基础上,增加了基于对象的编解码处理,交互性更强。过去几年甚至现在,MPEG-4仍然是视频监控中的视频编码标准的主流。MPEG-4的开源工程主要包括DivX、Xvid。目前有不少视频编码平台移植或开发应用都基于Xvid算法,且被公认为最优秀的开源MPEG-4编解码实现工程之一。本章在简要介绍MPEG-4视频编码的原理基础上,对Xvid实现MPEG-4的视频编码和解码过程做了详细分析。

3.1 概述

视频编解码已经是一个非常炽热的行业,有许多公司企业基于软硬件平台:ASIC、DSP、FPGA、ARM或通用CPU等实现了视频编解码处理。视频监控、视频会议、网络视频、数字硬盘录象机、MP4等影音设备、影音文件都无一不使用了视频的编码和解码。视频编解码是一个有广大应用前景的行业,3G移动通信中的视频编码3G-324M指定H.263为强制性基准协议(附录中的扩展标准除外),并将MPEG-4制定为推荐视频编码标准。在主流多媒体压缩板卡、嵌入式视频编码卡、视频会议等数字视频系统中,视频编解码算法占据了核心地位。

Xvid是开源的MPEG-4视频编解码CODEC,并采用标准C语言开发,部分核心函数实现了MMX/SSE/SSE2媒体汇编指令优化。Xvid工程实现了MPEG-4标准中的ASP (Advanced Simple Profile),且编解码效率高,在双核Intel CPU 1.6G、1G内存配置的计算机上,Xvid能实时运行4路D1的视频编码。

1.基于对象的MPEG-4视频编码

MPEG-4(ISO/IEC14496)算法是ISO的运动图像专家组MPEG(Moving Pictures Expert Group)在1998年发布的。其设计初衷是第二代图像编码标准,即对象编码。不过,该算法并不包含对象的分割方法,只是提供了对分割对象后的编码方法。然而,对象分割目前还是一个难点,还没有突破实际应用。所以,目前的MPEG-4视频算法应用基本都是基于像素的传统视频编解码,即混合编码技术,编码对象不是目标对象而是图像宏块,但算法中仍然有视频编码对象VOP的概念,即把整帧图像作为一个对象进行编码。

2.Xvid视频编解码

Xvid以动态库和静态库的形式供应用程序使用。本书以静态库为对象,展现视频编码和解码的设计过程。通过代码分析深入掌握视频编解码的工作原理。Xvid的MPEG-4算法的视频编码和解码在同一个工程中。视频编码使用一个函数,根据传入的参数决定初始化、编码和销毁编码器。Xvid视频解码的函数调用类似编码器。

Xvid的MPEG-4视频编码支持ASP@L5档级,并且绝大部分的视频应用一般不超过720×576的分辨率,尽管Xvid最高可支持4096×4096分辨率的视频编码。实际上在视频监控应用中,CIF(352×288)分辨率更为常用。另外,尽管Xvid支持高档应用,如B帧编码、1/4精度像素和全局运动补偿GMC,但是在使用如DSP硬件编码时,上述功能通常做了删减,即实现MPEG-4的SP档级。而在PC机上开发Xvid MPEG-4算法时,上述高档应用可以考虑打开,但是大量额外的计算量与获得的编码性能并不成比例。所以在后面的介绍中,以MPEG-4的SP档级为主要介绍对象。

3.Xvid格式文件播放

目前网络上DivX和Xvid格式的电影、影音文件是并存的。操作系统只安装DivX5解码器不能播放Xvid格式的文件,而仅安装Xvid,就可以顺利播放DivX5格式的文件,不过在播放DivX5文件的时候,速度可能并不令人满意。Xvid播放DivX5的文件还不是很完善。目前来讲,虽然Xvid与DivX5对比,优势并不明显,但是用户均看好Xvid,首先它的算法源码公开,这也就使得有更多的人投入到Xvid的研发之中。另外,由于完全重写DivX的源代码,新的Xvid去除了DivX的Bug;目前Xvid的开发人员有很多都是当初DivX的研发人员,对DivX的技术Bug了解得较为透彻,重写之后Xvid的优势可见一斑。另外,DivX4、5虽然版本不断更新,但是功能并没有提高多少,优势也并不明显。流行的视频CODEC都支持Xvid:Transcode、Mencoder、Mplayer等。