APP下载

基于S3C6410的MPEG-4视频压缩滤波器的设计研究

2012-06-25冯少奇丁春峰

电视技术 2012年7期
关键词:编解码图表滤波器

冯少奇,丁春峰

(郑州大学河南激光与光电信息技术重点实验室,河南 郑州 450052)

1 DirectShow实现视频压缩

以ARM为代表的微处理器设计技术的发展,极大地推动了嵌入式设备上多媒体处理技术的进步。尤其是最新推出的ARM11系列微处理器,它包含了更多的多媒体处理指令来加速视频处理。S3C6410作为采用ARM11架构的低成本、低功耗、高性能的微处理器,内部集成了包括运动图像处理、显示控制和图像缩放等多个功能强大的硬件加速器。其中多格式编解码器(Multi Format Codec,MFC)支持 MPEG-4、H.263、H.264编解码和 VC1解码。使用S3C6410处理器进行视频处理无需开发视频编解码算法,设计人员可以将精力放在应用软件的开发上,从而提高开发效率。

Windows Embedded CE 6(以下简称WINCE)作为一个为嵌入式微处理器设计的操作系统,它通过添加各种组件来实现不同的功能。DirectShow是WinCE系统的一个多媒体流处理组件,可以很好地实现视频的采集压缩和回放等功能[1]。因此在使用S3C6410处理器的 WINCE系统上,可以很方便地使用DirectShow对CMOS和CCD摄像头输出的视频使用MFC压缩处理。

在设计MPEG-4视频压缩滤波器之前,首先需要熟悉DirectShow,然后制定整个采集压缩过程的滤波器图表,最后完成滤波器的设计。

1.1 DirectShow 简介

系统结构如图1所示,可以简单地分为输入、逻辑处理和输出三部分,其中方框内部的逻辑处理部分是该系统的核心。其包括源滤波器、传输滤波器和渲染滤波器以及管理它们的滤波器图表管理对象。

图1 DirectShow系统结构图

在应用程序中,将若干个滤波器按照特定的方式连接,从而实现不同的功能。滤波器之间通过pin连接,上游滤波器的输出pin连接下游滤波器的输入pin,这些连接在一起的一组滤波器称为滤波器图表,其使用的滤波器以及它们之间的连接决定了多媒体数据流的整个处理过程[2]。

1.2 定制MPEG-4视频采集压缩的滤波器图表

在使用S3C6410处理器的WINCE系统上实现视频采集压缩,就要定制一个滤波器图表,其包括整个图表中需要的滤波器以及它们之间的连接。根据系统功能的要求,定制完成的滤波器图表,如图2所示。其中各个滤波器具有不同的功能,它们之间的连接代表了数据处理的流程。

图2 MPEG-4视频采集压缩的滤波器图表

其中Video capture source作为源滤波器,由CCD或者CMOS摄像头经过软件层封装生成的1个视频源滤波器,该滤波器提供了3个输出pin,分别是Capture pin,Still pin,Preview pin。不同的pin具有不同的功能,Capture pin用于捕获视频流,传递给下游滤波器的输入pin进行MPEG-4算法的视频压缩处理。Preview pin用于视频预览,该pin连接下游的Video Renderer。Video Renderer是基于DirectDraw技术封装的视频渲染滤波器,用于在显示设备上预览视频。该滤波器往往由操作系统自带,无须自行设计。

与Video capture source的capture pin相连接的MFC Encoder滤波器便是将要设计的MPEG-4视频压缩滤波器,它接收上游传递来的YUV420格式的原始视频,由MFC压缩处理后通过输出pin传递给下游的Dump Filter。Dump Filter是DirectShow附带的一个示例滤波器,它接收数据并保存到文件存储系统中,生成原始的数据文件。这里需要注意两点:第一,存储系统可以是硬盘、Flash存储器、SD卡等;第二,在当前的滤波器图表中,Dump filter接收MFC Encoder编码后的视频流,生成的文件后缀为m4v。

纵观整个滤波器图表,除了MFC Encoder需要自行设计,其他滤波器已由系统提供,因此要完成视频压缩,MFC Encoder的设计成为关键环节,下面将详细阐述该滤波器的设计方法及其应用。

2 S3C6410多媒体协处理器及编解码库的介绍

S3C6410的多媒体协处理器通过一个单一的硬件架构支持 H.263P3,MPEG-4 Single Profile,H.264 Baseline Profile和VC1 Main Profile的多格式的视频编解码,它可以同时支持一路视频编码和三路视频解码的多方调用,也可以通过时分复用的方式在进行一路MPEG-4视频编码的同时,支持另一路H.264视频流的解码。它内嵌了一个16位的DSP处理器用于处理数据比特流和控制视频编解码硬件。该协处理器在编解码性能方面十分出色,在全双工模式下支持高达30 f/s的VGA分辨力的视频编解码,在半双工模式下支持高达30 f/s的720×480分辨力和25 f/s的720×576分辨力的视频编解码。

