首页资源分类嵌入式开发嵌入式系统 > 基于H.264的嵌入式实时视频采集与传输系统的设计与实现

基于H.264的嵌入式实时视频采集与传输系统的设计与实现

已有 456470个资源

下载专区

文档信息举报收藏

标    签: 嵌入式

分    享:

文档简介

基于H.264的嵌入式实时视频采集与传输系统的设计与实现

文档预览

华东师范大学 硕士学位论文 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 姓名:黄振华 申请学位级别:硕士 专业:通信与信息系统 指导教师:刘锦高 20080501 摘要 随着通信和多媒体技术的飞速发展,高质量的视频传输已逐步取代传统的语 音和文字信息成为数字通信网络的主要拓展业务之一;微电子技术和嵌入式操作 系统的不断发展,为数字网络通信中的多媒体化视频终端创造了有利条件,嵌入 式技术与网络、通信和多媒体技术的相互融合将成为数字视频通信领域的发展趋 势。由于嵌入式数字通信系统的传输带宽有限,以往的视频压缩编码技术非常不 利于实时传输高质量的现场视频。 为了以尽可能低的带宽传输高质量的视频图像,ITU.T视频编码专家组 ⅣCEG)和IS0/】[EC活动图像专家组(MPEG)组成的联合视频专家组(ⅣT)颁布了 新一代的视频压缩编码标准H.26舭AVC。H.264标准引入了一系列先进的视频压 缩编码关键技术来有效地提升编码效率,但同时也加大了编码计算的复杂度,成 为H.264在嵌入式视频应用中的主要制约因素。因此,对在嵌入式设备上高效地 实现大运算量、高复杂度的H.264视频压缩编码的研究极具挑战性。目前,基于 嵌入式的H.264实时视频通信系统解决方案仍处于探索阶段。 本文旨在利用H.264视频压缩编码标准在嵌入式平台上进行实时视频通信系 统终端的研究开发。论文中采用基于PⅪ墟70微处理器的Liod开发平台,将嵌 入式I jnux技术与H.264视频通信技术相结合,提供了一个基于嵌入式视频服务 器的H.264实时视频采集与网络传输系统的方案模型,对实际嵌入式视频通信系 统的设计开发,具有借鉴意义和实用价值。 论文的主要工作和创新点表现在以下几个方面: 1.深入研究了嵌入式Lin_u】【开发技术,建立了基于Liod开发板的嵌入式Lill.u】【 开发平台,包括交叉编译环境的搭建、Bootloader设计、L衙u)【2.6.22.6内核移植、 ’ 设备驱动开发以及基于BuSybox的根文件系统的构建。 2.研究了基于Ⅵde04L曲uX的实时视频采集技术,包括USB摄像头驱动程 序设计和实时视频采集应用程序设计。 3.提出了面向应用的嵌入式实时视频H.264压缩编码方案,并研究了基于 嵌入式处理器体系架构的多媒体程序优化方法,对X264开源编码器进行了编译 级和代码级优化,达到了实时应用要求。 4.研究了基于D网络的H.264视频传输技术,设计了视频通信终端的 SeⅣer/CHem服务程序,实现了基于VLC的嵌入式实时视频采集与传输系统模型。 关键字:嵌入式LinlⅨ,PⅪ也70,H.264,)(264,vide04L淅u)【,视频采集,视频传输 Abstract M曲-qual时访deo仃删ssion mul缸edia Witll qmck deVelopmem of commuIlicadon and teclln0109y' h鹪be铋髓|d:ually replaucing缸aditional Voice and te】(t comⅡmnication aIld becomes me main expanded serviCe of digital com加unica土ion ne俺rork.At也e s锄e time,the cm血mlolls de、relopment of microelec灯onics technology a11d embedded operat洫g system haS created fIavordble conmtio璐f.0r iInpleInen僦on of en慨dded n11】1缸edia conl】nu血ca:tion te门田砌s. Mun】al 血e铲ation of Enlbedded TeClmoloy,Net、7旧rk&Comml血cation Technology and Mult砥dia Technolog)r 晰11 become吐le deVeloping 仃end of digital Video co如munjcation丘eld.As the band、埘d也of embedded di西tal com功1mjcation system is liInjte也the pre访ouS访deo compression tecllnology is not conducive to real一tmle 位msmission of high-q砌i够1iVe啊deo. IIl order t0柏ns耐t hi曲一qllal蚵讥deo images tllrou曲more的now ne铆ork ban桶d饥a new generation of访deo codillg比mdard H.264侩VC has been promulgated by也e Jo硫Ⅵdeo Te锄(ⅣT)of ITU—TⅥdeo Cod迦Expen ‰upⅣCEG)and Mo咖g ISO/1-EC Picture EXpens C胁up@口EG).H.264 S切玎dard. 锄∞duces a series of advanced vide0 conlpression codir培 teclllliques t0 ef6ectiVely iInpr0Ve enco曲19 pe墒瑚加ce,but also血lmatically incre邪es t11e computational comple)【i.鸭Which becomes a m萄0r c011s仃出t for砥uSe in embedded video applic撕oIls.nerefore,恤e research on achie、血g H.264、哇deo comI)ression of hi曲 computatiorm comple)【i锣in e功bedded systems is extremely cbdlengiIlg.Ho、矾Iver, 廿1e H.264-baSed e玎1bedded real啦me啊deo co衄nullication syStems solution is Still in eXploring stage. 111is msse心畸on aims at developil唱趴H-264-baSed re2Ll-tinle video con】m11nica. 乇on te:nninal on an锄kdded pla怕衄.111仳s dissemcion,baSed on me PⅪ墟70 L妣x Liod deVelopment plad’0r鸥comb越ng embedded technolog),aIld H.264.based Video commullication teckl0109y,a real—time Video acqmsition纽d位msmission system s01ution model based on an锄bedded Video server is proVided.It proVides si鲥ficance reference a11d practical Value for吐le actual enlbedded video co础mullic撕on Systems desi皿aIld development. The au山0r’s、7l,ork and innova:tion iIlclu£【e: 1.ndep也study of embedded L抽呶devclopment teClm010鼢and embedded L弧p1缅m b诃血g baSed on Liod deVelopmeDt bo她血luding Cross蝴mpil迦 Ⅱ 疵nment co删on. buil拙lg,Boouoader desig玛Lin:11)【2.6.22.6 kemel por血g,device “vers developme酏and BuSybox-baSed r00t file sytem 2.research on real.t缸e video ca]pn玳tcchn0109),b硒ed 0nⅥde04L劬x, i11cluding USB caInera“Ver development and real一幽1e、,ideo captllre applic撕on design. 3.proposh坞an application.orien:ted e玎曲edded real每me H.264 Video compre‘ .ssion codiI冯sheme,and research 0n m山cinledia applic撕on program opt.衄ization optin伽on me仕10ds b嬲ed on e玎1bediIed microprocessor arcKtecture.C伽叩ile—tinle and Code.1eVel optiIIliza:cion is applied幻open-source enCOder X264,t0 achieve me rcal-time application reqlliremems. Ser删(:1ient com删cation 4.research on H.2“访deo仃ans血ssion techn0109),in口-baSed n称Ⅳ0rk,desi萨 of service pr0铲锄s for Video temliIlals,and inlplemen- .tation of趾embedded real.time、,ideo aCquisition and他nsmission system model 衍th VLCmdeoLan C1ient). Key words:cnlbedded Lmu)【,PⅪ墟70,H.264,)【264,Ⅵde04L证uX,访deo ca皿鹏, video臼.a∞jsmission Ⅲ 学位论文独创性声明 本人所呈交的学位论文是我在导师的指导下进行的研究工作及 取得的研究成果.据我所知,除文中已经注明引用的内容外,本论 文不包含其他个人已经发表或撰写过的研究成果.对本文的研究做 出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期:堡堕型 学位论文授权使用声明 本人完全了解华东师范大学有关保留、使用学位论文的规定, 学校有权保留学位论文并向国家主管部门或其指定机构送交论文的 电子版和纸质版.有权将学位论文用于非赢利目的的少量复制并允 许论文进入学校图书馆被查阅。有权将学位论文的内容编入有关数 据库进行检索。有权将学位论文的标题和摘要汇编出版。保密的学 位论文在解密后适用本规定. 学位论文作者签名:童掘牟 日期:趟!墨!』 摊名:狮乌 日期:丛Q篁。丘、厂 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 第一章概论 引言 视觉是人类获取信息的主要来源。据统计,人类从外界获取的信息75%来自 视觉【l】。随着通信技术和多媒体技术的发展,人们对信息传输的要求已经不再限 于语音和数据,视频通信已逐步成为数字通信网络的主要业务之一,视频点播、 可视电话、视频会议、实时监控、远程教育等应用形式不断涌现。 数字视频具有存储便利、图象质量好、易于编辑和提供新业务等优点,但其 数据量十分巨大,因此,对原始视频数据的压缩编码在视频通信系统中至关重要。 从1948年提出视频数字化概念至今,视频编码压缩技术已经历了50多年的发展, 特别是近10年来,图像编码技术得到了迅速发展和广泛应用,同时针对不同的 视频图像的编码制定了相应的图像编码国际标准,主要有:国际标准化组织(ISO) 和国际电工委员会(ⅢC)关于静止图像的编码标准印EG/JPEG2000,关于活动图 像的编码标准MPEG系列,以及国际电信联盟(Im制定的视频编码标准H.26X 系列【2】。H.26舭AVC是ISO肛C和ITU两大国际标准化组织联手制定的新一代视 频编码标准,是当前图像标准中压缩效率最高的编码标准,并具有良好的网络适 应性,代表了目前图像编码技术的发展水平。 随着多媒体技术的发展,视频、音频信息的处理水平越来越高,为嵌入式系 统的多媒体化创造了良好的条件。嵌入式系统的多媒体化将变成现实,这既为嵌 入式系统的发展带来了巨大的机遇,同时也提出了新的挑战。嵌入式技术与网络、 通信和多媒体技术的相互融合是未来嵌入式产品的发展趋势之一【3】,利用嵌入式 设备有限的系统资源高效地完成大数据量、高复杂度的实时视频采集与压缩编码 任务,是多媒体通信发展的必然要求,同时也将给人类带来各种各样新的体验。 1.1本文研究的背景和意义 近年来,随着数字通信技术和第三代移动通信网络的发展,多媒体通信尤其 是视频通信技术越来越成为人们研究的热点。视频信号的采集与传输是视频通信 系统中的关键环节,而对视频信源数据的压缩编码则是保证在有限的带宽条件下 传输高质量实时视频的必要前提。实现实时视频信息的采集和编码压缩,必须采 用高效能的器件和编码算法,否则很难达到系统的设计要求。H.264/AVC是由 lTU-T的视频编码专家组ⅣCEG)及ISO/ⅢC的活动图像专家组m口EG)大力发展 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 研究的、适应于低码率传输的新一代压缩视频标准,这一标准采用视频编码层 ⅣCL)和网络提取层(NAL)两层的层次设计,具有更高的编码效率和更强的网络 适应性,可广泛应用于数字媒体存储、可视电话、视频会议系统、视频点播、监 控系统、远程教学等各类视频通信系统。将H.264标准应用于嵌入式视频采集与 传输系统,实现系统的小型化、智能化,使得系统更为灵活,在军事、工业、医 疗、科学探索、教育、商务等各种多媒体业务的应用领域具有更好的适应性。 视频技术是未来几年嵌入式系统发展的排头兵【4】,多媒体技术的发展既为嵌 入式系统的发展带来了巨大的机遇,同时也提出了新的挑战。嵌入式设备系统资 源,尤其内存资源相对有限,而且受嵌入式微处理器的主频限制,其运算处理速 度有限,这使得在嵌入式设备上高效地实现运算量巨大的视频压缩编码任务极具 挑战性。 作为新一代高效的视频编码标准,H.264的实时传输技术还没有得到系统深 入的研究,其嵌入式解决方案仍处于探索阶段。目前,H.264的视频编解码及实 时传输主要有ASIC、FPGA等硬件解决方案和“DSP+MCU"、高性能单片嵌入 式处理器等软件解决方案。硬件解决方案虽然有高效率、高可靠性等优点,但开 发成本较高,设计周期较长,灵活性较差;基于“DSP+MCU’’的系统编解码速 度快,但成本较高,功耗较大;采用高性能单片嵌入式处理器来实现软件编解码 和系统智能化控制,则有低成本、低功耗、系统易维护和升级等优点,若根据处 理器的硬件体系结构对软件进一步优化,便可实现高效的运算。本文在对嵌入式 开发技术进行深入研究的基础上,提供一个基于单片嵌入式处理器的H-264视频 实时采集与传输系统的解决方案。 目前,单片嵌入式处理器的解决方案主要有基于CPU与DSP的双核处理器 和系基列于处C理PU器加为多主媒体 流协,处使理用器删两核种心【负5责】。 操前作者系以统美的国运德行州和仪一器些公控司制(T任I)务的,OM用AP DSP核来处理一些数字处理密集型运算;后者以英特尔公司(nel)的XScale P)∞7X系列为主流,从工艺、指令集、分支预测、流水线、存储系统、多媒体 应用这5个方面对删v5进行了改进与优化,使用无线Speedstep节能技术, 并集成了采用Whless MMX技术的多媒体协处理器单元,大大提升了处理器的 多媒体处理能力【3】。本文在后者方案的基础上,利用自行构建的嵌入式Linux开 发环境,针对XScale体系结构对H.264视频压缩的部分关键算法在代码级进行 了优化,实现了基于RTP觚CP的流媒体技术的实时视频传输。 2 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 1.2本文创新点 本1.文针的对创X新Sc点al主e 要PⅪ有墟以下70几处点理:器硬件特性,建立了符合删EABI标准的交 叉编译环境,并在Liod开发板上成功移植了Lin_uX 2.6.22.6嵌入式操作系统; 2.添加了USB网络摄像头驱动程序gspca对Logitech QuickCam Easy,c00l(快 看灵讯版)摄像头的支持,并成功移植到Liod开发板上; 3.设计了实时视频采集程序,并评估了摄像头及其驱动程序正常工作时采 集实时视频数据的性能; 4.将H.264开源编码器X264移植到嵌入式开发平台上,提出了面向应用的 优化的嵌入式视频编码方案,并结合PⅪ墟70处理器的硬件特性,对)【264进行 了编译级和代码级优化,满足了实时视频传输应用要求; 5.利用开源软件VLC搭建了基于Server:,Client的H.264实时视频传输系统, 设计了基于L锄ⅨSocket的Server/C1ient服务程序,并在客户端PC机上提供了 基于q的G舰操作界面,用于实现对嵌入式视频服务器的远程控制。 1.3论文的组织结构 本文由如下几部分组成: 第一章介绍论文的研究背景、研究目标及意义、创新点以及论文的组织结构。 第二章介绍了本课题的软硬件开发平台,先介绍了Liod开发板的硬件结构, 后着重研究了嵌入式Lirrll)【开发技术,详细介绍了嵌入式Lill_u】(开发环境的搭建 方法,以及嵌入式LinuX系统的构建与移植过程。 第三章介绍了基于“od开发板的实时视频采集子系统的实现方法。主要包 括USB摄像头驱动程序的移植与配置,基于Ⅵde04Lill.u】‘的视频采集应用程序 设计等。 第四章介绍了H.26“AVC视频压缩编码的关键技术,以及H.264开源编解 码器x264在基于PⅪ屹70处理器的嵌入式LiIl_u)【平台上的移植与优化方案。 第五章介绍了基于球的视频网络传输技术,并实现了一个基于开源软件 VLC的实时视频采集与传输方案,设计了Senrer/Client服务程序,并对系统进行 了性能测试与分析。 第六章对全文的工作进行了总结,并对进一步的研究开发提出了一些建议和 展望。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 第二章嵌入式L i nux开发平台 本章介绍系统的嵌入式软硬件开发平台。硬件平台选用深圳亿道电子技术有 限公司研发的基于PⅪ心70微处理器的Liod开发板,软件平台则选用性能卓越、 开放源码、成本低廉和应用广泛的嵌入式Linu)【系统。本章重点探讨了嵌入式 Linu)【开发技术,详细介绍了基于Liod开发板的嵌入式Lin_u)【开发平台的建立过 程,包括交叉编译环境的建立、系统引导程序的实现、LinuX内核及设备驱动移 植、根文件系统的构建等,为后续的应用开发准备了良好的平台环境。 2.1 Liod开发平台介绍 2.1.1 P)(A270微处理器嘲嘲啪 PⅪ墟70微处理器是In_tel推出的基于XScale微架构系列的第三代CPU,最 高主频可达624MHz,并且针对电池供电的手持设备如PDA,智能手机等的应用 做了优化,是希望以较低的功耗完成计算和多媒体应用的产品的理想选择。 XSc猷e核采用ARMV5TE架构的处理器核,主要特点有: ● 采用7~8级超级流水线,增大了CPU的指令吞吐量,提高了系统性能; ● 提供转移目标缓冲器(Branch Target Bu位r),具有良好的分支预测能力,较好 地避免了流水线的中断; ·使用动态电压管理技术,尽可能降低系统功耗; ·拥有CP0协处理器用于DSP运算,还拥有CPl协处理器用于无线MMX指 · 令为数内据存传输管和理状单态控 元制M抓,极7提大提供高各了3处2理咖器的的指多媒令体和处数理能据力T;LB㈣lation Look.嬲ide Bu每神,提高了虚拟地址到物理地址的转换效率; · 提供8咖的写缓冲器,分别提供32K、32路的指令I.cauche和数据D.cache, 有效地提高了cache的命中率。 PⅪ址70微处理器在XScale核的基础上,集成了256K片内S&气M、DMA 控制器以及众多外设控制模块,包括可支持SDRAM、NOR FLASH和VLIO等 在内的存储器控制器、可直接连接图像传感器的快速捕捉接口、LCD控制器、 制器等,丰富的控制模块为各种应用开发提供了强大的灵活性。僦70微处理 USB控制器、PCMCLA/SD小心嗄C卡控制器、12C接口、AC97控制器、U触盯控 器总的框图如图2.1所示。 4 基于K264的嵌入式实时视频采集与传输系统的设计与实现 Lco 华东师范大学硕士论文 图2.1 P)【A270微处理器总的框图 Figu婵2-1 PXA270 Proc曙sor Block Diagram 2.1.2 L i od开发板介绍 Liod开发板【8】是由亿道电子技术有限公司研发的一款高端嵌入式开发平台, 它采用硫e1 XScale PⅪ屹70嵌入式处理器,配备了大量外设资源,能够充分发 挥出PⅪ心70这款高性能处理器的优势,构成了一个良好的开发环境。 Liod开发板中对PⅪ地70处理器的供电可使其主频高达520M}Iz,采用核心 板+底板设计方式,增强了功能扩展的灵活性和丰富性,并提供完善的功能接口, 支持锂电池供电:可直接面向实际产品开发。开发板供应商同时提供I,inuX 2.4.2l 和W.mCE 5.O双操作系统的完善支持。 Liod开发板具有高性能、低功耗等优点,是面向多媒体应用、导航设备、车 载娱乐、医疗设备、便携式智能PDA、人机交互界面(瑚m)、仪器仪表、智能 手机等领域的一种高端嵌入式开发平台。用户可以在Liod板上开发各种软件功 能,也可以作为开发嵌入式系统应用产品的样机。 Liod开发板以PⅪ心70微处理器为核心,主要配备了以下硬件资源: ●64~IB SDRAM 基于H2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 32MB bltel s臼.ataFlash同步存储器 10/100M以太网卡及接口1个 I,ART口:全功能IfART,蓝牙17ART,标准17ART口各1个 USB C1ient口1个 USB Host口2个 MMC/SD卡插槽1个 CF卡插槽1个 S聊卡插槽1个 RTC实时时钟 LCD接口及PVI 6.4英寸LCD屏 4线电阻式触摸屏1个 音频编解码器(AC97 Codec),带M【C、LNE烈及HeadPhone插孔 用户可编程的按键和LEDs 2.2嵌入式Linux系统的构建 2.2.1嵌入式L i nux简介 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适用于 应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机 系统【9】。嵌入式Lin.ux(Enlbedded LinlⅨ)是指对标准LmuX经过小型化裁减处理之 后,能够固化在容量只有几KB或几MB的存储器芯片或者单片机中,适合于特 定嵌入式应用场合的专用Linu)(操作系统【101。 早期的嵌入式系统由于功能比较单一,所需管理的任务与系统资源很少,几 乎不需要与用户互动,因此没有引入操作系统。但随着嵌入式系统变得越来越复 杂,所需支持的特性也日益增长,势必要求由操作系统来实现多任务/多线程、 多进程功能以及提供内存管理、进程间通信、时钟等服务。早在1996年,Michael Barabanov和Ⅵctor Y0daiken就在其研究项目中引入了L证uX作为实时嵌入式系 统的操作系统【111。随后,ImLiIIuX、ucL研uX、R1Ⅺ等众多研究项目相继涌现, Intel、IBM、NEC等各大著名处理器厂商及MontaⅥsta、Lineo、Timesys、 L弘uxW|0r1(S等各大嵌入式开发软件供应商也对嵌入式Lillux的开发做了大量的 投入。经过十余年的发展,嵌入式L妇】)【日趋成熟,并成为嵌入式产品市场上主 流的操作系统之一。 嵌入式Lin_uX的迅速发展与广泛应用与以下优良特性【3】【10】【11】密不可分: 6 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (1)广泛的硬件支持:I,i伽x能够支持x86、ARM(包括XScale)、MDS、ALPHA、 PowerPC等多种体系结构,并有异常丰富的驱动程序资源,支持各种主流硬件设 备和最新硬件技术。 (2)内核高效稳定且可裁减:LilluX内核的高效稳定已在各个领域内得到了大 量实事的验证,LiIlu)(的内核设计分成进程调度、内存管理、进程间通信、虚拟 文件系统和网络接口等5大部分,其独特的模块机制可以根据用户的需要,实时 地将某些模块插入内核或从内核中移走。这些特性使得L姗u】【内核可以裁减得非 常小巧,很适合嵌入式系统的需要。L妇Ⅸ内核还提供符合POSⅨ标准的系统调 用接口,增强了应用程序的可移植性。 (3)开放源码,软件丰富:Linu)(是开放源代码的自由操作系统,这使得全世 界的自由软件开发人员都参与到LinuX内核和应用程序的开发中来,也使得 Linux开发人员可以得到最广泛的技术支持。L证u)【的软件资源十分丰富,在开 发L讪x嵌入式应用软件时,往往可以一个类似的自由软件作为原型来进行二次 开发,提高开发的效率和质量。 (4)完善的网络通信和文件管理机制:I抽uX自诞生之日起就与Intemet密不 可分,支持所有标准的№met网络协议,并且很容易移植到嵌入式系统当中。 此外,I洒1x还支持ext2、蠡鹕2、romfS、j伍2、ra】丑fS等文件系统,为开发嵌入 式系统应用打下了良好的基础。 (5)产品开发的软件提供商丰富、上市时间短、成本低:有多个优秀的商业版 嵌入式Lin:_Ⅸ可供选择,软件提供商提供各种模块及开发工具包、文档支持等全 套服务,使嵌入式开发变得更加简单、有效。此外,开发者还可根据所选定的硬 件平台和所需的功能,对标准Linux内核进行裁剪修改,构建嵌入式L衙u)【系统 和交叉编译工具。 L血Ⅸ2.6内核引入了诸多适合嵌入式应用的新特性【12】【13】:新内核在一定程 度上可被抢占,相对2.4内核极大缩短了中断响应和任务响应时间,提高了内核 的实时性;L油u)【2.6内核采用新的调度算法对任务进行调度,即使在高负载情 况下也能对任务高效地调度;采用新的同步原语对进程/线程进行同步,并使用 MMA科on啦f0衄Memo巧Access)管理方法来解决内存抢占瓶颈,提高吞吐 量;支持NPTL(NaIive POSⅨn啪ading Libra劝,提供POSⅨ信号和POSⅨ高 精度定时器;新加入包括无MMU处理器在内的多种微控制器的支持;提供了多 种新技术的支持以实现各种应用开发,如Ⅵde04LhⅨ和Advanced Lin_11】【Sound 觚Kte靠聪mSA)等,对多媒体信息处理更加方便;对USB 2.O的支持,提供 更高速的传输;在2,6内核中还可以配置成无输入和显示的纯粹无用户接口系统。 这些优良特性使2.6内核已经成为嵌入式L证uX系统的主流。 7 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 嵌入式I,i玎11x系统的开发基本流程【3】:首先在宿主机上建立交叉编译环境, 然后移植Lmx的引导程序到目标板,最后构建嵌入式L讪x系统并移植到目标 板。构建嵌入式Linux系统主要包括对内核进行裁剪和配置,根据实际的硬件系 统进行内核和外设驱动程序的移植开发,以及构建L曲Ⅸ的根文件系统。 2.2.2交叉编译环境的建立M 建立嵌入式L证uX开发环境主要就是安装交叉编译的工具链(t001cha蛐。交叉 编译工具链是在编译程序时用到的一系列工具,例如编译器、汇编器、链接器等。 从编译器的角度进行软件优化是嵌入式软件优化的重要一环,优良的工具链可针 对处理器硬件特性编译得到优化的二进制代码,这对于充分发挥处理器性能,提 高程序执行效率,保证程序的兼容性等都至关重要。 本章所建立的交叉编译工具链具有如下特点: ● 使用最新版本的软件包和内核:包括billutils-2.18、gcc.4.2.1、glibc.2.6.1、 91ibc-ports.2.6.1和lmu)【-headerS.2.6.22.6及其相关补丁; ● 支持NPTL(N撕ve POSⅨmeading Libr㈣线程模型:LhmX 2.6内核引入了 对NPTL的支持,NPTL是LinuX线程的一个新实现,它克服了旧的 LmxmeadS线程模型在信号处理、调度和进程间同步原语等方面的缺点, 同时也符合POSⅨ的需求,在性能和稳定性方面提供了重大改进【15】; 删公司于2003年12月发布了删ABI(v1),于2005年第一季度发布了 ◆ 遵循新的ARM B蛆I(&dbedded Application B砬叫IntI:rf-ace)标准[16】【17】f18】: 删ABI(v2)标准(即EABI)。邑气BI是一系列标准,它定义了编译器、汇编 器、链接器及其它工具生成目标文件和可执行文件时的规范,用以实现工具 链间的互通操作(缸eropemte),即只要遵循该规范,不同工具链所产生的目 标代码可以链接、合并和互相调用。EABI也是Q唧B蛆I forL证uX中的一 个分支,它在浮点运算性能、结构体封装、工具链间的兼容性、系统调用效 率上都有很大改进,目前可支持削u细4(t)、灿uⅥv5t及以上架构的处理器; · 针对XScale PⅪ蛇7x处理器基于ARMv5te架构、无硬件浮点运算单元、支 持Intel无线MMX指令集等的特性,对工具链进行了优化; ◆使用该工具链所编译得到的应用程序只能运行于Linux 2.6.14及其以上版本 标的文内件核, 的通执过行牺效牲率工;具实链际对上旧,的L讨L姗u)眍【内2核.版6.本1(6如是2第.一4)个的同兼时容支性持,删提高 B镪了I目和 NPTL标准的内核版本,因此没有必要保留工具链对旧版本内核的兼容性。 手工建立交叉编译工具的过程繁琐,相当费时费力,而且非常容易出错。本 文使用cros咖ol【19】工具包来建立交叉编译工具链。Cros咖ol是Dan Kegel等人开 8 基于H2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 发 构的 。一 Ma套 ll自 缸动my建为立crLoisrsrt呔00交1.叉0编.译42工提具供链了的一自个由用软于件建,立支符持合多删种&~处B理I标器准体的系工结 具链【20】的cros咖01.0.42.m薛.patch,本文用它来建立工具链。 CrosStool是一系列脚本和配置文件,a11.Sh接收cpu.dat中设置的参数值和 gcc.酉ibc.dat中设定的软件包版本信息,并设置B切巴D D瓜、SRC Dm、PI冱FⅨ、 GCC HOST等内部变量的值,检查要下载、解压缩和打补丁以及要编译的软件 包,清除和建立相关目录,调用getalldpatch.sh脚本自动下载所需的软件包到 BⅥLD D取并打补丁,最后调用crosSt001.sh脚本自动建立t001chaill。本文采用 网上下载相关软件包并打补丁的办法,建立工具链的主要步骤如下: (1)编辑锄.iwmmx.eabi.dat文件如下: TARGET=锄-iwmmxt-1inux—gnueabi TAR GET—CFLAGS=”-O” GCC__EXTR A CONFIG=”一谢m-floaFsoR =hvInmxt~enable-cxx-nags=一msoft—float,’ GLIBC-ExT&tCONFIG-’’一晰也om一邱一disable-libunwilld-exc印tions” GLIBC EXTRA CC ARGS=”.fiIlline.1imi卢1 0000’’ 其US中E ,SY吖SR姗OTO的T=值1 必须以am开头,因为crosstool会依此来解析¥ARCH 的值。(kc的co血gure文件也要根据"瓜GET来裁决,如果要编译支持删 B蛆I标准的toolch血,口水GET应以am木.·.1证呱.鲫eabi形式出现。 (2)编辑gcc.91ibc.dat文件如下: 9 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (4)修改a11.Sh。由于是网上下载软件包,因此必须注释掉调用getal】dpatcb.Sh 的相关语句。还可根据需要设置工具链安装的顶层目录PREFⅨ,在此设置为 PREFI)孓¥RESlⅡ,T TOP。 (5)修改cros哟01.sh。在安装内核头文件时,添加”cp-r近clude/asm.gen商c ¥}玎三ADEImⅡ{/a锄.generic”,避免在编译时找不到相关头文件。注释掉修改 GCC HOST的语句,保持GCC HOST=、./co血g.guess、爿686-pc.1证uX.g叽,防止 在编译时找不到宿主机的CC而出错: 完成对crosstool工具包的上述定制后,从网上下载所需的源码包并解压到 SRC D瓜指定的目录,然后打好补丁,在终端下输入命令”sh a衄.iwmm烈.eabi.sh'’,编译和安装t001chaill。安装完成后,应编辑 ¥HOME/.b2Lsh profile,将交叉编译工具的搜索路径加入¥P删环境变量中,完 成交叉开发环境的搭建。 2.2.3系统引导程序的移植 2.2.3.1 BootIoader原理 BooUoader是在操作系统内核启动之前所需运行的一段小程序,主要完成系 统的加载和启动。Bootloader程序实现硬件设备初始化、建立内存空间的映射图, 将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好 正确的环境12¨。 通常,在嵌入式LinuX系统中,引导用Fl曲存储器会被按顺序分为如图2.2 所示的几个区域吲。 。——。。。——---————-——————————————————————————————————————————————————————————‘—。’’。。——‘——1卜 从低地址到高地址方向 图2.2嵌入式Linux的Flash分区 Figun 2—2 Embedded Linux FIash Memory Parti饷ns 对于Lin『u)【系统来说,内核和根文件系统是必需的,启动参数是可选的,在 编译LinlⅨ内核时,可以指定默认的启动参数。对于L讪x操作系统,Bootloader 完成的任务主要有: · 初始化处理器及外设的硬件资源配置。通常,嵌入式处理器在上电复位 10 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 以也后都,需外要部配∞置引。脚如都SD处删于及输其入控状制态器,的处正理确器配上置的等片。内和片外设备资源 ·建立内存空间的映射图,将系统的软硬件环境带到一个合适的状态,为 不需要开启MMU作复杂的虚拟地址映射。但删的MM 调用操作系统内核准备好正确的环境。多数Bo础oader程序结构简单, 7同时管理 了数据缓存①.Cache),这时可使用平板映射(flat映射,即虚拟地址和物 理地址一一对应的映射)开启砌mf,以开启数据缓存,加速启动过程。 ·装载操作系统到内存中。这是Boouoader程序所完成的主要工作,主要 的装载方式有:从串口或者网络装载系统;从非易失性存储器(主要是 F1aS舢中装载系统。 ·对Flash编程。B00noader可把下载的操作系统映象等数据保存在F1aSh 中,以后启动可以直接装载F1础中的数据,而不需要重新下载程序。 嵌入式系统产品通常使用这种启动方式。 · 引导并运行操作系统。设置相关的寄存器和资源,跳转到操作系统空间。 ·传递系统启动参数。LinuX在系统启动时,可以给内核传递命令行等参 数,以指定控制台、根文件系统、用户环境变量等信息,控制系统启动 的模式。BooUoader程序可以把命令行放在系统内核指定的内存空间。 · 命令行解析和输入偷出控制。为了便于开发,多数B00tloader都采用串 口作为终端的控制方式。通过串口输入命令或输出功能菜单,控制 B00Uoader的各种功能。 由于B00tloader的实现依赖于CPU的体系结构和目标板的硬件配置,因此 大多数B00tloader都分为第一阶段(stagel)和第二阶段(s.tage2)两大部分。第一阶 段主要是依赖于CPU体系结构和板级硬件初始化的代码,用汇编语言实现,包 括以下步骤: (1)硬件设备初始化; (2)为加载Boonoader的stage2准备内存空间; (3)拷贝Boonoader的stage2到内存空间中: (4)设置好堆栈; (5)跳转到stage2的入口点。 Bootloader的stage2通常用C语言来实现,用以实现更复杂的功能,而且代 码具有更好的可读性和可移植性。这一阶段包括以下步骤: (1)初始化本阶段要使用到的硬件设备; (2)检测系统内存映射(1nemory map); (3)将内核映像和根文件系统映像从FlaSh上读到内存空间; 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (4)为内核设置启动参数; (5)调用内核。 2.2.3.2 L.od平台上的BootIoader分析及移植 Re扭目00前t、支创持№删o处t等理,器亿的道L电证子uX技系术统有的限Bo公ou司oa为deLri主od要开有发B平lo台b、提U供.的B0引0t导、装 载程序B00t.XSBaSe270就是根据B10b改写的。由于Lmx2.6内核可采用与L曲uX 2.4内核相同的方式进行引导和启动,只需对Boouoader程序稍作修改便可用于 Lin:u)【2.6内核的引导。 B00noader程序在链接时通过链接脚本boot.1ds来设定映像文件的内存映射, 其关键内容为: 上述链接脚本指定Bootloader映像文件起始地址为0Xa3f00000,即B00tloader 映 号像 和在 函执 数行的时正,确需引要用被。重而定删位处到理o器Xa上3f电oo后oo是o开从始0)的【内0地存址空处间取,引以保 导证 程对 序内的部第符一 条指令开始执行的,在将引导程序自身重定位到Oxa3fooooo处的SD删空间 之前,为了正确引用程序内部符号,必须采用基于程序计数器PC的偏移量来进 行相对跳转和符号引用,实现程序的位置无关性【23】。 Boonoader的程序入口由上述链接脚本的北m标号指定,st砥标号定义在 st缸.S文件中,对应映像文件的第一条指令。stan.S主要完成第一阶段的初始化 工作,并跳转到第二阶段C程序main函数入口,分析如下: 12 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 stan.S实现了stagel的主体流程,在完成时钟、GPIO和存储系统等基本的 硬件初始化后,利用链接脚本传递过来的boot start和boot end符号值将 B00tloader映像整个拷贝到指定的SD凡蝴空间,并清零bss段,初始化堆栈后, 使用1dr指令将main函数入口的绝对地址赋给程序计数器PC,进而跳转到 SDRAM中运行stage2的代码。 在stage2中,p耐itionS.c文件对FlaSh空间划分了”loader,,、,,kenlel”、”ramdiSk’, 或’'root,,等分区,各个分区的起始地址和区间大小限制、以及加载到内存中的起 始地址在头文件hlclude厂board/xsba∞270.h中定义。如果使用B00tloader以标记 列表㈣ged list)的形式来传递内核启动参数,则需要将参数列表放置在物理内存 的前16KB中,起始地址为物理内存起始地址加o)【100偏移量矧。本文在编译 L试u)【内核时指定内核启动参数。FlaSh和SDRAM存储器中B00t.XsBase270定 义的各分区如图2.3所示: 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 重定位到内存中的 Boo“oader彩色像 %_—_—_——__.。_。 boot start ..F=———=—一 根文件系统 (Ramdisl减JFFS2) Lin怄系统内核映像 最大为1.25M Bootloader映像 最大为256l( 图2.3 Boot.XsBase270分区图 Figun 2-3 B∞t_xSBase270 Part硒蛐s 第二阶段m血函数主要对串口、时钟、F1ash存储器及分区、网卡等功能子 系统作了初始化。在加载并启动内核前延迟2秒,若检测到用户有键盘输入,则 向控制台提供功能菜单和命令行供用户操作,用户可以使用set、t唧、f1嬲h、b00t 等命令分别进行宿主机和目标机D地址等环境变量的设置、从宿主机下载内核 或文件系统映像、将映像文件烧写到F1砒对应分区、启动内核等操作。其中, 引导Lmx启动的boot命令在do boot()函数中实现,其实质是使用函数指针 kemel直接跳转到内存中内核映像的第一条指令处: , void(水kemel)(缸zer0,m arch)=((Void·)(砬,血))KEI斟EL-_DR AM BASE; kemel(0,Ⅳ【ACH TYPE XSBASE270); 产启动内核·/ 其中,KE鼢咂L DR AM BASE在i11clude厂board/Xsba∞270.h中定义。通常内 核映像文件被加载到物理内存MEM START+o)【8000处,Liod开发板上PⅪ墟70 处理器的SDR AM起始地址为0Xaoooo000,因此定义KE时姬L DRAM BASE= Oxao008000,并将该信息保存到p矾tion.c中的’’1【enlel”分区结构体中。B00tloader 依此将F1aSh存储器中的内核映像加载或解压缩到KEI洙EL DR AM BASE处的 内存地址开始运行。另一方面,编译LiI姒内核的链接脚本Ⅵ111证u)【.1ds由 arcⅣa硼厂b00讹omDressed^佃】irnlX.1ds.in生成,并在arch/am泊oo讥压akefile中有如 下定义: ifeq(¥(CONFI(o啵CH..PXA),y) ZREI,ADDR=Oxa0008000 endif 14 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 由此决定了内核映像文件的链接地址乃汪L∞DR=0xao008000,即内核映 像应该被重定位到OXao008000起始的内存空间运行;而内核映像前面的32K (oX8000)物理内存空间用于存放启动参数和内核页表。这样就把B00tloader与内 核映像联系起来。 B(o1矾)删oa寄de存r在器跳的转设到置内:核RO映=O像,时R1,=机必器须满类足型下ID列(1条订件ac:l血e T帅e Nu口出er),R3= 启 数,动因参此数调标用记内列核表时在只RA传M中递起R0始和基Rl地两址个。参B数00,t.在X删SBLaiSrer2u7)0【不内传核递启内动核时启,动会参 检测机器类型D,以确定目标板和内核是否匹配。在Lmu)(2.6.22.6内核源码 arCb/arIrL,t001s/mach.b,pes文件中定义MACH XSBASE270为1141, 因此 B00t(-2X)SB删au处se理27器0中必要须添处加于相超应级的用定义户,模并式在(S调VC用)内且核禁时止传中递断给(内mQ核和。FIQ)。 (3)CaChe和MⅫ7的设置:MM T必须关闭;指令Cache可以打开也可以关 闭;数据Cache必须关闭。 使用{nashmm工具将编译得到的Boot.XSBaSe270二进制映像文件boot通过 JT'AG口烧写到目标板NOR F1ash存储器OxO地址处。复位目标板后,Bootloader 开始运行,在默认的2秒等待时间内按键,就可进入功能菜单模式或命令行模式, 否则自动引导L衙u)【内核。 2.2.4 L i nux内核移植 Lirr暇内核移植包括芯片级移植和板级移植两部分。 L证嗽2.6.22.6的内核在arCb/am恤ach.pXa目录中已有XScale CPU的支持, 因此,对于Liod开发板的移植只需做板级的移植开发。板级内核移植的主要工 作是在arcb,a瑚/mach-pXa目录下为新的开发板建立对应的平台文件,编写平台 硬件配置的‰1ude文件,修改相关内核配置选项以及编写或移植设备驱动等。 本节在分析内核源代码结构组织的基础上,介绍了对Liod开发板进行板级 内核移植的过程,以及NORFl础和L心91C111以太网卡驱动程序的移植方法。 2.2.4.1内核结构分析 Lin!_u)【内核代码分为特定于体系结构的部分和与体系结构无关的部分。内核 中特定于体系结构的部分首先执行,主要任务是设置硬件寄存器,配置内存映射、 执行特定于体系结构的初始化,然后将控制权转交给内核中与体系结构无关的部 分,执行平台相关的板级初始化及系统其余部分的初始化。内核树arch目录下 15 基于H2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 的每个子目录对应于一个不同的体系结构@皿S、创王M、i386、SP!f6戚、PPC等)。 每 置个IO体、系启结用构高子速目缓录存包、含设特置定内于体 核系页结表构等的操代作码。,L用证以uX完内成核诸源如码初中始与化删内体存系、结设 构相关的部分主要为arch/a彻和include/aSm一锄目录下的内容。 1.目录arcb/a咖下的子目录和重要文件主要有【25】[26】: · kemel:与ARM处理器相关的内核代码,主要包括与删处理器相关 的汇编程序,如启动的入口代码head.S;与异常处理相关的咖.a彻v S: 以及其他一些和体系结构中的中断异常处理、进程调度管理、系统调用 等体系结构相关的C程序。 c,主要是针对删处理器中定义的页表的 ·mm:与ARM平台下内存管理部分相关的内核代码。比较重要的有:(1) 与内存管理相关的mm.a册v 操作;(2)与内存异常处理相关的姗t-a彻vc;(3)与各处理器的MMU、 ·liCbau:ch针e等对内删存平管台理优部化件操了作的相内关部的库汇函编数代码和,低如级prIo/c.O操an作n)0,Ⅸ例.如S等内。存拷 贝函数memcpy,I/O函数,位操作函数等,主要以汇编语言实现。LinuX 内核代码不能使用标准C库,内核在主目录下的1ib目录实现了一些基 本C库函数,但如果鲫cv如枷ib下有这些函数的实现,就优先使用这些 ·嘶针和对、硬件却平:台对做了于最删大平程台度的下优浮化点的数代码模。拟操作的实现。删平台下 浮点数操作是作为一个协处理器来实现;当微处理器中没有浮点运算单 元时(例如XScale PⅪ墟7x系列处理器),协处理器操作指令就会产生指 令为定义异常,可以在异常处理中来支持对浮点数操作的模拟。 ·b00t:用于存放编译得到的内核映像,并且还包含了一些在启动时对压 缩内核进行解压的代码,如compressed目录下的文件head.S和血sc.co ·tools:用于自动生成类似mach.咖es.h文件的脚本工具。 ·configs:包含不同开发板的默认内核配置文件。 ·mach.)aⅨ:与各种不同处理器系列或型号相关的程序。例如mach-pXa 目录下就包含了与nel XScale PXA系列处理器操作相关的代码以及基 于该系列处理器的开发板平台描述文件。 ·vmlinuX.a订nvlds血:链接描述脚本文件。这是在生成内核映像时非常重 要的一个文件。内核可执行文件由许多链接在一起的目标文件组成,各 目标文件又分为te蛆、data、i疵data、bss等段(Se商on)。这些目标文件 都是根据Ⅶ1lhⅨ-annv.1ds.in文件链接并装入的。该文件的功能是将输入 目标文件的各输出段映射到可执行二进制映像文件中。 16 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 2.目录mlude/栅.a锄厂F的子目录主要有: ·· arbcahr.dwⅪaⅨre::与与特删定平处台理相器关相的关一的些头芯文片件和。设备的头文件。 ·mach:包含一些大多数机器所用到的接口定义和对机器进行描述的宏。 2.2.4.2内核移植实现嘲 本文将Lin『uX 2.6.22.6内核移植到Liod开发板。LinuX 2.6系列的内核已经包 含了XScale系列处理器的支持,这大大简化了基于XScale架构处理器的开发板 的内核移植工作。Liod开发板采用XScale PⅪ墟70作为核心处理器,进行Liod 开发板内核的板级移植工作主要包括建立开发板平台文件,编写开发板相关的硬 件头文件和修改内核配置文件。 1.建立开发板平台描述文件 开发板平台相关的文件在内核源码的arcb/a嘞/mach.ⅪⅨ目录下,例如与 mainstone开发板对应的平台描述文件arcⅣar功/mach.pXa/maillstone.c,主要包括 取Q中断子系统初始化、I/O地址映射初始化、硬件资源的注册等板级初始化代 码。以n础lStone。c为模板,建立Liod开发板的平台描述文件xSbase270.c,主要 包括以下内容: (1)咖lct珊ac幽一esc结构 每个硬件平台都需要一个描述机器的g蚋lct machine deSc结构变量,其定义 可在klude他m.a珊l/mach陆ch.h中发现。对于Liod开发板,可在xsbase270.c 中如下填写machiIle desc结构体的内容: MACH硎E_-Sm蝌r()【sBASE270,”Emdoor XSBASE270 DeVelopment PIa怕m”) .phys io=I眩4000∞∞, 产物理湘I起始地址·, .b∞t panms=O翻00001∞, ,.启动参数列表地址吖 .io-g_o凰t=(io_p2v(Ox4000∞00)>>18)&Ox蜀如/.∞l页表偏移奉/ .map io=xsbase270 map io, 产I/O映射函数·, 血njrq =懿base270_init-ifq, 严瓜Q中断初始化函数·/ .timer =&p鞠timeB 产系统定时器·/ .iⅡit.machine=邳base270 in咄 严板级初始化函数·/ MACH矾E END 内核启动时,通过stan kenlel(ini恤aill.c)一setup arCh(arcll/a咖/ke功el/s帅.C) 一s醐】p功aChi:∞函数的调用,得到当前处理器平台的描述,即当前平台被 MAC}m咂START和MAC}m娓END等宏定义的相关信息,并以该结构体中 指定的I/o映射函数、中断初始化函数等完成I,o空间、中断子系统等板级初始 化工作。 17 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 删(2系)s统伽中lc内tm存咄和sc结I/构O口是统一寻址的,在带有MⅦT的删系统中,必 须将删的SoC芯片物理I/o地址映射到系统内存空间。Lin_uX内核使用定义 于hlclude胁m.am咖acl临印.h中的结构体map-desc来描述系统中一段物理地址 空间和虚拟地址空间之间的映射关系: 鼬m戗map deSc{ unsigned long virh墙】; uIlsi口ed 10ng pm; unSigned long lengtll; u11Signed缸type; 严虚拟地址起点·/ /.物理地址页帧号·/ /.内存区域长度·/ /.内存区域类型·/ ); 其中,物理页帧号(p舢用来表征物理地址,目的是在不使用64位的无符号 整形变量的条件下提供对32位地址的物理设备的支持。p伍的值通过物理地址向 右移位单位页面长度得到,Lin_uX内核的虚存管理以4K作为单位页面大小,因 此是右移12位。内核提供以下一组宏来实现物理地址与页帧号之间的相互转换。 捍define—Jhys t0 p伍0addr) 托ef.me—p自to physQ蜘 (Qadd砂>>PAGELSH腰T) (Q蛐<<PAG.E_SmFD 在平台描述文件中,定义一个map desc结构体数组来对嵌入式目标板的系 统I/O空间进行描述。对于Liod开发板,可在xsb弱e270.c中添加如下map desc 结构体数组描述: 13 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 何位理置论。上但,是物,理系I统/内O地存址空到间虚中拟有地些址部的分映 是射 内, 核可 专以 用的映,射或到者系说统在内一存些空删间L中iI的Iu任X 的内核版本中未使用,而在某些版本中又用到了。为此,删“nux的维护者 给出了一个内核的虚拟内存布局描述的规范性文档【27】,文档中规范了物理I/O地 址与虚拟内存地址的参考映射关系,移植时应尽量参照该规范进行。 (3)I/O地址映射初始化函数 平台的I/o地址映射初始化函数的任务是初始化CPU以及平台相关外设I/0 的映射,应根据板级硬件的设计编写。该函数根据前面map desc结构数组 xsbaLse270.io desc口所定义的外设I,『o地址映射关系,调用iotable砬t()函数完成 I/O映射初始化工作。Liod开发板的I/O地址映射初始化函数可定义如下: 系统启动时,通过setIlp arch(arc彬an彤kemeUs鲍lp.c)一paging_iIlit(arcⅣan州 删彬砬t.c1函数调用,负责初始化系统的I/O空间。 (L4曲)中 u)断 【初 内始 核化 在函 删数 平台的移植过程中一个重点还包括对中断的处理部分。 对于XScale PⅪ墟70这类SoC芯片来说,集成了大量的片上设备,这些片上设 备本身需要有中断操作,同时目标板上的片外设备通过GPIO或片外中断控制芯 片也删要L引in入:中uX断内,核因中此,其在中in断cl处ud理e/较硒为m复.杂am。妇acⅣirq.h中定义了一个中断请求描 述数据结构岫desc来对中断请求进行描述,以及一个蛔desc结构的数组蛔deSc 来对每条中断请求线进行描述。与内存映射一样,在内核初始化阶段建立中断子 系统时,将调用开发板平台描述文件中macMne desc中的函数i11it蛔,该函数 将根据系统硬件的配置来设置姻desc数组中的内容,对每条中断请求线的中断 响应模式进行设置。 对于Liod开发板,其片外设备直接通过PⅪ蛇70处理器的GPl0口请求中断, 没有使用额外的片外中断控制芯片,因此中断初始化函数xsbaLse270砒姻() 的实现比较简单,初始化中断时不需要设置片外中断控制芯片和编写、安装额外 的取Q中断处理函数和开/关中断函数等,只需调用PXA系列处理器通用的中断 子系统初始化函数pXa』t-岫(),并用set irq咖e()函数设置所使用的GPIO的 中断类型即可(参见2.2.4.3节以太网卡驱动移植部分)。 19 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 的函系数统调启 用动 关时 系, ,初通始过化比系m 统ke的曲e陷l(阱ini,岫即.C删)一处缸理.a器p 中iD包it(括锄中洲断am法在e内me执的r所aps有.异c) 常向量。 (5)平台初始化函数 系统启动时,通过调用平台初始化函数xsbaSe270』岖)来进行特定的初始化 工作,主要包括GPIO的设置、UsB和网卡等硬件资源的注册,以及其他自定义 的初始化工作。 2.编写平台的硬件配置头文件 基于PXA系列处理器的目标板的硬件配置头文件存放在Lir嗽内核源码中 iIlclude协m.ann/arCh.pXa/目录下。针对Liod开发板,可建立xsbaSe270.h文件, 定义板级硬件资源的地址、控制寄存器、相关的宏操作等便于使用。 3.酗cale-head.S文件 在鲫出/anll厂boo讹ompressed/Xscale.head.S中,将开发板的机器类型D (mac址1e type n_u瑚ber)保存到处理器的寄存器R7: 4.修改内核配置文件 完成硬件平台的移植后,必须修改内核相关的配置文件,以在编译内核对内 核进行正确配置。 (1)根Makefile的修改 是x主 86要 ,是 由修 于改 XS文 ca件 le中 是A删RC体H和 系C结RO构SS的C处OM理Pm器E的 ,因定此义应。改AR成CHA默RC认H=情锄况,下 CROSS—COMPILE=arm-iwn衄-Xt-lhluX一弘ueabi-,以使用2.2.2节建立的交叉编译 器am—i珊瑚xt-lin.呕-鹄ueabi—gcc编译内核。 (2)KCo蚯g的修改 在内核中新增的硬件平台应通过更新相关的Kco血g来体现。在此,最重要 的修改是在arch佃m,mach-pxa腿co曲g文件中为Liod开发板增加一项说明,以 便内核配置时可选择新的硬件平台选项: (3)arcMm幽mch-pxa/Make丘1e的修改 修改这个文件是为了将新移植的硬件平台加入编译。针对Liod开发板,在 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 K00蚯g中定义了平台类型MACH-ⅨSBASE270,因此可用如下语句在Makefile 文件中加入平台文件xSbase270.c的编译项: obj一¥(CoNFIG M.ACH XSBASE270)+=】3base270.o I 对移植后的I,inux内核进行配置和编译,生成映像文件zImage,用2.2.3节 的Boo廿oader引导,便可在Liod开发板上运行。为了使L缸吸内核能挂载根文 件系统,并使相关外设能正常工作,还需要移植相关的设备驱动程序。 2.2.4.3设备驱动移植 设备驱动程序是操作系统和硬件设备之间的接口。嵌入式系统外围设备丰富 多样,设备驱动程序的移植与编写也因此成为嵌入式系统板级移植和开发的主要 任务之一。 Lin.u)【将设备分为三种类型:字符设备(ch删ter d嘶ces)、块设备(block devices)和网络接口设备(n咖ork interf.aces)028】。其中,字符设备是指存取时没有 缓存的设备,如鼠标、键盘、串口等;块设备主要用作文件系统的存储媒介,其 读写都有缓存来支持,并能随机存取(random access),如硬盘、软盘、CD.RoM 等;网络设备在Linu)【中做专门的处理,包括以太网卡等网络传输接口。 本节主要介绍Liod平台上Intel NOR FlaSh存储器MTD驱动程序和以太网卡 LAN91C111驱动程序的移植过程。 1.NoR Flash的MTD驱动程序∞l FlaSh(闪存)是嵌入式系统的主要的存储媒介,主要有NOR和NAND两种。 Liod开发板采用两片hltel 28F128K18C NOR F1ash存储芯片,组成一个32-bit数 据位宽的32M存储容量的B ANK,由PⅪ墟70处理器的CSO片选信号寻址,物 理寻址空间为oXo ̄oX01箭旺。系统的B00tloader映像、Lmx内核映像、文件系 统映像都要存储在这里。 在嵌入式L证u)【中,NOR FlaSh的驱动程序是基于MTDO以emory Technology Device,存储技术设备)技术实现的。MTD为底层硬件(闪存)和上层(文件系统) 之间提供一个统一的抽象接口,即F1ash的文件系统都必须基于MTD驱动层。 使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存 为主)而设计的,因而它可为Flash提供更好的支持和管理功能,以及基于扇区的 擦除、读写操作接口。 NOR F1aSh有一个检测的统一接口CFI(Co哪en FlaSh Interf.ace,通用Flash 接口),通过该接口可读取NORFlaSh的特性,包括设备ID(生产商信息)、读/写、 擦除的时间特性等。这使得各种NOR Fl劬可被自动检测并自动加载对应的驱动 21 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 程序。对于CFI的MTD设备,可把MTD驱动依此分为4层:设备节点,MⅡ) 设备层、MTD原始设备层和硬件驱动层。I,洒1)【MTD设备的NOR Fl砒芯片驱 动遵循CFI接口标准,其中: (1)硬件驱动层负责在初始化时驱动FlaSh硬件,驱动程序位于 d曲ers抽td/l出ips子目录下; (2)MTD原始设备层分为MTD原始设备的通用代码和各个特定的F1ash的数 据两部分,在drivcr妇t池aps子目录下存放的是特定的FlaSh的数据,每个文 件都对应某一硬件平台上的F1aSh; (3)MTD设备层是基于MTD原始设备的,Lirru)【系统定义了MTD的块设备(主 设备号3 1)和字符设备(设备号90); (4)设备节点是/dev目录下用于系统访问MTD设备的特殊文件。 针对Liod开发板,需要添加的NOR F1aSh驱动程序xSbaSe270-丑ash.c位于 MTD原始设备层,放在内核源码越vers/mt妇aps子目录下。驱动程序的入口在 妣xSbaSe27x函数中,它完成所有MTD设备的注册过程。注册设备时,首先填 充结构体map幽,由于只有一个NOR F1砒设备,程序中使用全局结构体maps 注册MTD设备,并根据m印iI曲中的信息检测NOR F1ash。相关代码如下: 树efme w州Dow—s配E 32★1024★1024 static void 璐base270-.map-jnVaL∞ch吣t珈ct map-iⅡfo★map,Ⅱns追ned long f内m,ssizej len) { consistent..,巧mc((char★)map->cached+f.rom,len,DM渔FRoA置—DEⅥCE); ) static stnct map.jnfo maps={ 。name= .s妇= ”nashO”, W矾D 01w sIzE。 产NOR F1ash器件名·, ,.Fl勰h空间大小·/ .phys= Ox∞O00000, .b蛆k叭d也=4, /.F1雒h起始的物理地址·/ 产Flash数据总线宽度,32-bit幸, .inval』ache=嘲base270-_皿ap—jnvaL住che, /.使Dcache无效的函数指针·/ }; static strⅡct mtdjnfo★m严td; static struct mtd_panition★pa瑙eiLparts; static int nr-Jarsed—partS; static const char★probesD={NULL}; static int—jnit init.Jsbase27x(void) { int代t=O; maps.vi忡=ioremap(maps.phys,WDmoW—SIzE);/幸无Cache的起始虚拟地址·/ 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 if(!maps.vin){ p血tl‘(”Faned to io代map maps.vimn”). if(!弛t) 弛t=-ENOMEM; ) maps.cached=io他ma¨ached(maps.ph眄W册oW—SIzE);/.有Cache的起 始虚拟地址·, 近!maps.昀ched) printW’髓RN:WA RN矾G Faned to iommap昀ched%sh",maps.name); simpIe-map_.mit(&maps);,.检测当前总线宽度是否被内核支持·/ pI‘intk(KEI;【TljNOTICE”Probing%s at physicaI address、Ox%08lx(%d-bit bankwidth’\n”,maps.name’maps.phys,maps.bank丽dth★8); mymtd=do--l咀ap-J'mb“”cfl._pmbe”,&maps);/.通j立CFI接口检测Fl嬲h·/ if(!mymtd){ iounmap((void★)mapsMn); if(maps.cached) iounmap(maps.cached); if(!ret)ret=一EIO; ’ mymtd->owner=THIS—MODUl正; /.分析Fl雏h中的分区信息./ ret=pa瑙eJntd-partitions(mymtd,pmb姻,&parsed_par乜’O); 坂ret>o) nr_pa璐ed-parts=心t; /.向系统添加MID分区·/ if(!mymtd){ p血tkO@RN M强RNING¨%s is absent. 心缸lrn I蜕; }else if(nr-p瑙ed—par哟{ Sl却ping、n¨,maps.name); adiI.-IntiI—parbtions(mymtd,parseeLparts,nI:JarseiI—parb); }else{ printl【(”Using static par蛳ons蚰%如”,mps.name); add-.mtd_panitions(mymtd,panitions,A RR AY SIzE(partitions)); } retIIm0: 填充map inf0结构体maps后,程序通过simple map injt宏检测当前的总线 宽度是否被内核支持(配置内核时,可选择内核所支持的总线宽度)。接着调用 d0.map probe函数,根据maps中的信息,由CFI接口检测F1砒。如果成功检 测到F12Lsh,则返回一个记录了MTD原始设备的结构信息的nltd i1怕结构体指 针my玎们。然后通过parSe mtd panition函数的调用,试图分析F1ash中的分区 信息(RedB00t分区、命令行分区或AFS分区)。最后,通过add mtd p矾tionS 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 函数向系统添加ⅢtdJ删tion结构体数组partitions所定义的MTD分区。针对 Liod开发板可对MTD设备分区如下: 上述代码中,MTDPART SIZ RⅡ,L宏表示所有的剩余空间都划分给此分区。 该分区划分与B00noader中的定义一致。 在配置内核时,应针对目标板当前的系统总线宽度和Fl础的特性进行配置, 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 以最大程度地简化系统启动时F1础的检测过程,从而减少启动时间,同时也缩 小了内核的体积。 编译内核,系统启动后,若成功检测到NOR Fl曲,可看到如下输出信息: Probing nashO at physical addH港s<6>fIash0:Found 2 x16 deVic鹤at OxO in 32-bit bank Inte烬harp En蛐ded Query Table at Ox003l Using bu缗er write method c矗cmdset 0001:Erase suspend On Wrrite enabled UsiⅡg static partitiOns On出shO T叮D Creating 3 par6tions On t.nashO¨: Ox00000000_0x00040000:"Bootloader.’ OxO0040000-ox00180000:¨Kernelt’ Ox00180000-Ox02000000:”RooH§" 2.LAN91Cnl以太网卡驱动程序的移植 Liod开发板使用SMSC公司的10/100Mb/s自适应以太网接口芯片 LAN91C111。该芯片集成了MAC控制器和PHY,也可使用MⅡ接口与片外的 PHY芯片链接;支持8位、16位、.32位数据总线宽度;支持异步和同步总线传 输;有成熟的Lillu)【驱动程序支持。在Liod开发板上,U心91C111的片选引脚 AEN接PⅪ屹70的静态片选信号CS3(起始地址0xOc000000),中断请求引脚 玳TR0接PⅪ墟70的GpIO<10>,采用上升沿中断触发方式,外接一片AT93C46 串行EEPROM用于配置网卡的工作模式、总线的地址、中断和以太网的MAC 地址等信息。曲ArACS引脚接VCC,字节使能引脚nBEo/1接地,nBE2/3接 VCC,因此只允许以16-bit位宽访问L蝌91C111的寄存器。 由于Lirru)【内核中dr:~erS/n引smc91x.c已有对LAN9lClll的驱动支持,因 此在板级移植过程中,只需在目标板平台文件arcb/a彻/mach.px以Sbase270.c中, 使用平台总线设备注册函数添加网络设备的基地址空间、中断号等硬件资源的注 册信息,并在“ver妇“smc91x.h添加对网卡工作模式的相关定义即可。 针对Liod开发板,可在目标板平台文件xsbaSe270.c中添加如下注册信息: 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 .钮d=mQ.GPIO(10), .flags=IORESOURCEJRQ, ), }; /.(2)定义设备变量,向内核描述网络设备的各种信息·/ sta墩stnct pla渤mIJevice蛐c91墨-device 2{ .name=..smc91x¨, .缸=O, .nⅡm_翼∞Ⅱrc铭=ARRAY SIzE(smc91己.resources)' .∞source=smc91墨一r姻ourc铺, }; /.待添加的网卡等平台硬件设备列表事/ static stnct platform_device★pIatlI)邝1_de、,ic豁口—jJlitdata={ &smc91删e“∞, }; 严(3)向系统注册网卡等平台总线设备·/ static Vo沁—jllit秘base270-.nit(void) { ...... platform-add—de、,ices(platform-devic鹤,A剐瞄Y SIzE(platform._devices)); ) static vo试—jllit璐base270_iniLmq(void){ 产初始化中断·/ p帅itjrq(); intirq=O; irq=irq; pxa印io._JIlode(10); /.设置GPl0《10>为输入引脚·/ set i11q咖e(mQl_GPIO(10),mQlI-】阻S矾G);,.设置检测到上升沿触发中断幸/ 在拙vers/n酣smc91x.h中对L气N91C111的工作模式配置如下: 系统启动时,若成功检测到网卡,可看到如下输出信息: 基fH 2“∞嵌入式实H视频采集与传输系统的设*;实现 华东师范大学硕士论文 s删9lI…11,s。p 22 2仰4 byNicoIas Pltm‘Ⅱico@㈣or驴 eth0:sMc91c11IFD(reV2】at c4850300mQ42DMA 8【nowaill e仙0:Ethe皿H addr:00:Od:k:ee:轴:” 2.2.4.4配置和编译内核 内核配置主要是对内核的功能模块进行选择及参数设定。在交叉编译内核 时,应按照2 2 4 2节修改内核源代码根目录下的Make丘le中对ARcH和 cROss—c0Ⅶ1皿E的定义,以指定默认韵体系结构和交叉编译器,再运行’,make menuc。nng’命令对内核进行配置。LiIlux内核配置的主界面如图24所示。 图2■Li眦内核配置主界面 Fignre 24I血uI ke—l coⅡngundo㈣bInterkc。 由sy鞋em Type—heI PxA2xx IⅢplemeⅡta6。ns—sei嘲tafgetbo缸d(Emdoor xsBAsE270 Developemm Ph怕IⅡ1),可选择在内核移植过程中添加的对Liod开 发板的支持选项。如图2—5所示。 围2-5目标板选择配置界面 Figure 2巧nrgetboard selec“onlⅡkfhce 基十H2“的嵌入式实时视频采集与传输系统的设计与实现 华末师范大学硬士论文 由Devlce D打vers—Memofy TechI】0logy Device(MTD)8uppon—M印ping ddve硌f叶chip access—CFI Flash device mapped on Emdoor XSBASE270 evd board,选择为Liod开发板移植的NORFlash的MTD驱动程序,如图2.6所示 …舭一c一》g—州m…h。=nvL=g¨日:n。…‘:j…pd~=…}1H…1“一…^。nLtb‘ubi…‘Py’“‘}…,:n-蜘—‘1.f~j·~】口srl“曲……H…d一I…一【t-…i…p‘一…,·l‘…Tl “曲' 图2.6 cnFksb驱动配置界面 F培um2—6cHnasb dri盯conng“radonI皿teHhco 对于Liod开发板,需要在配置内核时指定内核启动参数,其设置界面由Boot 叩tlons—De川t ke工Ⅱel command s血g进入。内核启动参数设置为”console= 仕yso,11 5200mem=64M root=1F02州root矗type_J凰2”,指定了控制台串口、内存 大小、根文件系统等信息。 此外,还可对内核的其他模块进行适当裁减.例如文件系统类型的支持、设 备驱动程序的选择、网络协议的支持等,可根据需要编译进内核或编译成内核模 块,详细配最过程在此不予赘述。 配置完毕并保存当前配置后,运行’'make”命令编译内核。编译后在内核源码 树顶层目录生成了vmlinuxfELF格式的非压缩格式)以及相应的符号表文件 syst锄map,可以直接下载到内存进行调试。在arch,arm,bo叫compressed目录下 生成了同名文件v砌曲ux(ELF格式的压缩内核1,在雠h,aⅡn,boot目录下则生成 了压缩内核映像文件zIⅡ1age。zIrIlage就是要下载到目标板的启动Fl孵h中的内核 二进制映像.由Boouoader进行引导。 P御=¥fROOTFsl 最后,运行”mal=e INsTALL MOD modules ins乜ll-’命令 将内棱模块安装到预定义的¥{ROOTFsl目录。这是在i{己黄内核时被配置为内棱 模块的驱动程序和其他功能模块,在构造根文件系统时.需要将这些模块放置在 相应目录下。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 2.2.5根文件系统的构建 根文件系统(root filesyst£Im)是Linux内核启动时第一个必须要挂载的文件系 统;若系统不能从指定设备上挂载根文件系统,则系统无法正常启动。本节介绍 使用BusyBox工具建立根文件系统以及配置根文件系统启动脚本的过程。 2.2.5.1根文件系统结构 LiIruX根文件系统的结构是受U1血的影响和自身的发展、结合国际公认的标 准而形成的,文件系统架构标准FHS(FileSy妣m Hierarchy standard)就是用来规 范根文件系统的标准文档。通常,Lin_u)(的基本根文件系统应包含以下目录c22】【29】: ·/bin-—存放系统基本命令,如ls,cp,mv等; · ,bo叶——Bootloader所用到的静态文件; ·/dev——存放设备文件节点; ·/etc一系统启动配置等脚本文件,如rc,ini_ttab,fStab等: ·/1ib一存放系统默认的动态链接库和内核模块; ·/mn卜—一文件系统的临时挂载点; ·/op卜—一额外的应用程序软件包; ·/sbi玎_一基本的系统命令,如ifco蚯g,硫等; ● · · 佃,/ur蚀sorcr用~临户挂时目载目录/,录p】也,的可通c包文常括件用瓜系;于统怕;保i存11,临觚时;文r/件e;tc,瓜棚ib等子目录: ●/var—咆含系统一般运行时变动性的数据。 2.2.5.2用BusyBox建立根文件系统圈【2刁 在嵌入式L泌11)【中,BusvBox是构造文件系统最常用的一个软件工具包。它 最早是由Bnlce Per|ens在1996年为Debian I汹l】(的安装盘所编写的。BllsyBox 将大量工具如印、sh、ls、mount、、ri等集成到一个可执行文件中,足以满足大 部分嵌入式L蛔畎的典型应用。BusyBox在编写时较多地考虑了代码优化,去除 了命令中不常用的特性,并采用模块化设计,在编译配置时很容易被定制和裁减, 因此编译生成的可执行文件大小只有几百K字节。此外,BusyBox支持多种体 系结构,可支持静态或动态链接,很适合于嵌入式系统应用。 BusyBox项目的官方网站是htlp:∥粥Ⅳw.bllSyb0X.n州。本节使用BusyBox.1.8.2 和h卸://c∞ss。坻.o叫提供的buSybox.1.8.2.触es.1.patch来构建根文件系统【30】。主 要过程包括配置并交叉编译BusyBoX、构造根文件系统、创建根文件系统映像文 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 件三个步骤。 1.配置和交叉编译BusyBox (1)下载BusyBOX-1.8.2源码包及相关patch,解压缩并打补丁: (3)修改Mal【efile: (4)运行“make menuconfig"配置BuSyBoX。采用静态链接的方式编译,选用 曲作为默认shell,选择所需要的命令及工具组件如cp、访、越t、moum、mdev 等,配置完成后保存退出。 (5)运行“mal【e&&make iIlstall"命令编译并安装BuSyBox,在—install目录 下创建bill、sbiIl、us]泊in、uSr/sbill共4个目录,得到根文件系统的雏形。 2.构造根文件系统 根文件系统中存放了嵌入式Lin_u)【系统使用的所有应用程序、库以及系统配 置等其他一些相关文件。下面以BuSyBox安装后生成的池蹴1目录中的内容为 基础,构造嵌入式Lmx根文件系统的目录树。通常嵌入式LinuX系统顶层目录 “/"下的子目录有bin、sbill、dev、etc、Kb、proc、usr、Var、tmp和sys等。 (1)以jtlstall目录为顶层目录,建立必要的目录: (2)拷贝库文件。将建立交叉编译环境时编译得到的动态链接库拷贝到相应目 录,包括将/0p讹rosStoo地nn.i啪11n=1)【t.1i11.u)【.gnueabi/sys.root/lib下所有的库文件和 /0p讹rosstoo帕瑚-iwmnXt-liIlu)【一朗ueabi/lib目录下的动态链接库(枣.so.幸)拷贝到 共享库文件拷贝到删删ib目录下。在拷贝时,应注意使用“cp.d"命令 一心tal价ib下,将/0p讹rosstoo如珊..iwⅡ】II】xt.1i11u)(.鲈ucabi/sys.roo讹sr/lib目录下的 选项来保留原来的软链接。 (3)拷贝内核模块。将编译内核时所安装的内核模块拷贝到根文件系统,内核 模块的保存路径是1ib/modules/2.6.22.6瓜enlel,其中存放了配置为内核模块的驱 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 动程序和其他功能模块,内核在运行时将会调用有关模块。 (4)创建必要的设备节点 由于Linux 2.6.19及后续内核版本不再包含devfs,所以还需要在根文件系统 中配置console和nllll设备,否则不能进入控制台的Shell命令行交互界面。在 i11sta玎/de“目录下用如下命令创建设备节点: (5)创建etc/jnittab文件 所有i的ni应te用ab程是序砬程都序是的它初的始子化进配程置。文Bu件Sy。b础ox是的内iI核li启t程动序后在运启行动的时第一会个读程取序枞,文 件的内容,并执行相应的命令。可在狮ttab文件中编辑如下内容: (6)建立sys砒动作项执行的命令脚本 Sys础动作项指定的命令,是试幽指定的在系统初始化时执行的命令,通 常这个命令使用脚本实现。这个脚本完成一些必要的系统初始化,例如proc文 件系统的安装、网络的启动等。上述injtcab文件指定初始化脚本为/etc/础.d/rcS, 可编辑该脚本文件如下: 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 /etc/motd是在系统启动后进入sheU命令行提示符之前,所要打印的用户自 定义信息。此外,还可以在/etc/paSswd、/etc/铲oup、/etc/profile等文件中配置用 户帐号和shell的全局配置文件等。 3在.嵌创建入根式文L件in系u统 )【映应像文用件中,主要的存储设备为洲∞洲,SD咖和 ROM(常采用F1ash存储器)。常用的基于存储设各的文件系统类型包括:j凰2, ya凰,cr组蠡,r0Infs,ramdisl(,栅施/bnpfS等。J凰2基于MTD驱动层,主要用于 NORFl砒,是可读写的、支持数据压缩的、基于哈希表的日志型闪存文件系统, 并提供了崩溃、掉电安全保护,提供“写平衡”支持等,常用作嵌入式Lill_u)【系 统的根文件系统。 制作j艘根文件系统的步骤如下: (1)下载mtd工程源代码: c、rs_d:psen,er:anon“s@“s.infhd船d.org:/hom“cvs login 仞嬲舢,协鲫D—c删 cvs_d:psenrer:anoncvs(国cvs.inf}adead.or2:/home,cvs co mtd (2)切换到源码utils目录下,运行make命令,编译得到咖蕊.j凰2工具,将 面出.j触拷贝到/Sbin目录下。 (3)使用IIll出.j魅2工具制作i凰2根文件系统映像。 l m媳.j仃s2-o rootfU仃s2.img-r jnstau-e ox40000·l—pad=0xle80000 其中,.e选项指定擦除块大小,.1选项指定文件系统类型为lMe.endian,一pad =0)【1e80000指定文件系统大小为Oxle80000字节,如果不足则使用o)【仃来填充。 在系统启动时,可使用’’rooF’启动命令行指定根文件系统所在的设备,以挂 载根文件系统。对于Liod开发板,在2.2.4.4节配置内核时,指定的内核启动命 令行参数中的内容“roo卢1F02刑noini仃d roo仃St卵e=j魅2”,表示根文件系统是 一个主设备号为o)【1f(31)和次设备号为02(第3个)的设备文件,即为MTD设备 的第3个分区,以可读写方式挂载,根文件系统类型为j凰2。 系统启动后,在成功挂载根文件系统并进入BuSybox的sheU命令行时,会 向串口控制台打印如下信息: 32 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 2.3本章小结 嵌入式软硬件开发平台是嵌入式应用程序开发的基础。本章首先简单介绍了 Liod开发板的硬件结构,然后对Liod开发板的嵌入式LiIIuX开发平台的建立过 程进行了详细介绍。其中主要工作包括宿主机交叉编译环境的建立、嵌入式Lill.uX 引导程序的实现、嵌入式Lirr眍2.6.22.6内核及驱动程序的移植、基于BllSybox 的根文件系统的构建与系统启动配置等,建立了一个完整的嵌入式Linu)【开发平 开台发,为 平后台续都的是应基用于程最序新设的计软及件系包统,实特现别奠是定交了良叉好编的译基工础具。链本具章有所支构持建删的E嵌AB入I、式 采用N咿TL线程模型、支持软件浮点处理和无线Ⅶ慨指令集等特点,在对应用 程序进行编译优化时非常有效。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 第三章嵌入式实时视频采集方案 本章介绍在Liod开发平台上基于Ⅵdeo for LinuX的实时视频采集方案,包括 USB摄像头驱动程序的移植和实时视频采集的软件实现。 3.1嵌入式L-nux的USB摄像头驱动 USB摄像头因其价格低廉、性能良好而广泛应用于可视电话、视频聊天、视 频监控等领域,同时以其灵活、方便的特性,易于集成到嵌入式系统中。 摄像头由主控芯片和传感芯片组成。其中,主控芯片负责图像采集、压缩以 及和主机的通信,传感芯片用于感应光信号转换为模拟或数字视频电信号。对于 主控芯片为OV5ll、zc030X系列的主流USB摄像头,Lin_u)【内核可提供驱动程 序支持。采用OV511芯片的摄像头采集的图像为RGB格式,数据量较大不利于 实时采集和处理;采用zc030)【主控芯片的摄像头支持印EG格式和4:2:0采样的 YUv原始视频数据输出,数据量小,可直接作为H.264等视频压缩编码标准的 原始视频数据源,避免了对图像的重采样和色彩空间的变换等复杂的数字运算处 理,非常适合于嵌入式的实时视频采集应用,已成为国内市场的主流。 本章选择市场上常见的罗技(Logitech)USB摄像头,型号为快看灵讯版 (L0西tech QuickC锄EaS∥C001),其采用的主控芯片为zc030x,图像传感芯片为 Hv7131R,元件象素为档0万,最大分辨率为640×480。驱动程序选用由自由 软件基金会(Free Sof呐are Foulldation)发布的基于LiII呔的通用USB摄像头驱动 软件gspca/Spca5)【)【,所用版本为gspcavl—20070508。本节在分析gspca驱动程序 源代码的基础上,添加了gspCa对罗技快看灵讯版摄像头的驱动支持,并将驱动 程序移植到Liod开发平台。 3。1。1 UsB摄像头驱动程序gspca的分析 Gspca/Spca5繇是自由软件基金会发布的通用USB摄像头驱动程序,支持 SullpluS、Z。sta价厂imicr0、Son仅、Conexant、P仅art、Ominivision等主要厂商的图 像传感器和USB桥接芯片,支持yuyv、Jpeg、Mpeg等多种图像输出格式,所 有I/O控制兼容于支持MJPEG扩展的Video For Lmx(简称V4L)规范,因其功 能强大、成熟稳定而倍受欢迎。Gspca最新版本支持LiImx 2.6.17及以上版本的 内核,兼容V4L1和V4L2规范,交替使用两个L珏m(USB Request B10ck)进行图 像采集,支持内存映射方式,提高了采集效率。 Gspca驱动程序属于USB客户端驱动程序,提供了与USBD(通用总线驱动 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 程序)和文件系统的接口【3l】。 1.擎pca的USBD接口 由于USBD为每个设备驱动程序维护一个相关的uSb d南er的数据结构,当 总线上有设备连接操作时,USBD中的USB HUB驱动程序通过该结构来查找相 关的设备驱动程序;丽对于设备断开操作,USBD也通过该结构断开设备驱动程 序与相关设备的连接,即实现即插即用的功能。gspca中USBD接口的数据结构 在gspca core.c中定义如下: . s饥c s讯lct曲血VerSpca5)。【撕={ .mme=”gspca”, .id_table=de访cejable, .probe=Spca5Ⅺ【Jrobe, .disconnect=spca5Ⅺ【|_且isc0衄eCt 产驱动程序名称引 /宰驱动程序的设备D列表·/ 严探测设备枣, 产断开设备搴/ }; 函数Spca5蕊probe的作用是判断设备的配置描述符和接口,为驱动程序申 请一块保留内存,保存本驱动和本设备的相关初始化信息,还负责探测使用的摄 像头、配置摄像头DSP和senSor、创建摄像头的设备文件节点等。 函数Spca5xx_disco加ect的作用是终止数据传输、删除摄像头的设备文件节 点,释放接口以及驱动程序占用的内存空间。 在初始化设备时,通过调用11s1)jegister(spca5怼driv哟向内核注册USB设 备驱动;de、,ice table中定义了驱动程序所支持的设备D列表,当一个摄像头链 接到USB总线上时,USBD通过上述spca5X)【probe函数检测设备是否在该列表 中,并为该摄像头创建相应的设备文件节点,根据设备D进行设备的初始化等 操作。 2.gspca的文件系统接口 在LinuX系统中,所有的设备都是通过文件系统中的设备文件节点来访问的, 驱动程序提供打开/关闭和读/写设备文件、对设备的加控制等文件系统接口, 以便应用程序访问硬件设备。gspca摄像头驱动程序与文件系统的接口定义如下: sta土ic struct video—device Spca50)【储nplate={ .f.ops 2&spca5xx—量。ps, Spca5蚰ps={ ); 蚴ic struct file!oper撕ons .owner 2 nⅡS—MODULE, 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 · 华东师范大学硕士论文 ’.Open 2 spcaL5xX一0p鸭 .rele2Lse=Spca5)呸-close, .read=spca5怼』ea也 .删呦p=spca5敞mm印, .io以=spca5xxjoctl, .11seek=n0■lseel【’ ); 文件系统接口通过file operations数据结构,依据Ⅵde04L证u)【协议规范,实 现设备的关键系统调用,给应用程序提供了摄像头打开、摄像头关闭、从缓冲区 读数据、内存映射和摄像头的控制操作等功能函数接口,它屏蔽了硬件实现的细 节,应用程序将摄像头看作是一类特殊文件,可以使用象操作普通文件一样的系 统调用接口函数来完成对摄像头的操作。 3.1.2 UsB摄像头驱动程序gspca的移植 本次gspca驱动程序的移植包括两部分内容,一是在gspca中添加对罗技快 看灵讯版USB摄像头的驱动支持;二是交叉编译gspca驱动程序,移植到Liod 开发板上。 3.1.2.1在gspca中添加新设备R21 罗技快看灵讯版(Lo酣ech Quickcam Easy/C001)USB摄像头的CMOS图像传 感芯片为HV713 1R,主控芯片为zc030)【。gspca驱动程序已有对zc030】【主控芯 片和Hv7131R图像传感器的支持,根据3.1.1节对驱动程序的分析,在调用 spca5XX probe()函数检测设备时,会从deVice table口列表中搜索摄像头的设备 D(vendor D和Product m组合),若成功则进行设备注册,完成设备的初始化。 由于在设备D列表de、,ice table口中对罗技快看灵讯版USB摄像头的定义,因而 无法识别和注册设备。因此,为使gspca支持快看灵讯版摄像头,必须在驱动程 序中添加薪的设备D以及设备的主控芯片和传感芯片型号等信息。 罗技快看灵讯版摄像头的设备ID可以在PC机上通过1susb命令获取如下: 由此可知该款摄像头的、bndor ID:Product ID是046d:08也 在gspca_C0re.c中添加罗技快看灵讯版(Lo百tech QuickCam Easy/C001)USB摄 像头的设备信息的相关代码如下: 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 37 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 3.1.2.2交叉编译gspca驱动程序 由于gspca驱动程序不属于标准LinuX内核源码,因此通常将其编译成内核 g模Sp块ca,驱以动动程态序加,载必的须方进式行来交提叉供编对译设得备到的删驱动 格支 式持的。gs为pc了a.在kLOi内od核开模发块板。上交使叉用 编 并将译内gs核pc目a时录,指应向在2.Ma2k.ef4i节le所中移定植义的正‰确内的核交源叉代编码译目器录和,KE对鼢M咂akLe-j.ciVlEeRdS的IO改N,动 执行make命令,即可编译得到内核模块gspca.k0,将其安装到2.2.4.4节编 译内核时内核模块的安装目录,并在构造根文件系统时一并拷贝到对应目录。除 gSpca.k0模块外,v411.compat.k0、v412.co衄on.ko和videodev.k0等内核模块也 是USB摄像头正常工作时所必须加载的模块,因此在编译内核时应配置对相关 内核模块的支持。 3.2基于V4L的实时视频数据采集 Ⅵdeo f10r L证畎(简称V4L)是目前L细uX核心中视频部分的标准?本节在介绍 了V4L标准及应用编程接口的基础上,给出了基于V4L的嵌入式实时视频数据 采集的软件实现方案。 3.2.1 Video for Linux编程接口 在Lil呶系统中,所有设备都被看成是一类特殊的文件,称为设备文件。设 备驱动程序则是内核和外设之间的接口,它完成设备的初始化和释放、对设备文 件的各种操作和中断处理等功能,为应用程序屏蔽了外设硬件的细节,使得应用 程序可以象普通文件一样对外设进行操作。 对于视频类影像设备,Lill.uX提供了一套标准的API(应用编程接口),即Ⅵdeo for L证11)【(简称V4L),内核、驱动、应用程序以这个接口为标准进行交流。V4L 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 是在驱动程序和应用程序之间的一个标准接口层,是LiIluX系统下一个强大的视 频软件处理库。对于底层的驱动开发人员来说,在实现设备的驱动程序时,必须 为应用程序提供V4L的调用接口;对于上层应用软件开发人员来说,它屏蔽了 底层设备的细节,并提供通用的统一的编程接口对不同的设备进行操作。V4L 涵盖了视频、音频流捕捉及处理等内容,支持视频采集卡、USB摄像头等多媒 体设备,例如视频设备的采集、输出和控制等功能。Linu)【下的许多视频应用软 件都是基于V4L设计和实现的。 V4L最早由越a11 Cox引入LinuX 2.1/2.2内核,以统一各种Tv和无线电设备 相关的接口。1999年起,Bill D池开始着手开发V4L2以解决V4L的一些瓶颈, 并提供更广泛的设备支持;2002年,这一API被再次修订,之后又被添加到L证u)【 2.5/2.6内核源代码中,用以取代原来的V4LAPI。由于大部分现有的设备驱动仍 然保留对V4L1(旧的V4L)应用程序的支持,因此,作为新的内核标准接口,V4L2 通过使用videod“ko内核模块添加兼容层的方式,保持对现有驱动和V4L1应 用的兼容性【331。在嵌入式领域,V4L1仍然是视频应用开发的主流,这是因为 V4L1 API简单易用,功能强大,足够满足嵌入式应用的需求。因此,本系统选 用V4L1作为视频采集应用程序的编程接口。 Ⅵde04Linu)【提供对下列设备文件进行相关操作的API【34】【35】: 设备文件名 次设备号范围 功能 /dev~ideo |aeNkad沁 |a斟|诹 O.63 64.127 192-223 视 黼频M捕 无捉线接电口设备 文字电视广播(teleteXt)接口芯片 l心代|寸文 224—239 原始VBI数据(Intercas价e1酏ext) Ⅵde04Lmx API实际上是对设备操作方法的一些宏定义以及相关的数据结 构,在内核源代码i11clud矾inuxMdeodev.h头文件中定义。对于视频采集应用程 序设计,常用的V4LAPI中的特性及操作相关的数据结构和宏定义有: ●功能查询ioctl操作(capabil埘queDr ioctl): ⅥDIOCGCAP宏定义用于获取设备的基本信息,通过ioc廿系统调用可以将 获取的基本功能信息(capabili锣infomlation)保存到啊deo_C印abil畸结构体中,这 些信息包括设备名称、支持的最大最小分辨率、信号源信息等,结构体定义如下: stnlct video—papabili哆{ char咖ef32】; 产设备名称·/ int铆e; 严接口类型木/ 缸Chanllels: 严通道个数·/ 缸audios: 严音频设备个数·/ 39 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 血m雹州d也; i11t ma)【hei出; i11t如in州(1th; 血minheight; /.所支持的最大捕捉宽度(象素)·/ 产所支持的最大捕捉高度(象素)·/ 严所支持的最小捕捉宽度(象素)枣/ 户所支持的最小捕捉高度(象素)搴/ ); 其中t),pe域是设备功能标志(c印abilit)r flags), 表明该设备可采集视频数据到内存。 一 帧缓冲(Fr锄e Bu位r) 将视频数据直接采集到帧缓冲的采集卡必须指定帧缓冲的基地址,帧大小和 组织结构。VIDIOCSFBUF iocn用于设置采集卡的帧缓冲参数,VIDIOCGFBU下 iocU则返回当前所使用的帧缓冲参数。帧缓冲参数保存在下面的结构体中: s咖ct啊deo_b硼衙{ void %aSe: irlt heigK晰d也; i11t depth; 缸b)他SpeniIle; /幸b硼Fer的物理基地址幸/ /幸舭吼e buf6胃的高度和宽度·/ /.疳锄ebu妇衙的象素深度·/ 严每行所占的内存字节数}/ _ 捕);捉窗口(c批、渤d0、ⅣS) 视频捕捉区域由结构体Video咖dow来描述。VmIOCGW烈ioctl用于获取 当前设置,VDIOCSW烈用于设置新值,只有选择合适的某一参数集才能设置 成功。video willdow结构体定义如下: smlct、rideo曲dow{ —∞2)【,y; —∞2晰d廿曲eight; u32 c11romakey: 严窗口位置·/ 产视频捕捉的尺寸木/ /宰RGB32色度值的主机顺序幸/ —.u32丑ags; s讯lct Video』lip—-user·clips;严包含剪辑区域信息的列表(Set oIlly)幸/ 砬clipcount; 严剪辑区域个数(Set only)牛/ ); 一 视频源(video sources) 每个V4L视频或音频设备都来自于一个或多个信源通道(source channel),各 通道信息可通过VIDIOCGC扎气N ioCtl系统调用来查询,并返回查询结果保存到 一个讥deo』hannel结构体中。VmIOCSCHAN用于切换通道。讥deojhannel结 构体定义如下: 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 struct 1I,ideo-..ck卿∞1{ 缸channel; 严信源通道编号·/ c11ar彻me【32】; 硫t11玎erS; —∞2 flags; J16够pe; —p16 nom; 严输入通道的tuners个数·/ 严tu】嗽特性标志·/ 严VIDEO n伊E_ⅣI VDEO n伊E.—C舳RA·/ 严制式(PAJL NTSC SEC舢讧I AI丌O)·/ >; ● 图像属性(hnage propeIties) 图像属性可通过VIDIOCGPICT ioctl查询,并保存到结构体、rideo piCn】re中。 VIDIOCSPICT iocu用于设置新的图像属性。结构体video pictI鹏定义如下: 蛐mct访de0-Jicture{ —.u16 bri曲mess; u16 hue: /.亮度(0-65535)奉/ 产色调幸/ u16 u16 c010ur: con饿哦: 产色深幸/ 产对比度·/ u16 w11itIeness: 产仅用于灰度图幸/ u16 depm; u16 palette; …… 产象素深度·/ /.调色板·/ 严调色板类型定义,如RGB24、YUv420等牛/ >; 一 读取图像(ReadiIlg衄ges) 读取捕捉的图像有两种方法:一是通过read系统调用直接从设备读取下一个 有效的图像,程序应使用VDIOCSPICT和ⅧIOCSw矾来设置图像格式和大 小,并指定适当大小的缓冲区及长度;二是使用内存映射方式,通过姗ap接口 来读取图像。内存映射方式的图像截取步骤是:首先设置好图像尺寸和象素深度 等属性,接着使用VⅢIOCGMBUF ioctl获取nlnlap的缓冲区尺寸和图像帧在缓 冲区内的偏移量等信息,并保存到、rideo mbllf结构体中。在调用衄ap作好内 存映射后,然后使用ⅥDIOCMCAPl弋瓜E iocn按照、,ideo mm印结构体中指定 的图像尺寸和格式来进行图像帧的截取。VIDIOCSYNC ioctl用于等待一帧图像 截取的完成。相关数据结构的定义如下: 41 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 咖t video mh西{ 缸s娩e: . 砬台ames: n o盛etSⅣDEO MAX FR AME]; 产映射的内存字节数·/ 产帧数·/ /.各帧偏移量·/ 蝴访deo ); mmap{ unsi乒ed int危Ime; 硫 heig虬诹d也; unsi萨ed 缸fbnmt; 严帧编号·/ 严图像尺寸幸/ 产与VDEO PAI,ETTE-+一致幸/ >; 通过上述Ⅵ(1e04Linu)【提供的基本的API,即可完成USB摄像头视频采集应 用程序的设计。 3.2.2实时视频采集方案的软件实现 考虑到整个嵌入式实时视频采集、压缩编码及传输系统的总体实现,本章实 现的视频采集子系统有如下特点: 1.支持当前在嵌入式多媒体应用领域使用最为广泛的QCIF(176×144)、 C巧(352×288)和QVGA(320×240)等图像格式的实时视频采集; 2.在图像属性中设置使用YUv420P调色板,以便将采集的原始视频数据直 接送H.264编码器进行压缩编码; 3.采用衄ap()内存映射和连续帧采集的方式捕捉视频图像,提高了视频数 据采集的效率; 4.开辟两个缓冲区轮换保存视频数据,可以在一个缓冲区满后,唤醒图像 处理进程对本缓冲区的图像进行压缩编码,同时切换到另一个缓冲区继续采集视 频数据,以提高系统的效率和实时性【36】。 V4L为视频设备采集图像提供两种方法:一是read()直接读取,二是衄ap() 内存映射。reaui()通过内核缓冲区来读取数据,该系统调用在驱动程序中是通过 copy_t0 user()函数将内核空间的数据拷贝到用户空间的。但是对于像视频采集 等大批量的数据处理,采用拷贝的方法会大大增加时间开销。衄ap()系统调用 使得进程间通过映射同一文件实现共享内存,各进程可以像访问普通内存一样对 文件进行访闯,访问时只需使用指针而不必调用文件操作函数【3 71。 基于以上视频采集方案以及Ⅵde04Lin腿的应用程序设计规范,可得到视频 采集模块的主程序流程【381,如图3.1所示: 42 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 Y } 关闭视频设各 | r百i] 图3.1视频采集流程 Fig旺他3·1 V沁o Ca曲lre Flow Chart 视频采集程序中的主要数据结构和子函数有【39】: 1.V4L设备数据结构v4l device: typedef smIct—v4Lstmct{ 血fd: s白mct Video_capabil毋capabil姆; s臼1lct videoⅥ五ndow谢ndow: st】juct video chaI】nel cbaDnel: 趵mCt vide0—picture picture; 趵nJct video mmapⅥ啪ap; struct访deo nlbuf nib幔 43 薹主里:!丝塑堂△塞壅堕塑塑墨叁量堡塑系统的设计与实现 华东师范大学硕士论文 u11signed char·pFr锄eb珊陆; unsigned缸mmapsize; uIlsi弘ed Char宰pC印tulIeb此 uun1s1i乒siegd缸ncbd(I缸r、№)li,gihdtm;; unsigned缸f0衄atIll; unsigned疏bppIIl; unsigned m丘amesize; ptllread霉nutexj酣bmutex; /.姗ap映射的内存空间指针·/ /.衄ap映射的内存空间大小·/ /.保存视频数据的缓冲区指针+/ 严用户设置的图像尺寸·/ /.象素深度·/ )v4l-de、,ice; 2.V4L设备初始化函数V41 inj“): 按照图3—1中的步骤完成V4L设备的初始化, (1)打开视频设备 栽lefine DEFAUIT DEVICE”/dev~ide00” 血v4U)pen(char木dev,v41_deVice幸vd){ if(!dev) deV 2 DEFAU哩,T DEVICE; if((vd->fd 2 open(dev,Oj①WR))一一1){ perror(ftV4Lopen:”); ren】如-1; ) if(v4Lget_c印abil时(vd)) r曲】加.1; re咖O; if(v4Lget--picture(vd))retum.1; 函数主体由下列子函数构成: 产打开设备文件宰/ /.获取视频设备信息·/ 严获取当前图像属性宰/ } (2)获取视频设备信息 int v4ket_c印abil埘(v41-d耐ce宰vd){ if(ipoecnn.(V0d蜊-v>4fLdg,吣印ⅥaDbIiOlCiG锣C:AP”,)&;(vd一>c印abil蚵))一.1){ retulm-1; ) 两n删C锄钌a fouIld:‰"Vd->c印abil畸n锄e); 劬】加O; } (3)获取当前图像属性设置 砒V4l』etj)icture(V4LdeVice奉vd){ -. if(ioctl(vd->fd,VIDIOCGPICT,&(vd->picture))<0){ re咖-1; pen.0r(”v4Lget.Jictllre:”); r)e咖0; ) 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (4)初始化视频通道 血V4l_geLch锄els(v4№慨·vd){ if(ioctl(vd->fd,VIDIOCGCHAN,&(v小>cbannel))<O){ pe玎or(1-v41.get_channel:”); retI】m-1; ) pr矗收”Bridge fomld:%s\11”,Vd》chaImel.1】ame); re衄m 0; > (5)设置图像属性(主要是设置调色板) 撑defille VIDEO PAI,ETTE Y_【rV420P 15 群defme DEPTHⅥⅣ420P 12 血V4be如ale位e(V4UeVice木vd){ Vd一>picture.palette。VIDEO PALETTEⅥⅣ420P; vd·>picture.depm=DEPTHⅥⅣ420P; Vd一>f0肋atm=VIDEO_PALETTEⅥⅣ420P; Vd·>bppIn=DEPTHⅥⅣ420P; ifi[ioctl(vd->地VIDIOCSPICT'&vd->picture)<0){ pe玎or(”VDIOCSPICT in V4l_seoal甜e:”); /幸设置调色板幸/ retllrn-1; ’ if(ioctl(vd·>地VDIOCC巾ICT,&Vd->pictI】re)<O){产检查是否设置成功幸/ pe玎0r(”VDIOCGPIcT in V4l_setJal眈:W); re慨·1; } i印d->fomatIn 12 Vd却icture.pal眦ll Vd->bppIn!=Vd->picture.d印m){ re咖-1; pI证tf(”Error:Comd n优set、,ideo palet眙!\11”); } rc巾】加0; ) (6)初始化内存映射l姗ap 树efine CⅢ 1 批fille QCⅢ 2 桴define QVGA 3 撑define CIF—WIDTH 352 撑define CIF-}IEIGHT 288 托e蠡.me QCIF W1DTH 176 捍define QC巧HEIGHT 144 }}defiIle QVGA WⅢTH 320 拌(1efme QVGA.髓IGHT 240 45 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 intv4U皿印init(v4№vice·记缸fomat){ 血£ /s蝴.(设f置0I图m像at尺)寸{ ·/ c勰e Cm:{Vd一>士m谢d也=CⅢjⅥDTH;vd->kmlei曲卢CⅢJmIGHT.) 明se bQrCeⅢak;:{vd÷hdrwidth=QC刚DTH;Vd->hdrheigh忙QC珥JmIG耵;} brea:k; 蚀se QVGA:{vd->hdrⅣidth=QVGA』Ⅱ'TH;Vd->hdrhe蟾h仁QVGA lmIGHT.) break; defindt: p血l坦”Bad Image Fomlat S协!、n”); breal【; } 严计算帧大小,单位为字节·/ Vd->仔锄esize=((vd->hd州dtll)·(vd一>hdrheight)木(Vd一斗}ppIn))>>3; 严获取眦aD的缓冲区信息·/ memset(&(vd》Ⅱ1b1】f),O,sizeof◇d一>mb旧); if(ioctl(vd一>fd,VIDIOCGMBUF,&(Vd-Ⅺnbuf))<O){ perr0“”础VIDl0CGMBⅥ蹦1ed!、n”); ) 严调用mnlap进行内存映射·/ if((Vd一>pFr锄ebu丘.er=(unsigned char幸)衄ap(0,Vd-、,1I】b1】£size, PRoT R EADIPROT WRITE,NIAP_SHARED,Vd一>fd,O))<0){ perror(”V41-衄ap init:衄印”); re咖一1; ) 严初始化video衄ap结构体·/ 矾i-.>Im印size=Vd->1dbuf:size; Vd-、悯map.、析dCh=V‘1.>hdn析(hh; Vd.>、恤map.height=Vd一>h拙eight; Vd一>Ⅵ衄ap.fo皿at=Vd->fonnatIn; 产测试能否将图像帧采集到所映射的缓冲区·/ Vd.>1啪ap.f}锄e=t for(仁0;f<vd.>mh】f盘ames;f++){ if(ioctl(Vd->fd,VIDIOCMCAPn瓜E,&(vd一>ⅥnII】ap))<O){ penDr(”V41_n1111ap-jnit:CMCAPTURE”); retunl一l; ) } Vrde-觚>.O竹;mnap.丘锄e=0; ) 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 该函数进行衄ap方式的图像采集的初始化工作,其步骤严格按照3.2.1节 中的Ⅵde04Lin:u)【规范进行,调用mmap()函数将设备文件vd.>fd映射到一块大 小为mbu£size的可读写并允许同其他进程共享数据的内存区,至此已完成了 姗lap的初始化工作。其后的语句是对视频采集功能作了初始化,首先是填充 video衄ap结构体中的变量,随后根据该结构体中的参数设置,通过调用 VIDIOCMCAPⅡ瓜E ioctl来捕捉图像,测试能否将图像帧采集到所映射的缓冲 区,若成功,则表明设备初始化正常,可以开始视频采集了。 3.图像捕捉函数v41劬me grab(): 缸v4l g曲邱吼e(v41-血rice幸Vd)( 严等待前次数据采集完成·/ i珩octl(Vd->fd,VDIOCSYNC,&(vd->Ⅶ姗印.危lIne))<0){ pemr(”V4Lgrab丘锄e:CSYNC”); retI】rn一1; ) memcpy(vd一>pCa砷lrebu£ 产保存视频数据到缓冲区事/ Vd->pF坷nebu&rwd一>mbu£o凰ets[vd->vm瑚印.丘锄e】, vd->丘’amesize); 严捕捉图像·/ if(ioctl(vd》fd,VmIOCMCAPⅡ瓜E,&(vd->v如maD)<o){ pe玎or(”v4】g阳b丘aⅡ1e:CMCAPⅡ瓜EII); retllm一1; ) /.指向下一帧·/ Vd->vInm印.丘amF(vd->vnlInap.觑吼时1)%Vd->mbu£缸哑es; renmn 0; > 本函数是眦ap内存映射方式捕捉视频数据的具体实现,每次采集一帧 YUV420P格式的原始图像数据。在使用双缓冲区轮换采集时,对于每个缓冲区 进行连续帧采集,这通过外加循环控制对摄像头帧缓冲区采集的次数来实现,以 达到提高效率的目的。 4.关闭设备,释放资源 n V4l_close(V4l_deVice+Vd){ munm叩(Vd->pFraInebu丘.er,Vd->r姗apsize); …… //释放其他资源 cloSe(vd一>矗D; re札叨0; ) 47 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 3.2.3实验结果及分析 对视频采集子系统分别采集100帧C巧、QCⅢ、QVGA三种格式的YUV420P 旃N趔 原始视频数据计时分析得到如下实验结果: CIF(352×288) QCIF(176×144) QVGA(320 x 240) 采集帧速率(审s) 6 12 12 数据率(Mbps) 7.299 3.65 11.0592 注:1.上述采集帧速率略去了整数后的小数位; 2.数据率=帧宽×帧高×帧率×象素深度唧420P调色板对应12bi唧i)【e1) PⅪ墟70处理器的USB Host控制器兼容USB 1.1标准,支持低速(1.5Mbps) 和全速(12Mbps)USB设备【。71。由上述实验结果可知,视频采集程序对QVGA格 式的图像采集效率最高,采集速率达11Mbps以上,接近全速模式下的极限速率, 而对Cm和QCIF格式的图像采集效率较低,尤其是QCIF格式下的采集速率距 离USB 1.1全速传输的理论值相差较远,这既与摄像头的硬件特性有关(包括图 像传感器的特性以及DSP桥接芯片对图像格式的处理),也与驱动程序的实现有 关。不过单从采集帧速率上看,12邱s的采集速度已经可以满足一般嵌入式实时 应用的要求。 3.3本章小结 完整的视频采集软件解决方案包括硬件设备驱动程序和视频采集应用软件 两部分。本章在分析USB摄像头驱动程序gspca源码结构的基础上,在gspca 中添加了对新的摄像头的驱动支持,并将gspca驱动程序移植到Liod开发板上; 基于Ⅵde04LiIlu)【编程接口,完成了实时视频采集的应用软件设计,可设置图像 格式为QC巧、CⅢ或QVGA,并对图像采集效率作了优化,采集速度可达12邱s, 能满足一般嵌入式实时应用的要求;采集的是YUv420P原始视频数据,可直接 输入到H.264编码器进行压缩编码。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 第四章基于H.264的视频压缩编码 将采集的视频数据进行压缩编码是通过网络传输实时视频的基础和前提。 H.264标准以其优秀的编码性能和良好的网络适应性,逐渐成为数字视频应用的 主流。本章首先简要介绍了H.264视频编码中的关键技术,分析了H.264编码器 的性能及复杂度,在此基础上,提出了适合于嵌入式系统的面向应用的H.264视 频编码方案,并针对Liod开发平台对编码方案作了改进,最后将开源编码器X2“ 移植到Liod开发板,并对x264进行了代码优化。 4.1 H.264,AVC的关键技术 4.1.1 H.264视频压缩编码标准简介圆 从1948年提出视频数字化概念至今,视频编码压缩技术已经历了50多年的 发展。特别是近10年来,图像编码技术得到了迅速发展和广泛应用,其标志是 多个关于图像编码的国际标准的制定,主要包括国际标准化组织(ISO)和国际电 工委员会(IEC)关于静止图像的编码标准JPEG/JPEG2000,关于活动图像的编码 标准MPEG系列,以及国际电信联盟(InJ)制定的视频编码标准H.26x系列。 H.264/AVC是ITU的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编 码专家组)组成的联合视频组(ⅣD制定的新一代视频编码标准,它既是ITU的 H.264,又是ISO/IEC的MPEG.4的第10部分AvC(AdvallcedⅥdeo Codec,先 进视频编码)。 H.264标准于2003年3月正式发布,其主导思想是基于块的混合编码方法, 与现有的视频编解码标准一致。编解码方法也与H-263和MPEG_4等视频编码标 准类似,主要包括:以宏块作为视频图像的基本处理单位、利用残差的空域冗余 度、通过运动估值和运动补偿利用时域相关性、采用块运动矢量和可分级的量化 等技术。 H.264标准同时运用了大量不同的技术,如统一的VLC符号编码,高精度、 多模式的位移估计,基于4×4块的整数变换,以及分层的编码语法等,使得H.264 算法具有很高的编码效率,在相同的重建图像质量下,不仅比H.263节约50% 左右的比特率,而且加强了对各种信道的适应能力。H.264采用视频编码层ⅣCL) 和网络抽象层(NAL)分层的结构设计,其中视频编码层主要描述要传输的视频数 据所承载的视频内容,而网络抽象层则是考虑不同的网络应用,使得H.264的 码流结构对网络的适应性强,增加了差错恢复能力,能够很好地适应P和无线 49 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 网络的应用。H.264在当前视频编码标准中压缩效率是最高的,并具有良好的网 络适应性,代表了目前图像编码技术的发展水平。 H.2“标准最初分为三个档次:基本档次(BaSeline Profile)、主要档次O订ain P域ro,fi具le体)以应及用扩包展括档次高①清妣DⅥend)e(d】P皿roIf—ileD)V。D和每B个1u档-R次a都y格可式面)向、于有特线定电需视求(的C删应、用卫领 星图像直接广播(DBS)、数字地面电视广播(DTTB)、交互存储媒介(ISM)、多媒 体邮件Qnn压)、基于网络数据包的多媒体服务(MSP№、实时通信服务(]RTC)、 远程图像监视删S)、移动数字电视等。 4.1.2 H.264的结构分析‘删 4.1.2.1编码器的框架 图4.1是H.264编码器的框架结构,其中R表示当前要编码的帧,比表示 帧间编码时的参考帧,仉表示预测残差,P表示预测结果,“瓦表示未经滤波的 重建帧,瓦表示重建帧,x表示量化后的系数。 图4_1Ⅱ.2“编码器 Figure 4-1 H.264 Encoder H.264编码器包括两个数据流通路,一个是产生编码流的前向通路,另一个 是形成参考帧的后向通路(重构的通路)。 ·前向通路: 以宏块为单位来处理输入的编码帧R,并以帧内或帧间方式对每个宏块进行 编码。当帧间编码时,通过nJ来预测,经过运动估计、运动补偿得到预测值P; 当帧内编码时,通过玑来预测,经过帧内预测过程得到预测值P,P与当前帧 形成预测残差现,将仇进行变换、量化、熵编码处理,形成的系数码流经过 NAL层形成最终编码流。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 ·后向通路: 为了进行帧预测编码,编码器需要对每个宏块进行重构以得到可作为下一步 编码预测时的参考帧,主要过程是:对量化后的系数x进行反量化(91j、反变 换(r1)产生一个差分块D_,D_与P相加得到重建块,这样得到未经滤波的重建 帧聪瓦,经过去块效应滤波器得到重建帧瓦。 4.1.2.2分层结构 H.264的算法结构可以分为两层:视频编码层ⅣCL:Ⅵdeo Codil唱Layer)负责 高效的数字视频数据压缩;网络提取层(NAL:Ne铆ork Abs仃action Layer)负责以 网络所要求的恰当的方式对数据进行打包和传送。编码处理的输出是VCL数据 (用位序列来表示编码的视频数据),在传输或存储之前,先映射到NAL单元。 每个NAL单元包含一个原始字节序列载荷RBSP限aw Byte Sequence Payload), 即对应于已编码的视频数据或头信息的一组数据。一个NAL单元序列可表示一 个编码的视频数据序列,并可传输到基于包的网络或比特流传输链路或存储为文 件。这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。H.264 的分层结构如图4.2所示14lJ。 图4.2 H.264/AvC视频编码器结构 Figu冲4_2 stmctIllle of H.264,AVC vid∞encoder 4.1.2.3 H.264的档次与级别 在2003年发布的H.264标准第一版中定义了三个档次(Profile),每个档次支 持特定的编码功能,并规定了对相应编码器和解码器的要求。基本档次(BaSeline ProjEIle)支持帧内和帧间编码(使用I条带和P条带)及自适应上下文变长编码 (CAVLC)的熵编码;主要档次似ain Profile)支持交替视频(泌terlaced、rideo),使用 B条带的帧间编码,使用加权预测的帧间编码,使用基于上下文的算术编码 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (CABAC);扩展档次(E)【t|萌1ded Profile)不支持交替视频或CABAC熵编码,但增 加了一种模式允许有效地交换编码的位流,即SP和SI条带(slice),并采用数据 分割以改进错误恢复机制。基本档次可应用于可视电话、视频会议和无线通信等; 主要档次可应用于电视广播、视频存储;扩展档次在流媒体领域特别有用。但每 个档次有充分的灵活性支持更广范围的应用,因此上述各档次的应用领域并不是 固定不变的。 图4.3说明了H.264标准中三个档次与各自支持的视频编码工具之间的关系。 可见,基本档次是扩展档次的子集,而基本档次与主要档次没有包含关系。 图4_3 H.2“的基本、主要和扩展档次 Figll件4-3 H.264 BaseIine,Main and Extend酣Profil鹤 为了满足日益增长的对高清晰内容的需求,ⅣT在2004年9月对H.264标 准扩展了FRE剐[Fideli够R趾ge E)【tensiolls)编码工具集,包括8×8帧内亮度预测、 8×8整数变换等,由此引入了高级(Hi曲Profile)、HilOP(Hi曲10 Pro丘1e)、 H422P(Hi曲4:2:2 Profile)和H444P(Hi醢4:4:4 Profile)等4个新的档次,可支持更 多位的采样比特深度、更多的色度格式和更高的图像分辨率,并且在不增加编解 码复杂性的情况下,能够提供更高的压缩比和视频质量,主要应用于高清晰领域 m】【43】。4.1.3节将简要介绍图4.3中主要的各档次编码技术及工具。 编解码器在性能上的不同限制是通过定义一组级别(Level)来描述的,每个级 别对采样处理率、图像大小、编码速率和存储要求等编码参数都作了相应的限定。 52 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 在开源编码器)【264中,定义级别(Level)的数值从1~5.1共16个级别,例如在 Level=1b时,对于帧率为15邱s、分辨率为176×144的QC巧源视频进行编码 时,限定了每秒内宏块最大数目为1485个,每帧最多可包含99个宏块,在基本、 扩展和主要档次下的最大视频比特率为128kbit/s【43】m】。 4.1.3 H.264 VcL层核心技术与编码工具嘲 本节结合H.264编码器的框架和图4.3中描述的各个档次,简要介绍H.264 视频编码的关键技术与编码工具。 4.1.3.1宏块和条带 ● 宏块(macroblocks) 宏块是H.264标准中视频压缩编码的基本单位。一个宏块包含视频帧中某16 ×16采样区域的编码数据(16×16亮度采样点,8×8Cb和8×8Cr色度采样点)。 宏块可进一步分割为“块(b10ck)",包括宏块分割、子宏块分割(帧间编码)、16 ×16或4×4亮度样点和相应的色度样点(帧内编码)。 · 条带(sliCeS) 一幅视频图像被编码为一个或多个条带,条带是由整数个宏块组成的,因此 条带中最多可包含的宏块数目为一幅图像中总的宏块数目(即将一帧图像作为一 个条带进行编码的情形)。编码的条带之间是最小的相互独立的单元,这有助于 防止编码数据的错误扩散。同一帧中各个条带所包含的宏块数目不必相同,而且 可以是不同类型的条带。条带共有5种类型,如表4.1。 条带类型 描述 支持的档次 I(帧内) P(预测) B(双向预测) SP(交换P) SI(交换I) 仅包含帧内预测宏块即I宏块 所有档次 包含前向预测宏块即P宏块和/或I宏块 所有档次 包含前向、后向预测宏块即B宏块和/或I宏块 扩展和主档次 包含P和/或I宏块,使编码流之间易于交换 扩展档次 包含一种特殊的帧内编码宏块即SI宏块,使编 扩展档次 码流之间易于交换 表4。l H.264的条带模型 可见,I条带和P条带是最基本的类型,编码预测方式是最基本的帧内预测 和帧间的前向预测,H.264的三个档次都有支持。B条带支持双向预测,参考图 像在时间次序上可以在当前编码的图像之前或之后,这在提高编码效率的同时, 也增加了计算复杂度,只有扩展档次和主档次支持B条带。SP和SI条带是扩展 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 档次特有的,可用于信道速率的改变、视频比特流的切换和码流随机接入等操作, 在时变无线信道上的视频通信和流媒体传输中有广泛的应用前景。 对于基本档次和扩展档次,还支持冗余条带、条带组(slice gmup)和任意条带 顺序AS00缸bi仃a珂S1ice Order),见图4.3。冗余编码的图像由冗余条带组成,它 包含了一个编码图像的一部分或全部冗余表示;在主要图像遭到破坏时(例如发 生传输差错1,解码器可利用接收到的冗余图像的解码数据替换掉损坏的区域。 条带组由一个或多个条带组成,多条带组技术可将图像中的宏块以不同的组织方 式分配到一个或几个条带组中,每个条带组单独传输,若某一条带组在传输中丢 失,使用已接收的其他条带组与其相邻的宏块采样可以进行有效的错误掩盖。任 意条带顺序是指编码图像中的条带可以遵循任何解码顺序。这些特性有利于视频 编码数据流的网络传输与解码。 扩展档次还支持数据分割的条带。一个条带内的编码数据放在三个独立的数 据分区(A,B和C),每个分区包含该条带的一个子集。分区A包含条带头数据和 条带内各个宏块的头数据;分区B包含帧内编码的差值数据和SI条带的宏块; 分区C包含帧间编码宏块的差值数据(前向和双向)。每个分区可放在不同的NAL 单元,因而可以独立地传输。在分区A数据完整时,分区B和C可以独立地解 码,这有利于解码器在网络视频数据丢失或误码时可很灵活地解码。 4.1.3.2帧内预测和帧问预测 帧内预测和帧间预测的目的是消除视频源数据本身的冗余信息。其中,前者 是为了消除视频图像帧的空间冗余,后者是为了消除视频图像序列的时间冗余。 预测又可分为对亮度信号的预测和对色度信号的预测。 ·帧内预测 在H.264中,帧内预测是在变换编码之前进行的,并且运用了多种不同的帧 内预测方法,最大程度地减少图像的空间冗余信息【2】。在帧内预测模式下,依据 先前编码和重建之后的块形成一个预测块,将当前块减去这个预测块,再对差值 进行编码。 对于亮度信号,预测块的大小为4×4块或者16×16块。对于每个4×4的 亮度块,依据块内象素对预测象素点搜索方向及角度的不同,共有0(垂直)、1(水 平)、2(直流)、3(对角线左下)、4(对角线右下)、5(垂直向右)、6(水平向下)、7(垂 直向左)和8(水平向上)等9种可选的预测模式;对于16×16的亮度块,有0(垂 直)、1(水平)、2(直流)和3(平面)等4种可选的预测模式。 对于色度信号,Cb和Cr两个色度模式使用相同的预测模式,以8×8色度 块作为预测块,共有0(垂直)、l(水平)、2(直流)和3(平面)等4种可选预测模式。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 一种特殊的帧内编码模式是I PCM,使得编码器能够不经过预测和变换而直 接传输图像象素值,具有很低的失真度。 ●帧间预测 帧间预测是利用先前已编码帧的图像作为参考图像,对当前图像进行预测的 一种方式。它把参考图像的抽样点通过运动矢量的补偿作为当前图像抽样值的参 考值,以此降低图像的时域相关性,提高数据压缩效率。H.264标准中使用块结 构运动补偿,支持多种块结构的预测,运算精度能精确到1/4像素。 H.2“的帧间预测工具有P条带,对于主要档次和扩展档次还有B条带和加 权预测(见图4.3和4.1.3.1节)。 帧间预测采用树型结构的运动补偿。在帧间预测模式下,每个宏块(16×16 像素)的亮度分量可按图4.4所示的4种方式划分来进行运动补偿。如果选用8 ×8划分模式,宏块中的4个8×8子宏块可以用图4.5所示的另4种方式进一步 划分。这些分块和子宏块大大增加了每个宏块内部的组合数,把宏块划分成不同 尺寸的运动补偿子块就是为了实现树型结构的运动补偿。 16 O 1 钗18 1自田 图4-4宏块分割:16×16,8×16,16×8,8×8 Figu№4-4Macmbl∞k pa确tions:16×16,8×16,16×8,8×8 0 1 2 3 4,圆8螨由随 图4_5子宏块分割:8×8,4×8,8×4,4×4 Figll他4.5 SuKmacllDblock panitiOns:8X8,4×8,8×4,4×4 在H.264编码时,每个分块或者子宏块都产生一个单独的运动矢量。每个运 动矢量都需要编码和传输,同时,分块模式信息需要进行编码并放在压缩比特流 中。选择大的分块尺寸(16×16,8×16,16×8)意味着运动矢量和分块尺寸需要 的比特数很少,但另一方面可能使运动补偿残差数据的信息量增大。选择一个小 的分块尺寸(8×4,4x4等)可以减小运动补偿之后残差数据的大小,但需要更多 的比特表示运动矢量和模式选择信息。所以分块尺寸的选择对数据压缩性能有很 大的影响。通常,大的分块尺寸适合于图像帧中变化平缓的区域,而小的分块尺 55 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 寸对细节区域比较有效。 4.1.3.3整数变换与量化 视频编码中的编码变换是将图像或运动补偿后的残差图像数据转换到变换 域中,这一过程并不损失任何信息,仅是换了一种形式来表达同样的信息。量化 是将变换域中的信息离散化,以去除次要信息,并为下一步数据压缩编码作好准 备【451。 ·整数变换 目前图像和视频压缩所普遍采用的变换大致可分为两类:块变换和图像变 换。常见的块变换包括K-L变换、SvD和长盛不衰的DCT变换闱,其处理单位 为N×N的图像块或残差图像块,优点在于占用内存小,适用于分块运动补偿后 的残差图像;缺点在于存在块状效应。基于图像的变换则对整幅图像或其中的一 大部分进行操作,比较常用的有离散小波变换,它克服了静态图像压缩中的块效 应,但对内存的要求较高。 H.264根据要编码的残差数据类型使用三种变换:帧内预测宏块(16×16)中, 亮度DC系数的4×4矩阵使用哈达玛变换(Hada蚴rd缸a11sf0衄);对在任何宏块 的2×2的DC系数的色度分量使用哈达玛变换;对其他残差数据中的4×4块使 用基于DCT的整数变换,变换的核心运算部分只用到加法和移位,不需要乘除 运算,另外压缩增益也由于帧内像素块间的预测而得到改善,更小的块尺寸减少 了方块效应。 ·量化 H.264使用一个尺度量化器,其量化步长有52级,使用时通过QP值索引, 如表4-2所示。QP值每增加6,对应的量化步长QSt印就加倍。随着QP增大, 图像的信噪比几乎成线性下降【2】,因此H.264采用较大的量化步长范围,可使编 码器能够精确且灵活地在传输比特率和图像质量之间获得折中和平衡。 QP 0 1 2 6 12 18 24 Qst印 O.625 O.6875 O.8125 1.25 2.5 5 10 QP 30 36 42 48 51 Qstep 20 40 80 160 224 表4.2 H.264编解码器的量化步长 为了使解码器能够还原经过压缩编码的视频信息,必须保证编码变换和量化 的过程都是可逆的。在H.2“编码器中,也有与解码器中一样的反量化和整数反 变换的过程(见图4—1),这是为了让编码器根据解码后的像素值产生预测,以保 证编码器和解码器使用相同的预测值,从而避免累积误差。从输入残差块X到 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 输出残差块X’的整个变似量化和反量化/反交换的过程如图4.6。 输出块 r 图4.6变换、量化、反量化和反变换流程图 F噜u弛4-6 T}ansform,quaⅡtisation,r鹪cale and inVe璐e仃ansform now diagram 由于H.264采用的是块变换,为了减少由块效应所引起的失真,引入了基于 内容的抗块效应滤波器。在编码端,进行反变换之后,再应用去块效应滤波器(在 重建和存储宏块用于将来预测之前,见图4.1);在解码端,在重建和显示之前, 应用去块效应滤波器。 4.1.3.4重排序与零编码 量化后的变换系数在存储和传输之前需要尽可能紧凑的编码。在基于变换的 图像或视频的编码器中,量化器的输出是一个包含少数非零系数和大量零系数的 稀疏矩阵。在熵编码前,必须对系数进行重排序(把非零系数集中起来),并对零 系数进行有效的表示。 H.264使用了基于DCT的整数变换编码,量化后得到的系数主要集中分布在 DC(O,O)系数附近的低频区域。在编码器端,对于每个4×4变换量化系数块,按 照Zigzag扫描顺序被映射成一个16个元素的数组(如图4.7);对于帧内编码的 16×16宏块,每个4×4亮度块的左上角的DC系数首先被扫描,这些DC系数 形成了一个4×4的矩阵,然后按照图4.7的顺序进行扫描。这使得每个亮度块 剩下15个AC系数,并按照图4.7的顺序从第二个位置开始进行扫描;同样, 每个色度分量的2×2直流系数首先按光栅顺序进行扫描,然后每个4×4色度块 的15个AC系数从第二个位置开始进行扫描。 开始 图4.7 4×4亮度块的z扫描 Figll聆4.7 zig一髓g scan for 4×4 luma block 57 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 重排序过程的输出是一个数组,一般在数组的开始包含一个或多个非零系 数,其后跟着一串零系数。大量的零系数可通过游程编码的方式紧凑地表示。在 二维游程编码中,使用一系列的(m,1evel)对表示数组,其中run表示非零系数 前的零的个数,1evel表示非零系数的大小。在三维nm-1eVel编码中,采用(啦!evel, l删向量序列表示数组,其中last为1时表明非零系数的结束。 4.1.3.5熵编码 熵编码①ntropy encodillg)是根据消息出现的概率分布特性来对随机信息进行 编码的一种无损数据压缩技术,信息熵是数据压缩的理论极限【471。在视频压缩 编码中,熵编码用于将描述视频流的一串符号编码成适合于传输或存储的压缩比 特流,它是在完成对图像数据的变换编码和量化之后进行的(见图4.1)。 常用的熵编码方法有变长编码VLCⅣ撕able Lcngth Coding)和算术编码。视 频压缩中,最常见的变长编码方法是哈夫曼编码(Hu筋1a11 codiIlg)。两种熵编码 方法各有优劣:算术编码相比变长编码有更好的压缩性能,更能逼近待编码信源 的熵值,且容易适应信号统计特性的变化,但编码过程更为复杂,运算量更大【481。 针对早期的使用固定VLC码表的熵编码技术不能自适应地匹配图像内容的 改变和充分利用编码符号之间相关性的缺点,H.264标准中提出了基于上下文的 自适应变长编码CAVLC(Context-baLsed A(klptive、嘶able Length Codillg)和基于上 下文的自适应二进制算术编码CABAC(ConteXt-baSed Adaptive Bina巧Arj也如e埴c Cod洫g)。它们充分考虑和利用了视频流的上下文信息,利用已编码符号为待编 码符号选择合适的上下文模型,上下文模型提供了对当前待编码符号的概率估 计,利用这些信息可以进一步消除编码符号之间的相关性,提高编码效率。由于 这种选择是在编码的过程中实时进行的,因而能够自适应视频流的实际统计信 息,以保证选择的上下文模型能够匹配视频流的实际统计特性。 H.264标准中的CAVLC和CABAC两种熵编码方式有其各自的特点及应用 领域。CAVLC用于对变换系数的编解码,它是根据量化变换系数值的大小来自 适应地选择对系数编码所采用的变长编码表,由于变长编码表的设计是基于相应 的统计条件,所以其性能要优于使用单一变长编码表,与H.263的变长编码VLC 相比能提高5%的压缩率。CABAC是新型的熵编码的压缩方法,其设计是基于 二进制转换、上下文建模和二进制算术编码这些重要元素,更有效地降低了码率, 可比C趟凡C提高32%的压缩率【2J,但CABAC具有更高的计算复杂度,会明显 降低编码速度,不适合于对实时性有较高要求的场合,更是对嵌入式实时应用的 巨大挑战。在H.264标准中,主要档次支持CAVLC和CABAC两种熵编码方式, 基本档次和扩展档次只支持CAVLC熵编码方式(见图4.3)。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 4.1.3.6率失真优化(RDO)技术 1948年,香农(Shannon)首次提出了信息率失真函数的概念,并在1959年进 一步确立了率失真理论,从而奠定了信源编码的理论基础。信源编码器的操作控 制是视频压缩的关键问题。率失真理论指出,能在限定失真条件下比特数最少的 编码即为最佳编码【491。问题的复杂性在于:图像的不同部分的内容和运动变化 很大,带来的率失真变化也很大,需要选择不同的编码选项和参数,如宏块模式、 运动矢量和变换系数等级,它们决定了编码器所产生的比特流的率失真效率。编 码控制的任务就是决定一套编码参数和比特流,使编码器能够输出在限定失真下 为恢复视频信源信息所必须的信息率。 H.264编码过程中面临着众多档次(profile)、级别(1evel)和其他的模式选择过 程,比如宏块的预测模式选择、帧内编码中4×4块的9种方向选择、帧间编码 中7种分块模式的选择等。为了从中选择最优的编码方案,H.264中采用了基于 拉格朗日优化算法的率失真最优化RDOme.diStonion Optimiza_tion)技术,很好 地在编码图像质量即失真度、码率之间进行了权衡,以在给定的允许失真条件下, 获取最大的视频数据压缩率。关于RDO的原理可以参考文酬491,在H.264中, 宏块运动预测的失真取决于取样差分平方和SSD(s啪of Squared Di彘rences)或 取样差分绝对值之和SAD(Sum of A-bsolute Di舵rences),根据SSD或SAD,调 整拉格朗日参数,计算并选择宏块划分及预测模式,以在失真度和码率之间进行 权衡【501。 4.1.4 H.264编码器性能及复杂度分析阿1醐 H.264厂AⅣC的视频编码层采用的许多新技术融合在一起,使编码效率得以显 著提高。在同样的视频码率下,H.264/斛C可以获得比以往任何一个视频编码标 准更高的PSNR值和更好的视觉质量【531。相关研究表明,H.264基本档次在保证 同等视频质量的前提下,比H.263 CHC档次平均节省大约38%的码率,比H.263 基本档次节省大约41%的码率,比MPEG.4简单档次节省大约29%的码率。可 见,H.264的压缩性能相当优秀。 对H.264编码器性能提升有主要贡献的新技术包括: · 灵活多样的宏块划分和搜索模式,提高了运动补偿的精度,有效地节省 比特流。实验指出,相对于仅使用16×16块,使用全部7种分块模式可以节省 平均约12.5%的比特:而只用8×8及更大的分块模式可节省平均约11%的比特。 · H.264标准支持CAVLC和CABAC两种熵编码方式,CAVLC计算简便, CABAC效率更高。实验结果表明,在使用全部7种分块模式,1/4像素精度运 59 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 动补偿的情况下,CABAC比C肌C可节省平均约5%的比特;对较高分辨率视 频序列编码时,CABAC能节省更多的比特。 · H.264标准支持多参考帧预测,对于大多数序列,可节省5%的比特;对 于运动变化较大的序列,节省的比特率可达20%。 · 1/4像素精度的运动估计使得预测更加准确,预测误差更小,在高分辨率 视频的情况,使用亚像素精度比使用整数像素精度节省约20%的比特率。 · 使用环路滤波器,在提高P洲己的同时,改进了视频图像主观质量。 · B帧的应用减小了预测误差,可节省比特率约10%。 · 率失真优化策略RDO的引入使得图像的PSNR提高近0.35饵,同时比 特率也下降了9%左右。 H.264标准通过使用上述新技术获得高性能编码的同时,代价是增加了编码 器的复杂度。H.264基本档次的复杂度是MPEG.2的4倍,大约是MPEG.4简 单档次的2倍,是H.263的2.5倍。H.264编码器的高复杂度主要来源于两个方 面,一是计算量大,二是编码选项复杂。 为在限定失真条件下获得最佳压缩效率,对于帧内、帧间预测的宏块划分和 搜索模式的各种组合的选择,需要计算上百个不同模式的率失真比较,搜索模式 的增加使得复杂度呈线性增长,大约每增加一种模式复杂度增加2.5%。H.264 运动估计的搜索范围可扩大到8~64,搜索精度可到1/4和1/8精度亚像素点, 进一步增加了编码的计算量和复杂度。H.264最多可支持16个参考帧,对于每 种模式下的子块都要在每个参考帧内进行运动估计,因此每增加一个参考帧,其 复杂度会线性增长。H.264采用率失真优化进行运动估计和模式选择,涉及到 SAD和SSD的计算以及码率R的估计和计算,最后还要对最优模式重新编码, 这一判决过程带来了大量的中间重复计算,当使用一个参考帧16×16宏块进行 运动补偿时,率失真优化使得复杂度提高约40%【51】。同时,H.264编码器中的哈 达马变换、新增的环路滤波、更细化的量化级别以及更多层次的vLC码表等一 系列新特性,一方面大幅提高了编码性能,另一方面也大大增加了H.264的编码 复杂度。 编码选项的复杂性是指H.264编码的选项设置众多。由于H.264/|AVC标准 只对解码器的实现有详细说明,而对编码器中的许多模块仅给出了符合解码器规 范的要求,并没有对实现细节作出具体的规定,对各种档次的H.264编解码器 只是规定了不能包括的内容,而并没有规定必须实现的内容,使得H.264编码器 的复杂度难以估计。例如各种档次的编码器都必须考虑如下选项【36】【52】: ·是否采用多参考帧,采用几个参考帧; ·宏块划分模式的选择,应采用哪几种划分模式; 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 ·是否采用哈达马变换; ·是否使用环路滤波,滤波参数如何设置等。 另外,各种档次编码器本身也有众多特殊的配置选项,对于编码性能和编码 速度都各有利弊。 可见,编码的压缩效率和计算复杂度始终是一对矛盾。对于不同的视频图像 序列,应选择不同的编码工具和编码参数,综合考虑压缩比、PSNR和编解码器 复杂度,以获得最佳的编码效果。在4.2.2节中,将结合本节的讨论以及对标准 视频序列的编码实验,提出一套针对Liod开发平台优化的嵌入式H.264视频编 码方案。 4.2嵌入式系统的H.264视频编码方案 4.2.1 H.264视频编码方案的选择 H.264标准引入了一系列新的视频压缩编码关键技术来有效地提升编码效 率,但同时也加大了编码计算的复杂度。对于嵌入式设备来说,其系统资源尤其 是内存资源相对有限,而且受嵌入式微处理器的主频限制,其运算处理速度有限, 因而高复杂度的视频编解码计算成了H.264在嵌入式视频应用中的主要制约因 素。因此,对在嵌入式设备上实现大运算量、高复杂度的H.264视频压缩编码的 研究极具挑战性。 目前,基于H.264的嵌入式视频编解码及实时传输主要有ASIC、FPGA等硬 件解决方案和“DsP+MCU”、高性能单片嵌入式处理器等软件解决方案。硬件解 决方案虽然有高效率、高可靠性等优点,但开发成本较高,设计周期较长,灵活 性较差,目前市场上尚无支持H.2“所有特性的全功能芯片,多数仅在限定的视 频图像的分辨率下支持基本档次或主要档次,如果需要进行功能扩展则只能设计 新的芯片。基于“DSP+MCU”的系统编解码速度快,但成本较高,功耗较大;于 是出现了将DSP和McU集成到单个芯片上的高性能处理器。采用高性能单片 嵌入式处理器来实现软件编解码和系统智能化控制,则有低成本、低功耗、功能 扩展灵活、系统易维护和升级等优点,若结合实际应用,并根据处理器的硬件体 系结构对软件进行优化,同样可实现高效的运算。 当前,单片嵌入式处理器的解决方案主要有基于CPU与DsP的双核处理器 和基于CPU加多媒体协处理器两种【5】: 1.基于CPU与DSP的双核的实现【54】 OMA这P的一架方案构的一代般表为产删品核以美和国一德个州C仪55器x的公司DS(PT。D的AORMMA核P系心列负处责理操器为 作主系流统,的 6l 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 运行和一些控制任务;C55x的DSP具有高度的并行性和双流水线设计以及MAC 运的运算算,能如力音,视具频有的每个编周解期码处等理。两主个控指令CP的U即能删力,核负通责过处耵理定一义些数的字通处用理接密口集与型 DSP进行数据交互。 2.基于CPU与多媒体协处理器的实现 集、这分一支方预案以测英、特流尔水(I线Il、te存l)公储司系的统XS、ca多le媒P体Ⅺ应墟用7x系 这列 5个为方主面流对,删从v工5进艺行、了指改令 进与优化,最高主频可达624M电,并使用无线SpeedStep节能技术,使其功耗 根据主频动态调整。XScale微架构共有三条流水线,PⅪ屹7x处理器集成的采用 whless MMX技术的多媒体协处理器单元共有四条流水线,具有64位寄存器, 以及专门为视频处理而设计的多媒体Sm皿处理指令,大大提升了处理器的多媒 体处理能力【3】。同时,xScale PⅪ墟7x拥有32位的数据和指令Cache结构,有 效地降低了高速缓存失效(caChe血sS)的发生。2006年底,收购了Intel移动通讯 芯片业务的MarveU公司推出了基于第三代xScale核微架构的新一代应用处理器 Marven PXA3x)【系列0以。玎abans),其中PⅪ蝎20主频可高达800Ⅻz,基于低功 耗90nm处理技术,支持32-bit DDR内存,采用第二代Intel无线Mc、正x多媒体 加速技术,进一步增强了处理器的多媒体处理能力【551。 本文在基于XScale PⅪ墟7x高性能处理器的Liod开发平台上,采用软件方 法实现H.264的视频压缩编码。 目前,H.264的开源解码器软件主要有:德国删I研究所负责开发的H.264 官方测试软件蹦,由网上自由组织联合开发的兼容264标准码流的编码器X264, 以及中国视频编码自由组织联合开发的1r264等。其中,JM作为官方校验模型, 特点是结构完整,对H.264的各种新特性有较全面的支持,但也因此造成程序结 构冗长,忽略了编码复杂度,导致编解码速度慢,实用性差,适合作理论研究; T264对H.264的特性支持单一,编码器可输出标准的264码流,解码器只能解 T264编码器生成的码流,目前该项目已经停止更新。 相比之下,)【264注重实用,在不明显降低编码性能的前提下,努力降低编码 的计算复杂度,摒弃了H.264标准中一些对编码性能贡献微小但计算复杂度极高 的新特性,如任意条带顺序ASO、冗余条带、数据分割等。从整体性能上与JM 相比,在PSNR相同、比特率相差不到5%的情况下,x264的编码速度比JM快 50倍【56】,是除JM外的开源编码器中第一个支持H.264高级档次(Hi曲Profile)的 编码科57】;根据2007年度MPEG.4 Avc/H.264视频编解码器比较测试报告【581, 】【264在视频会议、影视、高清电视(】缸)Ⅳ)等各应用领域在编码质量和速度上都 处于领先地位,其性能高于部分商业级H.264编码器。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 综合比较后,本文选用X264作为本系统的软件编码器。针对Liod开发平台, 对X264编码方案进行改进,并对X264进行代码优化,以达到对采集到的视频数 据实时编码的要求。 4.2.2 H.264视频编码方案的优化 根据4.1节中对H.264编码标准中核心技术的分析和编码性能及复杂度分析, H.264以提高计算复杂度为代价来提高视频编码的压缩效率。为适应各种应用需 求,H.264设定了不同的档次和级别,并提供多种编码工具和编码选项,可灵活 组合以得到最佳的编码方案。对于数据处理能力和资源有限的嵌入式系统中的实 时应用,在选择编码方案时,应在保证视频图像主观质量、且码率与网络带宽相 适应的前提下,尽可能地提高编码器的编码速度。 针对视频会议、可视电话和视频监控应用中图像背景基本固定、运动前景物 体较少、场景相对稳定、鲜有剧烈变化等特点,本节选用QCIF格式、长度为150 帧的Foreman标准测试序列进行实验。PC机测试平台的硬件配置为主频1.6GHz 的AMD Senlpron(缸n)2800+处理器、768MB内存;软件平台为Fedora 6操作系 统,编码器版本为X264 v0.57.714。在编码实验时,考虑到视频采集速度、嵌入 式平台多媒体处理能力、网络有效传输带宽以及实际应用的视频场景特点,设置 输出视频帧率为15邱s。通过实验选择出一套面向应用的优化的】【264编码方案, 包括编码档次、比特率控制、熵编码方式、运动估计与搜索范围、亚像素插值精 度、多参考帧、宏块划分模式的选择等。 1.编码器档次 H.264标准定义了基本档次、主要档次、扩展档次、高级档次等以适应不同 的应用场合。其中,基本档次复杂度最低,适合于视频电话等实时性要求较高的 场合,3GPP提出的MBMS(Mmtimedia BroadcaSt/MulticaSt Service)也支持该档次 【59】;主要档次和高级档次分别适合于电视广播、视频存储和高清视频,复杂度 较高,压缩编码速度较慢;扩展档次引入了适合于流媒体应用的新特性,但与基 本档次相比,复杂度较高,编码效率并无明显改善,目前尚无应用实例【59】。 )【264支持基本档次、主要档次和高级档次的大部分特性和编码工具,不支持 扩展档次,同时也摒弃了H.264标准中一些对编码性能贡献微小但计算复杂度极 高的特性,例如冗余条带【删【611、在基本档次内但在主要档次之外的特性如条带 组和任意条带顺序等。X264根据接收的参数来选择使用不同档次的编码工具, 对应于源代码encoder/set.c中的X264 sps init()函数,例如若使用CABAC熵编 码0aram.>b.cabac)或B帧/条带(param.>i b丘锄e),则采用主要档次。在)【264.c 的maill()开始部分调用common/common.c的】(264 par锄.defalllt()函数,设定了 基于n2“的嵌^式实时视频采集与侍输系统的设计与实现 华东师≈大学碗±论文 一系列缺省的选项和参数值。缺省情况下,x264开启cABAc熵编码,不使用B 条带,也不在自适应尺寸块变换中使用8×8DcT变换,因此默认采用H 264主 要档次对视频数据进行压缩编码。 表4—3列出了对OcIF格式的ForemaIl标准测试序列使用不同档次编码工具 的实验结果,使用选项”一审s 15一biⅡate 128”设置帧率为15fps,平均码率为 28kbn旭。 编码档次 基本档次 编码选项 一.no—cabac 平均PsNR(dB) 38 210 编码帧速率(审s) 136 66 平均码率∞ps) 128 04 主要档次 38 470 12811 127 36 高级档次 ~8x8dct 38 592 124 64 12815 注:编码帧速率会在±10%范围内变动,表中取的是接近平均的某次实验结果。 表年3基本档次,主要档扶和高级档次对Foreman序列测试结果 图4—8为使用mplayef播放器对上述实验中不同档次编码的视频在图像主观 质量上的对比。 (a)基本档次 (b)主要档次 (c)商级档次 豫4{基本档次、主要档次和高级档次编码图像质量对比(第25帧1 Fig”re 4—8c01p8nsoⅡ0fcoded pictures删“gBaselinePr0瑚etMaiⅡP∞脚ⅢdHigh Profnc f250打amd 上述实验结果表明,对于QcIF格式的ForemaⅡ序列,在设定平均码率128bps 的条件下,基本档次、主要档次和高级档次的编码图像的平均PsNR相差仅 0 l ̄o 4dB,图像在主观质量上几乎没有分别,而在编码速度上,基本档次比主 要档次和高级档次分别高出6%和10%左右。园此,本方案采用基本档次,仅使 用cAvLc熵编码方式。在后续实验中,都使用”.-no。cabac”选项限定为基本档次。 2.码率控制 在使用x264进行压缩编码时,必须指定码宰控制选项和参数。对于一次编 码模式(one—pass mode),H2“有四种码率控制方式可供选择,分别是平均码率 ABR(mefage Bi口me)、恒定码率cBR(cons诅nt Bi啪把)、恒定量化步长 cQP(constant QuaI】tizeD和恒定码率园子cRF(constajlt R乩e.Factor)削。x264支 持上述ABR、cQP和cRF三种方式.可通过命令行选项和参数来指定其中一种。 基fH 264的嵌^式宴时视频采集与传输系统的设计与实现 *东师范大学硕士论文 下面分SⅡ对这三种码率控制方式对Foremall序列编码钡4试,比较得出合适的码率 控制方案。 (1)ABR码率控制方式 设定平均码率(kbps) 平均PsNR(d聊 编码帧速率唧s) 平均码率(kbp砷 ABR=64 34 515 148 45 61.96 ABR=128 38 2lO 136 66 128 04 ABR=192 40 444 130 51 194 37 编码选项 一审s15-坷ⅡaleABR一Ⅱo—cabac(ABR的值见表第一列) 表44不同平均码率下对QclF格式Fo㈣Ⅱ序列的编码效果 图4—9为在不同平均码率下编码的图像丰观看量的对比。 图4母不同平均码率下编码的图像对比 Figu他4-9Comp4吨0nof coded pictures㈣“g dine叶Ⅱt a㈣gebi口ak 上述实验结果表明,编码比特率对图像质量影响较大。在平均码率为64kbDs 时,比128kb口s情况下虽然编码速度提高了8%左右.但平均PsNR下降了近4dB, 从图像主观质量对比茇现,64kb口s的人物轮廓明显模糊,细节表现能力较差。 码率为192kbDs时,比128kbps情况下编码速度减慢近5%,不过平均PsNR提 高约2dB,对细节的表现更为细腻,例如人物背景中的天花板阴影,但对画面主 体fofeman的表现在主观上并无明显增强。 从网络传输的角度考虑,对于Ⅱemet或局域网等有线网络,在网络条件较 好的情况下,可实时传输码率为192kb口s以上的视频流。对于无线网络,根据 InJ(国际电信联盟)提出的3G(第三代移动通信系统)标准ⅢJ,网络的上行数据速 率在车载移动隋况下为144kbps,在步行情况下为384kbps,而实际运营的30网 络往往难以达到最初设计时的理论传输速率(例如柴wcDMA网络的实际上行速 率约200kb口s),信道带宽有限,易受干扰。在基于3G网络的多媒体通信系统如 IMs(IP Muldmedia snbsynem)中,视频和语音数据都可通过分组交换(Ps, packel-switched)信道来传输”…,实际传输的数据中还含有10%~12%的RTP几P 数据报头,因此必须严格控制视频数据的比特率,以适应网络带宽。 基于H2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 综合不同平均码率下的编码性能以及网络传输能力的考虑,对于QC邛格式 运动平缓的视频序列,编码输出帧率为15邱s时,设置平均码率为128kbps是比 较合适的选择。 (2)CQP码率控制方式 CQP通过设定QP的值来采用对应的恒定的量化步长对变换系数进行量化, 达到控制码率的目的。X264在缺省情况下QP=26,对应量化步长为13,QP每 增加6,对应的量化步长就加倍。表4.5的实验结果反映了采用不同量化步长时 的编码效果。 设定QP值 QP=20 平均PSNR(dB) 40.158 编码帧速率(邱s) 134.82 平均码率(kbps) 282.06 QP=26 38.210 136.66 128.04 QP=32 编码选项 34.322 161.80 59.75 一邱s 1 5一qp QP—no.cabac(QP的值见表第一列) 表4.5不同QP值下对QCIF格式Fo他man序列的编码效果 上述实验结果表明,量化步长越大,则量化过程中丢失的信息越多,编码速 度越快,编码比特率越低,重建图像帧的质量也越差。在QP=26的缺省情况下, 与平均码率为128KbⅣs的ABR方式的效果等同,可以在图像质量和码率较好的 平衡。 (3)CRF码率控制方式 在)【264的三种码率控制方式中,ABR方式是为了获取恒定比特率的码流或 特定的压缩文件尺寸,CQP方式是为了固定量化步长,CRF方式则是为了获得 特定的图像”质量(qualit),)”【641。CI江方式会根据图像帧来调节量化步长,以达到 在特定水平维持图像主观质量的前提下,尽量提高压缩效率。例如对于高速运动 的场景,图像帧中的细节较难察觉,CI心方式通过增加量化步长来丢弃次要信 息。X264通过选项”一crf N’来指定CRF码率控制方式,其中N是与QP相对应 的名义上的值。表4.6的实验结果反映了不同CRF参数下的编码效果。 平均P渊dB) 设定CRF参数值 编码帧速率(审s) 平均码率(kbps) N=20 40.158 133.25 184.97 N=23 38.081 136.65 123.43 N=26 36.001 139.16 85.56 编码选项 一邱s 15一c仃N--n0一cabac(参数值N见表第一列) 表4.6 cRF码率控制方式下对QCⅢ格式Fo弛man序列的编码效果 可见,对于特定的图像“质量”,CI强是非常有效的码率控制方式。在QRF 参数为20时,。与CQP方式下QP=20时的情况相比,平均P伽己与编码速度相 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 当,而码率却降低了近35%;CI疆参数为23时,与ABR方式下比特率为128kbps 的情况相比,编码速度相当,平均P卧浓和平均码率略低,可通过调节参数N 的值来获得更好的效果。 从提高视频网络传输的实时性和降低传输错误率考虑,压缩视频码率受到网 络带宽和拥塞程度的限制;从图像压缩质量考虑,压缩码率越大,图像质量越高。 在压缩编码的输出视频帧率恒定时,压缩效率与图像质量成反比。对实时采集的 视频数据进行压缩编码时,输出视频帧率应与图像采集速率相匹配,以保证解码 时能真实的重现视频场景。因此,在实时视频通信系统中,要综合考虑通信网络 的传输能力、图像质量、解码端视频场景恢复等因素,合理选择码率控制方式。 综合比较,ABR方式可将视频码率控制在一个给定的水平,以适应网络带宽, 但对于不同的图像采集速度及格式(QCⅢ或CIF等),应调整平均码率的大小, 以维持图像压缩质量。CQP方式采用恒定的量化步长,可维持图像压缩质量在 一个特定的水平,但必须限制视频图像格式与采集速度,以避免输出码率显著变 化,从而适应网络带宽。CRF方式可维持图像的主观质量不变,但与CQP类似, 其输出码率受到图像格式与采集速度的影响。可见三种码率控制方式各有其特 点,应根据不同的视频应用场合,选择合适的码率控制方式。对于运动平缓的 QCIF格式ForemaIl序列,在设定输出帧速率为15邱s时,采用ABRjl28Kb甜S、 CQP=26或CI江参数值为23时的编码效果基本一致。为统一起见,在后续的编 码方案讨论中,选用ABR方式来进行码率控制。 3.运动估计与运动补偿 运动估计与运动补偿是视频压缩编码中非常重要的一环,良好的运动估计与 补偿可以在保证图像质量的前提下获得很高的压缩比。H.2“标准采用基于宏块 的运动估计与补偿,宏块的运动估计是在参考帧心J中搜索与当前帧瓦中的宏 块最佳匹配块的过程(图4.1),最佳匹配块是在参考帧中一定搜索范围内与当前 宏块相减所得残差块能量最小的比较块;运动补偿是将最佳匹配块作为当前块的 预测块P,并计算与当前块的差值得出预测残差队的过程。对预测残差D以进行 整数变换、量化并熵编码后即为编码器VCL层的码流输出。 运动估计有多种预测模式,采用了多参考帧技术,因而亦是H.264编码器中 最为复杂和耗时的部分。为最有效地进行运动估计与补偿,应根据视频源数据的 特点选择合适的搜索模式、搜索范围、亚像素插值精度、参考帧数量以及宏块划 分模式等。 (1)搜索模式 x264提供了四种整数像素的运动估计搜索方法[56】删:D认(di锄ond)、 HeXmexagon)、UMH(uneven In试ti_heX)和ESA(successive elim.mation exhal】stive 67 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 search),缺省情况下采用眦X模式。表4.7的实验结果反映了对QC皿格式的 Foremall序列在不同搜索模式下运动估计的编码效果。 设定搜索模式№M 平均PSNR(dB) 编码帧速率(邱s) 平均码率@bps) M匝M=”dia’’ 38.143 142.70 127.52 MEM=’,hex” M匣M=”unl”’ MEM=”esa,’ 38.210 38.273 38.257 136.06 112.87 58.08 128.04 128.08 127.9l 编码选项:一印s 15一bitrate 128一no-∞bac—me MEM(搜索模式MEM见表第一列) 表4.7 QCⅢ格式Fo陀maⅡ序列在各搜索模式下运动估计的编码效果 可见,对于QC巧格式视频序列的低码率视频编码,最有效的块搜索模式是 D认,与IMH方式相比,仅损失0.13dB的平均PSNR,在图像质量相当的情况 下,编码速度提高了26%以上,很适合实时应用,本方案选择DIA搜索模式进 行运动估计。 (2)搜索范围 在运动估计时,对于HEx和DIA搜索模式,可以在4~16像素范围内搜索 最佳匹配块,x264中缺省的搜索范围是16。搜索范围越大,计算量也越大。表 4.8反映了采用Dn搜索方式时不同搜索范围下对Foreman序列的编码效果。 设定搜索范围敞 平均P伽ⅥdB) 编码帧速率(审s) 平均码率∞ps) MR=4 38.033 142.16 127.82 MR=8 38.163 141.88 127.97 MR=16 38.143 141.76 127.52 编码选项:一fps 15_bitrate 128一no-翰bac—me‘‘dia”一merange MR(MR值如表第一列) 表4-8 Qc职格式Foreman序列在不同搜索范围下运动估计的编码效果 上述实验结果表明,对于低分辨率视频图像在低码率下的压缩编码,宏块搜 索范围的变化对编码效率的影响甚微。本方案设定搜索范围为8,以获得稍高的 平均PSNR和适中的编码速度。 (3)亚像素运动补偿 视频场景中的运动块往往不是以整数个像素为单位发生位移的,在很多情况 下,利用插值后的像素位置进行预测将提高运动补偿的精度【401。亚像素(Sub.pixel) 运动估计和补偿的插值过程先是通过6抽头的滤波器来获得半像素精度,再用线 性滤波器来获得1/4像素精度,对于4:2:O采样的视频数据,色度的运动精度就 达到1/8像素,搜索时在所有半像素和整数像素位置上寻找最佳匹配块,以匹配 位置的半像素或整数像素样本值作为预测块。 对于)【264编码器,可通过”-.subme幻1teger>”选项来控制亚像素插值精度和 基于H 2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕±论立 质量,可取值1~7,缺省设置为5,不同数值的具体含义如下: · 1:用全像素块动态搜索,对每个块再用快速模式进行1/4像素块精确搜索 ·2:用半像素块动态搜索,对每个块再用快速模式进行1/4像素块精确搜索 ●3:用半像素块动态搜索,对每个块再用质量模式进行1H像素块精确搜索 ●4:用快速模式进行l,4像素块精确搜索 ·5:用质量模式进行1,4像素块精确搜索 ●6:进行I、P帧像素块的率失真最优化fRDO) ●7:进行I、P帧运动矢量及内部的率失真最优化(质量最好) 表4—9反映了不同的亚象素插值精度和质量下对Fo嘣mn序列的编码效果 亚像素插值LEvEL 平均PSNRfdBl 编码帧速率(审s) 平均码率@bps) LEVEL=l 37 596 274 20 12715 LEVEL=2 LEVEL=3 37 873 37 992 23204 224 88 126 95 127 31 LEVEL=4 38 096 183 55 127 60 编码LE选V项E:L=--5fpsls--bnnnl3288-1-6n3o-cab蛊cHme“d1i41a’88,删Dgc 127 97 8一submeLEvEL 表4.9 Qc邛格式Foreman序列在不同亚象素插值下运动估计的编码效果 上述实验结果表明,随着亚像素搜索精度和质量的提高,运动补偿的精确度 越高,表现在平均PsNR随之增大;但计算复杂度也随之迅速升高,表现在编码 帧速率随之急剧下降,可见亚像素插值对编码嚣性能的影响至关重要。在..subme 选项参数LEvEL=1时,与LEvEL=5相比,平均PsNR下降了0 568dB(约1 5%), 但编码速度却提升了90%以上。图4—10是两者在图像主观质量上的对比。可见, 对于低分辨率视频图像在压缩编码时,提高亚象素搜索精度和质量对图像压缩质 量的提高并不明显,降低亚象素搜索精度和质量则能在保证编码质量的前提下, 使编码速度大幅提升。本方案选择亚象素运动估计LEvEL=1。 plctu瑚be御e洲ubme 图4—10__s曲me LEvEL(=1,5)编码的图像质量对比 Figure 4-10 comparison of coded LEⅦL(11,卸 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 (4)多参考帧选择 在H.264的编码端和解码端,以前编码的图像被存储在一个参考缓存器 DPB∞ecoded Picture B硼㈨中,用于生成一个参考图像列表,最多可支持16个 参考帧,并有长期参考帧(10ng tem reference pictures)和短期参考帧(short teIm reference pictllres)切换机制,允许P帧使用多参考帧进行帧间编码宏块的运动补 偿预测m】。多参考帧预测技术将运动估计的搜索范围扩展为多个参考帧,试图 找到更精确的匹配宏块,有助于提高压缩效率,但同时也增加了计算复杂度。多 参考帧技术对计算能力和缓存空间的要求较高,这对于处理器主频和内存空间受 限的嵌入式系统来说非常不利。 通过对QCIF格式的Foreman序列采用1~3个参考帧进行编码测试的结果表 明(见表4.10),在本编码方案的选项参数设置下,多参考帧无论在编码质量还是 在编码速度上都无任何优势,增加参考帧数量只会造成编码速度的大幅下降。本 编码方案使用1个参考帧(X264的缺省参考帧数目)。 设定参考帧数目NR 平均PSNR(dB) 编码帧速率(邱s) 平均码率(kbps) NR=1 37.596 274.20 127.15 NR=2 37.435 262.66 127.37 NR=3 37.417 244.28 128.22 编码选项:一fps 15一bitrate 128一no一姐bac一心f NR—me“dia"一merange 8一subme 1 表4-10 QcⅡ格式Fo弛man序列使用不同参考帧数目的编码效果 (5)宏块划分模式 在视频图像的帧间编码中,如果16×16的宏块中既有背景的运动,又有前 景物体的运动,若仅以整个宏块为基本单位进行运动搜索,很难在参考帧中找到 匹配的宏块。H.264中允许把宏块分割成较小的亚宏块,例如16×8、8×16和8 ×8等大小,有助于更准确的匹配。为了进一步减少运动估计后所得到的残差值, 8×8的亚宏块还可继续划分为8×4、4×8和4×4等子块。虽然宏块中的子块 划分得越细,对残差值进行编码所需的码流就越小,但另一方面造成有更多的运 动矢量需要进行编码,又会导致对整个宏块编码所需的码流增加。此外,宏块划 分得越细,搜索和比较所需的计算量也越大。因此,在编码时需要根据运动估计 后的残差值大小和可接受的运动矢量编码代价来选择合适的宏块划分模式。 x264在缺省的宏块划分模式为”p8x8,b8x8,i8x8,i4x4”,小的子块划分模式同 时开启了更大的子块划分模式,例如”p8x8”选项支持的宏块划分模式有’’p16x8, p8x16,p8x8”。表4.11反映了不同宏块划分模式下对QCIF格式Foreman序列的 编码效果。 70 基于H 264的嵌入式宴时视额采集与传输系统∞设计与实现 华东师范大学硕±论文 宏块划分模式PM 平均P驰qR(dB) 编码帧速率(邱s) 平均码率皿bp曲 PM=“p16x16” 36 823 314 24 125 94 PM=“p16x16,p8x8” 37433 284 71 】2710 PM=“p16x16,p8x8,p4x4” 37 460 261.78 127 22 编码选项:一fpsl5-_bit—k128一not曲ac-APM哪“di丑,,圳range 8一submel 袁}1l Qc邛格式Fore巾an序列使用不同宏块划分模式的编码效果 上述实验结果表明,宏块划分模式越多,子块划分越细,编码效果越好,表 现在平均PsNR随之增加。但在低码率r128kbps)的情况下,将8×8亚宏块继续 划分成更小的8×4、4×8和4×4子块对于信噪比的提高并无明显效果,而编码 速度却囡编码复杂度的增加而大幅下降。因此,本编码方案在对P帧作帧间编码 时只选择p16x16,p16x8,p8x16,p8x8这4种宏块划分模式。 通过上述实验,是终可以确定出如下的x264编码方案: · 来用H264的基本档次.不使用B帧编码和cABAc: · 对于OcIF视频,采用ABR=128Kbi“s、c0P=26或cRF=23的码率控 制方式,可以获得较快的编码速度和较高的图像质量; ●只使用1个参考帧; · 运动估计的宏块搜索模式设置为DIAfdi哪ond); ·运动估计的宏块搜索范围设置为8; ·亚像素运动补偿LEvEL=1,用全像素块动态搜索,对每个块再用快速模 式进行1/4像素块精确搜索: ·帧间编码时对P帧宏块采用p16x16,p16x8,p8x16,p8x8划分模式。 经过上述优化后的编码方案与缺省的编码方案相比,平均PsNR略有下降(前 者为37 433dB,后者为38 210dB,信噪比损失约2%1,编码速度提高约108%。 图4.11是x264分别采用优化的编码方案与缺省的编码方案时对OcⅢ格式 Foreman序列编码后的图像,和原始视频图像的主观质量对比。 酗4.Il优化的编码方案、缺省的编码方案编码图像与原始视颠阿像的对比(第2s帧) FiguR 4-11 Co。pa咄on醴coded Pictrqesmth opnm血d and d出un solu伽Ⅱs,andraw YIⅣpicmre0一hm) 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 4.2.3 H.264编码器的移植 移植)【264编码器即使用2.2.2节建立的交叉编译工具链对】【264源码进行编 译,得到目标平台处理器格式的二进制可执行文件和库文件的过程。 在编译前,首先运行)【264源码根目录下的co西gure脚本进行配置,设置编 码器和库文件安装路径、目标系统类型(L证u)【或W.mdows)、指定编译工具链和 编译选项等。配置完成后会生成包含上述配置信息的co血g.mak文件,该文件被 Makefile包含,这时使用mal【e命令编译即可得到】【264可执行文件以及共享库和 静态库文件。 对于交叉编译,应使用”./con丘gu∞.-110s户arnl.iwI瑚戚.1inuX.gnueabi --enable-pthread--enable.shared'’命令进行配置,并修改config.mak文件,在文件 中指定交叉编译工具链和编译选项,增加必要的变量定义。修改后的主要选项有: 定义.DHA、但确删T以添加对X264优化时新增的代码段,并添加汇编选项 SUB创跹H以在Makefile中添加对X264优化时新增的目标文件,在CFLAGS中 -m印u=i、砌m)ct,以支持无线加vⅨ指令集的汇编。详细说明可参考4.2.4节中对 】【264编码器的优化部分。 在使用co血gu嘴命令配置时,可通过指定..enable.gprof选项,以在CFLAGS 中添加-pg选项,编译时在)【264中生成额外的用于性能分析的代码。在运行X264 编码器时,会产生gmon.om文件,可用于aHn.iwmmxt.1inux.趴ueabi.gprof工具 进行性能分析。由于在编码器中插入了额外的代码,这会极大影响编码器的效率, 降低编码速度,因此在完成性能分析后,实际编译X264时应禁止这一选项。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 4.2.4 H.264编码器的优化 代码X级26的4的优源化码,针但对并x8没6、有P针o、对ⅣPⅪer墟PC7和0等SP删ARC处目理标器平平台台作进了行部优分化算,法也上没和有汇针编 对具体应用进行算法结构上的优化。4.2.3节移植的】(264编码器在Liod平台上 对于QCⅢ格式的Forem纽测试序列进行编码时,在缺省的编码方案下,限定码 率为128kbps,编码速度仅在4.33邱s左右,与实时应用的要求相差甚远。因此, 必须针对PⅪ墟70处理器的特性,结合实时应用的视频场景特点,对x264编码 器进行优化,以提高编码效率。 嵌入式软件的优化涉及到多个方面,必须根据嵌入式平台的硬件特性,从开 发工具的选择、系统设计、编程开发等角度对程序进行优化【31。本节针对PⅪ墟70 处理器与软件优化相关的硬件特性,从编译器的角度和程序设计的角度对x264 分别进行了编译优化和代码级优化。 4.2.4.1编译时优化 编译优化包括两个方面:一是选用合适的交叉编译环境,二是在对应用程序 进行编译时,选用合适的编译选项,生成效率高的目标代码。 1.优化的交叉编译环境 完整的交叉编译环境包括交叉编译工具链和目标平台格式的库文件两个主 要部分。选用适合目标平台、代码优化功能较强的编译环境,可以在编译过程中 针对目标处理器的特性自动对应用程序进行优化,改进一些不合理的结构,生成 体高系效的 结指构令进序行列了,优增化强设应计用,程可序以的有性效能地。利例用如X,ScInatleel/C删抖指Co令nl的p条il件er执针行对、XS条ca件le 设置和操作数移位等功能,使一条指令完成多个操作,缩短指令序列的长度,减 少跳转指令的数目,减少冲刷流水线的次数,还可以按照XScale超流水线要求, 利用3地址指令、多字传送指令、DSP乘加指令和无线MMx指令等,生成最优 的目标代码ljJ。 2.2.2节在建立交叉编译环境时,选用了最新的软件包,支持NPTL线程模型, 与原来的LinuXTllreads线程模型相比在性能和稳定性上都有重大改进;支持 ARM EABI,在浮点运算性能、结构体封装、工具链间的兼容性、系统调用效率 上都有很大改进。此外,针对PX舵70处理器的硬件特性也作了一系列优化,通 过指定“一谢也-cpu.iwmmxt一谢m.arch=iwmm)【t"选项,使编译器默认产生适合 运行于XScale架构、支持无线^心Ⅸ指令的目标代码。 优化的交叉编译环境可优化应用程序的浮点运算处理。H-264编码器中存在 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 大量浮点运算,应用程序的浮点运算性能在很大程度上依赖于编译器产生的目标 件浮点模拟器FPE(So№F10atiIlg 代码是否符合处理器的浮点运算模型。目前在嵌入式平台上,浮点运算主要有软 Point Emmator)和硬件浮点运算单元 的删处理器引入ⅦPmCtor FPU(F10ating Po缸U血)或FPA(Flo撕ng Po缸Accelemtor)两种方式来实现【65】,新 Floating Po硫s)作为硬件浮点单元【17】。由于 PⅪ墟70处理器没有硬件浮点运算单元,因此只能采用软件模拟方式完成浮点数 处理。对于Lin.uX系统,在配置内核时可以选择内核自带的软件浮点模拟器 NWFPE或FastFPE,但这种方式是通过让处理器陷入未定义指令异常mndefmed i】1S缸uction eXce埘on)来实现的,处理器每次取到浮点数操作指令就发生异常,当 软件的浮点指令较多时,CPU会频繁发生异常,在用户空间和内核空间频繁切 换,另外,实现浮点数运算的异常处理需要一个大的分支程序,分支预测的命中 率较低,既浪费了CPU时钟周期,又会排空BTB(分支预测缓冲)而降低后续的 分支预测命中率,因此运算效率很低。解决的办法是使用软件浮点编译工具链, 编译器采用软件浮点运算函数库替换掉浮点操作,产生的机器码完全不含硬件浮 点运算指令,处理器不陷入异常,充分利用编译时优化(Compile.t妇e optimi勿:tion),让CPU执行浮点运算也能执行连续的指令,减少程序分支;软浮 点的实际性能比NWFPE快一个数量级【鲫。2.2.2节在编译交叉编译器gcc时指 定”~晰t11.floa户soR”选项,使编译器支持软浮点。 编译时链接的库文件也对应用程序的性能有重大影响。库文件实际上是目 标代码的集合,链接的过程实际上是将所调用的库函数对应的库文件中的目标代 码作为应用程序的一部分,对库程序的优化何系统调用代码的优化有时比对应用 程序本身的优化可获得更大的性能提升【67】。为此,在建立交叉编译环境时,使 用默认产生iw瑚m赋架构目标代码的gcc来编译目标平台的glibc库,并指 定”一、)l捌吣ut.邱”选项,编译得到支持软浮点运算的函数库。hltel以及GNU的编 译器还提供了许多与汇编指令相对应的intrjDsics(内联函数),可快速优化C语言 代码;i蛐证sics是能直接与汇编指令相映射的在线函数,不易用C语言实现其功 能的汇编指令甚至SⅡⅥD、MI、厦X指令序列都有对应的血血sics函数【铝】。对于多 媒体处理应用,Intel还提供跨平台的商业级集成性能函数库PP,充分利用处理 器的流水线、总线特性等硬件特点,为应用程序提供统一的库函数调用接口,实 现软件的性能优化【3】。IPP库的浮点运算也是通过库函数实现的,实验表明【651, 其性能优于未针对处理器特性优化的软浮点函数库。使用in埘nsics和口P库进 行优化,需要在应用程序中调用相关库函数来实现。 2.优化的编译选项。 编译器实现了各种代码优化功能,包括别名分析(通过变量重命名来消除数据 74 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 相关,提高流水线的执行效率)、常数折叠、公共子表达式消除、冗余代码删除、 循环逆转、循环展开和函数嵌入等优化,还可借用并行程序设计技术,进行相关 性分析,获得源程序的语义信息,采用软件流水线、数据规划、循环重构等技术, 使应用程序呈现更好的局部性,提高Cache命中率,从而提高计算密集型应用程 序的性能【691。在编译目标程序时,通过指定编译选项和参数来选择不同的优化 级别和优化策略。 在4.2.3节交叉编译)【264编码器时,为获得最优的程序性能,指定了如下编 译选项【70】: .04:用于指定优化级别,不同的优化级别定义了一系列编译选项对程序进 行优化。.04几乎打开了所有的优化选项,以尽可能提高程序运行效率。 一位哑一ma也:该选项定义了—.FAST MATH 预处理宏,打开了数学运算的速 度优化相关的编译选项如”.丘10.ma也一e加o”,”.缸1safe.ma.m-optiInizatioIls”等,允 许CEC违反某些ANSI或IEEE规则,因此该选项不被任何”.On,’选项打开,以 免在处理严格依靠ANSI或ⅢEE规则实现的数学函数时产生错误结果。 .f.o血t.缸吼e.po砬er:忽略函数中不必要的帧指针,以节省保存、建立和恢复 帧指针的指令开销,并且余出更多的寄存器用于其他函数,以提高程序性能。 .msojfI.noat:产生基于浮点运算函数库调用的软浮点目标代码。 . 4.2.4.2代码级优化 H.264编码器的算法复杂度很高,)【264等软件编码程序设计之初都是以PC 机作为运行平台,程序代码结构和数据的安排多从实现的难易上考虑。而嵌入式 设备中的应用程序受到处理器和总线频率、内存等硬件资源的限制,为在 PⅪ墟7x等嵌入式处理器上实现实时软件编码器,必须对程序流程和数据组织从 处理器架构、硬件资源和代码运行效率上作详细的考虑。本节从程序算法结构、 触≈MⅨScale处理器程序设计特点、无线MMx技术汇编优化、存储器访问的优 化等方面研究了X264编码器在PⅪ墟7x平台上的优化技术。 1.程序算法结构优化 对于不同的编码方案和视频场景,x264在有不同的程序执行流程,对各程序 模块的调用频度也不同。针对4.2.2节提出的优化后的编码方案,结合特定的视 频场景和压缩视频源特点,对x264的程序结构和部分算法进行调整,可大幅度 提高程序性能。 ·去除冗余程序代码 X264功能强大,支持H-264标准中基本档次、主要档次和高级档次的大部分 编码工具,视频源数据可以是yuv原始视频、a.、,i或avs等格式视频数据,并提 75 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 供友好的命令行操作接口。但对于特定视频场景及选定的编码方案,只需处理实 时采集的yuv原始视频和使用)【2“的小部分编码工具,多余的分支和功能仅会 增加代码尺寸,并且降低分支预测的命中率,增加分支判断的开销。 例如,X264为各个编码工具都提供了配置选项,在编码前首先要分析命令行 输入的参数,以选择编码工具和编码方案,其中要分析大量的条件判断,并要进 行大量的字符串读取及整数转换处理。在嵌入式处理器上大批量地处理条件判断 和分支是非常耗时的。而实际上,4.2.2节提出的优化编码方案仅配置了少数几 个编码工具和参数,绝大多数的编码选项都采取了】【264的缺省设置。为节省参 数分析时间,可以把不必用户设置的编码选项如熵编码方式、运动估计宏块搜索 方式、搜索范围、宏块划分模式、亚象素插值等优化后的参数设置为】【264的缺 省设置写入到common/coInmon.c的X264 param de叫t()函数中,并在命令行参 数解析函数x264 param parse()中注释掉已设置为缺省参数、不必通过命令行传 递的选项以及参数所对应的条件判断和参数解析语句。CABAc、B条带等不需 要的编码工具以及p8x4、p4x8和p4x4等不使用的宏块划分模式所对应的分支代 码也都可以去除。 通过去除X264中的冗余程序代码,简化了程序结构,减小了代码尺寸,并 大大提高了程序运行效率。 · 算法结构优化【36】 通过对H.264的算法研究发现,运动估计、亚象素搜索、宏块模式选择要耗 费H.264编码器约70%~80%的计算资源【_71】,因此对该部分算法和代码的优化可 有效提高编码器性能。 H-264采用了多模式运动估计。对于I帧,亮度块有9种4×4和4种16×16 预测模式,色度块有4种8×8预测模式;对于P帧,不仅要分析上述帧内预测 模式,还要分析16×16、16×8、8×16、8×8、8×4、4×8和4×4等7种帧间 预测模式(4.1.3.2节)和SⅪP模式。H.264采用率失真特征值来从上述分析结果中 选择最佳的预测模式,而率失真是通过SAD值(4.1.3.6节)来表征的,对每个宏 块,采用穷举的办法,计算上述各种预测模式的SAD值及相应的率失真特征值, 从中选择率失真最小的作为最佳预测模式。注意到视频序列中常有大量的静态背 景或运动量很小的图像块,这类宏块在经过评估后往往被定为P帧SⅪP模式(下 称Pskip),而且Pskip宏块是预测宏块的直接拷贝,不必编码残差,因此,如果 首先对宏块进行Ps虹p模式评估,将省去大量的对其他预测模式的率失真计算开 销,同时也可大幅编码速度阎;这就是前期Psl(ip模式快速检测技术(Edy蚯p detection in P-舭IIIles)。作为Pskip模式的宏块必须同时满足下列条件:①最佳 宏块大小是16×16;②运动矢量与预测运动矢量相等;③所有量化后的DcT 76 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 系数都为o;(D参考帧必须是当前帧的前一相邻帧。 严格根据上述条件来检测P蚯p宏块相当困难,通常在不影响DCT系数分布 的前提下,设置并使用合适的变换域阈值用作Psl(ip宏块的判决。 . )【264计算率失真特征值的公式如下【73l: . 胁∞f=跗勿+五飧删 其中,尉9c∞f是某宏块划分模式下运动估计的编码开销,用以表征率失真特 征值;名是拉格朗日算子;欠朋',是编码宏块运动矢量MV(1Ⅵ而on vectors)所需的 比特数;.鲋功(Sum of Absolute Had锄ard一仃ansfomed Di位rence)取代了传统的 SAD,能更准确地预估在频率域上编码残差的开销,并能获得更好的编码图像质 量,但运算的复杂度也相对较高。 )【264分析宏块模式的函数是encoder/a11alyse.c中x264 macroblock a11alyse(), 该函数根据条带类型(I条带、P条带或B条带)分别对宏块进行分析。对P条带 的宏块采用了前期Pskip快速检测算法,通过)【264 maaroblock probe s虹p()函数 来实现PsHp宏块检测,其中对亮度和色度的DCT系数设置了不同的判决阈值; 如果DCT系数高于判决阈值,则要进一步分析其他宏块划分模式,先分析帧间 预测的最佳模式,从p16×16块开始,再分析p8×8子块:若p8×8子块的运动 估计开销助c刎低于p16×16块,则进一步分析p8×4、p4×8和p4×4的子块, 从中选择兄DcD酣较小的预测模式;若p8×8子块的运动估计开销兄Dc嬲f高于 p16×16块加上一个预设的p16×8块阈值,则跳过p16×8和p8×16的子块分 析,否则继续分析p16×8和p8 x 16的子块,并选择足Dc∞f最小的作为最佳帧 间预测模式。搜索匹配块时,首先在帧内搜索i16x16块,若得到的帧内匹配块 劣于最佳帧间预测模式的匹配块,则采用帧间预测模式,否则进一步确定帧内搜 索的最佳模式,如此得到最终的预测模式。 上述穷举式的算法存在大量的多余计算,若能根据视频场景特点,优化算法 结构,则可在得出最佳模式之前避免大量不必要的预测模式分析。通过4.2.2节 运动估计与补偿方案优化中选择宏块划分模式时,对QCⅢ格式Foreman标准序 列的)【264编码实验可统计出不同编码方案中P帧各预测模式被选中的概率如下: 方 P 帧中各预测模式被选中的概率(%) P帧平均 案 i16x16 pSl‘ip p16x16 p16x8,p8x16 p8x8 p8x4,p4x8 p4x4 PSN壬ⅪB) (1) 2.9 13.9 50.1 18.3 11.1 2.8 0.7 37.43 (2) 3.O 13.8 50.2 23.0 9.9 37.40 编码方案:(1)-A‘‘p16x16,p8x8,p4x4”(分析所有预测模式) (2)一A‘‘p16X16,p8x8”(不分析p8x4、p4x8、p4“) 表4-12两种编码方案对P帧编码的宏块预测模式选择统计 基于H2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 由表4.12可知,p8×4、p4×8和p4×4模式被选中的概率很低,由于仅在 p8×8子块的肋c耐低于p16×16块时才分析这三种模式,上表的数据表明, 有(11.1+2.8+O.7)%=14.6%的几率分析p8×8及其子块,分析过程中又有11.1/14.6 =76%的几率选中了p8x8模式而徒增了对p8×4、p4×8和p4×4模式分析的开 销。另一方面,由于这三种模式所占的比例极小,因此若对采用这些预测模式的 宏块使用其他预测模式,几乎不会影响图像质量,由上表知不分析这三种模式时, P帧的平均P阶瓜仅下降了O.03饵,同时大幅减小了运算量。这即是4.2.2节确 定的最优编码方案采用上述方案(2)的内在因素。 根据表4-12的统计结果,各预测模式被选中的几率由高到低依次是p16×16、 p16×8/p8×16、pSHp、p8×8和i16×16,若依此排序来对P帧宏块进行预测模 式选择,可进一步减少大量不必要的计算开销。由于pS妯p模式检测过程的计算 量很小,因此仍采用前期pSkip快速检测技术,首先检测pSl(ip模式,再依上调 整x264中各预测模式的分析顺序,由此得到优化的宏块运动估计模式选择算法。 相应的,从预测模式分析中更新宏块的函数)【264 aIlalyse update cache()采 用了多层嵌套的多分支的s谢tch.case结构,编译器为之产生ioelse.if嵌套代码, 分支判断会打乱程序的指令流,为尽量避免分支预测失效和引起不必要的CPU 周期损失,编程时根据各分支出现的相对概率进行排序,将最可能执行到的分支 放在最前面,出现几率最小的分支放到最后,可提高s丽tch结构的执行速度【69】。 表4.12给出了P帧中各预测模式出现的概率,而I帧通常是关键帧,缺省设置 下,相邻关键帧的间隔是250帧,因此I帧预测模式出现的概率远低于P帧,由 此调整)【264 an2L1yse update cache()函数的分支顺序结构如下: static Void)【264_analyse_update』ache(X264j幸ll,X264_nl啦lalysis.-t+a ){ int i; s谢tch(h->nlb.Lt),pe){ caLse P--L0: 娟mch(h铆nb.iJartmon){ caSe D一16x16:…… c嬲e D-16x8: …… c嬲e D 8x16: …… } caSe P SKIP: caSe P 8x8: caSe I 16x16: case I 8x8: case I 4x4: } 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 2.舢n们【scale处理器程序设计优化【74】【75l PⅪ墟70处理器采用XScale核心,兼容ARMv5TE指令集,在程序设计中应 充分考虑到处理器的体系结构特点以及基本的ATPCS规则(ARM.n啪b Procedure Call Standarm,以获得较优的程序性能。 ●高效地调用函数 中最A前TP面CS定 的义 4个了整函型数参调数用是过通程过中删如的何前通4过个寄寄存存器器传ro递,函r数 1,参r数2和和r返3来回传值递。的函,数 随后的整型参数是通过递减式满堆栈来传递的,函数返回的整型数据通过寄存器 ro来传递。对于双字类型的参数,例如10ng 10ng或者double类型,是通过一对 连续的寄存器传递的,双字类型的返回值通过ro和r1返回。可见,ATPCS是4 传寄递存多器规 出则的,参如数果,函堆数栈的是形保参存多在于内4个存寄中存的器,可而传删递处的理个器数的,所则有必数须据通操过作堆都栈只来 能在寄存器中进行,访问内存的速度远低于访问寄存器的速度,因此,应尽量限 制函数的参数个数,以减少传递参数时的堆栈访问开销,提高函数调用的效率; 也可以将几个相关的参数组织在一个结构体中,用传递结构体指针来代替多个参 数。例如,)【264源代码com加on/dct.c中计算4×4块整数DCT变换的蝶形变换 的函数sub4x4_dct()调用了pixeL团】b、Ⅳxb()函数计算4×4子块的残差: 撑defme FENc_STRDE l 6 撑de丘ne FDEC—STR IDE 32 static iIllille Void pb【el s1Jb wXb(hnl6j宰di噩缸i.Size,uhn8j奉pi)【1, int b谢,咖8j木p配,m oi)【2){ n y,x; for(y=0;y<i_Size;—斗){ for(x=O;x<i_s也e;x++){ di珥x+y+i_size]=血1【X】一p磁【】(]; ) piXl+=i_pi)【1; p磁+=bi)【2; ) ) 渤tic void sub4x4—d似缸1 6.j dct[4】[4],u缸8j木p纹1,m8j木pi)(2){ pixel-stlb—jwxh((intl6j木)d,4,pixl,FENC—STRJDE,pix2,FDEC—STRJDE); > S彻E和 pi)【el sub、Ⅳxh()用于计算W×H子块的残差,它有6个形参,被sub4x4_dct() 调用时,传递的第二个实参是常数4,第四和第六个参数FENC FDEc-s砌E是被预先定义的常量,因此完全可以在pi)【e】吼lb wXb()中用常量 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 p替仅换eL掉s吣形4参(),用将以函在数su参b4数X4由.6_个dc减t(少)中到计3个算,4×得4到 子一 块的个残新差的:调用效率更高的函数 瑚硫Void pi)【el-Sub_4x4(硫16j母d氓血t8j木piXl,血8j·pi)(2){ iIlt y'x; for(y=O;y<4;”){ for(x=O;x<4;x++) di趣x+y幸4]=pixl[X】-pix2[x】; pixl+=16; pi)【2+=32; ) ) gtatic Void sub4x4_dct(硫1巨j dct[4】[4],un8j幸pixl,uint8j母pi)【2){ pixeLsubjx4((intl 6j幸)d,pi)【1,pix2); ) 函数调用的开销还包括将函数内部的局部变量所分配使用的寄存器保存到 堆栈,因此应尽量减少局部变量的个数。如果被调用的函数很小,可把被调用函 数和调用函数放在同一个源文件中,并且要先定义后调用,编译器就可优化函数 调用或者内联较小的函数,以彻底除去函数调用开销。 ·高效地编写循环体 循环体是算法中常见的程序结构,可有效地减小代码尺寸,并增强程序的可 读性,但同时会带来额外的循环开销(100p overhead)。这是因为,每次循环需要 在 及循 一环 条体条外件增分加支减跳法转或指加令法。指对令于来删对处循理环次 器数 ,计若数使,用与无循符环号次的数循的环比计较数指值令i,,以 循环继续的条件为i!=0而不是i、叼,则可保证循环开销只有两条指令。若存在循 环体嵌套,则循环开销将呈几何级数增长。因此,可通过展开循环体的办法,来 降低例循环如开前销面。的pi)【eLs蛐4()函数,采用了整型加法计数的双层循环体嵌套, 循环体的循环开销为3幸4木4(内层循环开销)+3幸4(外层循环开销)=60条指令。若 将内层循环体展开,循环开销为3幸4=12条指令,可大大提高循环体的执行效率。 循环展开后的pixel—sub_-4x4()函数如下: i11line Void piXel-sub_4x4(intl 6j木di置uint8j木pixl,uint8j木pix2){ uIlsi口ediIlty; fo《y=0;y<4;y++){ di趣y事4]-pi)【1【0】-p议2[0】; di趣1+y幸4】=pixl【1】一pi)&[1】; di趣2+y枣4】=pixl【2】-pix2[2]; di珥3+y幸4]-pixl【3】-pi)【2[3】; 基于H264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 pi)【1+蓦16; pi)【2忙32; ) ) ·浮点运算 PⅪ墟70处理器没有硬件浮点运算单元。在4.2.4.1节中讨论了在编译阶段对 浮点运算的优化,即为了避免产生硬件浮点运算指令而使处理器陷入异常模式的 开销,可使用软件浮点编译工具链,C编译器要把每一个浮点操作转换成一个子 程序的调用,C库函数中的子程序使用整型运算来模拟浮点操作。尽管这些代码 是用高度优化的汇编语言编写的,但浮点运算执行的速度还是比相应整型运算慢 得多,因为除去函数调用的开销外,一次浮点运算操作往往需要数十条整型运算 指令来模拟。 在代码级对浮点运算进行优化,一方面可以在对运算精度要求不是非常苛刻 的场合,保证不改变)【264库函数API的前提下,将双精度运算替换为单精度运 算,以提高运算速度,因为软浮点对单精度浮点运算的处理速度约为双精度运算 速度的两倍【65】;另一方面,可使用定点(丘x-po硫)或者块浮点(block_floating)算法 来代替浮点运算【75】。 删● 硬除件法上运算不【支75】持除法指令,编译器通过调用C库函数来实现除法运算。 C库函数中的标准整数除法程序,根据执行情况和输入操作数的范围,要花费 20 ̄100个周期。但是,除数是常数的除法运算和用同一个除数的重复除法,执 行效率会比较高;而除数是变量时,则必须考虑到变量的各种可能值,通过条件 判断采用不同的整数运算来完成除法,执行效率较低。 参考文献【75】给出了将除法运算转换为乘法运算的方法,可编写成除法运算函 数,替换掉程序中相关的除法运算,以提高除法运算的效率。 除法和模运算(/和%)执行起来比较慢,所以应尽可能地避免使用。如果不能 避免除法运算,就应尽量使除数和被除数是无符号的整数。有符号的除法程序执 行起来更慢,因为它们首先要取得除数和被除数的绝对值,再调用无符号除法运 算,最后再确定结果的符号。 3.无线MMX指令集汇编优化 MMX指令集以及SSE(S订e峨 PⅪ屹70处理器为XScale核心扩展了一个无线MMX硬件单元作为多媒体协 处理器。新增的无线MMx指令集提供与№1 bg缸1ction㈨le SMD Extensions)整数运算部分指令集相对应的功能支持【76】【77】【781。无线MMX技 术采用64_bit的单指令多数据Sm∞(Sin西e Da蛐指令集,可 在单个指令周期内并发处理多达8个数据,以提高多媒体程序的指令效率,降低 81 基fH 264的嵌入式实时视频采集自传输系统的口计与实现 华东师范大学碗±诧立 指令数量。 无线MMx单元的两组寄存器分别映射到协处理器cPO和cPl,如图4—12 所示。主寄存器组提供16个64blt的寄存器,映射到cPO空间,命名为wR0.wRl5, 用于装载64bn打包的数据(packed da啪,可通过TMRCc和TMcRR指令与ARM 处理器内部寄存器交换数据:状态和控制寄存器组提供8个32bn寄存器,映射 到cPI空间,其中通用寄存器wcGRO—wcGR3用于字节对齐和位移,wcD和 wcon为控制寄存器,wcssF和、忙AsF为状态寄存器,该寄存器组通过TMRc 和n4cR指令与ARM处理器内部寄存嚣交换数据。 :’:S’0二。a So,№r 翟童 图斗12无线MMx技术寄存器维织 nguH}12wimkssM似TechⅡolo盱RegisterFileoogam拍伽“ 无线M慨指令集包含的主要指令可分类如下:(I)向量乘法指令(wMI儿等) 与乘法累加指令仃MIA等),乘法之后进行累加是处理多媒体数据的常用操作: (2)ALu与逻辑指令,包括加减运算,sIMD的计算批量数据均值、MAx、MⅣ 值、位运算等;(3)格式化指令,包括mn、ro诅te、PAcK和uqPAcK之类的指 令;(4)传输指令,在协处理器与xsc缸e核之间传送数据的指令:(5)Load,sto陴 指令,即wLDR,wsTR指令,用于协处理器寄存器组与内存交换数据, 令最多可操作64b“的数据。 条指 可见.无线MMx指令很适合于数据量大、计算简单、重复性高的多媒体数 据处理及运算,例如视频编解码中对宏块每个像素进行相同操作,占用时间长的 sAD值计算;可高效地完成连续存储的,且数据量是8的倍数的数据操作,例 如数字图像处理中采用的各种滤波器等1]”。 下面以x264源文件common,dct c中4x4整数DcT变换凼数虬】b4x4 dctr) 为例,给出无线MMx汇编代码的实现方法1“。在原函数r|_:,蜩用plxel sub wxh() 计算4×4块的残差,并将结果保存在函数内部数组d[4]【4]中,接着对d[4】14]进 行整数变换,将结果保存到实参指向的dd[4]【4】由。实际上,在前面优化函数调 用时,定义了新函数pix“一subl4x4()取代原来的pixeLsukw)(h();而d眦[4】[4] 仅返回整数变换结果,完全可以用作变换计算的中间变量,因此可省去局部变量 d”】【41,减少函数调用时寄存器入栈出栈的开销,由此得到简化后的函数如下: 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 删c void sub4xU似缸16j dCt[4】【4】,谳8j奉p恢1,血t8j幸pi)【2){ 缸16j恤p[4]【4]; m i; pixe】sub 4x4((i11t1 6j奉)dct,pix1,p仅2); for(i-0;i<4;i抖){ const int s03=(1ct[i】[0】+dct【i】【3】; conSt m s12=dct[i][1]+dct[i][2】; const硫d03=dct[i】[0】-dCt[i】[3】; const血d12=dct【i]【1]一dct【i]【2】; nnp[O][i]予 s03+ s12; 缸11p[1][i]=2木d03+ d12; 乜np【2][i】= 恤p[3】[i】= ) s03- s12; d03—2木d12; for(i=O;i<4;i++){ ’ conSt硫s03=恤p[i]【O】+恤p[i]【3]; const缸s12=恤p【i】【1】+恤p[i][2】; co璐t缸d03=nnp[i]【O]-廿11p[i][3】; conSt缸d12=脚[i】【1]-n11p[i】[2】; dct【i][0]= s03+ s12; dct[i][1】2 2奉d03+ dct[i】[2】= s03- d12; s12; dct[i】[3]= d03—2+d12; > } 整数DCT变换可以分解成行变换和列变换两步进行,即先对源矩阵进行一 次列(行)变换,再进行一次行(列)变换,就刻完成一次整数DCT变换。使用 WMMx指令集对整数变换函数sub4x4 dct()优化的汇编代码如下: ⑦TRANSPOS MODLE完成4×4的矩阵转置 @转置结果保存在姗0,nlnll,m砬,衄丑3中 @——=———=————=——————=——————————。—一一 唧ckim捌,\mm0,、nlml .maC】∞TR ANSPOS—MODLE mm0,mml,舢m2,删n3,mm4,n1In5,mm6,mm7 Ⅷ加pckillll\衄5,\InmO,、111m1 砌mpcl(imⅥ吼6,\Imn2,、111m3 啪lI】pckihh h吼7,\II】吼2,\II】m3 、w硼呲吡矾1pl1nn蛐pppcccIkk蛐i【illwi\,wh呲mwm\虹0,,1\Ⅷm,m[I1\5In】,m15礤n,加、,、b4:I,nnll玎衄mm俩776 .endm 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 @DCT TRANS.MODLE完成sub4x4_如t()中第一个for循环中的单次运算 @计算结果保存在mIn0,mnll,m]【n2,衄奶中 .macro DCT TR ANS—MODLE n1InO,mml,删:112,nHn3,111n14,n1]m5,mm6,mm7,mm8 ㈣,、mm0,锄‘ 、Ⅳaddh @s03=dct[i]【O】+dCt[i][3】; 、Ⅳaddh\nlm5,\mml,蛐 @s12=dct[i]【1】+dct[i][2】; wsubh、Inm7,hml,蛐 wSubh\nlm6,\mm0,、mm3 @d03=dct[i]【0】-dct[i][3】; @d12=dct[i]【1卜dct[i][2】; waddh\lnmO,\mm4,、n】lIn5@_衄讲O][i】=s03+s12; w删wSsuldblhhl\\lgmI\nInnIllI2,l,m衄\l,I1n,、m4\m,mⅡ6岫,5u\n7m@m卸8@@【2衄宰1p][d[20i]3】[i】=2=奉s0d3-0s31+2d;12; wsllhg、111m3,、Inm7,hm8 wsubh\I衄3,\Inm6,\Inm3 @2木d12; @dct[i][3】=d03-2母d12; .endm .section.roila.Ca .te妣 .910bal x264_sub4x4-dci wmmx .ali弘5 @声明为全局函数 )【264-Sub4x4_dct wm加x: s劬耐 r13 1,{r4,r14> @调用pixeLsubjx4()计算残差,计算结果由ro返回 bl pixel sub 4x4 @加载实参传递的数据 wldrd wr0,『r0,撑01 wldrd wrl,『r0,撑81 wldrd wr2,即,撑16】 wldrd W3,呷,撑24】 nlov r4, 撑1 廿11Cr wcgro,r4 @整数DCT变换 TR ANSPOS—MODLE、ⅣrO,w1,、Ⅳr2,Ⅵ3,wr4,W5,W6,w7 DCT T耻NS—MODLE舢,研1,wr2,W3,wr4,Ⅵ5,M6,W7,wcgro TR ANSPOS MODLE、舢,M1,、讹,w3,、梢,w5,Ⅵ6,w7 DcT.T耻州S—MODLE Wo,岍l,、Vr2,wr3,、vr4,W5,w6,w7,wcg内 @存储变换结果 wstrd w巾,fro,弹0] w蛐旧wrl,fr0,拌8】 ws臼旧wr2,fr0,{5}161 ws吼wr3,【ro,舵4】 @列变换 @行变换 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 国函数返回 ldn稍订3 1,{r4,pC> 将上述)【2“sub4x4 dct㈣函数保存到conmon/iwmm)(t/dct-w珈:nx.s文 件,并在co衄o∥dct.c中添加函数声明,修改)【26¨cLinjt()中的函数定义: 咖void】【264_龇4-dct 严 #i外fd部e函fH数怂声礓明隔·/嘲黼 wmmx(hnl6j(1Ct【4][4】,u硫8j宰p1,uint8j·p2); 撑endi Void x264 d∞j面t(int cp屿x26¨ct amctionj幸dctf){ 群ifdef}LWE确嗍T 产指定4×4整数DCT变换函数·, dctf->sub4x4-dct=x264_su_b4x4_dct聊nmx; 撑eIldif )为了将新增的源文件dct.煳.s添加到)【264源码,应对Makefile修改如下: 4.2.3节移植X264时,将上述Mal(efile中的CC指定为交叉编译器,并通过 在CFLAGS中定义.DmWEⅣ俭心ⅨT,将使用WMMX汇编优化的代码加入到 coIn】[non/dct.c中编译。 按照上述汇编优化方法,可对运动估计中SAD值计算、DCT变换与反变换、 量化与反量化等使用wMMX指令集进行优化:参考文献【721提供了使用WMMX 指令计算SAD值和亚象素插值的算法,参考文献【79】给出了计算8×8块SAD值 的m心Ⅸ汇编指令参考代码。 为使能无线MMX单元,必须要使能相关的协处理器CPO和CPl,具体方法 是在Bootloader的第一阶段,将协处理器CPl5的r15即协处理器访问寄存器 CPf埘Coprocessor Access Re西stI啦的bit O和bit 1置位。 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 4.存储器访问优化 PⅪ蛇70处理器采用了多级存储层次,包括处理器内部寄存器文件、32KB 32 路器的的I访.问Ca速ch度e/随D存.储Ca层ch次e、向2外56而KB依片此上降SR低AM。、其SD中R√,蝴SD、删F是LA进SH程存的储主器要等内,存存空储 间,其访问速度主要取决于处理器的系统总线频率、SDR AM控制器时钟频率以 及SDRAM时序参数的设定。PⅪ墟70处理器主频最高可达624MHz,系统总线 频率可达208Ⅻz,SDR—~M控制器时钟频率为108Ⅻz,读写一次内存需要好 几个SDRAM控制器时钟周期,因此相对于CPU而言,内存访问的速度是非常 缓慢的,对处理数据量巨大的多媒体应用程序的性能有重大影响。 根据存储器访问的局部性原理,将最近访问到的内存中的代码和数据暂存到 CaChe(高速缓存)中,可解决相对慢速的内存给处理器内核造成的存储器访问瓶 颈【7纠。但发生cauche血ss时,CPU要把内容从内存调入cache,需要等待若干周 期以得到要处理的数据或要执行的代码,因此,通过减少caChe血ss,可提高程 序的执行速度【5】:一是增加程序中代码和数据的局部性,例如对于代码可运用函 数指针等方法减少程序的执行分支;对于数据,可将二维数组改为一维数组连续 存储并使数据的首地址以一个cache 1ine(32字节)对齐,以便于随后运用数据预 装指令PLD进行预装;二是使用数据预装指令PLD将一个cache lillc的数据(32 字节)预装到cache中,以便于后面的执行程序使用,有效降低cache miss的发生。 4.2.5实验结果与讨论 针对基于PⅪ心70处理器的Liod嵌入式开发平台,本节对)【264编码器的优 化流程是:首先从实际应用出发,选定了一套优化的编码方案,然后从编译器的 角度和程序设计的角度对)【264编码器进行了优化。主要工作包括:在编译优化 时,建立了支持帆nⅨ指令集、软件浮点的交叉编译环境,选择优化的编译选 项;在对代码进行优化时,去除了部分冗余代码,调整了程序算法结构,针对 ARM/XScale处理器架构及ATPCS程序设计规范,改进了函数调用和循环体执 行性能,并用WMh正X指令集对DCT变换与反变换、量化与反量化等运算进行 了汇编优化。在优化过程中,不改变x264对应用程序提供的API,以增强lib)(264 库文件的可移植性。 在PxA270处理器主频为520Ⅻz时,优化后的)【264编码器对OCIF格式 ForelnaIl标准序列在平均码率128kb甜s下,编码后的图像平均PSNR为35.749dB, 低于4.2.2节优化后的编码方案在PC机上的测试结果(37.433阳),这一方面是由 于PⅪ墟70处理器使用整数运算库模拟浮点运算,计算精度不及硬件浮点运算单 元,另一方面在代码中对部分浮点运算和除法运算用其他运算进行了替换,也损 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 失了部分计算精度;编码帧速率可达16.81邱s,比未优化前的X264在编码速度 提高了近3倍,基本达到了嵌入式系统应用中实时视频编码的要求。 4.3本章小结 视频压缩在实时视频通信系统中至关重要。本章首先介绍了H.264编码标准 的关键技术和编码工具,并分析了H.264编码器的性能及其复杂度,在此基础上 选择了一套适合嵌入式实时应用的H.264编码解决方案,考虑到嵌入式系统资源 受限的特点,结合系统应用中的视频场景特征,对X264软件编码方案进行了优 化,最后将)【264编码器移植到Liod开发平台上,并从编译器和程序设计的角度 对X264软件进行了优化,着重研究了)【264软件编码器在代码级的优化,包括程 序算法结构改进和舢王M/)(Scale处理器程序设计、无线MMX技术汇编、存储器 访问等优化。在Liod开发平台上,优化后的编码器对QCIF视频在128kbⅣs的 平均码率下可达到16邱s左右的编码速度,可满足大多数嵌入式应用的实时要求。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 第五章视频网络传输及系统设计与实现 视频传输的质量与网络类型及信道带宽、流量与差错控制等诸多因素有关。 本节主要讨论基于坤的H.264视频网络传输技术,以及基于Liod开发平台的嵌 入式实时视频采集与传输系统的设计与实现。 5。1基于IP的H.264视频网络传输技术 5.1.1视频传输对通信网络的要求 多媒体通信中的海量数据主要来自于视频信息,用于衡量多媒体视频传输网 络的性能指标主要有网络的吞吐量、延时、延时抖动、错误率等【801。 ● 吞吐量(Throu曲out) 网络吞吐量是指有效的网络带宽,定义为物理链路的数据传输速率减去各种 传输开销。吞吐量反映了网络所能传输数据的最大极限容量。多媒体通信的吞吐 量需求与通信网的网络传输速率、接收端缓冲容量和数据流量有关。多媒体传输 网络必须为多媒体信息的传输提供足够的传输带宽,否则就会产生网络拥塞,从 而导致端到端数据传输延迟的增加,并会造成数据分组的丢失。因此,对于实时 性要求较高的视频应用,必须提供足够的网络带宽。 ●延时(Delay) 多媒体通信系统对延时的要求主要体现在多媒体通信的实时传输方面。端到 端的延时(end-to.end delay)包含三部分,一是信源数据准备好而等待网络接收这 组数据的时间,二是信源传送这组数据(从第一个比特到最后一个比特)的时间, 三是网络的传输延时(TranSmission Del a_y),是指信源发出最后一个比特到信宿接 收到第一个比特之间的时间差,它又包括信号在物理介质中的传播延时和数据在 网络中的处理延时两部分。不同的视频通信应用对延时的要求也不同。 ●延时抖动(Delay Jitter) 网络传输延时的变化称为网络的延时抖动,即不同数据包延时之间的差别。 产生延时抖动的原因很多,例如共享传输介质的局域网(以太网或FDDI等)因为 介质访问竞争而引起的延时抖动,广域网(如IP网或帧中继网)由于流量控制的等 待时间以及节点拥塞所导致的排队延时的变化而产生抖动。延时抖动会对实时通 信中多媒体的音视频同步造成破坏,最终影响到音视频的播放质量。从人类的主 观特性上看,人眼对视频抖动的敏感性远低于人耳对音频的抖动。不同的多媒体 应用对延时抖动有不同的要求。 ●错误率 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 在传输系统中产生的错误通常用误码率、包错误率或包丢失率来度量。对于 压缩的音视频数据,其对误码率的要求比非压缩的数据流要高。在实时视频传输 过程中出现误码或丢包,重复传输是不合适的,通常采用前向纠错控制(FEC)方 法,根据人眼的视觉特性和视频信号特点,利用相邻帧估计丢失的帧,降低由于 传输错误引起的重放质量显著恶化,具有大致的丢包修复能力。 不同的视频应用对通信网络的性能指标要求也不同。对于口网络,视频传 输主要有三种应用【2J: (1)会话应用,例如视频电话以及视频会议。这类应用具有严格的时延限制, 预期的目标是小于100ms,一般端到端的时延控制在1s以内。所以,这就要求 使用实时视频编解码器,实时地调节编码参数,根据网络状况采用不同的容错工 具,以及采用基于反馈视频编解码工具。为了实时编码视频,通常要限制编码器 的最大计算复杂度,以保证编码速度。 (2)视频流的下载应用。利用可靠的网络协议,例如FTP或者H1]四等,把 编码后的比特流下载到本地,解码播放。这类非实时应用无需考虑网络的时延以 及容错特性,而主要考虑压缩编码质量。 (3)基于IP的视频流应用。基于网络视频流式传输的,能够在本地终端实时 回放的、具有实时特征的媒体内容编码的数据流,即流媒体。流式传输有两种方 式,一是实时流式传输(real-血e s骶aⅡ血g),需要专用的流媒体服务器与传输协 议,第(1)类会话业务也可归于此类;二是顺序流式传输(progressive s仃eaⅡ血g), 允许视频播放前经历延时,属于一种点播技术mdeo on Demand)【11。 口网络可以分为三大类:一是不可管理的口网络,如Intemet;二是可管理 的IP网络,如一些远距离电话公司构建的广域网:三是基于3G移动网络的无 线P网络【21。三类网络的传输特性不同,例如,最大传输单元大小(MTU sizc) 在有线口网络中一般定义为1500字节左右,在无线环境中ⅣT将其定义为100 字节左右;有线网络中的误码率很低,几乎可以忽略,而无线信道易受干扰,应 引入必要的差错控制和流量控制机制;有线IP网络的带宽通常远大于无线网络。 因此,视频网络传输必须考虑到特定应用对网络的要求,以及网络本身的特 性对视频传输的限制,以得出最佳的视频应用解决方案。本章给出一个基于有线 IP网络实时流式传输H.264视频的解决方案。 5.1.2基于I P的多媒体实时传输协议 网络视频信息是对传输时间有严格限制的多媒体实时数据。由于基于IP的 传输网络采用的口协议是“尽力而为’’的服务模式,不适用于实时数据业务; 没有数据检错和纠错功能,通过网络层的上层控制协议来保证数据可靠传输。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 5.1.2.1基于RTP的视频传输应用协议族 TCP/IP协议栈中的传输层协议主要有TCP协议和UDP协议。其中,TCP协 议提供可靠的面向连接的服务,但同时引入了高的传输时延并占用了网络带宽, 因而不适于传送实时视频;UDP协议提供不可靠、无连接的服务,目的是实现 数据传输的高效率,因此,其传输的可靠性由上层协议来提供,实时传输协议皿TP: Real-血1e TrallSport Protoc01)就是其中之一。 基于础四的视频传输应用协议族结构模型如图5.1所示[11。 应用层(数据源采集、压缩编 码、数据打包和流化等) RTSP层 RTP/RTCP层 ,UDP厂rCP IP/IP MulticaSt 网络接口 图5.1视频传输应用协议族结构模型 Figure 5-1 Video 1’ransport A-pplication Protoc01 Suite Model 其中,RTP协议可为基于多播(m1ⅡticaSt)或单播(1lnicaSt)的网络提供端到端的 网络实时数据传输,为实时数据传输提供时序重构与媒体同步、帧遗失检测、数 据安全等多种服务,I唧层负责数据的打包和数据传送,通常RTP算法并不作 为一个独立的网络层来实现,而是作为应用程序代码的一部分。RTP的数据传输 是基于UDP的无连接、无差错控制的报文传输,它依靠实时传输控制协议 RTCP(R1’P Con仃ol Protoc01)提供可靠的顺序数据报传送机制,以及流量控制或拥 塞控制等服务。I淝P协议作为础阻层的一部分,是指接收端向发送端周期性发 送的报文,负责监视网络服务质量、通信带宽以及网上传送的信息,并将其通知 给发送端,发送端服务器可利用这些信息控制R]曙报文的传输,包括动态地改 变传输速率,甚至改变有效载荷类型。R1甲和RTCP配合使用,能以有效的反馈 和最小的开销使传输效率最优化,因而特别适合传送实时数据。 实时流协议I盯SP∞a1而ne S骶觚1ing Protoc01)是一种应用层协议,位于传 输层之上,用于在媒体服务器和客户机之间通过IP网络有效地建立和控制实时 数据的传输。RTSP负责传输流的控制,为用户接口提供对媒体流的播放、暂停 等网络远程控制功能。 发送端的媒体服务器位于应用层,负责数据源采集、压缩编码、数据打包和 流化等。对于H.264视频传输,数据源可以是摄像头或视频采集卡采集的实时视 频,也可以是普通视频文件;压缩编码则通过)【264等视频编码器的VCL层来完 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 成,VCL层输出的压缩码流送NAL层,可打包封装成肿报文格式,同时配置 RTP报文头部的时间戳、同步信息、序列号等重要参数,此时的数据报文已经具 有典型的时间特征,即被“流化”了。 5.1.2.2会话描述协议SDP与实时流传输 在初始化视频会议、v0口、视频流传输等多媒体会话业务时,发送方需要向 接收方传达媒体描述信息、传输地址以及其他描述元语等信息。会话描述协议 SDP(Session Des面ptin Protoc01)定义了用于描述上述初始化参数信息的标准化 格式【81】【82】。对于组播会话业务,SDP提供两个主要服务,一是传达会话的存在, 二是传达足够的会话描述信息,以便信息接收者参与会话;对于单播会话业务, 则仅提供后一服务。SDP会话描述信息包括:会话名称和目的、会话活动时间、 构成会话的媒体、接收媒体所必需的信息(地址、端口、格式等)。SDP还可用于 描述会话的资源限制等附加信息,如会话所占的带宽,会话管理员联系方式等。 例如,在接收媒体的必需信息中必须指定相关的媒体和传输信息,包括媒体类型 (视频、音频等)、传输协议@rP肘DP佃,H.320等)、媒体格式(H.264视频,MPEG 视频等1,以及组播或单播D地址和媒体通信端口等信息。 在建立实时流传输会话业务时,客户端/接收端应用程序发送一个请求到流服 务器,以获取SDP信息;服务器/发送端首先根据会话请求创建或查找一个相应 的SDP文件,其中保存了SDP会话描述信息,通过RTSP或RTP协议发送给客 户端。客户端软件解析SDP文件中的P地址、通信端口、视频格式等会话描述 信息,才能正确接收并解码服务器发送的媒体流。 5.1.3 H.264的NAL层技术及RTP打包过程 H.264的编码结构在算法概念上分为两层(图4.2):视频编码层vCL负责高 效的数字视频数据压缩,网络提取层NAL负责以网络所要求的恰当的方式对数 NAL单元由一字节头信息加负载数据RBsPm 据进行打包和传送。VCL数据流在传输或存储之前要先映射到№也单元,每个 Byte Sequence Payload)组成, 用NAL单元序列(图5.2)来表示编码的视频序列【40】,并将NAL单元传输到基于 包的网络或位流传输链路,或存储到文件。 …l擞r|瞄P|h‰I麟P l艘:1 陋印 卜 图孓2NAL单元序列 Figure 5-2 Sequence Of NAL units 其中,头信息用于说明NAL单元的负载数据类型,I强SP主要包含编码的视 91 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 频数据,也可以是编码序列的参数集、补充的扩展信息、标志序列或流结束、其 他填充的数据等。 在传输NAL单元序列之前,需要根据传输网络的通信协议将其封装为特定 的格式。对于Ⅲ网络,NAL单元序列应封装成面向数据包的传输格式,例如打 包为实时传输协议融四帧格式的数据包。RTP的报文由报头和净负荷两部分组 成,其格式如图5.3所示【801。 0 23 4 8 16 31 一i爿~畦|: M 载荷类型 序列号 时间戳(Timestamp) 同步源标识符(SSRC) 提供源标识列表(CSRC) 载荷数据(PayIoad) 图5.3 RTP数据帧格式 Fi母聪5—3 RTP packet f-0rmat №地层对H.264进行RTP打包的过程比较简单,它符合RFC 1889中定义的 通用规则【2】。RTP载荷包含NAL预备的编码数据,对于RTP载荷的头部无特殊 规定。RTP头信息设置如下: . ◆ 时间戳:该码片所属的图像的时间戳,同一帧图像中的所有码片都使用同一 时间戳。如果H.264层对时钟没有作出特殊规定,则默认时钟为27MHz。 · 标记位(M):标识一帧图像的最后一个数据包。 ·序列号:每发一个数据包增加1,根据RFC 1889,在启动时设一个任意值。 ·版本号㈤:设置成2。 · 附加标记位P:设置成0。 ◆扩展位X:设置成0。 ·载荷类型:根据建立的连接动态创建,接收端据此来识别媒体类型。 H.264的RTP载荷规则中的设计要求可归纳如下: · 具有较低的开销。因此MTU的大小设计在100B到64KB为佳。 ·无需解开包中携带的比特流,就能区分该RrP包的重要性和次要性,并且载 荷规则可检测出由于误码所造成的无法解码。 · 能够支持NAL单元分割到多个R1T包中。 · 能够支持NAL单元重组,在一个Im包中传送多个NAL单元。 对NAL单元的打包有简单打包、NAL单元分割、NAL单元重组等三种方式。 其中简单打包是最基本的模式,是指刚好把一个M地单元作为R1限的载荷数据 封装到一个RTP包中,再按照R]即打包规则设置RTP的头信息,把包发送出去。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 为了最优化有效载荷与头部的开销关系,并尽可能降低丢包率,VCL层限制了 NAL单元的大小不大于通信网络的最大传输单元大小(MTU size),以避免在传输 层和网络层对数据包进行分割或重组。有线的IP连接中一般定义链路层的MTU 大小为1500B左右,无线环境下定义为100B左右。若IP层的包长大于链路层 的MTU大小,口包将被分割封装在多个链路层数据包中。P包的丢失率与D 包的分割数成指数关系,较大的包在网络拥塞时更易丢失;而较小的包头部开销 较大,浪费了网络带宽,且易引起网络拥塞,通常将较短小的NAL单元重组到 一个RTP包中。 可见,基于NAL的设计,H.264码流结构对网络的适应性强,增加了差错恢 复能力,能够很好地适应在ImmDP仰、H.324/M以及H.320网络上传输。 5.2实时视频采集与传输系统的设计实现 本节介绍本文所实现的嵌入式实时视频采集与传输系统的结构框图,以及服 务器端和客户端软件的实现。 5.2.1视频采集与传输系统的结构 视频采集与传输系统是各类实时/非实时、单向/双向视频通信系统的主体组 成部分。实时的视频通信应用有单向的视频监控系统、双向的视频电话等:非实 时的视频通信应用主要有视频点播mD)等单向视频流下载业务。一个基于嵌入 式视频服务器的实时视频采集与单向视频流传输系统框架如图5-4所示。 Figure 5-4 Block dia铲am Of Real-time Video c印ture and transport system based on an Embedded Video SeⅣer 本文采用基于P)乙墟70处理器的Liod开发平台作为嵌入式视频服务器,主 要完成实时视频采集和视频压缩编码及码流打包功能,并负责侦听客户机的会话 请求。在视频服务器中,视频采集模块采用罗技快看版网络摄像头,通过USBl.1 接口连接到Liod开发板,将模拟视频信号采集为原始数字视频信号;视频编码 模块采用)【264软件编码器,对摄像头采集到的YUv420P原始视频数据进行压 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 缩客编户码机,。并D网打络包可为以Im格是式有的线数的据P网包络,如以单以播太或局组域播网的或方‰式e通t,过或P网无络线发的送P网给 络,负责视频码流数据包的转发和传送,本文在实验中采用以太网作为传输网络。 客户机负责解码并显示接收到的视频信息,可以是PC机或嵌入式手持设备等。 5.2.2基于VLC的Server/Cl-ent实现 本节首先介绍采用开源软件VLC作为流媒体服务器与客户端播放器,进行 单向的点对点实时视频通信的方法,其次基于LirruX Socket编程【831设计了服务器 端后台服务程序和PC机客户端远程控制程序,并提供图形化的人机交互界面。 5-2.2.1基于VLC的lP网络视频传输 VLCmdeoLAN Client)是开源项目VideoLAN【踟下的跨平台的媒体播放器, 可运行于L证u)【、Mac 0S X、W.mdows等多种操作系统平台,支持MPEG.1、 MPEG_2、MePG.4、D1p3、ogg等多种音视频格式。VLC不仅可用作媒体播放器 播放视频文件、DVD视频光碟或网络视频流,而且可用作流媒体服务器,将视 频源数据按照H.26x、MPEG.x等标准进行压缩编码,并可封装为R]阳、HrrP 等多种协议格式,以单播或组播的方式在基于PV4或口v6的网络上进行流式视 频传输。 VLC功能非常强大,包含了各类模块与插件以支持多种音视频格式,并提供 友好的图形化用户界面。对于功能单一的嵌入式视频服务器而言,应在移植VLC 时去除冗余代码,并在co蚯鲫∽时对功能模块进行裁减,主要配置选项有: ·用”.-hog产am.imnnⅨt.unu)【.gnueabi”指定目标平台类型,并指定2.2.2节建 立的交叉编译工具,用”~disable.朋口妇∥’选项忽略sdl、g墩、ⅥⅨ丽dgetS、nls、 dvdread、dVdnav、mad、a52、libnlpe醇、x11、gb【、0pen百、qt4、丘eet),pe、screen、 boIljour、xiIleralna、ta91ib、skills2、1ua等不需要的功能模块。 · 为使VLC支持)【264视频编码,应指定”一enable.X264一丽t11.)【264.仃ee=P伽” 选项,其中PATH指向4.2.3节已编译好的)(264源码目录,以在链接时,将1ibX264 的X264编码功能模块添加到VLC。 · 为使VLC支持Ⅵde04Linux设备(例如USB摄像头、视频采集卡等),应指 定”一enable.v41.-wi也.v4l=P删”选项,其中PATH指向已配置编译了V4L模块 的内核源码树。 VLC采用线程同步机制来管理视频采集、压缩编码、数据打包和发送等功能 模块。用户只需通过命令行工具就可方便地调用VLC实现视频服务器的功能【85】。 94 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 例如,下面的命令指定从V4L设备/devMdeo(在本系统中为uSB摄像头)以逐行 扫描方式采集QC西格式的彩色视频图像,并调用X264编码模块压缩为H.264 视频,限定视频码率为128Kbit/s,设置帧率为12邱s,并将压缩的视频码流封装 为RTP数据包,发送到口地址为192.168.0.50的客户机,通信端口为1234,SDP 文件为m'州ebcam.sdp,通过RTSP协议(端口8080)发送给客户机: vlc—c010r v41:/dev/、,iiko:noml=secaln:size=176x144:cbannel-0..sout’枯时ansco<k {vcodec=也64,v_b=128,Venc=也64,邱s=12,丽d廿1_176,heigh卢144):np{ds仁192.168.O .50,相po应rF的 l23,4,在sd客 p=r户tsp端:运 //行19”2.v1l6c8.rOr.ts1p6::/80/801/92m.yw1e6b8c锄..O.sd1p6):8080伽ebc锄.sdp”以调用 VLC作为媒体播放器,从服务器获取并解析SDP文件,从而接收并解码服务器 发送的视频码流。 5.2.2.2 Ser、,er『CIient软件设计 本节设计Server/C1ient程序以实现客户端对服务器端VLC的网络远程控制。 配置并启动服务器端(Liod开发平台)的VLC视频服务器主要有以下途径:一是 在Liod开发板启动时即自动启动VLC进行视频采集与发送,但这种方式没有人 机交互,灵活性差,在客户端不需要视频服务时,视频服务器仍处于工作状态, 功耗较大;二是在Liod开发板本地配置和启动,这种方式可配置度大,但需要 提供嵌入式用户图形界面(GUD,另外必须在视频采集现场进行人工配置,限制 了某些探测或监控场合的视频应用;三是通过RS.232串口终端登录到Liod开发 板,使用命令行启动vLC服务器,由于RS.232串口通信距离有限,因而不能实 现真正意义上的远程控制;四是在客户端通过网络来对服务器发出远程控制请 求,对于口网络,可在服务器端配置tel.netd服务,用tehlet进行远程登录,再 用命令行接口启动VLC服务器,也可自行设计Senrer/C1ient端服务程序,以裁 减和定制控制接口,并可提供友好的客户端GⅥ操作界面,方便普通用户操作 使用,本文即采用这一方案。 ● 服务器端(Senren 服务器端采用后台控制程序video seⅣer来受理客户端video_client对VLC 视频服务器的远程配置与管理,两者约定同一端口(3490)和同一套消息码进行通 信。在系统初始化脚本/etc/i11it.d/rcS(见2.2.5.2节)中激活网卡后添加后台运行服 务器控制程序、rideo server的命令,以使Liod开发板启动后自动在后台运行 Vide吖eⅣer,、ride0_server首先创建服务器端的套接口描述符,并与服务器端的 口地址及与客户端所约定的通信端口绑定,接着进入服务响应的主循环体,侦 听套接口数据及连接,根据来自客户端的消息请求提供不同的服务。video server 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 C圃 软件流程图如图5.5所示。 srv proc=fork(),生成服务子进程 侦听套按孚端口数据 liSte村srv socH文MAX aL皿NT sele哟设置sⅣsockf.d为非阻塞I他访河 send()向Cliem发送确认信息OK 根据aient发来的请求设置VLC启动参 数,调用exec《)启动Ⅵ。C视频服务器, 进行实时视频采集、压缩与流化传输 接受客户端连接请求,并建立对应的套接字 clt-印c如扣accept(s啦-soc蛾,cIt_ad也…) }收到disconnec Y ()一SRV-QU_! 团与Cli锄t连接的套接早描述符 clt soIckf∞,并等待子进程VLC退 send()向Cliem发送确认信息NOK 。l ldll(srv—proc,sIGTEl∽关闭VLc服务器, wai单id()等待子进程Ⅵ。C(pi晦Ⅳproc)退出 一 图5.5 Senrer后台服务程序流程图 Figure 5-5 Flow Chart of Sen,er daemon sen,ice 图5.5描述了、,ideo serVer的主体流程,其中省略了socket()、billd()、1isten()、 select()、acc印t()、recv()和send()等系统调用的错误处理。为保证连接及消息 传输的可靠性,Server与Client间的消息传递是基于TCP的连接。一旦侦听到 来自Cliem的连接,Server首先接受Client的连接请求,并解析Client发送过来 的消息码,如果是SRV QUT命令(在Client的GU界面点Discollnect按钮), 则终止正在运行的VLC服务器进程,转入等待新的客户端请求。由于是单点对 单点的通信,在客户端只有”Connect”和’,Disconnect,’两种操作方式,因此若非 SRV QuT命令,则必然是由客户端”Conne甜’按钮发送过来的VLC服务器启动 参数,Server端视为VLC启动请求,并根据Client的配置,通过f10rk()调用将 VLC作为子进程启动。若VLC启动成功,发送OK消息给C1iem,同时VLC服 务器开始视频采集、压缩与传输;若启动失败,发送NOK消息给Client,并转 入端口侦听状态。SeⅣer与C1ient间的视频数据传输协议通过Client端可设置为 IⅡ’SP、RrP舢DP等。 图5.5描述的、,ideo seⅣer服务程序只适用于单Server与单C1ient的连接, 此时VLC视频服务器只能以单播方式传输视频。若要实现组播方式的视频传输, 可为、,ideoJerver设置一个管理员帐号,Senrer端仅对管理员授权更改VLC视频 基于H 2“的嵌^止蜜时视频采监‘1*输系统的*汁1j生现 牛末9m范人学硕t论文 服务器的配置及肩停vLc进程。在侦听到新的client连接时,首先进行身份验 证,若为管理员权限,则按照新的配置重启server端vLc进程i若非管理员权 限,则检查clicnt端IP地址是否属于授权的组播地址,若是组插地址内的cliem 连接,且s㈣r端存在正在运行的vLc进程,则发送OK消息给c11e卅,行则 发送ERROR消息。 · 客户机端(cllem) 客户机端程序video cIieDt的运行于Pc机(操作系统为Fedora 6)半台,用十 向scrver端发送远程控制命令。通过远程控制命令,可以配置服务器端的视频 格式、码率投传输协议,启停服务器端vLc进程.调_}{j本地vLc播放器接收并 播放来自服务器端的视频图像等。 为方便用户操作,基于跨平台的cH图形用,,界面库OT【删没计了GuI操作 界面,如图5—6所永。 图5—6clientGuI界面 Figure5-6Clie叭G U1 其叶]对服务器的设置包括:(1)服务器lP地址;(2)视频数据传输脚议,通过 下拉菜单可设背为uDP/TcP、RTsP或HTTP等;f3)剧像格式与下均码宰,预 设了四个视频档次(video Pron】e),分别为QcIF.64Kbl“s、QcIF一128Kbl“s、 clF-128Kbi“s和cIF-192Kbl讹,由于服务器端对clF格式图像采集及压缩编码 速度较慢,凶此H前仅支持前两个档次。设簧完毕,点”co衄ect”按钮,向sen℃r 发送附带服务器设置参数的连接请求,若从ser垤r接收到OK消息,表明s目ver 端接受了本地的连接请求并肩动了servef端的VLc服务器,这时clieni 将”connect”按钮置为”Djsconnect”按钮(图5—7),同叫调用本地VLc播放器,接 收并播放服务器发送的视频数据:若从server接收到NOK消息,则弹出错误提 示对话框。cliPm在正常接收和播放服务器发送的视频数据时,若点”Disconnecr 按钮,则向server发送sRv OUIT请求,同时关闭本地的vI,c播放器,server 接收到sRv OurI消息后,关闭seⅣcr端的vLc服务器。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 5.3本章小结 实时视频采集与传输系统在功能模块上包括视频采集、视频压缩编码、网络 传输、解码恢复等几个部分。本章主要讨论了基于P网络的H.264视频传输技 术,并采用Liod开发平台作为嵌入式视频服务器,以PC机为客户端,设计了 Serv州Client网络远程控制服务程序,在以太局域网内实现了一个基于VLC的点 对点的实时视频采集和传输系统,系统的整体性能可满足一般嵌入式视频应用的 准时实性要求。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 第六章总结和展望 华东师范大学硕士论文 6.1总结 随着通信技术和多媒体技术的发展,视频通信已逐步成为数字通信网络的主 要业务之一,实时视频采集与传输子系统则是视频通信系统中的主体。与嵌入式 技术相结合,视频通信终端的小型化、智能化将极大地提高系统的灵活性和适应 性;同时,微电子技术和嵌入式计算技术的不断发展,为嵌入式系统的多媒体化 创造了条件。嵌入式技术与网络、通信和多媒体技术的相互融合将成为视频通信 领域的发展趋势。 本文采用基于PⅪ墟70处理器的Liod开发板,建立了嵌入式L幽】X应用软件 开发平台,着重研究了嵌入式Linu)【开发技术;接着对视频采集、视频压缩编码、 网络传输等视频通信系统中的主要功能模块分别进行了研究,着重研究了基于嵌 入式系统的H.264实时视频压缩编码方案以及X264软件编码器的性能优化,最 后设计了Senrer/C1ient服务程序,实现了基于VLC的嵌入式实时视频采集与传 输系统的模型。具体工作包括: 1.嵌入式LinuX开发平台的建立:采用最新的软件包搭建了宿主机交叉编 译环境;移植嵌入式L洒Ⅸ操作系统到Liod开发板,包括Bootloader和Lin:暇 2.6.22.6内核的裁减和移植,NOR FLASH存储器、LAN91C111网卡等设备驱动 程序的移植,基于Busybox的根文件系统的构建等。 2.实时视频采集程序的设计:分析并移植了gspca开源USB网络摄像头驱 动程序,编写了实时视频采集程序,并测试了USB摄像头的视频数据采集性能。 3.嵌入式实时视频H.264编码方案的选择:结合视频应用的场景特点,选 用QC正格式Fore蚴标准测试序列进行编码实验,给出了一套图像质量损失很 小、编码速度有大幅提高的X264编码方案。 4.H.264编码器的优化:结合嵌入式处理器PⅪ也70的硬件特点,对)【264 编码器进行了编译级和代码级的优化,包括浮点运算性能优化、程序算法结构优 化、函数调用与循环体执行效率优化、基于无线MMX指令集对DCT门DCT变 换、量化/反量化等的汇编优化等。 5.Server/C1ient软件设计:基于LinuX Socket编程,设计了Senrer/Client端 服务程序,以实现客户端对服务器端的远程控制,并在此基础上实现了基于VLC 的嵌入式视频服务器,完成了一个点对点的单向嵌入式实时视频通信系统的模 型。服务器对QCIF图像的采集速度为12印s,视频传输端到端延时约1s,可满 足视频监控等嵌入式视频应用的准实时性要求。 100 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 6.2工作展望 由于时间及条件限制,本文完成的嵌入式实时视频采集与传输系统是一个应 用模型。所做的工作仍有不足,有待改进的方面主要包括: 1.视频采集模块的性能改进:本系统中USB摄像头对对QVGA格式图像采 集数据率接近USB 1.1全速模式数据率极限值,而对QCIF格式图像的采集速度 只能达到12邱s,采集数据率与理论值差距较大,这既与摄像头的感光器件、桥 接芯片的硬件特性有关,也与驱动程序和硬件设备的匹配程度有关。可考虑更换 USB摄像头,或者针对摄像头的硬件特性对驱动程序进行优化,以提高视频采 集速度。此外,PⅪ心70处理器采用的Quick Capture技术提供与CMOS或CCD 图像传感器直接相连的接口,并可支持最高为416Mbps的数据传输速率【盯】,可 设计相关电路及驱动程序,在降低系统成本的同时,改善视频采集子系统的性能。 2.x264编码器的进一步优化:x264编码器功能模块众多,代码量巨大,本 文所作的优化工作仅针对)(264编码器中的部分关键代码。从提高编码效率的角 度,可进一步扩大编码器代码的优化规模,并可引入新的高效的运动估计等算法; 另外,本文针对存储器访问的优化工作比较欠缺,可进一步优化内存及Cache 访问效率,以提高应用程序性能。从提高编码质量的角度,可引入逆光补偿、伽 马校正等预处理算法,提高CMOS图像传感器采集到的视频质量,再用X264进 行压缩编码。 3.视频流的实时传输:本文的传输系统模型存在1s左右的端到端的传输延 迟,不适用于会话业务等对实时性有严格要求的场合。视频传输的质量与时延既 与通信网络类型及带宽、传输协议、流量与差错控制方法等密切相关,也与通信 终端的应用程序性能有关。为在各种复杂的网络环境下,实现高质量、低延迟的 视频流传输,需要结合通信网络自身的特点,在码率控制、网络流量及拥塞控制、 传输差错控制与恢复等方面进行大量的研究与改进工作,并对通信终端软件进行 合理优化。 4.系统功能的完善:本文实现的系统基于有线D网络,通过移植无线网卡 驱动程序,可方便地将系统用于无线P网络;还可充分利用Liod开发板的硬件 资源,移植LCD和触摸屏驱动程序,并移植一个嵌入式G町系统(例如qopia), 设计开发友好的图形化的服务器端本地配置程序;此外,还可为系统添加语音功 能,实现真正意义上的多媒体通信系统。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 参考文献 华东师范大学硕士论文 1.刘富强.数字视频信息处理与传输教程[M].北京:机械工业出版社,2004 2.余兆明,查日勇,黄磊,周海骄.图像编码标准H.264技术[M].北京:人 民邮电出版社,2006 3.郑灵翔等.嵌入式系统设计与应用开发[M].北京:北京航空航天大学出版 社,2006 4.视频技术是未来几年嵌入式系统发展的排头兵[J/OL].电子工程专辑, h却://、硼眦eetchiIla。com/_6灯8800507281_617693—NT_529050eb.HTM 5.刘强.基于Xscale PⅪ地7x的H.264编码器实现与优化[D].南京:河海大 学计算机及信息工程学院通信与信息系统,2007 6.Intel XScale⑧Core Developer’s Mamlal,2004 7.Intel⑩P)【A27x Processor Fanlily DeVeloper’s Manual,2006 8.Liod Evaluation Platform User’s G1lide v1 9.孙纪坤,张小全.嵌入式LiIl'uX系统开发技术详解——基于A删Ⅵ[M].北 京:人民邮电出版社,2006 10.陈文智等.嵌入式系统开发原理与实践[M].北京:清华大学出版社,2005 11.P.R a曲aVan,Am01 Lad,Sriram Neelakandan.Err山edded L证眍System Desi阻 and Development LM].New York:Auerbach Public觚ons,2006 12.Liml)【2.6:A Break:tbrough for Embedded Systems[ⅣOL].h却:仇缸uxdeⅥces .com/articles∥灯775 1 365763.h:mll 13.刘伟,童敏.L洫uX 2.6内核的嵌入式系统应用[J].电子技术应用,2006 年第1期 14.黄振华.Bllilding锄一linux tOolcl妇for舢≈M/XScale-iWM陋戤(newABI). htcp:/厂blog.9hinallI】ix.net^l/26710/showar(j94113,hnId 15.Ⅵh锄Shlkla.L姗uX线程模型比较:L证u)【111reads和NPTL[J/OL]. h呻:/,姗Mibm.co州deVelope刑orkS/c矾iIl删一t11read啦.h叫 16.触潮Ltd.Application Binar)r Inte血ce(ABI)for tlle脚泓心cne曲鹏. h却://、^n^眦am.com/products/D们ools/ABI.html 17.hnp:∥谢虹debiall.o叫AmlEab口ort 1 8.h_tcps://support.codesource够com/GNUT001c蛐/切rgeou℃h1 7④enlplatc乒f砷 19。hctp:肽egel.codcrosstool/ 20.h_tcp://w帆舭aknet.org/111art训啪sSt001/ 21.詹荣开.嵌入式系统Boot Loader技术内幕[J/OL].http:/,蚋哪.ibm.com 102 基于}L2“的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 /develop洲rks/crI/lillllx/】-bⅡoad晌dex.h缸m 22.刘淼.嵌入式系统接口设计与LilluX驱动程序开发[M].北京:北京航空 23.航黄天振大华学,出李版外社云,,200刘6锦高.删的位置无关程序设计在B00tloader中的应 B00tiI坞删LmuX.R启vision 用[J].单片机与嵌入式系统应用,2008年第1期 24.Ⅵncent Sanders. 1.10, 2004 New删Pla怕m[J/OL]. 25.Wbokey,1呔一S11ing.Poni:ng the Lillu)【Kemel t0 a h郇:肌州w.缸e1.com/pca/deVelopeme仰ork,2002 26.Daniel P.BoV鸭Marco Cesati.Und懿stand崦龇L如x K锄el,3rd Edition [M].O、Reilly,2005 27.RuSseU飚I培.Kemel M锄。巧Layout on删Lhmx.b卸:,^^r、^m,黝.1imⅨ. o玛.讪出eVeloper,2003 28.Jona:凼a玎Corbet'Greg心omHartm纽,AlessaIldr0 R曲ini.Linux DeVice D曲ers, 3‘4 Edition[M].O、R-eilly,2005 29.KaIim YaglⅡnour.Buildillg EIllbedded Lillux Systems[M].O’I沁illy,2003 30.J主In Gi硒rd,Ryall OliVer,MaaIrten Lall处orst.Cross—CoInpiIed Lillu)【From Scratch—Embedded[J/OL].h却://cross—lfS.or咖iew比1fs.eIllbedded/ann/,2008 31.徐伟,黄浩亮,张圣华.基于Spca5)【X.LE的网络图像实时采集系统的设计 与实现[J].机电工程技术,2006年第35卷第10期 32.黄振华.使gspca支持自己的USB摄像头.h卸:/似og.c№aunix.n引u/26710, sho、)l吐3 87765.h11l 33.Michael H Schi]mel【,Bill DiIb,Halls Verl(uil,Mall抽Rubli.Ⅵdeo for LiIllⅨTw0 API Specification:Revision 0.23.h却:胴i11u)(押.o玛斑ownloads/vide041imⅨ/AP∥ V4L2√垤I,2007 34.越an Cox.Ⅵde04Lin.u)【Pro铲am如ing,2000 35.htIp:肌%耐.1油嫩V.org/dowIdoadsMde04linll)【/APIⅣ4L1√心I.Il切d 36.况蕴玲.基于H.264的嵌入式家庭远程视频监控系统的设计与实现[D].成 都:电子科技大学软件工程,2007 37.张雄,叶念渝,田俊.基于S3C2410的网络视频采集[J].测控技术,2006 年第25卷第5期 S恤锄ing专栏[J/OL].h郇:/慨j011en.o聊洒Ⅸ/ 38.MaXwell Sayles.HowT0氨Dr video F0r LiInⅨⅣFL).2002 39.陈俊宏,刘力彰.Ⅵdeo video二s魄amin∥ 40.Iaill E.G融cllardson.H.264 and MPEG.4Ⅵdeo Co甜pression:Ⅵdeo Coding for 103 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 Ne婷generation Mllltimedia[M].John Wiley&Sons,2003 41.Thomas晰eg跹d,Gary了.SulliVan,asle Bjontegaard,Ajay Lu也ar.O懈、riew of 也e H.264几WCⅥdeo Coding StaIld硼[J]. IE髓TmsactionS on Cn疵s and Systems forⅥdeo Technolo鼢VOL.1 3,N0.7,July 2003 42.Jo缸Ⅵdeo Te锄of ITU-T a11d ISO/IEC.Dr蚯te)(t of H.264脚,C丘deli够mge eXte璐ionS anlendment[C].USA:Jo血Ⅵdeo Te鼬(ⅣT),2004 43.DetleV Ma印e,ThomaS WiegaIld.H.264瓜伊EG4-AVC fidel时 mge extensio璐: T001s,profiles,pe而mance,and application are2Ls[C].GenoVa,I.叫y: mEE In钯如面。砌Co疵rence on hnage Processing(IC邛’05)2005:593—596 44.htcp://en.、7l,ikipedia.org^撕ki/H.264撑LeVels 45. Iaill E.G硒chardson. Ⅵdeo Codec Desi盟:DeVeloping IⅡ1age andⅥdeo Compression Systems[M].Jolln、7i,iley&Sons,2002 46.K.R.&lO,P:Ⅵp.Discr酏e Coshle Transfom[M].AcadeIIlic Press,1999 47.R矗ymond Westv嘣er,Borl∞Furht.Real—1洳eⅥdeo Conlpression Teclllliques a11d A190ritllIns[M].日uwer Acadernic Publishers,1 997 48.郭斌.视频压缩中的熵编码研究[D].杭州:浙江大学信息学院信息与通 信工程,2007 49.Gary J.SulliVan and T№maS Wie鳃ad.Rate-distonion Opt眦zation forⅥdeo Compression[J].mEE Si印al Processi工lg Magazille,Nov.1 998 50.Kw心Jung Ob Y0一Sung Ho.AdaptiVe Rate—Distortion optimi捌ion for htme H.264.GInvan萄u of Science and Techn0109y 51.程德.H.264视频编码标准研究及其编码器的优化[D].上海:上海交通大 学模式识别与智能系统,2007 52.Jom Osten抛】鸣Jan Bo吼ans,Peter List.Ⅵdeo cod堍诹也H.264/AVC:T001s, Perfomlau∞e a11d CompleX埘[J].ⅢEE Circuits aIld SyStem Magazine,2004, VohlIn.e 4(Issue 1,Fh瓯Q1larter):7—28 53.R.eponer of血e Fomal Ve畦fication Tests on越rC.ISO/】匝C 1 4496-1 0 ITU—T R.ec. H.264Ⅳ咀EG2003/N623 1,Dec.2003 54.OMAP5910/5912 Multimedia Processor DSP Subsystem Ref.erence Guide 55.Marvell⑧PXA320 Processor Series, http:/^^,、^,、^,marvell.conl/files//products/ /cellul耐applicaiioll/PX躬2叶吣4.pdf 56.L0reIl Merritt,黜hul VanaII】.hnproVed Rate Con缸D1 and Motion Est硫ation F0r H.264 Encoder[J].Inlage Processillg,聊狙htem_tio砌Co疵renCe,2007 57.MPEG一4 AVC/H.264 decoder comparison(舶m Doom9).h卸:/^糯Msoho对a0- 104 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 -ba0.com/cb硫s咖b跏109■ew.php?id-5 10829 58.D础triy valt01in,Dmitriy lⅫ诹0v,舢eXander Parshill.MPEG4 AVC/H.264Ⅵdeo Codecs Comparison.CS MSU研a】斌cs&Media Lab,Ⅵdeo G倒叩,2007 59.杨士萱、陈柏源.H.264/.AVC技术与应用简介[J].国立台北科技大学咨讯 工程系.影像与识别,2007 60.h却://en.州kipedia.o玛h姗.264撑SofbⅣare encoder—fean】re comparison 61.h_ttp:/^ⅣwⅥr、,ide01an.o叫deVelopers/x264.hnnl 62.Willi锄C.Y Lee.Whless and Cellular Telecom鲫mic撕onS,3坩Edition[M]. McGR AW二ⅢLL,2006 63.Gonzalo C锄arillo,Miguel一Angel Garcia.M枷n.111e 3G口Muhimedia SubsyStem(IMS):Merging廿1e Intemet and me Cellmar W矾d[M].John Wiley& SorLs,2006 64.htcp://Ine谢虹.project357.con价m(i/X26tSe缸gs 65.Se玛ey Panasyuk.OptiIIlization of Ernbedded Lill_u)【SyStems晰thout FPU[D]. SUNY 111stitute of TecllIlolog)r,CSC598 Computer Science MaSter Project,2007 66.Ernbedded Svstem Pe怕mance.华清远见嵌入式培训讲义 67.徐钦桂,李勇,张杰明,杨桃澜.XScale体系结构及编译优化问题[J].计 算机应用,2004年12月第24卷 68.m哟dllction to b证nsjcs.b却:/,sof妇are∞础nuni锣.in『tel.co“秫cles/en∥336 9.htnl 69.徐钦桂,何文斌,张杰明.xScale应用程序性能的优化策略[J].单片机与 嵌入式系统应用,2004年12月 70.础chard M.Stallmall a11d t11e GCC Developmem Co加删mity.Us堍也e GNU CoInpiler Collection,For GCC Version 4.2.3. 7 1.Hye—Yeon Cheong,A.M.T0umpis.FaSt Motion EstiIllation谢thinⅡ1eⅣT codec [j].ⅣT-E023,Oct 2002 1’锄g,mg 72.Zhenyu W.ei,Kai Lam N.Ngan.Implementation of H.264 on Mobile DeVice[J].IEEE Trans.Consumer E1ec哟11ics,vohHne 53,IsSlle 3,A.ug.2007 73.Loren Merritt et a1.X264:A Hi曲Pe而nnance H.264几WC Encoder. 74.杜春雷.触m体系结构与编程[M].北京:清华大学出版社,2003 S),mes,C晡s州咖.删System 75.Andl.ew N.S10ss,Dominic DeVelopcr’S Guide: Designjng and 0毗ir血zing System Softv姗[M].Morgall Kau丘n黜PublisherS, E1sevier,2004 76.Intel⑧晰eless加旧(1M Teclln0109y Developer僦de.AuguSt,2002 105 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 77.N.C.Pav%M.H.Kh矾B.C.舢drich.Accelera曲g MobileⅢt曲edia、杭m也c In.tel@P)【A27x Processor Falllily. 78.王伟波,李善平.WMMX技术及应用[J].计算机工程与设计,2005年9 月第26卷第9期 79.刘伟,黄佩伟.基于XScale架构的m心Ⅸ技术在视频编码中的应用[J].电 视技术,2006年第8期 80.孙学康,石方文,刘勇.多媒体通信技术[M].北京:北京邮电大学出版 社,2006 8 1.h印://t001s.ietfo玛/btInl/rfc4566 82.11卸:∥en.w飚pedia.or∥wi玉:0SessionjDescription_ProtoC01 83.W打en W.Gay.L妇ⅨSocket Pro莎ammingby Ex锄ple[M].USA:Que,2000 84.h_仕p:肌啉帆啊deolan.o叫 85.Alexis de La:Cb.e,JohaIl Bilien,AIlil Daoud,Clement Stem【c,Antoine CeUerier, Je心Paul S锄an.ⅥdeoLAN S仃e锄吨Howto. 86.倪继利.q及L证u)(操作系统窗口设计[M].北京:电子工业出版社,2006 87.倪维波.基于PⅪ墟70平台视频捕捉的实现和优化[D].南京:东南大学 电路与系统,2006 106 基于H.2“的嵌入式实时视频采集与传输系统的设计与实现 致谢 华东师范大学硕士论文 值此论文完成之际,首先要深深地感谢我的导师刘锦高教授三年来对我的谆 谆教诲、悉心指导与热情帮助。恩师渊博的学术知识、严谨的治学态度、深邃的 思想、宽厚的人格关怀,使我不仅在专业研究上受益匪浅,更学到了许多为人处 世的道理,让我终生受益。在此,谨向我的恩师表示由衷的感谢并致以崇高的敬 意! 感谢我的师兄李外云博士,是他给我指引了学习的方向,树立了在学术上积 极钻研、勇于进取的榜样。在论文撰写的过程中,他提供了许多宝贵的意见。 感谢电子系的所有老师,是他们三年的悉心教导,使我在专业知识上不断进 步,在科研能力上不断提高,这才有能力完成本课题的设计。 感谢实验室所有的师兄妹们,谢谢他们在学习与工作中所给予的合作与支 持。 感谢我的父母,谢谢他们多年来的养育之恩,他们在学习与生活上给予我无 微不至的关怀。感谢所有关心我的朋友与亲人。 本文所引用资料的编、著者,在此一并致谢。 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 华东师范大学硕士论文 攻读学位期间发表的学术论文 1.黄振华,李外云,刘锦高.删的位置无关程序设计在B00tloader中的应用 [J].单片机与嵌入式系统应用,2008年第1期 2.李外云,刘锦高,黄振华.基于PⅪ蛇55 XScale的外部存储器接口设计[J].电 子器件,2006年12月第29卷第4期 基于H.264的嵌入式实时视频采集与传输系统的设计与实现 作者: 学位授予单位: 被引用次数: 黄振华 华东师范大学 2次 引证文献(2条) 1.刘洋.潘青龙.郝帅 基于S3C2440处理器的嵌入式视频采集系统[期刊论文]-电子科技 2011(7) 2.张哲.赵磊.于潇.韩飞 基于H264的嵌入式视频监控系统的设计与实现[期刊论文]-山东理工大学学报(自然科学 版) 2011(5) 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1372602.aspx

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。