WinCE下音乐播放器的实现毕业论文.doc_第1页
WinCE下音乐播放器的实现毕业论文.doc_第2页
WinCE下音乐播放器的实现毕业论文.doc_第3页
WinCE下音乐播放器的实现毕业论文.doc_第4页
WinCE下音乐播放器的实现毕业论文.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

wince下音乐播放器的实现wince下音乐播放器的实现摘 要:近年来随着嵌入式技术的发展,嵌入式的应用领域也越来越广泛。嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。本设计是在嵌入式wince系统下实现音乐播放器驱动的编写。本设计运用c+ 语言实现wince下的音乐播放器。采用visual studio 2005中的plafform builder for ce 6.0工具进行开发,搭建wince开发平台,编写音频驱动程序,实现播放音乐功能。采用dma数据传输方式,把要播放的音频数据存储在一段固定的内存区,然后dma控制器把内存区的音频数据通过iis通信接口送往音频芯片uda1341ts解码播放。本音乐播放器实现了以下功能:显示及调节当前音乐播放的进度;调节声音的大小;更换正在播放的音乐;查看正在播放文件的相关信息;显示当前歌曲的歌词等。关键词:wince 音频驱动 iis通信接口第 29 页 共 29 页implement the music player under the wince systemabstrac:in recent years, with the development of embedded technology, embedded application field is becoming more and more broad. embedded system is a special purpose computer system which takes application as center and the computer technology as foundation; its cuttable in software and hardware, and suitable for the application system which has strict requirements for the function, dependability, cost, volume and consumption. this design is to implement the writing of music player driver based on the embedded wince system. this design is using c+ language to implement the music player under the wince system; using plafform builder for ce 6.0 in visual studio 2005 to develop, build wince development platform, write audio driver, and implement music player functions; and using dma data transferring way to put the audio data which is for playing on a fixed memory area, and then the dma controller send the audio data in memory area to audio chip uda1341ts through the iis communication interface to decode and playback. this music player implements the following functions: display and adjust the progress of the currently playing music, adjust the size of the voice, change the playing music, view the relevant information of the playing file, and display the current song lyrics, etc.key words: wince audio driver iis communication interface 目 录 前 言1第1章 绪论21.1 选题背景21.2 国内外研究现状21.3 课题研究的意义21.4 论文框架结构3第2章 相关技术简介42.1 visual studio 200542.2 msdn52.3 windows ce 6.052.4 设备仿真器72.5 edukit-iv平台72.6 microsoft activesync8第3章 系统分析93.1 系统开发的意义93.2 需求分析93.3 功能介绍9第4章 wince下音乐播放器的设计与实现114.1 系统总体设计114.2 播放器功能模块设计124.2.1 播放器设计124.2.2 common 工程核心模块134.2.3 common 工程核心模块数据结构154.2.4 nodedef 功能模块定义对象174.2.5 nodeclass 功能模块定义对象链表结构174.2.6 node 功能模块数据对象174.2.7 几个数据对象的相互关系174.2.8 datadef 功能模块属性184.2.9 datatable 功能模块属性列表184.2.10 nodemodule 外部插件功能模块184.2.11 核心模块的初始化流程及相应代码对应关系194.2.12 界面相交互的播放控制模块194.3 音频驱动20第5章 系统可靠性测试245.1 播放器启动测试245.2 添加文件测试245.3 播放歌曲测试245.4 测试总结26结 论27致 谢28参考文献29前 言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛,嵌入式实时操作系统目前应用范围越来越广,逐渐成为操作系统开发和发展的主要方向。其应用领域大到工业控制,小到个人消费品如数码相机,手机和pad等无处不在。嵌入式系统在我们的生活中发挥着巨大的作用,嵌入式是专用的计算机系统,软硬件的设计必须协同和严格规范1。这些年来掀起了嵌入式系统应用热潮的原因主要有几个方面:一是芯片技术的发展,使得单个芯片具有更强的处理能力,而且使集成多种接口已经成为可能,众多芯片生产厂商已经将注意力集中在这方面。另一方面的原因就是应用的需要,由于对产品可靠性、成本、更新换代要求的提高,使得嵌入式系统逐渐从纯硬件实现和使用通用计算机实现的应用中脱颖而出,成为近年来令人关注的焦点2。经过几十年的发展,嵌入式系统已经在很大程度上改变了人们的生活、工作和娱乐方式,而且这些改变还在加速3。 windows ce有大量的经过嵌入式处理的应用软件和操作系统特性,可供用户灵活选用。windows ce操作系统对每一款硬件设备,都有其对应的设备驱动程序。驱动程序使得某个硬件可以响应一些定义良好的编程接口,同时完全隐藏了设备的工作细节。因此,研究驱动程序的设计方法对嵌入式系统设计有着十分重要的意义4。本文分析了基于wince嵌入式的mp3播放器的工作原理,详细介绍了mp3播放器的功能及其硬件设计、软件设计和驱动程序编写的方法,给出了基于 mini270开发板的mp3播放器的具体实现方案并重点讲述了其硬件的实现、软件和驱动的编写,实现了wince嵌入式mp3播放器对音乐的演奏。第1章 绪 论1.1 选题背景 虽然嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机的出现到今天各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。 目前嵌入式的应用渗透到我们生活的各个领域,几乎很难找到哪个领域没有嵌入式的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等5,这些都离不开嵌入式。1.2 国内外研究现状 21世纪,电子技术进入了突飞猛进的发展阶段。随着集成电子技术的迅速发展,特别是微型计算机的出现使现代科学研究得到了质的飞跃,可以毫无夸张的说,嵌入式技术的出现则是给现代工业测控领域带来一次新的技术革命。目前,嵌入式以其功能强、可靠性高、造价低等优点,在工业控制系统、数据采集系统、智能化仪器仪表、智能家居、智能手机、办公自动化等诸多领域得到极为广泛的应用,并已进入家庭,从洗衣机、微波炉到音响、汽车,到处都可见到嵌入式的踪影。因此,嵌入式技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。 目前,我国物联网发展与全球同处于起步阶段,初步具备了一定的技术、产业和应用基础,呈现出良好的发展态势。产业发展初具基础。将要建成全球最大、技术先进的公共通信网和互联网。据不完全统计,我国2010年物联网市场规模接近2000亿元。在十二五的规划中未来嵌入式会有更大更好的发展前景。1.3 课题研究的意义 随着芯片技术的快速发展,嵌入式系统的性能逐步提高,功能也越来越丰富。嵌入式系统在众多领域的应用给我们的生活带来了便利,并且对人们的生活方式的改变和生活质量的提高具有重要的影响。在这些领域中,消费电子产品的应用具有更为广泛的潜力。智能手机、掌上电脑为代表的高端嵌入式终端产品的普及率也越来越高,嵌入式系统产品中对多媒体的应用也越来越多,而在这些多媒体的应用当中,要求对各种多媒体文件的播放支持显得越来越重要6。 当前,消费类电子产品更新换代的速度进一步加快,市场需求不断增大。mp3是嵌入式的最主要应用之一,高端的mp3已经不仅仅着眼于实现音乐播放这一简单功能,而是同时具备了文本浏览,图片浏览,甚至视频播放等强大功能。本文重点讨论了基于mini270开发板的mp3的功能的实现,包括开发环境建立,内核配置与编译,开发等一系列详细过程。1.4 论文框架结构 论文主要完成的工作是在现有的硬件和软件环境下,利用开发工具进行设计、编码和调试,实现的功能包括:音乐播放、显示当前音乐播放进度、声音控制、正在播放文件的信息、演唱文件信息、播放时间信息、播放文件歌词。本论文主要章节安排如下: 第1章,首先分析嵌入式系统,以及嵌入式系统在国内外的研究现状。 第2章,介绍编写驱动中用到的开发工具及开发环境。 第3章,从需求、功能、设计方面进行系统分析。 第4章,驱动的编写流程与代码的实现。 第5章,对播放器进行测试。第2章 相关技术简介2.1 visual studio 2005visual studio 2005是基于.net2.0框架的。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。visual studio 包含有众多版本,分别面向不同的开发角色。 vs2005开发工具支持windows ce操作系统定制与开发、应用程序的开发,并且为一系列设备提供了操作系统构造块以满足纵向市场的需求。 vs2005为应用程序开发提供了一系列重要功能,其中包括用于托管应用程序开发的.net compact framework 2.0以及适用于本地应用程序开发人员的win32、mfc、atl、wtl和stl。在vs2005中可以重用在windows embedde ce早期版本中开发的用户界面和应用程序中的大多数现有资源。 windows ce 6.0操作系统定制与开发使用vs2005中的一个集成工具:plafform builder for ce 6.0。pb6.0是一个用于构建自定义嵌入式操作系统设计的集成开发环境,其附带有用于执行设计、创建、安装、测试和调试操作的开发工具。vs2005的初始主界面如图2.1所示。 图2.1 vs2005初始界面 2.2 msdn msdn 技术资源库是为使用微软工具、产品和技术的开发人员提供的精华资源。它包含丰富的技术编程信息,包括示例代码、文档、技术文章和参考指南。在学习windows ce 6.0的过程中,msdn是一个不可或缺的帮助文档,几乎所有的技术问题都可以找到解决的答案。 2.3 windows ce 6.0windows ce 6.0是微软公司推出的windows ce系列最新版本,是当前主流的实时性强、模块化、功能强大、性能稳定的嵌入式操作系统之一。windows ce是高度模块化的嵌入式操作系统,它可以根据目标设备或平台的不同特点进行定制。windows ce是一个实时操作系统,实时支持功能在以下几方面提升了其性能:支持嵌套中断; 允许更高优先级别的中断首先得到响应,而不是等待级别低的中断服务线程完成;更好的线程响应能力;对高级别的ist的响应时间上限的要求更加严格;更多的优先级别,256个优先级别;更强的控制能力,对系统内的线程数量的控制能力可使开发人员更好地掌握复杂程序的工作情况;丰富的多媒体和多语言支持丰富的多媒体支持是 windows ce 的一大特点,基于 directx api和 windowsmedia 的技术可以提供高性能的视频、音频、流式多媒体和 3d 图形处理服务7。 从windows ce 6.0版本开始,windows ce的名字改为windows embedded ce,当然这也是为了结合windows embedded品牌作出的改变。windows ce 6.0经历了ce历史上第二次内核重写,使ce操作系统更加符合当今嵌入式开发的方向。它的特性如下: 强壮的架构; 统一的内核;驱动;安全;兼容性;设备性能;新的媒体和通讯组件;网络媒体设备;数码摄像机;蜂窝网络;投影仪;强大的开发环境;设备模拟;编辑器;改进的编译器;可获取源码。 windows ce 6.0的操作系统布局在原来的基础上进行了更新,其主要特点是具有新的统一的内核。如图2.2所示。oem层是嵌入式硬件与windows ce操作系统的接合层。在oem层的代码构成中,oem层主要由csp(chip support package)代码与bsp(board support package)代码组成。csp支持不同的微处理器体系结构,bsp支持不同的微处理器和外设,bsp包如图2.3所示。操作系统层是windows ce 6.0操作系统的核心层,其为下层的oem以及上层的应用程序提供服务与应用程序接口。应用层包括了windows ce应用程序、internet客户服务、用户接口以及客户应用程序。图2.2 windows ce 6.0 的架构图2.3 bsp包的组成 2.4 设备仿真器windows ce 6.0的开发工作中,定制操作系统的工作是基于bsp来实现的。bsp包叫做板级支持包,主要是对硬件功能的软件抽象。针对实际应用平台,要开发或移植一个bsp包,往往会花费较长的一段时间。为了能够快速地开发应用系统,windows ce 6.0提供了设备仿真功能称作模拟器(device emulator)。设备仿真主要用于调试创建的内核和应用程序,操作系统的大多数api对于任何cpu而言都是相同的,考虑到不受cpu类型影响的简单程序,都可以在模拟器上调试。在实际开发中,模拟器常用来调试软件的界面。仿真设备运行后如下图 2.4所示。 图2.4 仿真工程运行界面 2.5 edukit-iv平台 windows ce 6.0基于armv4i的设备仿真,为调试内核及应用程序提供了便捷,但是最终需要的是在实际的应用平台上运行应用系统,所有的开发工作都要在实际平台上最终实现。一个应用平台会根据需要扩展外设,在板级支持包bsp中会提供对外设的软件支持,可见bsp包的开发是一个重要的工作,而定制windows ce 操作系统也是基于bsp来完成的,同时,定制操作系统的过程本身也包含了bsp的开发。如果bsp本身存在问题,那么在定制操作系统的时候就会暴露出来,通过不断地开发、修正,最终得到一个成熟的bsp。bsp(board support package)又称主板级支持包,它是一个包括启动程序bootloader、oem适配层程序(oal)、设备驱动程序drivers和相关配置文件的软件包,是对目标设备板的功能抽象。2.6 microsoft activesyncmicrosoft activesync是微软同步软件,用于设备端与电脑的连接与通讯。其支持在pc机与windows ce设备、ppc 和微软智能手机之间进行数据同步。第3章 系统分析3.1 系统可行性嵌入式系统具有可裁剪性、强实时性、统一的接口、操作简单、使用方便、提供友好的图形gui和图形界面、追求易学易用、强稳定性,弱交互性、固化代码、更好的硬件适应性等优点,使得嵌入式产品成为信息产业的主流。随着人们的生活水平不断提高,精神资料的需求逐渐提高,多媒体已经成为生活中必不可少的一部分。各式各样的多媒体迅速充斥了我们的生活,我们生活中数字信息的数量在今后几十年中将急剧增加,质量上也将大大地改善。多媒体正以迅速的、意想不到的方式进入人们生活的多个方面,大的趋势是各个方面都将朝着当今新技术综合的方向发展。基于wince的音乐播放器便是其中的一部分。3.2 需求分析需求分析是关于音乐播放器实现之后能否满足用户的需求,是非常重要的。如果需求分析没做好,后面极可能会事倍功半,不能满足用户需求。用户对功能的需求主要是听一些歌曲,包括查看歌曲目录、显示当前音乐播放进度、声音的控制、正在播放文件的信息、演唱文件信息、播放时间信息、播放文件歌词查看等,管理播放用例图如图3.1所示。对于一个音乐播放器,是非常重视系统的可靠性与易用性的。系统的可靠性是指系统放置硬件失灵、软件错误、自然灾害等造成的实效的性能。易用性问题是播放器的关键,这不仅是技术问题,更是使用问题。为了保证音乐播放器易用性,要求保证播放器简单易使用,即播放器的界面友好,为此需要采用简单易用的图形界面。本系统就采用wince的图形界面;使操作简单实用易上手。3.3 功能介绍1.用户可以方便地查看当前音乐播放进度、正在播放文件的信息、演唱文件信息、播放时间信息、播放文件歌词。 2.用户可以方便地调节音量。3.用户可以方便地对对播放器进行播放暂停操作。4.用户可以方便的进行歌曲的快进和快退操作。5.用户可以方便地进行歌曲的更换。图3.1 管理播放用例图第4章 wince下音乐播放器的设计与实现根据需求分析及该系统的原理进行软件设计。主要包括了解iis总线的通信原理以及音频芯片uda1341使用方法;编写windows ce 6.0下的音频驱动程序,实现放音功能。 4.1 系统总体设计此结构图给出了本音乐播放器的主要功能,如图4.1所示。图4.1 基本功能结构图主程序流程图如图4.2所示。图4.2 主程序流程图4.2 播放器功能模块设计4.2.1 播放器设计 播放器应该具有添加歌曲、更换歌曲、音量调节、显示歌曲信息、调节歌曲进度、显示歌词等功能。该播放器具有三个状态,分别是播放状态、暂停状态和停止状态。状态转换图如图4.3所示。图4.3 状态转换图系统硬件初始化完成后,即处于idle状态,等待用户命令,然后根据用户命令转换状态并进行相应的处理。播放的流程工作图如图 4.4所示。图4.4 播放的流程工作图暂停的工作流程图如图 4.5所示。图4.5 暂停的工作流程图停止的工作流程图如图 4.6 所示。图4.6 停止的工作流程图播放器主要由核心框架模块(common 工程)和解码器、分离器插件组成。其中主要的插件有:interface 插件实现了播放器的界面,ffmpeg 是系统主要的音频解码模块,splitter 是媒体文件分离器。 common 工程是核心模块,是一个开放的集数据输入、转换、音频解码、信号输出等功能为一体的完整的多媒体播放框架。这个框架自身不包含任何的 decode 和 split 功能,这些功能由插件实现,核心模块以一个树状结构管理所有的功能模块和插件模块,实现数据 render 功能,对输入、转换、输出流程的控制,接受播放过程中的操作和对事件进行处理,同时也实现系统运行中经常使用的一些共用函数。common 工程的主目录下主要有:blit、dyncode、overlay、pcm、 softidct 、win32 、zlib 等子目录。其中pcm 存放 pcm 音频信号转换模块,softidct 存放逆离散余弦变换函数,win32 存放内存操作等常用模块,dyncode 这个目录的代码比较晦涩,存放的是程序运行时动态生成代码模块,针对不同的 cpu 指令集, pcm 数据声道和采样率不同情况动态生成不同的优化代码,zlib 则提供了内存中压缩和解压缩的函数,包括未压缩数据的完整性检查。 4.2.2 common 工程核心模块 1. 上下文对象 context该对象在初始化函数bool_t context_init中创建了一个该对象实例( context.h)。该对象实例记录管理各个功能模块,用户界面可以通过该对象和核心模块交互,管理控制播放过程。 2. 功能模块功能模块包括定义对象 nodedef 和数据对象 node ,定义对象描述功能模块相互间的逻辑结构,数据对象记录模块属性和方法。所有的功能模块结构按一个树状结构来组织,结构关系如下, node 是整个结构的根结点,其下为子节点,节点按类型可分为 实节点,全局节点,设置节点,抽象节点 。抽象节点没有对应的对象实例,为了按照逻辑关系组织系统结构而存在。全局节点只有一个对象的实例,如播放控制模块 player_id 。设置节点表示和系统播放设置相关,比如声音均衡器模块 equalizer_id 实节点与抽象节点不同,指可以生成对象实例的节点,实节点没有特殊标识,一般以数据对象占用内存大小表示是否是一个实节点,创建节点时要根据该信息分配内存单元,实节点也可以有子节点。全局节点,设置节点和实节点可以相互组合。 节点树状分布图如图4.7所示。 node (根节点) flow (流控制模块) codec (解码模块) equalizer_id (声音均衡器模块) dmo ( directx media object ) wmv_id wms_id wmva_id wma_id wmav_id ffmpeg video ( ffmpeg 解码模块) libmad_id ( libmad mp3 解码模块) out (信号渲染模块) aout (音频信号渲染) nullaudio_id waveout_id nullvideo_id overlay idct (离散余弦解码模块) softidct_id codecidct (离散余弦解码模块,函数比 idct 要少) mpeg1_id media (媒体文件格式编码解析模块) format (格式解析模块) formatbase rawaudio mp3_id wav_id playlist (播放列表模块) asx_id m3u_id pls_id streamprocess (数据流处理模块) stream (数据输入模块) memstream_id (内存数据流模块) file_id (文件 io 模块) timer (定时器模块) systimer_id association_id (文件扩展名自动关联模块) advanced_id (高级设置模块) color_id (颜色控制模块) platform_id (平台信息模块) xscaledriver_id player_id (播放控制模块) 图4.7节点树状分布图4.2.3 common 工程核心模块数据结构context 上下文对象 typedef struct context int version;/ 版本信息 uint32_t programid;/ 应用程序句柄 const tchar_t* programname;/ 应用程序名称 const tchar_t* programversion;/ 程序版本号 , 字符串 const tchar_t* cmdline;/ 程序命令行信息 void* nodelock;/ 功能模块访问临界区互斥变量 array node; / 功能模块数据对象数组 array nodeclass; / ordered by id 功能模块定义对象数组 , 按照系统逻辑关系组织 array nodeclasspri; / ordered by priority|id 功能模块定义对象数组 , 按照系统逻辑关系和优先级排列 array nodemodule;/ 外部插件模块数组 int loadmoduleno;/ 当前正在加载的外部插件序号 void* loadmodule;/ 当前正在加载的外部插件 array strtable2;/ 字符串资源数组 , 字符串分为:给底层使用的标准字符串资源、给界面使用的显示字符串资源 , 两个资源用两个数组表示 array strbuffer; array strmodule; void* strlock;/ 字符串数组访问临界区互斥变量 uint32_t lang;/ 当前使用语言标志 int codepage;/ 当前使用代码页标志 struct pcm_soft* pcm;/pcm 音频信号转换模块 struct node* platform;/ 得到平台相关信息 struct node* advanced;/ 得到播放模块高级信息 struct node* player;/ 播放控制模块 notify error;/ 信息错误回调函数 int (*hworientation)(void*); void *hworientationcontext; bool_t trydynamic; int settingspage; size_t startupmemory;/ 可以使用的有效内存数 bool_t inhibernate;/ 是否进入休眠状态 bool_t waitdisable; int ftrid; bool_t lowmemory;/ 可以使用的有效内存数是否小于系统要求的最低要求 / 动态代码生成中间状态及数据 bool_t codefailed; bool_t codemoveback; bool_t codedelayslot; void* codelock; void* codeinstbegin; void* codeinstend; int nextcond; bool_t nextset; bool_t nextbyte; bool_t nexthalf; bool_t nextsign; uint32_t* flushcache; void* charconvertutf8; void* charconvertcustom; int customcodepage; void* charconvertascii; void* application; void* logger; bool_t keepdisplay;/ 是否保持背光长亮 int disableoutofmemory; context;4.2.4 nodedef功能模块定义对象功能模块树状结构通常由若干个静态定义对象 (nodedef) 实例实现, typedef struct nodedef int flags;/ 功能模块节点的类型:抽象、实节点、全局、设置。 int class;/ 功能模块节点的标识 int parentclass;/ 功能模块父节点的标识 int priority;/ 表示功能模块节点优先级。 nodecreate create;/ 创建功能模块定义对象的函数指针 nodedelete delete;/ 销毁功能模块定义对象的函数指针 nodedef;/ 功能模块定义对象4.2.5 nodeclass功能模块定义对象链表结构用链表的方式实现了功能模块树状结构,每个链表代表树状结构的一个分支。typedef struct nodeclass nodedef def;/ 功能模块定义对象 int moduleno;/ 模块标识 struct nodeclass* parent;/ 功能模块定义对象的父对象 nodeclass;/ 功能模块定义节点对象链表结构4.2.6 node功能模块数据对象typedef struct node int class;/ 功能模块节点的类型 nodeenum enum;/ 枚举节点属性函数指针 nodeget get;/ 获取节点属性的函数指针 nodeset set;/ 设置节点属性的函数指针 node;/ 功能模块数据对象4.2.7 几个数据对象的相互关系在系统上下文对象context中有两个元素记录功能模块信息array node 和array nodeclass,array是数组数据类型(在 buffer.h/c 中定义和实现),node 是功能模块数据对象的数组,nodeclass功能模块定义对象的数组,按照系统逻辑关系组织。创建功能模块时传入nodedef对象到功能模块创建函数,函数会根据 nodedef信息生成对应nodeclass对象添加到nodeclass数组,同时根据 nodedef信息分配数据对象的内存空间。在该节点的create函数里面再初始化该功能模块的数据对象 node。4.2.8 datadef功能模块属性typedef struct datadef int no;/ 属性的标识,播放或暂停。 int type;/ 属性的数据类型,在 node.h 中定义 int flags;/ 属性数据的标志,是属性数据的标志,表示该数据是不是只读数据,是否有最大最小值等等, node.h 中定义 int format1; int format2; const tchar_t* name; int class; int size; datadef;/ 属性对象定义其中 format1 和 format2 是可选标志与 flags 配合使用;另外,如果( !(flags & df_nosave) & !(flags & df_rdonly) )即属性标识为保存且可读写,则会被记录到注册表中,下次启动时用注册表的数据初始化该属性表。4.2.9 datatable功能模块属性列表typedef struct datatable int no; int type; int flags; int format1; int format2; datatable;/ 功能模块属性列表各功能模块的属性通常以数组的形式定义和存储4.2.10 nodemodule外部插件功能模块typedef struct nodemodule int id;/ 插件标识 int objectcount;/ 该插件的实例个数 ( 引用计数 ) bool_t tmp;/ 是否是临时节点 int64_t date;/ 设置时间 int keepalive;/ 保持时间 void* module;/ 外部插件模块 void* db; void* func; uint8_t* min; uint8_t* max; nodemodule;/ 外部插件模块节点4.2.11 核心模块的初始化流程及相应代码对应关系 mem_init(); / 内存等资源初始化 string_init(); / 系统使用字符串初始化pcm_init(); / 音频信号转换模块初始化 node_init(); / 根节点模块初始化 platform_init(); / 平台信息模块初始化 stream_init(); / 输入数据流模块初始化 advanced_init();/ 高级设置模块初始化 flow_init(); / 流控制模块初始化codec_init(); / 解码模块初始化 audio_init(); / 音频信号处理模块初始化format_init(); / 格式解析模块初始化playlist_init(); / 播放列表模块初始化formatbase_init();/ 基本格式解析模块初始化 nulloutput_init();/ 无输出设备模块初始化rawaudio_init();/rawaudio 模块初始化rawimage_init();/rawimage 模块初始化 plugins_init(); / 外部插件模块初始化4.2.12 界面相交互的播放控制模块 在所有功能模块中和界面加交互的主要就是播放控制模块 struct node* player; 使用方法如下:context* p = context();player* myplayer = null;if(p) myplayer = (player*)(p-player);1. 控制播放使用 set(void* this,int no,const void* data,int size)第一个参数是播放模块指针,第二个参数是控制代码,即要进行什么操作,第三个参数是需要赋值给控制代码的数值,最后一个参数是所赋数值的占用内存的大小。myplayer-set(myplayer,player_play,1,sizeof(int);player_play 为控制代码,表示当前控制的是播放暂停功能,数值为 1 表 示播放,为 0 表示暂停。2. 得到某一控制属性 使用 get(void* this,int no,void* data,int size); 函数,参数含义和 set 函数相同。3. 控制代码 是一组宏,定义在 player.h 文件中。比较重要的控制参数有播放控制模块可用参数在 static const datatable playerparams 结构。4. 添加一个媒体文件到播放模块 使用int playeradd(player* player,int index, const tchar_t* path, const tchar_t* title); 第一个参数为播放模块指针。第二个参数是添加到播放模块文件队列的序号,如果是使文件成为第一个文 件该参数设为 0 。第三个参数是媒体文件的目录和名称。第四个参数为媒体文件标题,该参数可以忽略。4.3 音频驱动 iis音频驱动流程图如图4.7所示。音频驱动主要放在两个函数里:wav_init()和wav_iocontrol()。函数wav_init()在驱动加载时被调用执行一次,里面主要完成一些初始化工作。在wav_init()里,首先创建了一个类hardwarecontext,然后执行类的成员函数hardwarecontext:init(),在hardwarecontext:init()里完成设备寄存器的地址映射(物理地址与虚拟地址之间的映射)、dma内存空间的分配与映射、dma通道的初始化、dma传输中断处理事件的安装、iis音频接口的初始化(主要是对iis寄存器的配置)、音频芯片uda1341ts的初始化(主要通过io模拟l3总线时序来配置uda1341ts)。 无 图4.7 iis音频驱动流程图wav_init()初始化设备实例,对硬件的操作由wav_iocontrol()函数完成。 wav_iocontrol()的函数原型如下: bool wav_iocontrol( dword dwopendate, dword dwcode, pbyte pbufin, pbyte pbufout, dword dwlenout, pdword pdwactualout); 参数dwopendate是由应用程序调用驱动程序的wav_open()后返回的,dwcode指定了一个操作设备的控制代码。在本实验音频驱动中,ioctl_wav_message是指所有与音频操作有关的信息。pbufin指向了一个结构体,该结构体包含了要输入的操作数据或命令,由应用层传入。对于音频操作,其指向一个与音频流操作相关的结构体:mmdrv_message_params。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论