在操作系统层和软件应用层,三星提供了软件包来支持多媒体协处理器的应用,它包括位于操作系统层的多媒体协处理器驱动和位于应用软件层的多格式视频编解码库。其软件架构如图3所示。在下部操作系统区域,多媒体协处理器驱动为操作系统调用多媒体协处理器提供了底层软件支持,同时为上层的用户区域提供了3个API接口函数:CreateFile(open),DeviceIoControl(ioctl),Close-Handle(close)。其中CreateFile创建一个MFC应用实例,DeviceIoControl根据输入的参数不同进行各种视频格式的编解码操作,CloseHandle关闭当前的MFC应用实例。位于上方用户区域的多格式视频编解码库利用操作系统区域提供的上述3个API接口函数,进一步的封装形成了支持多种视频编解码格式的静态库,应用程序开发者使用该静态库提供的一系列函数可以很方便地调用多媒体协处理器。目前该库支持的视频解码格式为MPEG-4 Single Profile,H.263 P3,H.264 Baseline Profile,VC1 Main Profile,而支持的视频编码格式为MPEG-4 Single Profile,H.263 P3,H.264 Baseline Profile[3]。由此可以看出,该设计的MFC Encoder位于图3中最上方的用户多媒体应用程序框架内,主要使用编解码库中的MPEG-4 Single Profile视频编码函数部分。

图3 S3C6410多格式视频编解码软件架构

3 MPEG-4视频压缩滤波器的设计

3.1 设计环境的配置

在WinCE中DirectShow作为一个组件被添加到操作系统中,其SDK提供了一套基类源代码,这些源代码大大降低了滤波器的设计难度。首先需要配置环境,该滤波器的设计工具为Platform Builder for WinCE 6.0(以下简称PB6),它是作为VS2005的一个插件来安装使用的。在PB6下开发的滤波器实质上是一个Win32动态链接库,开发环境的配置是在当前工作目录下的Sources文件中完成。Sources文件中定义了一些变量,Build工具在编译源代码的时候利用它们作为参数进行编译和链接,Nmake工具利用这些参数生成不同类型的输出文件[4]。

对于MFC Encoder滤波器的Sources文件,首先是输入输出参数的基本设置,分别是输出目标的名称(不包括扩展名)TARGETNAME、与之相关的.def文件名称TARGETDEFNAME、编译后目标文件存放路径 RELEASETYPE、输出文件类型为dll以及dll文件的入口函数DLLENTRY,然后是INCLUDES,指定了额外的要包含的头文件的路径。这里需要包含多格式视频编解码库源文件的MFCLib目录,这样在编译和链接阶段编译器才能找到需要的文件。

其中SOURCELIBS指定了编译时需要静态链接的库文件,包括DirectShow基类库和WinCE系统库。接下来是TARGETLIBS,指定了编译时需要动态链接的库文件,除了包含所有SOURCELIBS包含的库以外,还需要包含S3C6410的多格式视频编解码库,文件名为6410MFCLib_s.lib。最后是 SOURCES和 FILE_VIEW_INCLUDES_FOLDER的设置,SOURCES包含了当前项目所有的源文件和资源文件,而FILE_VIEW_INCLUDES_FOLDER包含了所有的头文件。

3.2 设计前的分析工作

设计滤波器,选择一个合适的父类是至关重要的。该设计中的滤波器MFC Encoder接收YUV420格式的视频数据,经过S3C6410的MFC编码后形成M4V格式的视频数据并以字节流的形式输出,因此父类选择CTransformFilter。它有一个输入pin,支持的媒体格式为:主媒体类型MEDIATYPE_Video、子媒体类型MEDIASUBTYPE_YV12,一个输出pin,支持的媒体格式为:主媒体类型MEDIATYPE_Stream、子媒体类型MEDIASUBTYPE_m4v。在该设计中,采用将应用框架和应用逻辑分离的设计理念,这里的滤波器是一个传输滤波器,即支持“输入→编码处理→输出”的应用框架。而应用逻辑部分,即MFC编码的过程。

3.3 应用框架部分的设计

滤波器框架是指完成滤波器功能的一系列必要的操作函数。该设计中的滤波器MFC Encoder父类为CTransformFilter,必须实现以下几个函数的重载操作:

1)CheckInputType

此函数检查输入媒体类型,这里接受的媒体类型为YUV420格式的视频数据。当确定接受媒体类型之后,从类型为CMediaType的输入参数的指针变量mtIn中获取输入视频的宽度、高度、帧速等信息。

2)CheckTransform

该函数不实现任何功能,因此只用一句return S_OK。3)DecideBufferSize

