CMMB移动数字电视接收系统的设计与实现_图文

隶南大?粤
硕士学位论文

CMMB移动数字电视接收系统
的设计与实现

专业名称:邀电王堂皇固签电壬堂
研究生姓名: 导师姓名:

曾筮 睦生垫塾援

201 0年5月

\呲Y州1呲7叭6帆m1帆6玳611\\0吣
DE SIGN AND

IMPLEMENTATION SYSTEM

OF

CMMB MOBILE

DIGITAL TELEVI SI

RECEIVER

A Thesis Submitted to Southeast University For the Academic Degree of Master of Engineering

BY ZENG

Min

Supervised by Prof.LU Sheng—li

School of Electronic Science and Engineering Southeast University

May.2010

东南大学学位论文独创性声明

本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所 知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果, 也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本 研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。

研究生签名:望丛日期:2蝴鲨盈
东南大学学位论文使用授权声明

东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印件和电 子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相 一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布(包括以电子信息形式刊登) 论文的全部内容或中、英文摘要等部分内容。论文的公布(包括以电子信息形式刊登)授权东南大
学研究生院办理。

一躲妞…名:陋期迸脚

摘要

摘要
中国移动多媒体广播(China Mobile Multimedia Broadcasting,CMMB)是国家广电总局正式颁 布的手机电视行业标准,它是国内自主研发的第一套面向手机、PDA、MP4和笔记本电脑等多种移

动终端系统的移动数字电视标准。本论文设计的CMMB移动数字电视接收系统能够以25帧/j眇的帧 率,实现电视节目稳定流畅的播放。 论文设计了CMMB移动数字电视接收系统的硬件和软件方案。硬件平台采用三星¥3C6410芯 片作为应用主处理器,CMMB解调器芯片采用创毅视讯公司的IFl01,两者通过SPI接口实现通信。
软件平台基于Windows CE 6.0操作系统,CMMB接收系统软件部分的设计与实现主要分为二个部

分:第一部分,CMMB解调器驱动层软件的设计与实现,通过解调器驱动,应用程序可以向解调器 发送控制命令和读取CMMB数据流;第二部分,多媒体流管理层的设计与实现,确定采用微软的 DirectShow架构设计多媒体流管理层,并实现了CMMB解复用、音频解码和视频解码等多媒体组件。
视频解码使用S3C6410处理器的多媒体格式编解码(Multi Format Codec,MFC)模块,采用硬件进行

H.264视频解码,相对于采用纯软件解码,提高了解码效率,降低了CPU利用率。 测试结果表明:本论文的CMMB移动数字电视接收系统能够正常搜索到系统所在地的频率、显 示频道列表和播放音视频节目,还能够以25帧/秒的帧率稳定流畅地播放电视节目。在与SIRF
A3

平台的CMMB接收系统进行对比测试时,本论文的CMMB接收系统的CPU利用率比SLRF A3平 台低了28%,搜索频道时间减少了约2秒。

关键词:中国移动多媒体广播,移动数字电视,DirectShow,解复用,解码过滤器

Abstract
CMMB(China Mobile Multimedia Broadcasting)is omcially identified as the mobile di西tal
industry standards by the State Administration of Radio Film and Television.It is mobile di罾tal TV standard for mobile


TV

domestic self-developed

phone,PDA,m4,laptop

and other mobile terminal systems.1’lle
at

CMMB mobile digital
rate

TV receiver system

designed by this thesis Can play TV programs steadily

frame

of 25 flame/second. The hardware and software programs of CMMB mobile diI西tal TV receiver system
arc

designed in

this thesis.The hardware platform uses Samsung¥3C6410 microprocessor as the application host
processor and

SPI port.111e software

adopts Irmofidei IF I O 1 as CMMB demodulator chip.ney communicate诵th each other by platform is based on Windows CE 6.0 operating system under which design and

implementation of CMMB mceiver system are divided into two parts:ne first part,designing and implementing the driver of CMMB demodulator,through which application Can send control commands
and read

CMMB

data stream;The second part,designing and

implementang multimedia

stream

management,multimedia stream management use Microsoft Dir∞tshow framework,and develop CMMB demultiplex,audio decoding and video decoding to be separate multimedia components.Video decoding
USes the S3C64 l O processor MFC(Multimedia Format Codec)module.which uses H.264 hardware
pure

decoding.Compared、)Iritll
utilization. The
test

software decoding,it

improves

decoding efficiency and reduces CPU

results show that CMM[B mobile digital TV receiVer

system of this thesis is able

to search the

frequency normally,display
programs steadily
SIJi下A3.the

channel list and play audio and video programs.This system Can also play TV

at frame rate of 25

flame/second.Compared、)I,im
time.

me CMMB receiver syStem based

on

syStem implemented

by this thesis is 28%lower from the aspect of CPU utilization and 2

seconds shorter from the perspective of search channel

Key words:China Mobile Multimedia Broadcasting;Mobile Decoder Filter

digital Tv;DirectShow;Demultiplex;



4.4本章小结…………………………………………………………………………………………38

第五章测试结果与分析……………………………………………………………………………40
5.1系统的配置和编译……………………………………………………………………………….40
5.2功能测试………………………………………………………………………………………………………………………41

5.3性能测试……………………………………………………………………………………………………………………一43 5.4本章小结………………………………………………………………………………………….49 总结与展望…………………………………………………………………………………………………………50
总±;占……………………………………………………………………………………………………………………………………50 展望……………………………………………………………………………………………………………………………………50

致谢……………………………………………………………………………………………………………………………..52

参考文献……………………………………………………………………………………………53 在学期间发表论文清单……………………………………………………………………………55

III

第一章绪论

第一章绪论
1.1论文研究背景
中国移动多媒体广播(China
Mobile Multimedia

Broadcasting,CMMB)是国内自主研发的第一

套面向手机、PDA、MP4和笔记本电脑等多种移动终端系统的移动数字电视标准,利用S波段和U 波段信号实现‘‘天地”一体覆盖、全国漫游,支持25套电视节目和30套广播节目,2006年10月24 日,国家广电总局正式颁布了中国移动多媒体广播(俗称手机电视)行业标准,确定采用我国自主研 发的移动多媒体广播行业标准[11。 CMMB规定了在广播业务频率范围内,移动多媒体广播系统广播信道传输信号的帧结构、信道 编码和调制,该标准适用于30MHz到3000MHz频率范围内的广播业务频率,通过卫星或地面无线 发射电视、广播、数据信息等多媒体信号,可以实现全国漫游【2】。卫星信号的特点是覆盖范围广, 但由于采用2.6GHz的频率,建筑物的穿透性差,因此不适宜在建筑物密集的城市直接使用【3】。地 面覆盖采用470MHz.860MHz的U波段,因为对建筑物穿透性好,而且由于信号传播距离相比卫星 信号短很多,因而很容易实现人口密集城市良好的室内外接收。为了实现高效的频谱利用,CMMB
物理层采用了时分复用的复用方式。每1秒的数据帧被划分为40个时隙,每个时隙占用25ms。不

同的节目(频道)可以占用一个或多个时隙,目前是每个节目占用4个时隙14J。 一个完箍的CMMB数字电视系统主要包括发送前端、传输设备和接收终端三个部分15】。发送前 端主要有音视频实时编码器、复用器、加密机、信号调制器等设备,完成对电视节目源的数字化编 码、加密、传输信号调制等工作;传输设备负责将前端播发的数字电视信号通过大功率发射机传送 到接收终端接收天线;接收终端将接收到的数字电视信号解码还原成高质量的电视节目音视频信号,
并且输出到显示设备。

CMMB移动数字电视接收系统属于CMMB数字电视系统的接收终端部分,CMMB接收系统是 个典型的嵌入式系统。嵌入式系统是一种对功能、可靠性、成本、体积、功耗有严格要求的专用计 算机系统,它以应用为中心,以计算机技术为基础,且软硬件可裁剪。它包括微处理器、微控制器、 定时器、存储器及一些其他外部接D16]。本论文的移动数字电视接收系统,它除了具有普通数字电 视机项盒的典型配置,如调谐解调器、主芯片、内存等之外,还包括用于显示的LCD触摸屏、用于
存储的NAND Flash。

从功能上来说,CMMB接收系统结构大体上可以分成两部分:信道解调部分和信源解码部分。 信道调制部分是CMMB接收系统的前端,也叫调谐解调器,它负责对数字电视射频信号进行解调接 收,针对不同的信道需要配备不同的信道解调器,在CMMB接收系统中需要使用针对CMMB的信

道解调器【|丌。信源解码部分是CMMB接收系统的后端,它主要完成从复用帧结构(Mul邱l懿Frame
Structure,MFS)流输入到解码后的音视频输出之间的所有功能。所以信源解码包括MFS流的解复 用、音频解码和视频解码等,是CMMB接收系统的核心部分。 通过对CMMB接收系统的充分了解后知道:嵌入式终端设备硬件资源相对有限,而MFS流的 解复用和音视频的解码对硬件资源要求较高。所以本论文将在合适的硬件平台下,通过合理的软件 设计方案解决这个矛盾,最终实现CMMB移动数字电视接收系统。

1.2论文研究工作
本论文的主要工作有:在熟悉CMMB标准和嵌入式系统开发的基础上,进行整个CMMB接收 系统的方案设计制定,并完成软件系统的设计开发。论文是基于微软的Windows CE 6.0操作系统,


东南大学硕士学位论文

采用三星¥3C6410微处理器,以及创毅视讯公司的CMMB解调模块,实现CMMB移动数字电视接 收系统。最后将对论文实现的CMMB接收系统进行功能和性能测试。 从扩展性和使用性的角度考虑,CMMB接收系统应该满足如下的需求:(1)播放效果流畅,视频 播放能达到25帧,秒的帧率;(2)音频数据和视频数据能够满足同步播放;(3)软件系统的内存使用可 以满足移动终端硬件资源的限制,且能够长时间稳定运行。 论文的具体工作如下:


研究CMMB通讯协议,调研移动数字电视的应用方案,根据本论文对硬件的要求并参考当前主 流的设计方案确定硬件平台,确定以三星¥3C6410微处理器和创毅视讯公司的解调器IFl01为 核心的硬件设计方案。

?

确定软件系统平台为Windows CE 6.0操作系统,分析了Windows

CE

6.0操作系统的架构,实现

了CMMB解调器IFl01在Windows 口,方便上层应用软件的调用。


CE

6.0下的驱动,该驱动实现为流接口驱动,对外导出接

确定采用微软的DirectShow架构设计多媒体流管理层,并实现了CMMB解复用过滤器、音频 解码过滤器和视频解码过滤器等多媒体组件。这些多媒体组件在多媒体流管理层控制下,通过 管道连接成一个过滤器链,共同完成多媒体数据的处理。其中解复用过滤器是整个数据的“引 擎”,而视频解码过滤器将使用¥3C6410处理器特有的多媒体格式编解码(Multi
Format Code,c,

MFC)模块,采用硬件进行H.264视频解码,相对于采用纯软件解码,提高了解码效率,降低
了CPU的利用率。


编写应用软件,实现了用户操作界面,结合CMMB的具体功能,本次设计将功能分为三个方面, 分别是节目播放、搜索频道和系统设置。具体设计中将用户界面的操作封装在一个控制类 CcmmbuiDlg中,该类负责响应用户的操作,当用户界面窗口程序接收到用户的指令后,将会
在控制类CcmmbuiDlg中进行处理。

_

编写测试程序,对CMMB移动数字电视接收系统进行功能测试和性能测试。功能测试主要包括 频率搜索、频道列表显示和节目播放。性能测试包括播放流畅性测试、CPU利用率测试、频率 搜索时间测试、播放稳定性测试和音视频同步测试。

1.3论文组织结构
根据论文所涉及的工作,将论文的结构安排如下: 第一章,绪论。简要介绍了论文的研究背景、主要研究工作和论文的章节安排。 第二章,CMMB接收系统原理。首先简要的介绍了CMMB协议,主要包括了三个部分,广播 信道帧结构和信道编码调制、复用原理、电子业务指南。接着介绍了移动数字电视接收系统原理图, 对CMMB接收系统的典型结构做了初步分析。 第三章,CMMB接收系统的方案设计。本章首先给出CMMB移动数字电视接收系统的整体设 计方案,包括硬件方案设计和软件方案设计。硬件平台选择三星公司的¥3C6410微处理器和创毅视 讯公司的CMMB解调器IFl01,二者在业界均得到了广泛的认可;软件方面,将采用微软公司的
Windows
CE

6.0操作系统,软件系统主要包括CMMB解调器驱动层软件、多媒体流管理层软件和上

层应用软件。解调器驱动层软件将采用典型的流接口驱动架构,多媒体流管理层软件将基于
DirectShow架构实现。

第四章,CMMB接收系统软件的设计与实现。本章基于第三章选定的平台,实现了CMMB解 调器驱动层软件、多媒体流管理层软件和上层应用软件。其中,多媒体流管理层软件在整个软件系 统中的作用比较关键,在直接调用CMMB解调器驱动层接口进行多媒体流接收的同时,还要响应上


层应用软件的操作,控制多
第五章,系统配置和功

了功能测试和性能测试,功 测试包括播放流畅性测试、 试,并对测试数据进行了分



东南大学硕士学位论文

第二章CMMB移动数字电视接收系统原理
本章将阐述CMMB移动数字电视接收系统的原理,主要分为两个方面:CMMB协议介绍和移 动数字电视接收系统原理图。CMMB是利用大功率S波段卫星信号覆盖全国,利用地面增补转发器 同频、同时、同内容转发卫星信号,补点覆盖卫星信号盲区,利用无线移动通信网络构建回传通道,
从而组成单向广播和双向交互相结合的移动多媒体广播网络。

地面发射中心将信号发向s波段同步卫星后,同步卫星对接收到的信号进行转发,转发后的S 波段信号直接被地面的接收终端接收下来,该卫星还通过分发信道将信号发送给增补转发器处理, 通过增补转发器处理后转发,对卫星覆盖的阴影区域进行增补。移动多媒体广播总体架构如图2.1
所示:

2.1

CMMB协议基础

2.2.1广播信道帧结构和信道编码调制
本节概括描述移动多媒体广播系统广播信道物理层结构。广播信道物理层通过物理层逻辑信道 (PLCH)为上层业务提供广播通道。物理层逻辑信道分为控制逻辑信道(CECll)和业务逻辑信道 (SLCI-I)。控制逻辑信道用于承载广播系统控制信息,业务逻辑信道用于承载广播业务。物理层只有 一个固定的控制逻辑信道,占用系统的第0时隙发送。业务逻辑信道由系统配置,每个物理层带宽 内业务逻辑信道的数目可以为l~39个,每个业务逻辑信道占用整数个时隙,如图2.2所示:



