- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mediaplayer总体介绍
第一章 MediaPlayer总体介绍
1.1 MediaPlayer简单介绍
MediaPlayer程序可以播放声音、视频文件,还可以显示静态图象文件,如果有CMX DLLs的话,该程序也可以记录或回放高通公司的QCP格式音频文件。它最多可以保存32个多媒体文件。Mediaplayer有常用的功能,例如播放、快速播放、停止和暂停等,它支持许多多媒体格式,包括QCP,MPEG Audio Layer3(MP3),Musical Instrument Digital Interface(MIDI),BREW Compressed Image(BCI),Bitmap(BMP),和包含音视频的Packet Mode Data(PMD)。
这个程序的运行目标设备是Sharp Z-800,在Simulator上,我们选择Sharp Z-800设备图片。
1.2 MediaPlayer 程序主要接口
这个程序主要就是利用了AEE Imedia的接口服务,Imedia接口对象拥有一个基本Class ID AEECLSID_MEDIA,我们需要利用这个ID来询问Shell 注册一个MIME提供的Imedia-based class。一般Imedia接口操作注册成:“audio/”和“video/”。这个可以参考AEEMIMETypes.h。
创建Imedia接口对象一般有两种方法:
利用已经知道的Imedia-based class的ID来创建。在这种情况下,Imedia接口对象是在空闲状态下,这时候它不能被使用,我们可以利用IMEDIA_SetMediaData()配置多媒体数据,如果配置成功的话,Imedia接口对象将会在ready状态下。
如果不知道ID的话,则利用AEEMediaUtil_CreateMedia()函数来创建(这个函数由AEEMediaUtil.c提供),这个函数首先分析了多媒体数据,找出数据数据格式,然后找出该数据格式注册的class ID,并且创建Imedia接口对象。并且这个函数也使Imedia接口对象在ready状态下。
大部分对Imedia接口对象的操作是异步的,如果我们想从Imedia接口对象接收事件,那我们可以利用IMEDIA_RegisterNotify()注册一个回调函数,这个步骤是可以选择的,可以对多个Imedia接口对象注册一个回调函数,我们利用Imedia指针或且class ID在回调数据中来关联。
Imedia提供了如图1.1的状态结构,IMEDIA_SetMediaData()设置多媒体数据,但是多媒体数据还没有装载到设备上,IMEDIA_Play() 或且 IMEDIA_Record()装载数据,分配设备的多媒体资源,然后开始播放或记录。IMEDIA_Stop()停止目前的播放或记录,释放所有的设备多媒体资源,并且使Imedia处于Ready状态。
图1.1 Imedia的状态结构
除去imedia接口外,还需要使用的接口有IDisplay、IFile、IFileMgr、IMenuCtl、IStatic等控制接口,这些接口以后再深入研究。
第二章 MediaPlayer代码分析
2.1 程序中相关宏的展开
BREW相关程序中,使用了大量的宏,从阅读代码的角度来说,宏定义给阅读带来了不少麻烦,但是对于程序开发人员来说,精致的宏定义又给开发带来不小的渐变性,从阅读的角度来说,把宏展开,可以清晰地看到程序设计的脉络,在开发的过程中,可以直接使用宏,减少代码的输入量,同时也能保证伴随BREW平台升级所带来的兼容性问题。typedef struct _IWindow IWindow;
QINTERFACE(IWindow)
{
// Enables/Disables the window. Window controls will not process
// events if the window is disabled.
void (*Enable)(IWindow * po, boolean bEnable);
// Redraws the window if enabled
void (*Redraw)(IWindow * po);
// Handles the events routed to the window
boolean (*HandleEvent)(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam);
// Releases the window resources
void (*Delete)(IWindow * po)
文档评论(0)