该函数用于内存的分配,值得注意的是视频接收缓冲区大小的设置,S3C6410的MFC手册的建议值是720×480×4×3 byte,因此缓冲区的大小设置为720×480×4 byte即1382400 byte,缓冲区的个数设置为3个。

4)GetMediaType

该函数用于返回当前滤波器支持的输出媒体类型,本滤波器输出的媒体类型为M4V格式的视频数据,因此可以在此设置输出媒体类型。

5)Receive

该函数接收输入的YUV420格式的视频数据,然后传给应用逻辑部分的函数MP4Encode编码压缩处理,因此该函数是实现视频编码压缩的关键。

6)Transform

该函数将编码压缩后的数据传至输出pin,同时将输入端视频数据的时间戳、播放时间、是否为同步点、媒体类型、是否为预滚动数据、是否为连续帧等属性拷贝至输出端。

以上是应用框架部分需要重载函数的设计,其他部分的设计方法与设计一个普通的传输滤波器相同,下文主要介绍应用逻辑部分的设计。

3.4 应用逻辑部分的设计

应用逻辑即实现逻辑功能的部分,首先采集摄像头视频数据后送入MFC编码压缩,然后送出编码后的数据流。该滤波器使用MP4Encode函数来实现视频压缩,主要通过调用S3C6410的多格式视频编解码库中的函数来实现视频压缩,使用的函数如下:

1)SsbSipMPEG4EncodeInit

该函数创建一个MPEG-4编码实例,输入参数包括编码类型(MPEG-4或H.263)、图像宽度和高度、帧速和比特率,函数返回值为MPEG-4编码实例的句柄。

2)SsbSipMPEG4EncodeExe

该函数将YUV420格式的视频数据编码为MPEG-4视频流。

3)SsbSipMPEG4EncodeGetInBuf

获取编码输入缓冲区的内存地址,包括指向缓冲区的地址指针变量,以及以字节为单位的大小。

4)SsbSipMPEG4EncodeGetOutBuf

获取编码输出缓冲区的内存地址,包括指向缓冲区的地址指针变量,以及以字节为单位的大小。

5)SsbSipMPEG4EncodeDeInit

该函数释放当前MPEG-4编码实例所占用的资源,参数为当前实例的句柄。

函数MP4Encode的具体工作流程如图4所示,当所有设计工作完成之后,通过PB6的build工具编译源文件,生成名为MFCEncFilter.dll的动态库文件,这就是设计完成的S3C6410下的MPEG-4视频压缩滤波器MFC Encoder。

4 MPEG-4视频压缩滤波器的实践应用

4.1 在Wince系统中注册设计的滤波器

与桌面操作系统不同的是,WinCE需要自己填写注册信息,而不是使用自注册函数DllRegisterServer。在platform.reg文件中,为该滤波器写入注册信息,包括滤波器的名称、CLSID、对应的dll文件名称、输入pin的属性和媒体类型、输出pin的属性和媒体类型等。

4.2 使用滤波器图表采集压缩视频

在WinCE中注册之后,就可以使用图2定制的滤波器图表进行视频采集压缩处理。通过测试,在640×480分辨力的30 f/s的情况下,视频编码效率高,压缩后的图像质量令人满意。经过统计,在运动场景下398帧的YUV420格式的视频数据大小为175 Mbyte,经过编码压缩后的大小为 5.18 Mbyte,压缩比率约为 35∶1[5]。

5 总结

通过整个设计过程可以看出,在WinCE系统下设计一个基于DirectShow架构的硬编码滤波器,首先必须详细地了解该多媒体处理器的硬件架构,然后充分地熟悉其驱动程序以及提供的编解码库,从而为后续封装设计打下坚实的基础。而后要熟悉DirectShow架构,掌握DirectShow滤波器的设计方法,最后利用编解码库设计滤波器。因此,对多媒体处理器软硬件的熟悉和DirectShow滤波器设计方法的掌握是该滤波器设计的关键。

图4 MP4Encode函数流程图

[1]何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[2]陆其明.DirectShow开发指南[M].北京:清华大学出版社,2003.

[3]ISO/IEC 14496,MPEG-4 第10 部分:高级视频编码 AVC[S].1998.

[4]汪兵.Windows CE嵌入式高级编程及其实例详解[M].北京:中国水利水电出版社,2008.

[5]宋睿,姜秀华,史惠.移动多媒体广播压缩域视频质量客观评价[J].电视技术,2010,34(S1):204-206.

猜你喜欢

编解码图表滤波器
1553B总线控制器编解码设计
为多重编解码世界做好准备
大型民机试飞遥测视频编解码方法研究
从滤波器理解卷积
开关电源EMI滤波器的应用方法探讨
双周图表
双周图表
双周图表
图表
基于Canny振荡抑制准则的改进匹配滤波器