第二章CMMB移动数字电视接收系统原理











cLc--l s唧。l
上 上

s比H。l…。I sMm I…。I sM删I
PLcH







信道编码、调制、时隙分配







1,


时隙









时隙


、,


l(+2


时隙
38


时隙
39

时隙


时隙


时隙


时隙 时隙

时隙 时隙
k十l

图2.2 CMMB广播信道物理层逻辑信道

物理层对每个物理层逻辑信道进行单独的编码和调制,其中控制逻辑信道(占用时隙O)采用 固定的信道编码和调制模式:RS编码采用RS(240,240),LDPC编码采用1/2码率,星座映射采用 BPSK,扰码初始值为选项O。业务逻辑信道的编码和调制模式根据系统需求可灵活配置,配置模式 通过系统控制信息向移动终端广播。根据编码和调制参数不同,物理层可提供不同的传输净荷,具
体的参数配置由发送端确定。

物理层逻辑信道的编码和调制功能框图如图2.3所示,来自上层的输入数据流经过前向纠错编 码、交织和星座映射后,与离散导频和连续导频复接在一起进行OFDM调制。调制后的信号插入帧 头后形成物理层信号帧,再经过基带至射频变换后发射。
-.

—■

oFDM

频域符

———+

扰码

OFlDM




号形成

调制

成帧

基带到 射频的 变换

—●

_.

图2.3物理层功能框图

物理层信号每1秒为1帧,也称为广播信道帧,划分为40个时隙。每个时隙的长度为25ms, 包括1个信标和53个OFDM符号。基于时隙划分的帧结构如图2_4所示:

图2-4基于时隙划分的帧结构


2.2.2复用原理
在移动多媒体广播
的封装和排列,使其能

视频基本流和数据流封 的复用子帧中,控制信

图2.5复用在移动多媒体广播前端系统中的位置 多个复用帧构成一个广播信道帧(广播信道帧在2.2.I节中已经描述),如图2-6所示:

图2-6广播信道帧结构

一个复用帧由复用帧头、复用帧净荷和填充组成,每个复用帧由MF ID唯一标识,MF ID取 值范围为0,--39,其中MF—ID=0的复用帧用于承载控制信息,其它的复用帧用于承载业务。填充部 分使用0xFF填充。而复用帧净荷由一个或多个复用子帧组成,最多包括15个复用子帧。复用子帧 由子帧头、视频段、音频段和数据段组成,如图2.7所示:
复用子帧

\\
视频段 音频段 数据段

子帧头

图2.7复用子帧示意图

2.2.3电子业务指南
电子业务指南(Electronic
Service

Guide,ESG)是一种多媒体广播信息导航业务。通过ESG能够

获得多媒体广播业务的相关信息,如业务名称、播放时间、内容梗概等,便于终端用户快速检索和 访问‘91。在移动多媒体广播系统内中,ESG由基本描述信息、数据信息和节目提示信息构成,具体


第二章CMMB移动数字电视接收系统原理

结构如图2.8所示:

图2.8 ESG的结构图

基本描述信息描述了数据信息在ESG业务的分配情况、更新状态等,在控制逻辑信道中(CLCH) 中传输。数据信息描述了与移动多媒体广播业务相关的业务信息、业务扩展信息、编排信息、内容 信息和业务参数信息,作为一个特殊的移动多媒体广播业务传输,一般占用时隙2和时隙3。而节 目提示信息描述了业务当前时间段和下一时间段播放节目的概要信息,和移动多媒体广播音视频业 务一起传输。 数据信息的构成和各单元之间的关系如图2-9所示:
f时间a1 l时间a2 l{
?

l业务参数1
业务参数2

l时间aIl
业务1 扩展信息1

l时间b1
时间b2

业务2
扩展信息2



内容1 内容2

业务参数3

时间bn

?

业务n
l扩展信息n

时间m1

内容3

业务参数n

I时间m2 l时间mn

_{

内容n
内容信息

l业务参数信息

业务信息

业务扩展信息

编捧信息

图2.9 ESG数据信息

业务扩展信息由若干业务扩展元素构成,每个元素描述了业务详细的属性描述。 编排信息由若干编排元素组成,每个元素描述了节目的起始时间、节目名称等信息。 业务参数信息由若干业务参数元素构成,每个元素描述了访问业务所需的参数,如音视频码率、
帧频等。

业务信息由若干业务元素构成,每个元素描述了业务的属性,如业务标识、名称、语种等。 内容信息由若干内容元素构成,每个元素描述了节目的属性,如持续时间、节目介绍、关键词
等。



东南大学硕士学位论文

2.2移动数字电视接收系统原理图
首先,移动数字电视接收系统是个典型的嵌入式系统。嵌入式系统是一种对功能、可靠性、成 本、体积、功耗有严格要求的专用计算机系统,它以应用为中心,以计算机技术为基础,且软硬件 可裁剪。它包括微处理器、定时器、存储器及一些其他外部接口。本论文的移动数字电视接收系统, 它除了具有普通数字机顶盒的典型配置,如调谐解调器、主芯片、内存等之外,还包括用于显示的
LCD触摸屏、用于存储的NAND Flash。

CMMB标准并没有采用国际上通用的TS流,而是采用了中兴通讯主导研发的MFS流技术, MFS具有自主知识产权,MFS专门针对窄带传输设计,效率可以高达95%以上,而如果采用国际上 通用的TS流则效率低于80%。这对于带宽需求敏感的移动数字电视非常重要。信源解码包括MFS 流的解复用、音频解码和视频解码等,是接收系统的核心部分。 移动数字电视接收系统的主要工作流程是:首先对CMMB数字电视信号接收,具体讲就是把天 线接收下来的数字电视信号,通过前端的射频调谐器转换为基带信号,再送入信道解码芯片进行信 道解码,经过一系列处理,最终送出MFS流数据。在后端由MFS流解复用模块分离出音频、视频 基本流,分别送入音频、视频解码器,输出解码后的音频和视频信号,音频信号传输到音频设备进 行播放,而视频信号传输到LCD屏显示出来。 对于移动数字电视接收系统来说,一般由以下部分构成:接收天线、调谐解调模块、应用处理 器、显示屏和音频输出。接收系统主要任务是对所收到的高频调制信号进行变频和解调,得到数字 电视信号,再进行解复用、解码并结合相应的控制,完成用户所要求的功能【l o】。移动数字电视接收
系统的原理图如图2.10所示。

图2.10移动数字电视接收系统的原理

2.3本章小结
本章主要介绍了一些基本的CMMB协议,包括广播信道帧结构和信道编码调制、复用原理和电 子业务指南,特别是对复用原理做了比较细致的分析,为后文的设计和实现提供了理论基础。接着 介绍了移动数字电视接收系统原理图,对CMMB接收系统的典型结构做了初步分析。



第三章CMMB移动数字电视接收系统的方案设计

第三章CMMB移动数字电视接收系统的方案设计
本章是本论文的核心内容,首先对CMMB移动数字电视接收系统的组成做了详细的阐述,分析 了CMMB接收系统的一些特点;接着,给出了本论文中CMMB接收系统的方案设计,并分析了主 芯片的特点以及硬件方案的设计;最后,对软件系统的设计进行了介绍,包括软件平台、软件总体 设计和软件开发环境。

3.1硬件方案设计
3.1.1

CMMB接收系统的硬件方案图

从功能上来说,CMMB移动数字电视接收系统结构大体上可以分成两部分:信道调制部分和信 源解码部分。信道调制部分是数字电视接收机的前端,它负责对数字电视射频信号进行解调接收和 信道解码,针对不同的信道编码需要配备不同的调谐器和解调器,本论文的调谐器采用ADI公司的 MTVl02,解调器采用创毅视讯公司的IFl01,应用处理器则选择三星的S3C6410。 论文采用的调谐器为ADI公司的MTVl02,调谐器将射频信号转换成解调器可以接收的中频或 基带调制信号,是CMMB接收系统的关键部件,关系到整个接收系统性能的优劣。由天线传送过来 的射频信号经过滤波放大,由用户设置的频道参数经12C总线送到锁相环电路,通过频道参数控制 压控振荡器和设置分频器的分频比,产生与频道参数同步的时钟信号,再与射频信号混频后可以得 到中频信号或零中频基带信号。
论文采用的解调器IFl01,是由创毅视讯公司设计的CMMB解调芯片。信号经过调谐器后,就

进入解调部分,信号的一路做自动增益控制(Automatic

Gain

Control,AGC)检测,通过AGC把信号

功率恢复到可以进行A/D采样的程度;另一路经过载波同步和时钟频率同步及信号帧同步后,它们 都是根据CMMB特有的时域序列同步算法,利用扩频序列在时域上进行同步,再经过信道估计,信
道均衡,时域与频域解交织后,进入到去纠错编码和解扰模块,最终得到MFS流输出【111。

本方案选用三星的S3C6410作为应用处理器,它是一款基于ARMll架构的SoC(System

on

Chip)

芯片,整个移动数字电视接收系统的存储系统主要包括一块128MB的SDRAM和一块64MB的

FLASH。128Ⅷ的SDRAM用于用于操作系统的运行,64MB的FLASH相当于接收系统的硬盘,
用于存储操作系统及应用程序的可执行文件。一块320*240 LCD触摸屏对视频图像进行显示,同时 具有的触摸功能方便用户进行操作。芯片内部集成的AC97控制器可以直接将音频数据传输到耳麦 进行播放。另外还有一个串口用于调试信息的输出。总体设计方案如3.1所示。硬件系统的配置包 括:
_

SDRAM:128MB的DDR内存

-FLASH:64MB的NAND FLASH
● ■ ■ ●

显示屏:320*240的LCD触摸屏 U波段天线

CMMB标准的调谐解调器
RS.232串口(用于调试)



图3.1 CMMB接收系统总体硬件方案图

方案中CMMB接收系统的工作流程是:首先,由¥3C6410通过12C总线发送命令设置调谐器 的节目频道频率,由调谐器内部的锁相环电路锁定当前频道,调谐后的信号送入解调器得到MFS流, 应用处理器¥3C6410通过SPI总线接收MFS流,通过解复用处理将音视频信号分离,得到H.264 视频信号和AAC音频信号。¥3C6410内部的多媒体格式编解码(Multi
Format

Codec,MFC)模块,具

有强大的视频编解码能力,可以对H.264视频格式直接进行硬件解码,解码成YuV格式视频信号, 存储在内存中,由输出控制模块送入LCD显示屏显示。而AAC格式的音频数据可以通过软件解码, 获得解码后的脉冲编码调制(Pulse 由耳麦放音。
3.1.2 S3C641 0应用处理器介绍 Code

Modulation,PCM)信号,经过A/D转换成声音的波形信号,

主芯片是嵌入式系统的核心,因此通常情况下主芯片的性能就决定了系统的性能。随着芯片技 术的发展,越来越多的厂家将功能更多地集成在一块SoC上,例如现在大部分厂商都将CPU、解码 器、图形处理器与音视频处理器集成在一起ll
2I。

本次移动数字电视接收系统的主芯片使用的是三星公司的¥3C6410处理器,这是一款16/32位 RISC微处理器,采用ARMll76JZF芯片架构,主频高达667MHz;双总线架构,一路用于内存总线、 一路用于Flash总线;支持Nor Flash和Nand Flash两种Flash,其中Nand Flash支持SLC和MLC 两种架构,从而大大扩大存储空间。支持多种启动方式:主要包括SD、Nand
Flash、Nor Flash等设

备启动,一共有32路DMA通道,包括LCD、UART、Camera等专用DMA通道。这款芯片最大的 特点是包含内部视频解码器与图形加速器,可以处理MPEG4、H.264、H.263等视频格式,同时包
括2D、3D图形加速Il川。

由于片上集成了许多通用的系统外设,使得基于该芯片的系统设计实现成本最小化,外扩模块 最少化。¥3C6410采用先进的65nm CMOS工艺。这种低功耗、简单、卓越且全静态的设计,让该 芯片尤其适用于那些成本和功耗敏感的应用场合。¥3C6410的总体结构图如图3-2所示:

10

第三章CMMB移动数字电视接收系统的方案设计

ARMCore
System Peripheral

( (

RTC
PLLx 3

) ) ) ) )

