基于MiniGUI嵌入式媒体播放器设计和实现.doc

基于MiniGUI嵌入式媒体播放器设计和实现.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MiniGUI的嵌入式媒体播放器的设计与实现 中南林业科技大学电子与信息工程学院 陈运虎 韦 冰 摘要:随着嵌入式系统的不断发展,处理器性能的不断提升,存储系统容量的不断扩大,各种多媒体应用程序被移植到嵌入式系统中,多媒体组件成为其不可或缺的重要组成部分。本文在比较如今流行的几种嵌入式图形系统嵌入式图形系统各种嵌入式较MicoroWindows/NanoX、Qt/Embedded、MiniGUI、DirectFB、PicoGUI以及GTK+/FB等。它们中的大多数遵循LGPL条款发布,而MicoroWindows/NanoX遵循的是MGPL,Qt/Embedded采用QGPL条款发布。 MicroWindows/NanoX能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。这样,MicroWindows就显得十分小巧,便于移植到各种硬件和软件系统上。然而MicroWindows/NanoX的免费版本开发进展慢,而且缺乏全面专业的技术支持。 Qt/Embedded功能强大,但是,由于它是基于C++类库的,所以和其他GUI相比系统消耗资源较大,一般应用于手持式高端信息产品。 GTK+/FB与Qt/Embedded类似,跳过X层直接与FrameBuffer沟通,也具有Qt/Embedded的几项优点,但发展速度缓慢。 DirectFB是专注于Linux FrameBuffer加速的一个图形库,并试图建立一个兼容GTK的嵌入式GUI系统。 PicoGUI是一种新型的小巧的嵌入式图形系统。同X Windows系统一样具有一个弹性的客户服务端架构。PicoGUI将字体,位图,窗口小部件,以及其他应用程序需要的东西都直接建立在服务器上,与X Windows相比,虽然灵活性有所降低,但速度显著提升、体积大大缩小。 MiniGUI为实时嵌入式操作系统提供了非常完善的图形及用户界面支持。MiniGUI本身的可移植性设计,使得不论在哪个硬件平台,哪种操作系统上运行,MiniGUI均能为上层应用程序提供一致的应用程序编程接口(API)。MiniGUI小巧、灵活且对中文的支持性最好。 3 设计与实现 3.1播放器总体结构 本文中的播放器采用MiniGUI作为底层图形库,用于生成用户界面以及读写FrameBuffer。基于MiniGUI的嵌入式系统总体架构如图1所示。 图1 基于MiniGUI的嵌入式系统总体架构 播放器 播放器的人机交互界面主要包括播放控制与文件列表管理两大部分。播放控制用来实现对所选择的媒体文件作播放/暂停、停止及进度控制等;文件列表管理则用来实现向播放列表添加、删除媒体文件以及对列表中文件排序等功能。 3.3 主要函数及具体实现 ⑴ 播放控制事件回调函数 static int main_event_cb (HWND hwnd, skin_item_t* item, int event, void* data) { … if (event==SIE_BUTTON_CLICKED) { switch (item-id) { case SIID_PLAY: … case SIID_PAUSE: … case SIID_STOP: … case SIID_CLOSE: … } } else if (event==SIE_SLIDER_CHANGED item-id!=SIID_VOLUME) { … } return 1; } ⑵ 列表事件处理函数 void playlist_handle_event(PEvent *event, void *data) { … switch(event-type) { case ButtonPress: … case ButtonRelease: … case KeyPress: if(!playlist) return; mykeyevent = event-xkey; LockDisplay(gGui-display); len=LookupString(mykeyevent, kbuf, sizeof(kbuf), mykey, NULL); UnlockDisplay(gGui-display); switch (mykey) { case K_Down: case K_Next: browser_step_up(pla

文档评论(0)

wwqqq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档