(Tmaer (DMA (I(|:ypad

Power

1FTLCD Controller

Management

图3-2 S3C6410芯片结构图

本论文的CMMB移动数字电视接收系统主要使用到的模块为MFC模块、SPI模块和12C模块, 所以将对这三个模块分别进行介绍:
_

MFC模块:MFC模块是一个集成在芯片内部的视频处理加速模块,支持H.263/H.264、MPEG洱
等格式的编解码。MFC加速模块由BIT处理器和视频编解码器两部分组成,MFC加速器中的

两个部分协同工作,分工明确。BIT处理器内嵌一个16bit的DSP,主要负责加速器与ARM内 核的通信以及数据流的分解,合成处理。视频编解码器仅负责对来自BIT处理器的数据流进行编
解码操作。


SPI模块:SPI(SerialPeripheralInterface)是一种高速的、全双工、同步的通信总线,它以 主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,它 们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。¥3C6410共有2 个SPI控制器,支持主机和从机模式。



12C模块:12C(Inter--Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行 总线,用于连接微控制器及其外围设备。12C总线最主要的优点是其简单性和有效性【l 41。

3.1.3解调器IFl01介绍
本次设计采用的CMMB解调芯片IFl01作为业内首颗CMMB解调芯片,具有出色的信道表现 和多普勒补偿。该芯片可以满足信道传输标准中多种码率和不同调制工作模式状态的解调和解复用 的芯片解决方案,因此可在不同的射频前端和后端应用处理器平台上方便使用该解调器,CMMB解
调器IFl01的内部框图如图3.3所示:



调谐器模拟 信号输入 Q

解调器IFl01内部有一个C51内核,可以通过使用SPI接口的Flash Memory来存储芯片内部 C51内核运行所需的代码和数据。当调谐器将I、Q基带信号传送到解调器IFl01,解调器IFl01经 过AD转换、正交频分复用(Orthogonal Frequency
Division Multiplexing,OFDM)解码、低密度奇偶

校验码(Low Density Parity Check Code,LDPC)解码、RS(Reed—Solomon)解码和多路输出选择后,

通过SPI或SDIO接口将数据传送给后面的应用处理器。解调器IFl01具有的特点如下:

● - 一

支持CMMB广播信道标准和复用标准 可同时接收卫星信号和地面信号 支持BPSK、QPSK、16QAM多种星座映射模式
支持LDPC前向纠错技术,1/2,3/4模式 支持TS码流,SPI和SDIO输出

■ ■

支持多种操作系统

3.1.4硬件电路连接
CMMB信道调谐解调部分硬件框架图如图3_4所示:
MTVl02
IFl01¥3C6410

图3-4 CMMB信道解调硬件框架图

470MHz-860MHz的U波段信号(带宽为8MHz)经由天线接收,射频信号经过调谐器的下变 频转换后,高频载波信号被去掉,只留下带宽为8MHz的模拟基带信号。8MHz的模拟基带信号被 分为I、Q两路差分信号,直接连接到解调器IFl01的模拟输入端。 解调器IFl01实现AD转换,信道解调,纠错等功能,然后将解调出来的复用数据(包含压缩 后的音,视频数据,ESG数据等)通过SPI或者SDIO接口传送至应用处理器端,由应用处理器完 成解复用,音视频解码,播放等工作。解调器W101和应用处理器之间的12C接口实现了应用处理 器对IFl01的控制功能。 解调器IFl01与应用处理器¥3C6410的通信接口包括数据接口和控制接口,其中12C接口为控 制接口。而数据接口包括SPI、SDIO模式,两种模式在硬件端口上复用,特定时刻只能使用其中的 一种模式。本次设计采用的是SPI接口,最高时钟速率可达13MHz。12C接口为IFl01的控制接口, 应用处理器可以通过此接口设置参数并读取解调器W101的状态数据,IFl01默认的12C地址为0x10。 解调器IFl01与应用处理器S3C6410直接的硬件连接图如图3.5所示:

12

第三章CMMB移动数字电视接收系统的方案设计

图3.5解调器IFl01与应用处理器(AP)的硬件连接图 IFl01芯片内部为一个C51核,但芯片内部不具有储存代码和数据的ROM,所以要通过应用处 理器¥3C6410来给IFl01下载固件(Firmware),F SPI是FLASH SPI的意思,FLASH SPl只在IFl01 下载Firmware的时候起作用,并不参与后面的数据流的输出。应用处理器下载Firmware的具体过 程将在软件部分详细叙述。 在SPI模式下,正常工作时的GPIO INT信号如下图所示,间隔为1s,低电平有效。工作时, 若有此中断信号,则表明IFl01有正常的解调信号输出。若中断信号不连续,有部分丢失,则表明 输入信号强度太弱或者其它原因导致IFl01工作不正常。如图3-6所示:

PIo

INT

lOms

Is

图3-6正常工作情况下IRQ波形图

3.2软件方案设计
论文的软件平台基于Windows
CE

6.0操作系统,CMMB接收系统软件部分的设计与实现主要

分为三个部分:CMMB解调器驱动层软件、多媒体流管理层和上层应用软件,其中,多媒体流管理 层在整个软件系统中的作用比较关键,在直接调用CMMB解调器驱动层接口进行数据接收的同时, 还需要响应上层应用软件的操作,控制多媒体流的播放。论文确定采用微软的DirectShow架构设计 多媒体流管理层。

3.2.1软件总体架构
论文为了设计一个高性能的CMMB移动数字电视接收系统,软件平台的选择需要保证一定的系 统实时性,同时需要对多媒体有强大的支持。Windows
CE

6.0是一个实时、模块化、多线程的32

位嵌入式操作系统,支持多任务和多种类型的处理器平台。同时,Windows CE 6.0支持丰富的多媒

体特性,支持高性能的多媒体架构DirectShow,符合本设计的需求。所以,在软件平台上选择了高
性能的Windows CE 6.0嵌入式操作系统【”】。

在该系统下,CMMB接收系统软件部分的设计与实现主要分为两个部分:第一部分,CMMB 解调器驱动层软件的设计与实现,通过解调器的驱动,应用软件可以向解调器发送控制命令和读取
13

东南大学硕十学位论文

CMMB数据流;第二部分,多媒体流管理层的设计与实现,确定采用微软的DirectShow架构设计多 媒体流管理层,将数据接收、CMMB解复用、音频解码和视频解码都分别实现为一个独立的多媒体 组件,这些组件通过管道连接成一个过滤器链,共同完成CMMB多媒体数据流的处理【161。软件总
体架构如图3.7所示:

操 作 系 统

层 硬 件 层

回㈤回圆 圆回回回
图3.7 CMMB接收系统软件总体架构
CE 6.0和
CE

由上图可以看出CMMB接收系统软件的总体架构,论文的软件系统将基于w缸dows
DirectShoW架构进行设计,所以将分别对Windows

6.0操作系统和DirectShow架构进行介绍。

(1)Windows
Windows

CE

6.0操作系统

CE

6.0是专为那些希望将产品及早推向市场的专业嵌入式软件开发人员设计的。通过

对之前版本的Windows CE操作系统内核和开发工具的重新设计而推出的Windows CE 6.0是一个硬 实时,低内存操作系统,增加了数百种特性,源码可访问,兼容多种架构的微处理器。经过重新设 计的Windows CE 6.0内核放弃了之前的微内核,对内核进行了修改,使得较之前版本的Windows CE 而言,能够运行大量更为复杂的应用,将任务并行的数量也由之前的最多32个提升到32000个Il 7I。 同时,微内核结构的放弃,将大量应用程序以及系统模块置为内核态下运行,整个系统实时性得到
极大提高。

整个操作系统由用户空间和内核空间组成,用户空间主要由用户应用程序和一些系统模块组成。 而内核空间主要由OAL、Kernel.dll、Device.dll、Gwes.dll和Filesys.dll等模块组成ll引。其中FsdMgr.dll 模块负责管理文件系统、过滤器和存储管理器;Gwes.dll是图形、窗口、事件子系统模块,是用户、 应用程序和操作系统之间的接口;Device.dll被称为设备管理器,由操作系统内核加载,用来管理已 经加载的驱动程序及驱动程序的接口;Filesys.dll负责初始化文件系统、对象存储、注册表、CEDB 数据库、设备通知以及其它一些工作。 (2)DirectShow技术 随着多媒体信息技术的不断发展,多媒体应用开发面临的挑战也越来越多,为了应对上述挑战, 微软设计了Directshow多媒体软件架构,目的就是尽量让应用程序开发人员从复杂的数据传输、硬 件差异、同步性等工作中解脱出来,简化Windows下多媒体应用开发的难度,DirectShow技术也运 用在嵌入式Windows CE操作系统上。 DireetShow使用一种叫做过滤器图(Filter Graph)的模型来管理整个数据流的处理过程,应用 程序要按照一定的意图建立起相应的Filter Graph,然后通过过滤器图管理器(Filter
Graph Mananger)

来控制整个数据处理过程。DirectShow能在Filter Graph运行的时候接收到各种事件,并通过消息的
14

第三章CMMB移动数字电视接收系统的方案设计

方式发送到我们的应用程序。这样,就实现了应用程序与DirectShow系统之间的交互【19】。 过滤器、过滤器图、过滤器图管理器和应用程序之间的关系可以通过图3.8来加以说明。

图3.8 DirectShow架构图

在上图中,过滤器图表现了一个典型的过滤器链路,在DirectShOW中过滤器可以分为三类:源
过滤器(Source Filters)、传输过滤器(Transform Filters)和呈现过滤器(Rendering Filters)。源过滤

器主要负责获取数据,数据源可以是文件、互联网或采集卡等;传输过滤器主要负责数据的格式转 换,例如数据流的分离/合成、解码/编码等,然后将处理后的数据继续向下传输;呈现过滤器主要负 责数据的最终去向,如送给显卡、声卡进行多媒体的演示或输出到文件进行存储【20】。本论文的CMMB 解复用、音频解码和视频解码等多媒体组件就将分别实现为独立的过滤器,在基于DirectShow架构
多媒体流管理层的控制下完成多媒体数据的处理。

3.2.2软件总体流程
CMMB接收模块从u波段的天线接收信号,经过信道解码后将CMMB复用流数据传给应用处 理器¥3C6410。CMMB解调器和应用处理器¥3C6410主要通过SPI方式传输数据,所以解调器IFl01 驱动将包含SPI模块的驱动。解调器IFl01驱动采用WindowsCE操作系统的流接口模式的驱动架构, 上层软件只需采用同访问文件一样的方法即可获取多媒体流。当多媒体流管理层接收MFS流数据 后,多媒体数据依次要经过三个阶段的处理,分别是:MFS流的解复用;音频和视频的解码;音频 和视频的播放。具体流程如图3-9所示:
过滤器图管理器

解复用过滤器k<
l■k.t匣忱IIb*镰皿l

一视频解码过滤器I J,,r……~一一一l

千、叫音频解码过滤器

1…一i…一。
l,哪藏
多媒体流管理层操作系统
CMMB接收模块 ▲





l音频播放过滤器J
音顿藏

l视频播放过滤器l

、r



r视顿藏

l驱动IO褊Il…~lI音~…”l 忙驱动I
1r

1r

硬件

-喇卜—制I器0l 解IF调10器1

20lVTMI"J.L

I扬声器I

l黑l

图3-9软件总体流程 本次CMMB多媒体流管理层采用Directshow架构实现,CMMB整个多媒体数据的处理可以分 成6个独立的部分:数据接收、MFS解复用、音频解码、音频播放、视频解码和视频播放,可以将 这些步骤分别设计成独立的多媒体组件,这些多媒体组件在DirectShow架构下实现为一些过滤器,
15

东南大学硕士学位论文

其中数据接收过滤器属于源过滤器,而解复用过滤器、视频解码过滤器和音频解码过滤器属于传输 过滤器,音频播放过滤器和视频播放过滤器属于呈现过滤器【2¨。

3.2.3软件开发环境
本次设计的开发环境选用Microsoft Visual
Studio 2005,Visual Studi02005内置了Windows CE的

SDK,可以直接开发Windows CE应用程序,开发语言为C/C++。对于上述的过滤器的开发,可以
在现在Windows XP环境里,利用Visual Studio 2005强大的调试功能,可以很方便地对程序进行测

试和调试【22】。测试通过后,再向Windows CE平台移植,由于Windows CE平台支持DirectShow和 通用Win32 API,因此只需要用宏定义的方式对平台相关代码进行分别编码、编译便可以完成移植
工作,实现代码重用。

3.3本章小结
本章首先给出CMMB移动数字电视接收系统的整体设计方案,包括硬件方案的设计和软件方案 的设计。硬件平台选择三星的S3C“10微处理器和创毅视讯公司的CMMB解调器IFl01,二者在业 界均得到了广泛的认可;软件方面,将采用微软公司的Windows CE 6.0操作系统,软件系统主要包 括CMMB解调器驱动层软件、多媒体流管理层软件和上层应用软件。解调器驱动层软件采用典型的 流接口驱动架构,而多媒体流管理层软件是基于DirectShow架构实现。

16

第四章CMMB移 动数字电视接收系统软件的设计与实现

第四章CMMB移动数 字电视接收系统软件的设计与实现
本章主要工作是对第三章提出的软件设计方案予以完整的实现。首先,CMMB解调器驱动层软
件将遵循Windows CE操作系统的流式驱动接口规范;其次,多媒体流管理层软件采用DirectShow

的架构设计,并实现好多媒体流管理层下的各个模块的过滤器,解复用过滤器是一个关键的过滤器, 本章将重点介绍;最后将介绍应用软件的设计与实现。 4.1

CMMB解调器驱动层软件的设计与实现
本次设计,CMIVIB解调器驱动层软件将采用Windows CE操作系统的流接口模式的驱动架构,

流接口驱动都使用相同的接口并导出一组相同的流接口函数。流接口适合于在逻辑上被认为是一个 数据源或数据存储的I/O接口,即任何以产生或消耗数据流作为主要功能的外围设备都是导出流接 口的最好选择。本次解调器IFl01的驱动就是采用这种结构‘231。驱动的实现分为核心驱动和逻辑通 道驱动,核心驱动程序的主要功能是通过SPI和12C直接和底层硬件进行通讯,可以实现读写IFl01 寄存器数据,读取CMMB数据流的功能;逻辑通道驱动程序,不直接与底层硬件通讯,此驱动只负 责通过调用核心驱动的FO接口完成将CMMB数据流传输给上层应用程序的功能。解调器驱动软件
的框架如图4-1所示:
应用程序

{}
Windows
彳> <多
CE

6.0操作系统
f、

逻辑通道驱动


核心驱动
12C



SPI

彳≯ 七多

J彳> 七乡

解调器IFIOI

图4.1解调器的驱动框架

整个驱动实现为两个dn文件,核心驱动实现为Inno ifl01.dll,逻辑通道驱动实现为 Inno—ill01一LGC.ml。因为实现为两个dll文件,因此该驱动架构向用户空间实现了两类设备:核心 驱动设备和逻辑通道驱动设备,分别用INO和LGC表示。 INO设备:该设备对于用户来说只实现了I/O控制功能。首先应用程序需要调用CreateFile (L“INOx”,...)来打开设备,而后即可通过DevicelOControl函数来完成对IFl01的一些控制功能。 以论设备:该设备只实现了读取CMMB数据流的功能。首先应用程序需要调用CreateFile (L‘‘LGCx”,...)来打开设备,而后即可通过调用ReadFile函数来读取CMMB数据流。

4.1.1核心驱动的实现
Iuno—ill01.dll作为核心驱动程序,核心驱动程序通过SPI和12C直接和底层硬件进行通讯,可 以实现读写IFl01寄存器数据,读取CMMB码流的功能。驱动实现为流接口驱动形式,并提供了一 组流接El函数,流接口函数主要分为与设备管理器交互的接口和与应用程序交互的接口f241,具体实
17

东南大学硕士学位论文

现的流接口函数如表4.1所示:
表4.1核心驱动流接口函数 函数 DWORD INNO_Init(LPCTSTR pszContext)
BOOL

功能描述

初始化设备,在设备被加载时调用
释放设备,在设备被卸载时调用

INNQDeinit(DWORD dwContext)

DWORD INNO_Open(DWORD dwContcxt, DWORD dwAccessMode, DWORD dwShareMode)
BOOL

打开设备

INNQClose(DWORD dwContex0
DWORD dwCode.
PBYTE pBufln,

关闭设备

BooL nTNO!OControl(DWORD dwContcxt.

对设备发送控制命令,是核心驱动程序中最
重要函数。

DWORD dwLenIn.
PBYTE pBufOut,

DWORD dwLenOut PDWORD pdwActualOut)
VOID INNO_PowerDown(DWORD dwContex0 VOID INNO_PowerUp(DWORD dwContext)

使设备关闭自身的电源 使设备从挂起状态中恢复

●与设备管理器交互的接口 (1)INNO

OtinI_数函

INNO_Init0函数是设备管理器第一个涉及的流接口入口函数。在解调器IFl01驱动程序被设备 管理器调用,返回设备的上下文句柄【251。在INNO hit()函数中,首先将申请内存空间和逻辑中断号, 解调器IFl01寄存器将被初始化。中断处理线程IFl01InterruptThread0和中断分发线程
IFl01DispatchThread0也将开始运行。 (2)INNO DeInit0函数

INNQDelnit0是设备管理器卸载驱动前调用的一个重要函数,该函数将释放申请的内存空间和
逻辑中断号,接着,中断处理线程IFl01Inten'uptThreadO和中断分发线程IFl01DispatchThread0也将
被停止。

(3)INNO_PowerDown0和INNO_PowerUp()函数 由于设备本身支持电源管理,即挂起和恢复运行,所以驱动没有实现这2个函数,都是空函数。 ●与应用程序交互的接口 解调器IFl01驱动提供给应用程序调用的函数接口主要是服务于FO请求的子程序,包括设备 的打开、关闭和控制操作等,对应的应用程序API函数接IZl分别是CreateFile0、CloseHandle0、 DevicelOControl0等入口函数。这部分函数从驱动中导出给设备管理器使用。当用户进程利用系统调 用对解调器球101进行操作时,系统找到解调器IFl01的驱动程序,然后调用驱动程序中相应的

INNOOpen0、INNQClose0、D矾0』OControlOi蚕l数。 0)INNO_Open0和INNQClose0函数
当应用程序要打开解调器IFl01驱动时,设备管理器调用INNO
)(nepO.将动驱,开打数函

打开句柄返回给设备管理器,设备管理器再将该句柄返回给应用程序。当应用程序要关闭解调器 W101驱动时,设备管理器调用INNO Close0函数关闭驱动,然后释放驱动句柄。
(2)INNO IOControlO函数

对于一些硬件设备,通常需要向设备发送控制命令,以命令设备做出操作。此层驱动通过实现 INNO—IOControl函数,达到对解调器IFl01进行控制的目的,应用程序通过DeviceloContol0函数便
18

第四章CMMB移动数字电视接收系统软件的设计与实现

可间接调用INNO IOControl函数。

应用程序通过控制码dwCode可完成的I/O控制操作如表4.2所示: 表4.2常用的I/O控制操作 控制码(dwCode)
参数与功能描述

pBufln:要写入IFl01寄存器的地址(16位)和数据(8位)
IIC——WRITE.—BYTE
(0x80) dwLenIn:3 Bytes

描述:pBufln[0]的高8位为Bank地址,低8位为寄存器地址, pBufln[1]为要写入的数据,此接D仅支持12C单字节写操作 pBufln:要读取的寄存器地址(16位指针)
dwLenln:2 Bytes

pBufOut:寄存器返回值
IIC——READ——BYTE dwLenOut:1 Byte

(0x81)

pdwAetualOut:指针(位数无限制) 描述:pBufln[0]的高8位为Bank地址,低8位为寄存器地址, pBufOut保存了读取后的数据,pdwActualOut保存了实际读取的长 度。此接口仅支持12C单字节读操作
pBufln:要写入的命令和数据

SPI-WRITE—REG
(0x82)

dwl2nIn:要写入的字节数

描述:此接口用于通过SPI接口向IFl01发送命令和数据,pBufln[0]
为cmd,pBufln[1~(dwl_enln一1)】为该命令的数据段

pBufln:读取之前需要向IFl01发送的cmd
SPI——READ——REG dwLenIn:1 Byte

(0x89)

pBufOut:寄存器返回值
LenOut:1 Byte

描述:此接口用于通过SPI接口读取IFl01的状态信息
无入口参数要求
INNO——INTR——ENABLE

描述:使能中断分发线程,只有调用过该接口后才能够真正接收到 数据,如果不使能则驱动只响应中断,并不真正去读取数据
无入口参数要求

(0x84)

INNO——INTR.—DISABLE

描述:关闭中断分发线程,调用过该接口后,驱动只响应中断,并 不真正去读取数据 pBufln:指向含有IFl01 Firmware的内存区域或为NULL

(Ox85)

INNO——STARTUP——WITH.—

FⅡ孙们配眦
(0x88)

dwLenIn:IFl01 Firmware的字节数或为0

描述:开始向IFl01下载Firmware。如果pBufIn不为空,则利用 pBufIn传入的Firmware,否则驱动再去查看是否有传入Firmware, 如果都没有则采用驱动内置的Firmware

4.1.2逻辑通道驱动的实现
第三章已经介绍了Inno
ifl01

LGC.dn是作为逻辑通道驱动。此驱动的主要工作时通过调用核

心驱动Inno—ill01.dll的FO接口将CMMB数据流传输给上层应用程序,该驱动也是流式接口驱动, 具体实现的流式接口函数如表4.3所示:

19

东南大学硕士学位论文

表4.3逻辑通道驱动流式函数接口
函数 DWORD LGC_Init(LPCTSTR pszContext)
BOOL ECh Oeinit(DWORD dwContex0

功能描述
初始化设备,在设备被加载时调用 释放设备,在设备被卸载时调用

DWORD LGC_OpenfOWORD dwContext, DWORD dwAeeessMode, DWORD dwShareMode)
BOOL

打开设备

tGc_close(DWORD dwContext)

关闭设备

DWORD LGC_Read(DWORD dwData,
LPVOID pBuf,

对设备进行读操作的函数

DWORD Len) 通过对比表4.1,可以发现LGC InitO、LGC Deinit0、LGC Open0、LGC Close()函数和
INNO LGC INNO Deinit0 INNO Open0 0tinI_而,了绍介再不就,似类能功数函) INNO_Close(
、 、 、

Read()函数作为设备读操作函数,当用户调用Readfile0时,设备管理器将调用LGC Read进行

CMMB传输流的读操作,当中断产生时,Inno ifl01.d11中的中断分发线程IFl01DispatchThread将激
活事件m hLgcDataReadyEvent,LGC Read便调用接口函数读取传输流数据,具体读流程将在下节 介绍。LGC Read的参数将决定读取的数据大小。 DWORD LGC Read(DWORD dwData,//由LGC_OpenO返回的设备打开上下文
LPVOID

pBuf,//缓冲区指针,读取的数据会被存放在该缓冲区内
//要读取的数据字节数

DWORD Len
);

4.1.3驱动软件流程介绍
整个驱动代码从内容上可以分为两个部分,Firmware的下载和CMMB数据流的读取。 (1)Firmware的下载 解调器IFl01芯片内部为一个C51核,但芯片内部不具有储存代码和数据的ROM,所以要通过 应用处理器来给IFl01下载Firmware,这时应用处理器S3C6410充当SPI从机(Slave)的角色。 应用处理器下载Firmware的过程是:首先应用处理器与IFl01的硬件电路接成应用处理器下载 (Download)模式,解调器IFl01上电后,应用处理器将IFl01复位(Reset)信号保持为低电平,在Reset 信号为低电平期间,应用处理器端要将Download数据准备好并把自己设定为SPI Slave模式,应用处 理器端设定好之后,将IFl01 Reset信号释放(Reset信号由低变高),接着IFl01
Flash

SPI扮演主机

(Master),从应用处理器端将Firmware下载,下载完成后,IFl01运行Firmware,然后IFl01开始工作, 并将它的Flash SPIH设置为高阻,整个下载过程结束。具体流程见图4—2所示:

第四章CMMB移动数字电视接收系统软件的设计与实现

图4.2 Fireware下载流程图

(2)数据流的读取 当上层应用程序通过DevicelOControl函数设置好调谐器的频率参数后,便可进行数据的接收, 每隔1S,IFl01便定时向应用处理器产生一个GPIO口中断,所以用户调用ReadFile函数的频率应 该要比中断请求(Interrupt Request,IRQ)平均产生频率要高(只要不禁止中断的连锁事件,应该无条 件循环ReadFile),以便连续的接收传输流数据。 当中断产生时,SPI通过读取IFl01寄存器中的数据,判断是哪个通道中断产生,一共有三个通 道(LG0、LGl、TSO)。中断处理线程IFl01InterruptThread把通道号加入到IRQ等待队列中,传送 到IFl01DispatchThread线程中,IFl01DispatchThread将通道号从队列中取出,回调EventHandler函
数,设置m
Irmo

事件,激活 Inno ifl01 eFc 线程, Inno ifl01 LGC dll tnevEdehctLGC dU gLh.用调将
. .

ifl01.dn中实现的Fetch如gie

lData 函数读取数据流。具体的 CMMB ennahC.3—4图如程流据数

所示:

2l

东南大学硕上学位论文

开始读取数据

激活中断分发线程
配置解调器IFIOI
IFl01DispatchThread

翻\



O~



断/



回调EventHandler

N一

函数激活事件
m_hLgcDataReadyEvent

种f

激活中断接收线程
IFl01InterruptThread

≤m \\激活?,/


hLgcD嚣ataRea萝dyEvent
CMMB复用流数据

>二

调用

Read_lNT_StatusO 读取中断状态

LGC—Readi甬数将获取

判断哪个通道发

送的中断

结束

图4.3 CMMB数据流的读取流程图

4.2多媒体流管理层的设计与实现
本节将按照第三章的对DirectShow技术介绍,实现本论文的多媒体流管理层。多媒体流管理层 使用的过滤器组件包括数据接收过滤器、解复用过滤器、音视频解码过滤器和音视频播放过滤器。 数据接收过滤器和解复用过滤器之间采用拉模式的方式进行多媒体数据流传输,也就是说在数据接 收过滤器的输出管脚(Pin)上实现了一个IAsyncReader接口,解复用过滤器通过该接口的异步或同步 请求的方法获取数据。这就需要在解复用过滤器的输入Pin上实现一个拉线程来不断地向数据接收 过滤器请求数据并进行后续的处理,而解复用过滤器的输出Pin采用推模式,即调用下级音视频解 码过滤器输入Pin上的IMemlnputPin::Recive函数向后发送多媒体数据’流1261。而音视频解码过滤器也 将调用音视频播放过滤器输入Pin上的IMemlnputPin::Recive函数将多媒体数据流推入下级,而音视 频播放过滤器将播放音视频数据,成为整个多媒体流传输过程的终点。在CMMB标准中,音频数据 都是采用高级音频编解码(Advanced Audio Coding,AAO格式进行编码,而视频格式采用H.264格 式进行压缩编码。所以我们设计的音频解码过滤器只针对AAC格式音频数据,而视频解码过滤器只 针对H.264视频格式。整个拉模式多媒体流传输示意图如图4-4所示:
调用IAsyncReader接El方法

图4_4拉模式数据传送流程
22

第四章CMMB移动数字电视接收系统软件的设计与实现

其中对音视频播放没有特殊需求,使用系统提供的音视频播放过滤器即可满足要求,无需实现。 另外,数据接收过滤器在系统自带的网络数据接收过滤器上进行了简单的改造便可实现,所以本论 文主要工作在解复用过滤器、AAC音频解码过滤器和H.264视频解码过滤器这三个关键过滤器。解 复用过滤器是多媒体流管理层系统中的一个关键过滤器,它是内存需求最大的一个多媒体组件,在 介绍解复用过滤器时会详细介绍内存管理方面所做的优化。
4.2.1

CMMB解复用过滤器

CMMB多媒体流管理层最主要的一个特点就是能够对CMMB复用流数据进行解复用,要实现 这个功能,需要对CMMB复用协议进行研究,并根据其规定的数据复用格式从CMMB复用流数据 中解析出音视频信息。解复用过滤器负责将MFS复用数据解析并把解复用后的数据传递到后面的音
视频解码过滤器ⅢJ。

从解复用的行为来看,它属于传输过滤器(Transform Filter),但是解复用过滤器可能有多个输 出Pin,在大多数情况下有一个视频输出Pin和一个音频输出Pin,而一般的传输过滤器只有一个输 入Pin和一个输出Pin,所以它并不适合从DirectShow提供的传输类基类CTramformFilter来继承, 本论文在过滤器基类CBaseFilter的基础上实现解复用过滤器,输入Pin继承CBaselnputPin基类,输 出Pin继承CBaseOutputPin基类。在通常情况下,CMMB节目中包含一个视频流和一个音频流,此 时的解复用过滤器结构如图4-5所示:
视频输出Pin l输)LPin 解复用过滤器 音频输出Pin 图4.5解复用过滤器结构

(1)解复用库的设计 在解复用过滤器的设计中,为了具有更好的通用性和可移植性,本论文将CMMB解复用功能实 现为一个解复用库,通过调用解复用库,可以将解复用后的数据直接输出到指定内存中。解复用库 采用C++实现,通过类的继承使解复用库层次清晰,整个解复用库的类结构如图4.6所示:

图4_6解复用库类结构图 如上图所示,CFrameHeader作为最基本的基类,主要完成复用帧头的解析工作,包括获得帧头 长度、获得复用帧长度、解析复用帧。CDemuxer类继承于CFrameHeader,实现了一些最基本的解 复用操作,包括解析音频单元段、视频单元段、数据单元段。CEsgDemuxer作为处理电子业务指南 ESG数据的类,负责解析ESG数据,获取节目信息。IrmoDumex继承于CEsgDemuxer,实现了解 复用的一些细节操作函数,这些细节操作函数都是CDemuxer留下来的虚函数,CDemuxer没有实现, 由InnoDumex实现,包括处理AAC帧结构,H.264的NAL单元等。 CMMB的广播信道帧是由一个个的复用帧组成的,复用帧由复用帧头和复用帧净荷组成,复用 帧净荷中存储着基本的业务数据,从上面的讨论可以看出,复用帧头的解析是整个解复用的一个关 键点,复用帧头的结构如图4.7所示:

东南大学硕上学位论文

复用帧头


制 网 表 络 紧 -—- 更 复 信 急 新 用 帧 息 广 参 保 序 表 帧 播 数 留 号 更 标 指 提 识 一 指 新 前 刁写 一 序 号 7J'g 量 号 协 议 最 低 版 本
-F

复 用 帧 起 始

复 用 帧 头 长




版 本


码 度


刁譬



短 时 短 持 间 时 续 业 间 业 务 业 务 复 务 配 用 配 置 配 置 表 置 表 更 表 更 新 更 新 序 新 序 序 号 序 号 号 号 持 续 业 务 复 用 配 置 表 更 新
4 4 4 4


复 下 复 用 ●_—- G 用 子 扩 保 更 子 帧 展 帧 留 新 帧 1 区 参
E S C R C




数 长 度



32























复 用 子 帧


复 用 子 帧


/厦
4 24

40

32

用 子 帧


长 长
度 度

长 度

图4_7复用帧头结构 通过解析复用帧头可以获得复用帧标识(MF D),MF ID的取值范围为肛39,其中MF刀D—O 的复用帧用于承载控制信息,而其它的复用帧都用于承载业务,这些业务包括ESG业务和音视频电
视业务。控制复用帧(MF

IDa0)占用时隙0进行进行传播,传输的都是一些控制信息,整个复用

帧净荷由控制信息表组成,而业务复用帧(MF m!=O)的复用帧净荷由一个个复用子帧组成,复用 子帧中包含着音视频业务。具体结构如图4.8所示:


图4.8复用帧净荷结构 读取内存中的CMMB复用帧数据后,便可以进行解复用操作了,解复用首先要查找复用帧起始 码(0x00000001)来定位一个复用帧,本论文实现了一个SeekMFHeader0全局函数实现了复用帧头 的查找功能,接着调用CFrameHeader类中的成员函数ParseHeader0解析复用帧头,将获取的帧头信 息保存在数据中,获取帧头信息后,可以进行解复用操作。在进行解复用操作之前,调用InnoDemux 类中的成员函数Lock()将解复用库“锁住”,当解复用完成后,可以调用成员函数Unlock0进行“解
24

第四章CMMB移动数字电视接收系统软件的设计与实现

锁”。整个CM^佃解复用的总体流程如图4.9所示:

图4-9解复用的总体流程

由上图可以看出,通过解析复用帧头就可以定位到复用子帧或者控制信息表,通过复用帧标识 MF—ID将复用子帧和控制信息表进行不同的处理,按接口格式规定返回音视频流信息。控制信息表 主要有网络信息表、持续业务复用配置表、短时间业务复用配置表和ESG基本描述表这几种组成。 控制信息表用表标识号来表示。控制信息表的表标识号如表4.4所示: 表4.4控制信息表的表标识号
标识号
0x01
Ox02

描述
网络信息表Nrr

持续业务复用配置表CMCT
持续业务配置表CSCT

0x03
0x04

短时间业务复用配置表SMCT
短时间业务配置表SSCT

0x05
Ox06

ESG基本描述表
紧急广播

0x10

如果确定为复用子帧后,进行的则是复用子帧的解析工作,将调用ParseSubfi'ame()i函数,在该

函数内完成的主要工作:(1)根据从复用子帧头解析的音视频流总数分别分配输出的音视频流数组; (2)根据从复用子帧头解析的音视频流参数填写各音视频流结构的相关参数;(3)遍历解析视频段时 建立的视频单元数组,组装视频帧,并根据每帧的流号,加入相应视频流的视频帧链表;(4)遍历解 析视频段时建立的音频单元数据,根据每帧的流号,加入相应的音频流的音频帧链表;返回当前解

东南大学硕士学位论文

析的复用子帧的起始播放时间和剩余有效数据的指针。 复用子帧主要由子帧头、视频段、音频段和数据段组成,复用子帧的解析流程如图4-10所示:
,,—————_、



开始



调用SubFrameHeader0

解析复用子帧头

成功?




获得音频段、视频段 和数据段信息

调用RecoverMode2Fragment(1

恢复尽可能多的数据

获取视频段指示


是否有视频段?
!::



调用ParseVideoSegment(1

获取音频段指示

解析视频段数据



是否有音频段?

\、厂
获取数据段指示

调用ParseAudioSegment()

解析音频段数据



是否有数据段?
调用ParseDataSegment(’


解析数据段数据

(、

竺塞

) 图4.10复用子帧的解析

(2)解复用过滤器的内存管理128】

在DirectShow架构下,过滤器之间是以Sample的形式来传送数据的。Sample是一个封装了一
定大小数据内存的组件。每个Pin管脚上都实现了口iIl接口。但这个接口主要用于Pin管脚连接的, 而不是用于数据传送的,真正用于数据传送的一般是输入Pin上实现的IMemInputPin接口(调用其 接口方法IMemInputPin::Receive)。但IMemInputPin并不是数据传送的唯一方法。实际上,应用场 合不同,数据传送的方式也有所不同。

在数据传输中,连接着的双方Pin拥有同一个分配器(Allocator),用于Sample的分配,分配
器创建、管理一个或多个Sample。数据传送时,上一级过滤器从输出Pin的分配器中(调用

IMemAllocator::GetBuffer)得到一个空闲Sample,然后得到Sample的数据内存地址,将数据放入其 中。最后,再将这个Sample传送给下一级过滤器的输入Pin。数据从上一级过滤器的输出Pin传送
到下一级过滤器的输入Pin,并没有进行数据的内存备份,而只是数据到达的“通知”。典型的数据 内存备份发生在过滤器内部,从这个过滤器的输入Pin(经过一定的处理后)复制到过滤器的输出
Pin。

本论文设计的解复用过滤器(Demux Filter)的输入Pin采用采用拉模式进行数据传输,所以要
26

创建分配器, 个输出Pin,

图4_1l解复用过滤器内存管理策略

上图中,解复用过滤器一共要创建、管理3个分配器,每个分配器又要管理若干个Sample,每 个Sample对应着一块固定大小的内存。解复用过滤器通过分配器从数据接收过滤器的输出Pin获取 Sample,然后将Sample中的数据复制到解复用缓冲区,通过调用解复用库对缓冲区中的复用数据进 行解复用操作,将音视频数据分离。当数据的解复用完成后,解复用过滤器调用输出Pin的分配器, 将分离后的音视频数据复制到Sample中,然后推向下级过滤器。箭头表示了数据在这些内存之间的
移动。

不够这种设计对内存消耗比较大,数据的复制也很频繁,本论文设计的CMMB移动数字电接收 系统内存容量有限,因此,在解复用过滤器的设计过程中,可以将内存的复制减少,降低内存的使
用。具体设计如下:

(1)使用解复用过滤器输入Pin的分配器分配好内存空间,例如,每个Sample的大小为m字 节,一共有11个Sample,则申请一块ll*m大小的内存。 (2)解复用开始工作时,拉线程将复用帧数据读进Sample中,每次都必须把Sample的内存填 满,然后将前面已经填好的Sample一起交给解复用库进行复用帧解析,这样可以减少一次内存复制, 因为根据上图中的管理策略,需要将Sample中的数据复制到解复用缓冲区中。
(3)解复用过滤器调用CMMB解复用库对收到的数据进行解复用后,输出Pin的分配器利用

每一个音视频帧所在内存的地址和长度分别生成一个输出Sample,该Sample的缓冲区指向每个输 入Sample中的一段连续数据,可以是音频数据或者视频数据。 (4)最后将Sample加入一个连接解复用过滤器和音视频解码过滤器的队列,该队列上有独立
的线程负责将队列中的Sample交给音视频解码过滤器,解码完成后,这些数据才被认为处理完毕,

所在的输入Sample重新加入空闲Sample队列以供拉线程下次使用。
主要的处理使得解复用过滤器的输出Pin上的分配器不必另外申请内存,音视频解码过滤器也 可以使用解复用过滤器输入Pin上的分配器的内存而不必申请解码缓冲区(当然在内存充足的情况 也可以选择单独申请解码缓冲区),从而可以再次节省内存占用和复制。

我们由CMemAllocator派生出自己的分配器类--CSequentialAllocator,CMemAllocator是
DirectShow提供的分配器类,它继承自CBaseAllocator,并实现了IMemAllocator接口。

CMemAllocator用于提供过滤器传送数据所使用的Sample,包括分配/释放Sample的内存、维持
27

东南人学硕士学位论文

Sample队列等。在此基础上,要实现我们设计的分配器,需要重载CMemAllocator的GetBuffer、 Alloe、Free方法。GetBuffer方法向调用者返回一个空闲Sample;Alloc方法中实现了上述缓冲区的 申请和对各Sample的初始化;Free方法对缓冲区等资源进行释放。 在CSequentialAllocator类的实现中定义了如下变量来管理Sample,如表4.5所示:
表4.5 变量名
m 1Size m——ICount m__pBuffer m lvalid m__pbStartValid m 1Free m__pbNext

Sample管理变量
作用描述

通过DecideBufferSize0指定的每个Sample的内存大小 通过DecideBufferSizeO指定的Sample的个数
在所有Sample组成的Buffer的起始地址 在所有Sample组成的Buffer中的有效数据的长度

在所有Sample组成的Buffer中的有效数据开始地址 所有空Sample的链表 下一个空Sample的起始地址(m__pbNext与m_pBuffcr的差值应 该是Sample大小的整数倍) 所有Sample的数组

m_parSamples

在图4.12中显示了在运行过程中分配器中缓冲区的状态。




,、Ⅱ■u



-’



m字节
第0个
Sample


m字节
第n.1个
》m IValid∈


Sample

m_pBuffer

m_pbStartValid

m_pbNext

图4-12分配器内存示意图 由上图可以更直观的看出,在m pbStartValid和m

pbNext之间的有效数据跨越了多个Sample,

但可以将这些占据连续内存空间的数据作为二进制流交给解复用库处理,从而不必单独设置一个解 复用缓冲区,减少了内存的占用和内存拷贝工作。 程序运行时,m

pbNext指针始终指向包含有效数据的Sample的下一个Sample的缓冲区,这样
指向的 Sample ,并将 m 之随 txeNbp_。移后9bNext

可以保证每次从数据接收过滤器取得的数据都可以与前面的有效数据“拼接”。因此,每次拉线程调

用GetBuff盱申请Sample时,GetBuffer都返回m
如果m

tx向后移动到最后一个即Sample的 eNbp_解当,时部尾的区冲缓大的配分们我 ,部尾区冲缓

复用过滤器处理完成后会对缓冲区进行调制,将剩余有效数据复制到最开始的几个Sample中,并相
应调整上述的各指针,m pbNext也被调整到了新的位置。 (3)拉模式输入Pin的设计 通过抽象可以将输入Pin看作解复用过滤器的一个组成部分,负责与数据接收过滤器的连接和 数据传输,是个独立的实体,在C++中,这样的实体最好的实现方式就是将其抽象为一个类,在本 论文中将输入Pin抽象所得的类为CDemuxInputPin。 输入Pin中某些方法需要用到其它类中的方法,为了简化系统拓扑,明确系统中各组成部分的 关系,在设计这部分方法时采用委托方式,委托采用友类的方式,将CDemuxlnputPin类在解复用过 滤器中声明为友类,这样,解复用过滤器也能使用CDemuxlnputPin中的所有成员。 解复用过滤器的输入Pin将采用“拉”模式方式从数据接收过滤器获取数据,而CBasePin作为
28

一个基
入Pin, 继承而

上实现



的部分函数,然后在Pin类中定义一个CPulIPin类型的成员对象(因为CPullPin的部分成员函数和 CBasePin已经实现的成员函数命名冲突,所以CPullPin不能直接作为Pin类的父类); (2)重写CBasePin::CheckConncct,并在该函数中调用CPullPin::Conncct,用于Pin连接时查 询对方Pin的IAsyncReader接口; (3)重写CBasePin::BreakConncct,并在该函数中调用CPullPin::Disconneet; (4)重写CBaseInputPin::Active,并在该函数中调用CPullPin::Active,用于启动“拉”数据线 程(当Pin连接的时候,可以指定这个线程工作在同步模式或者异步模式); (5)重写CBaseInputPin::Inactive,并在该函数中调用CPullPin::Inactive,用于停止“拉”数据
线程;

(6)在新生成的CPullPin派生类中实现纯虚函数CPullPin::Receiver处理Sample,并将Sample 通过输入Pin向下传送;
(7)当Filter上需要执行Seek操作时,调用CPul坤in::Seek;

(8)在新生成的CPullPin派生类中实现纯虚函数CPullPin::EndOfStream、CPullPin::BeginFlush、
CPullPin::EndFlush。

(9)在新生成的CPulmin派生类中实现纯虚函数CPullPin::OnError进行错误处理。 (4)输出Pin的设计 前面已经提到,解复用过滤器的各个输出Pin的分配器所分配的Sample也就是使用输入Pin的

分配器所分配的内存,因此我们也实现了自己的输出Pin类--CDemuxOutputPin,该类继承自
DircctShow提供的输出Pin基类CBaseOutputPin。CDemuxOutputPin中包含一个自定义的分配器, 这个分配器与一般分配器的区别是没有预先申请内存和初始化Sample,当解复用过滤器对一个复用 子帧的解析完成并得到各音视频帧的起始地址和长度后,会调用输出CDernuxOutputPin::SendSample 方法中,自定义的分配器会临时生成一个Sample,并把该Sample的缓冲区指向要发送的音视频帧 的数据在内存中的地址,并根据音视频帧的地址返回包含该帧的输入Sample,然后将它锁定(引用 计数加1)。前面已经提到,解复用过滤器和音视频解码过滤器之间分别通过队列来传递Sample,在 每个输出Pin中都定义了一个COurpmQueue类对象作为与解码过滤器通信的队列。COutfIutQueue 类由DirectShow提供,它实现了Sample的队列式传送,可以工作在同步模式,也可以工作在异步 模式(使用一个独立的线程),在下面关于解复用流程的介绍可以看到,解复用后要依次处理每一个 音视频帧,因此需要把一个帧加入COutputQueue队列后马上返回处理下一帧,这里采用异步的工作 方式。设置好的输出Sample会被加入COutputQueue队列,并被COutputQueue队列的线程交给下级 解码过滤器。一个音视频帧被解码过滤器处理过后再解锁(引用计数减1)它所共享内存的输入 Sample,当一个输入Sample所包含的音视频数据都被处理过以后才被加入空闲队列,以供拉线程读
取数据时再次使用。
4.2.2

AAC音频解码过滤器

AAC音频解码过滤器接收从解复用过滤器传过来的AAC音频格式数据,调用相应的AAC音频 解码库对其解码生成可播放的音频数据,然后送给音频播放过滤器进行音频的输出,音频解码过滤

东南大学硕士学位论文

器只有一个输入Pin和一个输出Pin,如图4-13所示:

图4-1 3音频解码过滤器结构

由此可以看出,其行为符合典型的传输过滤器,因此音频解码过滤器可从CTransformFilter继承 实现。 (1)AAC解码流程 在解码模块开始运行后,主控模块将AAC比特流的一部分放入输入缓冲区,通过查找同步字得 到一帧的起始,找到后,根据ISO/IEC 13818.7所述的语法开始进行无噪解码(Noisless Decoding), 无噪解码实际上就是哈夫曼解码,通过反量化(Dequantize)、联合立体声(Joint Stereo),知觉噪声替换 (PNS),瞬时噪声整形(TNS),反离散余弦变换(IMDCT),频段复StJ(SBR)这几个模块之后,得出左右

声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设型291。具体流程如图4-14
所示:

图4-14 AAC解码流程图

本论文需要实现的是针对AAC的音频解码过滤器,具体实现为AACDecoderFilter。AAC的解 码采用FAAD2音频解码库。解码使用的接口函数如表4.6所示:
表4.6 FAAD2解码库接口函数 函数接口 Void枣SsbSipH264Decodelnit()

功能描述



初始化函数,打开MFC模块驱动,初始化解码上下
文环境

Int

SsbSipH264DecodeDelnit( void}openHandle);

释放解码资源函数

Int

SsbSipH264DecodeExe(
void幸openHandle,
long

解码函数,完成H.264的硬件解码工作

lengthBufFiU);

Int

SsbSipH264DeeodeGetConfig(
void?openHandle,

获取解码上下文的参数配置

H264_Dee Conf conf_type, void?value); Void宰SsbSipH264DecodeGetlnBuf(
void?openHandle,
long

申请解码输入缓冲区,并返回缓冲区首地址

size);

Void?SsbSipH264DecodeGetOutBuf(
void幸openHandle,

申请解码输出缓冲区,并返同缓冲区首地址

long}size);

FAAD2是一个开源的MPEG-4/MPEG.2 AAC解码器,支持ADIF、ADTS、LATM等封装格式
30

第四章CMMB移动数字电视接收系统软件的设计与

的AAC音频数据的解码。使用FAAD2提供的一系列接口函数,就可 据解码工作。 (2)过滤器的实现 本论文实现的AACDeeoderFilter属于传输过滤器,DirectShow中提供的CTransforrnFilter类实 现了一个最基本的传输过滤器,CTransformFilter类中包含一个输入Pin和一个输出Pin,通过继承该 类开发AACDeeoderFilter,将节省大量的工作。 AACDecoderFilter主要由四部分构成,四部分中最重要的是控制核心,负责调度、协调和封装
其它三个部分。要使过滤器能够正常工作而且便于修改、移植和维护,需要解决以下问题:


各部分能够独立工作,便于修改和维护


一 一

输入Pin、输出Pin、以及FAAD2解码库只与控制核心有联系,彼此间相互独立 输入pin、输出pin之间在保持独立的情况下如何相互操作
FAAD2解码库是纯C代码,要解决C和C++的混合编程

AACDecoderFilter类的定义如下:

:public CTransformFilter

//从TransformFilter继承

kc:
I∥构造和析构函数 I
static CUnknown毒WINAPI Createlnstance(LPUNKNOWN punk,HRESULT幸phr);



CAACSBREnhanced(TCHAR*tszName,LPUNKNOWN -CAACSBREnhanced0;

punk,HRESULT木p埘;

I//需要从TransformFilter继承重写的函数

l I

HRESULT ChecklnputType(const CMediaType幸mtIn);
HRESULT

CheckTransform(const CMediaType?mtln,const CMediaType奉mtOut);

HRESULT DecideBufferSize(IMemAllocator*pAlloc,Allocator_Properties}pProperties);
HRESULT

GetMediaType(int iPosition,CMediaType奉pMediaType);

HRESULT Transform(IMediaSample*pin,IMediaSample幸pOut);

l∥控制函数
HRESULT Stop0; HRESULTAACExit0;

Initialize_Decoder(int inpBufSize,BYTE宰buffer,int buffer_size,int*bytes_consumed);
protected:

∥关键区(用于多线程共享)
CCdtSec m_AACSBREnhancedLock;

1); CTransformFilter实现的最大特征是,它将Pin上必须实现的函数都“委托”到了过滤器(Filter) 上(Pin上必须实现的函数在Filter上有类似的函数定义),一般无需写输入和输出Pin类,而只需在 Filter上实现相应的函数即可【301。
?

CTransformFilter::CheckInputType:用来确定是否接受上级过滤器与其建立的连接,对于 ChecklnputType方法,两个过滤器所做的工作就是检查上级过滤器传过来的媒体类型是否被支 持的,如果是则返回S OK,否则返回错误值,取消与上级过滤器的连接。



CTransformFilter::CheckTransform:检测输入pin是否支持某个特定的输出媒体类型。由于两个 过滤器都输出PCM音频数据,所以要求音频播放过滤器支持主类型为MEDIATYPE Audio,子 类型为MED队SUBn伊E PCM的媒体类型。

东南大学硕士学位论文


CTransformFilter::DecideBufferSize:设置与下级过滤器建立连接时所协商的分配器的属性,如

Sample的最大个数,每个Sample的缓冲区尺寸等。过滤器需要指定分频器的Sample个数和缓
冲区大小。
_

CTransformFilter::GetMediaType:返回与下级过滤器建立连接时所提供的媒体类型。对于 GetMediaType这个方法,过滤器设置的输出媒体主类型为MEDIATYPE Audio,子类型为 MED认SUBTYPE PCM的媒体类型。

_

CTransformFilter::Transform:这是传输过滤器最主要的方法,在其中进行数据的处理,如音视 频的解码。该函数的具体实现为:Transform(IMediaSample*pln,IMediaSample*pOut)。在该函数 内,将调用FaacDecDecode解码函数对输入Sample中的AAC音频数据进行处理,将解码后的 PCM音频数据放入输出Sample,通过输出Pin,传送给后面的过滤器进行播放处理。

4.2.3

14.264视频解码过滤器

视频解码过滤器从解复用过滤器接收到H.264格式视频数据,对其进行解码并生产图像的ⅥⅣ

数据,再将ⅥⅣ数据转换为与视频播放过滤器协商好的格式,然后向视频播放过滤器传送【31】。前
面已经介绍过,本次设计采用的芯片¥3C6410可以对H.264进行硬件解码,在视频解码过滤器中封 装了对MFC加速器的视频解码操作,当该过滤器接收到视频数据流后,首先,获取视频信息,如编 码格式、分辨率等,并保存;然后,将数据流放入MFC加速器的解码缓冲区,调用MFC驱动程序, 并向驱动程序传递保存的视频信息,以便加速器有足够的信息完成视频解码;最后,解码过滤器将 加速器解码后的数据从MFC加速器的解码输出缓冲区中取出向视频呈现过滤器发送【32】。与音频解 码过滤器类似,视频解码过滤器也是典型的传输过滤器结构如下图所示:

图4.15视频解码过滤器结构

视频解码过滤器也是从CTransformFilter派生而来。CTransformFilter的介绍和使用已经在音频 解码过滤器中作了阐述。与音频解码过滤器不同的是,视频解码过滤器的实现还需要重点讨论2个 问题:H.264硬件解码原理和MFC解码过滤器原理。下面就这两方面分别进行讨论。 (1)H.264硬件解码原理 ¥3C6410处理器的一个特点便是其强大的多种视频格式编解码模块(MFC),MFC模块在多种 视频格式上的编解码处理都具有很好的表现,包括:H.263、MPEG-4、H.264、VC.1。MFC模块包 括内嵌的BIT处理器和视频编解码器。BIT处理器分解/合成比特数据流,控制视频编解码,与主处 理器通信。内含硬件加速。BIT处理器中的程序和数据是通过AMBA的APB总线和AXI总线进行 下载的l乃j。而视频编解码器完成对MPEG4、H.263、H.264以及VC.1几种视频格式文件的编解码。 BIT处理器和视频编解码器是协同工作,分工明确。BIT处理器内嵌一个16bit的DSP,主要负责加 速器与ARM内核的通讯以及数据流的分解/合成处理。视频编解码器则仅负责对来自BIT处理器的
数据流进行编解码操作【34】。

在图4-16中描述了BIT处理器和视频编解码模块在MFC硬件编解码中的作用。基本上,主机 处理器是和BIT处理器直接交互,通过接口函数和MFC模块进行通信。

32

第四章CMMB移动数字电视接收系统软件的设计与实现

S3C6410

MFC

1 (主\——]/

7器6)|<:磅
I\广22]/

BIT处理器

(榔DI\厂一 —/I争控制器

视频编解码

对驱动进行封装的c函数直接采用三星在¥3C6410的Windows

CE 6.0 BSP中提供的函数,这

些函数接口说明表4.7所利35】:
表4.7 H.264解码库中函数接口

函数接口
Void木SsbSipH264Decodelnit()

功能描述 初始化函数,打开MFC模块驱动,初始化解码上下 文环境

Int SsbSipH264DecodeDelnit(

释放解码资源函数

void毒openHandle);
Int

SsbSipH264DecodeExe(
void卑openHandle, long lengthBufFill);

解码函数,完成H.264的硬件解码工作

Int

SsbSipH264DecodeGetConfig(
void謇openHandle, H264_Dec_Conf conf_type,

获取解码上下文的参数配置

void?value); Void?SsbSipH264DecodeGetlnBuf(
void?openHandle, long size);

申请解码输入缓冲区,并返回缓冲区首地址

Void?SsbSipH264DecodeGetOutBuf(
void?openHandle, long?size);

申请解码输出缓冲区,并返回缓冲区首地址

上表中的六个函数的功能,都是通过调用MFC模块的驱动来实现的,但这里的调用并非是直接 的函数调用,而是通过标准的API接口,由这些API进一步调用驱动中的程序。在Windows CE下, 是将设备看做文件进行操作,对普通文件进行操作的API也适用于对设备文件的操作。 SsbSipH264Decodelnit0设备初始化函数中通过调用标准的API函数CreateFile0来打开MFC设备, CreateFile0函数进过系统的一系列转换,最终通过调用MFC模块驱动的MFC Open()i函数完成设备 的打开操作。SsbSipH264DeeodeDelnit0函数则通过调用CloseHandle0函数函数,进一步调用驱动的
MFC Close()函数最终完成对打开设备的关闭。其余四个函数对设备的读写操作都是通过API函数

DevicelOControl0调用MFC驱动函数MFC!OControl()i函数来实现的p
33

0|。

东南大学硕士学位论文

(2)过滤器的实现 MFC解码过滤器的功能是对按照MPEG4、H264、VCl、WMV9标准压缩的视频进行解码。该 解码过滤器从输入Pin接收数据,经过解码处理后再从输出Pin输出数据,因此这是一个Transform Filter,有一个输入Pin和一个输出Pin。并且输入Pin接收的数据是按照MPEG4、H264、VCl、WMV9
标准压缩的视频数据13刀。

解码过滤器输出的数据比输入的数据量大,不能采用“就地”处理,因此是选择CTramformFilter
作为该Filter的父类。CTransformInputPin和CTransformOutputPin分别作为输入Pin和输出Pin的

父类。此MFC解码过滤器的类名为CMFCDecFilter,输入Pin的类名为CMFCDecFilterlnputPin,输
出Pin的类名为CMFCDecFilterOutputPin。它们的类继承关系如下图所示:

选择好需要继承的基类后,接着就是实现需要重载的基类成员函数。由于该过滤器继承了 CTransformFilter,并且只需要一个输入PiIl和一个输出Pin,因此,不需要重新实现Pin类,不需要
重载Pin基类的成员函数。仅需重载Filter基类的相关成员函数。 首先需要实现Filter基类的所有纯虚函数,包括ChecklnputType、CheckTransform、 DecideBufferSize、GetMediaType。接着还需要重载相关虚函数,该Filter重载了Transform、Receive、

童 叠一萋



图4-17 CMFCDecFilter相关类的继承关系

EndOfStream三个虚函数。因为Filter在传输Sample时,需要调用输入Pin上的IMemlnputPin::Receive

接口方法,而该接口方法又需要调用Transform函数,冈此重载了虚函数Transform。Filter可以在
Transform函数里执行解码处理,也可以在调用Transform的Receive函数里执行解码处理,该MFC 解码Filter是在Receive函数里执行解码处理,因此也重载了虚函数Receive。重载了Receive方法,

一般又会同时重载虚函数EndOfStream。Transform、ChecklnputType、CheckTransform、GetMediaType、 DecideBufferSize和上节的AAC解码过滤器的实现比较类似,不再介绍,EndOfStream函数用于通 知该Filter其输入Pin已经没有需要传送的数据流,Receive函数用于接收和处理媒体Sample,并且
把输出Sample传送给下一级Filter[38】。该函数调用了四个解码函数,执行了锯码处理。H.264解码
流程图如图4.18所示。

MFC解码过滤器是一个基于DLL的COM组件,所以要定义符合COM规范的导出函数,由.def 文件实现,代码如下:

其中,DllRegisterServer和DllUnregisterServer完成COM组件的自注册功能,DllGetClassObject 在创建过滤器对象的时候被调用,根据CLASSID返回对应的类工厂对象,DllCanUnloadNow用于

判断是否可以从内存中卸载过滤器DLL,即DLL中实现的所有COM对象是否都已经释放例。

第四章CMMB移动数字电视接收系统软件的设计与实现

图4.18 H.264解码流程图

4.3应用软件的设计与实现
应用软件设计是基于微软基础类库框架,结合CMMB的具体功能,本次设计将功能分为三个 方面,分别是节目列表、搜索设置和系统设置。其主界面如下图所示:

35

东南大学硕十学位论文

图4-19播放器界面图

本次设计将用户界面的操作封装在一个控制类CcmmbuiDlg中,该类负责响应用户的操作,当 用户界面窗体程序接收到用户的指令后,将会在控制类CcmmbuiDlg中进行处理。

4.3.1节目列表界面
当用户点击节目列表时,控制类中CcmmbuiDlg::OnBnOlickedChList0函数将响应用户的操作, 首先判断节目列表是否存在,如果不存在则要重新获取,如果存在,便可以直接显示出来。通过第 二章对CMMB协议分析,我们知道ESG是一种多媒体广播信息导航业务,一般通过时隙1和时隙 2进行传输。要接收ESG数据,必须先接收时隙O(TSO)的数据,通过时隙0提供的信道编码调制信 息才能获取其它时隙的业务信息。接收完ESG数据后,对ESG数据进行解析,然后将节目显示出 来,用户通过点击节目列表,便可实现节目的播放。具体的流程图如图4.20所示:


开始 显示节目列表

............................。..........!I!:..............一

获得ESG的数据

获取节目数据进行播放 图4-20节目列表获取流程图

节目列表将采用简洁的方式排列,点击想要看的节目便可进入播放界面,点击返回,则可以返 回到主界面。显示界面设计如下图所示:

36



通过点击选中将要播放的节目时,将会调用控制类中CcmmbuiDlg中的函数进行节目的播放处
理,例如,点击CCTV-1时,将会调用CcmmbuiDlg::OnBnClickedChlistChl0'i函数相应用户的操作,

在OnBnClickedChlistChl0 J函数中,将直接调用DirectShow提供的接口函数对音视频的播放进行控
制,一些重要的接口函数包括【40】:
■ 一

IG-raphBuilder:用于创建过滤器图管理器。 IMediaControl:用于控制媒体流在过滤器图的传输。 IVideoWindow:用于设置多媒体播放窗口的属性。


■ ●

IBasicAudio:用于控制音频特性。 IBasicVideo:用于控制视频特性。
IMediaPosition:用于查找和定位数据流。



通过调用这些接口函数,可以轻松实现音视频的播放,而不需要考虑具体的细节,例如可以调 用IMediaControl接口提供的Pause、Stop、Run方法暂停、停止和开始当前的播放。

4.3.2搜索设置界面
当用户点击搜索设置时,控制类中的CemmbuiDlg::OnBnClickedSearch0函数将响应用户操作,

跳转到到搜索设置界面,这里的搜索设置是指频率搜索,现在的CMMB信号工作在在U波段(470 —798MHz),例如:南京地区的CMMB信号频率为750MHz。具体的界面如下所示:

图4-22搜索界面

进行自动搜索时,搜索程序将扫描U波段的所有频点,直到搜索到CMMB接收系统所在地的
37

频率。如 体的操作 说明已经

4.3.3系
当用户点击系统设置界面时,控制类中的CcmmbuiDlg::OnBnClickedSystem0将响应用户操作, 跳转到系统设置界面,系统设置主要包括清除列表、CMMB固件芯片升级和智能卡卡号。清除列表 可清除所有频道列表中的频道,而CMMB固件升级和智能卡卡号本次设计未使用,只是方面以后升 级时保留的界面。系统设计界面如图4-24所示:

图4.24系统设置界面

4.4本章小结
本章介绍了CMMB移动数字电视接收系统的软件实现。CMMB接收系统软件部分的设计与实
现主要分为二个部分:第一部分,CMMB解调器驱动层软件的设计与实现,通过解调器驱动,应用

程序可以向解调器发送控制命令和读取CMMB数据流;第二部分,多媒体流管理层的设计与实现,
38

第四章CMMB移动数字电视接收系统软件的设计与实现

确定采用微软的DirectShow架构设计多媒体流管理层,并实现了CMMB解复用、音频解码和视频 解码等多媒体组件。视频解码使用¥3C6410处理器的MFC模块,采用硬件进行H.264视频解码, 相对于采用纯软件解码,提高了解码效率,降低了CPU利用率。最后,还介绍了应用软件的设计, 应用软件设计是基于微软基础类库框架,结合CMMB的具体功能,本次设计将功能分为三个方面,
分别是节目播放、搜索频道和系统设置。

39

东南大学硕士学位论文

第五章测试结果与分析
在Windows CE操作系统中,系统配置文件对内核和驱动的构建、编译具有至关重要的作用, REG(Registry)和BIB(Binary Image Builder)文件尤为关键,本系统主要借助于这两类配置文件来构建

与编译,随后将针对该系统编写这两个文件。针对第四章的完整系统,本章将进行功能测试和性能 测试,并对测试结果进行合理分析。

5.1系统的配置和编译
由于Windows CE采用模块化的配置系统,使得日益庞大的Windows CE源代码的组织并没有

出现混乱的现象,反而显得非常的简洁,具有很好的扩展性,开发人员可以很方便的向系统中增加 新的内容,从而保证了系统的扩展性。相关的配置文件主要有两部分组成,分别是:REG文件和BIB 文件。


REG文件 REG文件是系统注册表文件,设备驱动程序的有关信息会存储在REG文件中。在Windows CE

系统中,注册表相当于一个系统数据库,存储着应用程序,驱动程序以及操作系统的配置信息,通 常还存储着系统调用程序的状态信息【4l】。 解调器IFl01的驱动分为核心层驱动和逻辑通道驱动,而逻辑通道驱动被加载了两次,相当于 加载了两个逻辑通道设备,一个用于读取控制逻辑通道的控制信息,一个用于读取业务逻辑通道的 数据信息,通过Index参数加以区别这两个逻辑通道设备。
解调器IFl01驱动的注册表配置:

BIB文件的作用是指示系统如何构建二进制映像。BIB文件指示那些文件被打包到运行时映像 中,同时还会指示如何往目标板上加载模块和文件。BIB文件是包含关键词的纯文本文件,关键词 定义了MODULES、FILES、MEMORY和CONFIG四个区域,如表5.1所示:

第五章测试结果与分析

表5.1 BIB文件中的区域 MODULES

定义要被Romimage.exe加载到存储器里的对象模块,这些模块是可被就 地执行(X口)的未压缩的.CXe和.dU文件

FILES

定义放置在OS运行时映像中的LIB文件及其它静态文件,Romimage.eXC 将默认地压缩所有在FILES区域的文件

MEMORY

定义可用的物理内存,包括定义内存的起始地址、大小和类型。MEMORY
区域只能出项在eonfig.bib文件中

CONFIG

CONFIG区域不是必须的,它被用在需要设置某些属性的时候,默认位
于eonfig.bib文件中

解调器IFl01驱动的BIB文件配置:

其中SH表示Irmo—ill01.dll和Inno—ifl01一LGC.dll是系统文件并且是隐藏文件。 配置好之后用Visual Studio 2005编译就可以得到对应于¥3C6410平台的Windows CE镜像文件, 并将已经编译好的Windows CE内核镜像文件通过网口下载到NAND Flash中。

5.2功能测试
论文的CMMB移动数字电视接收系统的硬件平台包括两个部分:三星¥3C6410开发板和CMMB 调谐解调模块。三星¥3C6410开发板主要包括128MB的DDR内存,64MB的Nand
Flash,320*240

的TFT LCD触摸屏,调试串口,网口和电源管理等多个外围模块。CMMB调谐解调模块包括ADI

公司的调谐器MTVl02,创毅视讯公司的解调器IFl01,天线,串口等。CMMB移动数字电视接收
系统的开发板实物图如图5.1所示:

图5.1 CMMB接收系统开发板实物图
41

论 播放节 电,右 打 置。功 要 点击自

图5.2功能选择界面

图5.3搜索设置界面

当搜索完成后,便可以进行下一步的操作了,就是节目列表的显示。CMMB提供了电子业务指 南服务,通过接收ESG数据,解析后可以获得节目列表的数据。当用户点击功能选择菜单的节目列 表,便可以显示有效的节目信息。频道节目列表如图5_4所示。 由图54可以看出,当地广电部门一共提供7套节目的服务,其中江苏卫视和南京综合频道是 加密频道,需要经过解密后才能播放,由于本论文并没有进行条件接收(ConditionalAccess,CA)系 统的设计,所以并不支持加密电视节目的播放。随着各地商业化收费,节目将逐渐进行加密,所以 CA系统的设计将是以后工作的一个重点。 通过点击选中将要播放的节目时,将会进行节目的播放处理,例如,点击CCTV-1后,便会跳 转到节目播放节目,节目播放时的界面如图5.5所示,用户可以通过频道和音量按钮进行频道切换 和音量控制。

图54频道。符目列表
42

图5.5节目播放界面

第五章测试结果与分析

5.3性能测试
由于嵌入式终端设备硬件资源相对有限,而CMMB数据的解复用和音视频的播放对硬件资源要 求较高,所以本论文对CMMB接收系统的性能测试重点是视频播放流畅性测试、CPU利用率测试、 频道搜索时间测试、播放稳定性测试和音视频同步测试。 本论文所采用的三星S3C6410芯片采用高性能的ARMl l内核,最高时钟频率可达667MHz, 测试时,工作频率为533MHz。在进行性能测试时,将和目前市场上主流的CMMB接收系统进行对 比测试,SIRFA3是SIRF公司发布第三代芯片SIRF
Atlas

III,基于ARM9内核,工作频率为

372MHz,音视频全部采用软件解码。本论文CMMB接收系统参数和基于SIRFA3平台的CMMB 接收系统参数如表5.2所示。
表5.2基于S3C6410平台和SIRFA3平台的CMMB接收系统参数 处理器类型 处理器频率 内存 显示屏分辨率 三星¥3C6410(ARMll) 533MHZ
128MB SDRAM 320


SIRF Atlas III(AIUvl9)

372MHZ 64MB SDRAM
320X 240

240

操作系统

f渤dows CE 6i0

Windows CE

6.0

由图5.1的CMMB接收系统开发板实物图可以看出,CMMB调谐解调模块和应用处理器之间
采用SPI总线相连,基于¥3C6410平台和SIRFA3平台的CMMB接收系统都是采用相同的CMMB

调谐解调模块,正常工作时,CMMB调谐解调模块的接收灵敏度测试如表5-3所示。灵敏度的单位
表示为分贝毫瓦(dbm)。 表5.3 CMMB调谐解调模块接收灵敏度

调制方式
BPSK

LDPC编码率
1/2

标准推荐值
.98 dbm .96dbm
.95 dbm

实际值
.102dbm .99dbm
.100.9 dbm .98 dbm

3/4
1/2

QPSK

3/4 1/2

.92 dbm .90dbm .86dbm

.94.9 dbm .91.4 dbm

16QAM

3/4

通过上表可以看出,CMMB调谐解调模块的接收灵敏度能够达到标准推荐值,满足CMMB接 收系统的应用需要。接下来,论文将对CMMB接收系统进行的性能测试包括:视频播放流畅性测试、 CPU利用率测试、频道搜索时间测试、播放稳定性测试和音视频同步测试。 (1)视频播放流畅性测试 首先对CMMB接收系统进行的是视频播放流畅性测试,CMMB信号源的视频帧率为25帧/秒。 采用的测试方法是加入测试代码,在播放时记录所播放的视频帧数目,每播放一定的帧数后用该值 除以播放这些帧所用的实际播放时间,即可计算出实际播放的平均帧率。在CMMB接收系统正常工 作时,每隔20分钟测试一次该时间段的平均帧率,一共测试10次,两个平台测试的具体结果如表 5.3所示。FPS表示正常播放时每秒播放的视频帧数量。

43

东南大学硕士学位论文

表5.3正常播放时帧率测试结果 次数
1 2 3 4 5 6 7 8 9 10
?

¥3C6410平台播放帧率(FPS)
24.96 24.32 25.17 24.44 25.16 25.58 24.66 25.56 24.36 25.2l

SIRFA3平台播放帧率(FPS)
25.01 25.36 25.12 24.56 24.69 25.12 24.96 25.67 25.12 25.04

测试结果分析: 从表5.3的测试结果可以看出,两种平台下CMMB接收系统正常工作时,视频播放帧率都能稳

定在25帧,秒左右,没有出现丢帧现象,视频播放流畅,说明两种平台下的CMMB接收系统都能达 到CMMB视频节目播放的基本要求。 (2)CPU利用率测试

从帧率的测试结果可以看出,两种平台都能正常播放CMMB节目,接下来将对CIV蹦B接收系
统进行CPU利用率的测试,CPU的利用率的测试方法是在某一段时间的开始和结束时分别调用 WindowsAPI提供的GctTickCount函数可以得到这段时间以毫秒单位的长度,分别调用GetldleTime
函数可以得到这段时间的CPU空闲时间,测试代码如下:

代码中Percentldle即为CPU的空闲率,所以CPU的利用率为(1-Percentldle)。 具体的测试方法:当CMMB接收系统正常播放音视频节目时,在4个小时的播放时间内,随机 采样100个点,记录该采样点的CPU利用率。在100次采样结束后,对采样点的CPU利用率进行 分析处理,统计相同CPU利用率出现的次数。如图5-6所示,左边的折线图是基于¥3C6410平台的 CMMB接收系统的CPU利用率测试结果,右边的折线图是基于SIRFA3平台的CMMB接收系统的 CPU利用率测试结果。通过将100个测试点的CPU利用率整理成折线图的形式,将有助于分析测试
结构。

第五章测试结果与分析

图5-6 CPU利用率对比测试结果
_

测试结果分析: 由上图的CPU利用率对比测试结果可以看出,对于¥3C6410平台的CMMB接收系统,CPU利

用率最低时为41%,最高时为61%。当CPU利用率为49%时,出现次数最多,一共出现13次。对 于SIRFA3平台的CMMB接收系统,CPU利用率最低时为68%,最高时为86%。当CPU利用率为 77%时,出现次数最多,一共出现11次。通过对测试数据计算,得出¥3C6410平台的CMMB接收 系统正常播放时CPU平均利用率为49.25%,SIRFA3平台的CMMB接收系统正常播放时CPU平均
利用率为77.43%

在CMMB接收模块,显示屏分辨率和操作系统一样的情况下,S3C6410平台的CMMB接收系
统比SIRFA3平台的CMMB接收系统的CPU利用率低了28%,对比¥3C6410芯片和SIRFA3芯片

后,可以发现,¥3C6410芯片是基于ARMll架构,工作在533MHz,而SIRF A3芯片基于ARM9 架构,工作在325MHz,由于主频的提高,¥3C6410在音视频数据的处理上具有更强的功能。另外 由于本次H.264视频解码过滤器时用了S3C6410芯片的MFC硬件加速模块,使得CPU在处理视频 解码时比纯软件解码时效率更高。 (3)频道搜索时间测试 频道搜索时间是指CMMB接收系统扫描整个U波段(470--一798MHz)的频点,获得接收系统 所在地的频率这个过程,当搜索到正确的频率时,接收系统将下载最新的电子业务指南,获得当前 的节目列表,如果失败,则会显示搜索失败,提示用户继续搜索。搜索时间的快慢也是一个CMMB 接收系统性能指标。具体测试结果如表5.4和表5.5所示:
表5.4¥3C6410平台频率搜索测试 次数
1 2 3 4 5

搜索时间(秒)
10.72 11.01

CPU占有率(%)
17 15 14 16

10.54
11.04 10.86

15

45

东南大学硕上学位论文

表5.5 SIRF A3平台频率搜索测试 次数
l 2

搜索时间(秒)
12.74 12.8l

CPU占有率(%)
22 27 21


4 5

12.74
12.96

25
24

12.67

一测试结果分析 由表5.5和表5.6可以看出,两个CMMB接收系统都能完成正常的频率搜索功能,较之两个平 台,¥3C6410平台在搜索时间上要少于SIRFA3平台,在CPU占用率上也低于SIRFA3平台。本论 文设计的CMMB接收系统扫描完整个u波段的平均时间为10.82秒,而基于SIRFA3平台的CMMB 接收系统则需要12.78秒,搜索时间减少了约2秒。另外,当接收系统的所在地的频率没有发生改 变时,下次运行时将直接读取已经保存的频率,不需要搜索,直接获得当前的节目列表。 (4)播放稳定性测试 在播放稳定性测试方面,本论文采用长时间连续播放的方式测试程序的稳定性,同时观察程序 对内存的使用状态来验证是否发生内存泄漏。内存的利用率可以在程序运行过程中调用Windows API提供的GlobalMcmoryStatus函数,此函数用来获得当前可用的物理和虚拟内存信息,函数定义
为:
VoID GlobalMemoryStams

( LPM[EMORYSTATUS lpBuffer );
typedef struct_MEMORYSTATUS{

DWORD dwLength;//MEMOR-YSTATI 7S结构的大小 DWORD dwMemoryLoad;//当前系统内存的使用率 DWORD dwTotalPhys;//返回总的物理内存大小,以字节(byte)为单位 DWORD dwAvailPhys;//返回可用的物理内存大小,以字节(byte)为单位 DWORD dwTotalPageFile;//显示可以存在页面文件中的字节数 DWORD dwAvailPageFile;//返回可用的页面文件大小,以字节(byte)为单位 DWORD dwTotaWirtual;//返回调用进程的用户模式部分的全部可用虚拟地址空间 DWORD dwAvailVirtual;//返回调用进程的用户模式部分的实际自由可用的虚拟地址空间 }MEMORYSTA,rI 7S,*LPMEMORYSTATUS;

通过dwMemoryLoad返回一个介于0---100之间的值,用来指示当前系统内存的使用率。表5.6 是测试CMMB接收系统开始运行和运行4个小时后对内存的使用情况。内存使用情况只在本论文设 计的¥3C6410平台上进行测试。
表5.6 CMMB接收系统内存使用情况 播放时间 内存使用(KB) 播放时间 内存使用(KB)


10分钟
29816

20分钟
30248

30分钟
30515

40分钟
30764

50分钟
31065

一个小时
31219

二个小时
31451

三个小时
31467

四个小时
31512

测试 由图5-7的CMMB接收系统内存使用图可以看出,CMMB接收系统在刚运行的一个小时内,

内存使用增加的比较快,内存使用从29816KB增加到31219KB,增加了1403KB,但运行一个小时
46

第五章测试结果与分析

后,内存增加比较小,运行了3个小时内存只增加了293KB,CMMB接收系统运行已经稳定下来, 测试结果说明内存没有泄露情况发生,可以支持长时间稳定运行。

图5.7 CMMB接收系统内存使用图

(5)音视频同步测试 在本论文的4.2.1节介绍了CMMB复用帧的解复用流程,一套电视节目的音视频数据在一个复 用子帧中同时传输。解析复用子帧后,便可以得到音频数据和视频数据,然后分别进行音视频解码
播放。通过解调器芯片厂商提供的复用帧分析软件MFS

ex.rzylanA据数帧用复的后前放播对以可

进行分析,本次测试将对MF Io(复用帧标识_)=2的一段复用子帧进行。 复用子帧中的数据段采用H.264编码格式,通过复用帧分析软件分析的视频段结构如图5.8所 示。可以看出,复用子帧中视频段数据主要由I帧和P帧构成。l帧画面用原始数据直接编码,不与 其它画面比较。所以I帧画面的编码量信息量大,数据量大,但可以仅用自身的数据独立还原画面。 从图中可以看出,P帧的数据量比较小,原因是P帧画面用最近的I帧或者P帧画面作为比较基准
进行运动预测,只记录下这帧画面与基准画面的不同之处。所以编码效率高,数据量小,但还原画 面就需要前面的基准帧数据。
视瓤单元的长度

臣囹







蕊il懋嚣 黝 鬣匿舅 童彘

鳓戮缓瓤缓,蓊

凛=銎 燃 。孵嘲 溅麟 8黝 ;臆
缎瞄热缓,:渤刚i
l目镕积确i 47



-.

图5.8复用子帧中视频段结构 由上图同时可以看出,一个复用子帧中视频段数据中有150个视频单元,每个视频单元都有自

东南人学硕士学位论文

己对应的播放时间。DireetShow结构最核心的部分是Filter

Graph

Manager,它实现的一个很重要的

功能就是同步音视频的处理。DirectShow的解决方案就是为Filter Graph选择一个公共的参考时钟
(Reference Audio

Clock),并且要求传送到Renderer Filter的每个视频帧都打上时间戳,Video Renderer或

Renderer根据视频帧的时间戳以及参考时钟的当前参考时间来正确安排播放时间。
桠棚簟元自争长度

复用子帧中的音频段采用AAC编码格式,通过复用帧分析软件分析的音频段结构如图5.9所示

图5-9复用子帧中音频段结构 由上图同时可以看出,一个复用子帧中音频段数据中有140个视频单元,和视频单元一样,每 个音频单元也都有自己对应的播放时间。 通过复用帧分析软件MFS Analyzer.exe,可以直接比较MF D(复用帧标识)=2的一段复用子帧 中音视频播放时间。音频播放和视频播放时间对比图如图5.10所示。从图中可以看出,这段复用子 帧的相当播放时间从49.2秒到55.3秒,一共持续6.1秒。视频段数据一共有150个视频单元,音频 段数据一共有140个音频单元。当最后一个视频单元播放完成时,最后一个音频单元也播放完成, 而且各单元的播放时间和单元编号呈线性增长,表明音视频单元基本是同步播放的。
置用帧中的音视壤单元vs播放时问

巨匦三团


申鼻限哥嚣迮暴举

多≤ 童磊



强夕
—一

乏多
二,,‘

/ ;r
●●-_

/。 , /

/。 ;∥ /

/ ./。

≥,

幺<乏∥





j;矽 ∥1

/ 参罗。 多 0≯,『…‘
●●●一

图5.10音频播放和视频播放时间对比图

5.4

本文 性能 要包 在同 利用

49

总结与展望

总结与展望
总结
CMMB是中国移动多媒体广播的简称,CMMB标准被国家广电总局正式确定为移动数字电视 行业标准。它是国内自主研发的第一套面向手机、PDA、笔记本电脑等多种移动终端系统的移动数
字电视标准。

论文针对CMMB移动数字电视功能的需求,基于S3C6410微处理器以及创毅视讯公司的解调
器IFl01模块,在微软的Windows CE 6.0操作系统中实现了CMMB移动数字电视接收系统,论文 主要完成的工作如下:


论文首先对CMMB协议进行了详细分析,包括广播信道帧结构和信道编码调制、复用原理、电 子业务指南。接着介绍了移动数字电视接收系统原理图,对CMMB接收系统的典型结构做了初
步分析。



完成了CMMB移动数字电视接收系统的硬件和软件方案的设计。硬件平台采用三星¥3C6410 微处理器作为应用主处理器,信道解调芯片使用的是创毅视讯公司的IFl01芯片,二者通过SPI 接口实现通信。论文的软件平台基于Windows CE 6.0操作系统,平台具有非常高的稳定性以及 对网络通信业务强大的支持。CMMB接收系统在Windows CE 6.0操作系统下的软件设计与实现 主要分为两个部分来实现,分别是CMMB解调器IFl01驱动和上层应用软件。



CMMB解调器驱动层软件的设计与实现。解调器IFl01驱动程序将采用Windows CE操作系统 的流接口模式的驱动架构,应用程序只需采用同访问文件一样的方法即可获取数据码流。驱动 的实现分为核心驱动和逻辑通道驱动的实现。



多媒体流管理层的设计与实现。确定采用微软的DirectShow架构设计多媒体流管理层,CMMB 整个多媒体数据的处理可以分成6个独立的部分:数据接收、复用帧结构(Multiplex
Frame

Structure,MFS)流解复用、音频解码、音频播放、视频解码和视频播放,可以将这些步骤分别 设计成独立的多媒体组件,这些多媒体组件在多媒体流管理层控制下,通过管道连接成一个过 滤器链,共同完成多媒体数据的处理。


最后完成应用程序的编写,提供用户界面,并对CMMB接收系统进行了功能和性能测试。功能 测试主要包括搜索频道、显示节目列表、播放节目和系统设置,性能测试主要包括播放流畅性 测试、搜索时间测试、播放稳定性测试和音视频同步测试。 测试结果表明:本论文的CMMB移动数字电视接收系统能够正常搜索到系统所在地的频率、显

示节目列表和播放音视频节目。还能够实现音视频数据的同步播放。在同SIRF A3(ARM9)平台的 CMMB接收系统进行对比测试时,本论文的CMMB接收系统的CPU利用率比SIRF A3平台低了 28%,搜索时间减少了约2秒。

展望
通过研究开发,论文达到了预定的要求。但是由于个人知识水平和时间缘故,以及具体开发环 境所限,论文还有一些待完善之处。 第一,对于CMMB移动数字电视接收系统一个外设多、应用复杂的手持设备,功耗和电源管理 是一个需要重点研究的地方,在本论文中,由于模块都采用外接电源供电,并未考虑到实际电池供 电的情况。所以在后期的研究中,如何完善电源管理将是CMMB移动数字电视接收系统能否连续工
50

作的

将逐 需具 辅助 现按 计。

51

致谢

致谢
在论文结束之际,我首先衷心感谢我的导师陆生礼研究员。陆老师渊博的知识,严谨务实的治 学态度和宽厚热忱的性格,使我获益匪浅。在本人的整个研究生生活期间,陆老师不仅在学习上给 我以教诲,而且在生活等其它方面也给予了我极大的关心和照顾,谨在此向陆老师致以衷心的感谢。 我还要感谢戚隆宁博士和黄少珉博士。在论文研究的每个阶段和论文的撰写过程中,他们自始 至终都给予我悉心的指导和帮助,没有他们的帮助我是不可能完成本论文的研究工作的。 特别需要指出的是,在整个研究过程中都有张伟伟、许建文、王吴、汪伟、张纪艳、何雷、赵 文登等同学以及我的师弟师妹们的参与,我要对他们在我的研究工作中所付的心血和精力表示感谢。 另外,我还要感谢所有ASIC工程中心的老师和同学,感谢他们在我读研究生期间对我在学业、 工作和生活上的关心和帮助。 谨以此文献给我的家人和所有关心我的老师、同学和朋友们!
曾敏 2010年5月

52

【l】1林萍
【2】2国家

【3】3袁文 【4】毛剑
12禾

【5】余兆
【6】肖礼 【7】孟培
2009

【8】国家广播电影电视总局.移动多媒体广播第2部分:复用【z】,2006 【9】国家广播电影电视总局.移动多媒体广播第3部分:电子业务指南[z】,2006 【10】林健.基于DMB—TH的移动数字电视接收机的设计与实现【D】:【硕士学位论文】.中南大学,
2008

【11】Innofidei.CMMB design guide【z】,2006 【12】Samsung 【13】Samsung
Electronics Corporation.¥3C6410 User Electronics Corporation.The Feature

Manual[Z].2008

ofS3C6410[Z].2008

【14】Philips Corporation.12C

Bus Specification Version CE

2.1[Z】.北京:中国标准出版社,1986

【15】邱小平,李恬,雷群英.Windows

6开发经典【M1.北京:电子工业出版社,2009
CE CellCore

【16】Microsoft Corporation.Windows Embeded oft.com/MSDN/library,2008

Architecture[EB/OL].http://www.micros

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

【18】周立功.ARM嵌入式系统软件开发实例[M】.北京:北京航空航天大学出版社,2004 [19】陆其明.DirectShow开发指南【M】.北京:清华大学出版社,2003 【20】陆其明.DirectShow实务精选[M】.北京:科学出版社,2007
[21】Microsoft Corporation.Programming Microsoft DirectShow for Digiml Video and Television 【M】.Microsoft
Press,2007

【22】张冬泉.Windows CE开发实例精粹【M】.北京:电子工业出版社出版社,2007
【23】Stanislav Pavlov,Pavel Belevsky.Windows Embeded CE 6.0 Fundamentals[M].Microsoft
Corporation,2008

[24】傅曦,齐宇.嵌入式系统Windows CE开发技巧与实例[M】.北京:化学工业出版社,2004 【25】李长河、王永强、刘刚、张建华.嵌入式Windows CE设备驱动的研究实现【J】.微机发展.2003(13):
57.59

【26】姚晔、徐正全、李伟.基于DirectShow设计视频加密Transform Filter[J].计算机工程与应用,
2005(18):91?93 [27】Microsoft Corporation.Windows Media 9系列音频和视频编解码器[EB/OL].http://www.micros
oft.com/windows/windowsmedia/cr99series/codecs.aspx.2009

【28】闫城辉.CMMB手机电视播放软件的设计与实现[D】:【硕士学位论文】.北京航空航天大学,2008
【29】Ze-Nian Li,Mark


Drew.Fundamentals

of

Multimedia[M].Pearson Prentice Hall,2004

【30】蓝旭.WinCE5.0系统下基于DirectShow技术的多媒体编程[J】.电子元器件应用,2009(9):88-91
【3 1】RecommendationⅡU-R BT.656-4:Interfaces
for digital
53

component video

signals in 525-line

and

参考文献
625-line television systems operation at the 4:2:2 level of

Recommendation ITu-R【c】,Part

A,2003

【32】黄婧芝、付显峰、吴国平.基于DirectShow的H.264视 频采集与播放的实现【J】.电子技术,2007(8):
56-58

【33】Zheng Jinghong,Chau

Lap-Pui.Efficient

Motion

Vector

Recovery Algorithm for H.264

Based On



Polynomial Model[J].Multimedia,IEEE Transactions one005,7(3):507-508

【34】Adlen

Ksentini,Moh锄ed
over

Naimi,Abdelhak Gueroui.Toward


all

Improvement

of

H.264

Video

Transmission

IEEE 802.1 l

through



Cross-Layer Architecture[J].Communications Magazine,

IEEE,2006,44(1):107-144 【35】华恒科技.HHARMS3C64)【】【技术手册【Z】.2008 【36】Ze-Nian Li,MarkS.Drew著.多媒体技术教程【M】.史元春等译.北京:机械工业出版社,
2008.230.23l

【37】Kim,J.et

a1.Design and Implementation of

all

MPEG一2

Transport Stream

Multiplexer for HDTV

Satellite Broadcasting.In IEEE Transactions

on

Consumer Eletronics,44,3(Aug.1 998),672--678

【38】齐谊娜,徐海龙,王晓丹.H.264与MPEG-4压缩编码标准的分析与比较叨.计算机测量与控制,
2006,14(12):1720-1721

【39】鲁漫红、段益群.基于DirectShow的H.264视频流过滤器的设计与实现阴.科学技术与工程,
2009(9):47-50 [40】David J.Katz,Rick Gentile著.嵌入式媒体处理[M】.陈醋,殷福亮,景源译.北京:电子工业 出版社,2007

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

在学期间发表论文清单

在学期间发表论文清单
1.曾敏,张伟伟,王吴,“基于ARMll的移动数字电视的解决方案”,电视技术,2009,33(¥2)-
122.124

2.张伟伟,张纪艳,曾敏,“基于GSM的无线户外广告控制系统的设计与实现”,电脑知识与技术, 2009,5(17)-4439-4441

55

CMMB移动数字电视接收系统的设计与实现
作者: 学位授予单位: 曾敏 东南大学

本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1761660.aspx


相关文档

数字电视地面移动接收机的设计与实现
如何设计一个性能优异的CMMB移动数字电视终端-数字电视1
地面数字电视移动测试系统设计与实现
移动多媒体电视CMMB与地面数字电视
CMMB移动数字电视终端的设计
CMMB移动数字电视终端设计
移动数字电视机顶盒设计
基于智能手机平台的CMMB移动电视功能设计
可用于移动接收地面数字电视的天线设计
一种用于移动接收地面数字电视的天线设计
电脑版