Mtk 6225及6235上的audio player 的结构整体上可以分为三层, 最上面的应用程序界面层, 中间的audio 播放api层, 和底层的编解码库及音频驱动. 其结构图大致如下所示:
图在附件,第一次分享文章,不知咋传!
由上图可以看出,整个调用层次较深. 我们分别来学习个层.
1: MMI Task 层
在该层 audio player 模块实现了播放器程序, 其中主要包括对界面视图的实现, 界
面逻辑的处理以及调用MID模块的接口,实现音频操作. 在学习其具体的实现细节上,
可以按view 和 model+control的简化MVC模式来看, 包含与显示有关的screen操作显
示部分, 处理消息的msghandler部分以及主的程序逻辑及按键处理部分. MTK平台对事
件的处理是通过callback function方式, 所以程序的流程不是顺序的, 事件的发生将导
致相应的callback被调用, 从而触发整个audio player的一次响应. 需要注意的是,在每个
不同的界面对相同事件的处理callback函数可能有所不同, 这是在创建,进入该界面时
设定的. 该模块的接口比较复杂,为了提供对BT的统一接口, 有两层的播放接口,如
mmi_audply_play 和 mmi_audply_do_play_action(). 整个模块的接口不够清晰, 有些
庞杂和混乱. 模块的显示部分使用控件实现,较为简单, 可进一步参考控件的实现细节
以了解平台的显示子系统, 对播放文件列表的管理是通过文件操作实现的,具体可参见
audioplayerplaylist部分.
MDI层和Media接口层,这两个部分可看作一个整体, 是MMI层对媒体操作的封装.
它包括了多个部分的接口,在此我们只看audio接口部分,其他模块如video,fm的接口类
似. Audio接口包括了播放,暂停,停止,获取播放时间,获取播放频谱等. 这些接口基本
上都是按同步处理方式实现的. 比如播放接口:
MDI层接口是
mdi_result mdi_audio_play_file(void *file_name, U8 play_style, void *cache_p, mdi_callback handler);
调用的Media接口为:
kal_int32 media_aud_play_file(module_type src_mod_id, void *file_param)
{
aud_result = MED_RES_OK;
aud_send_play_file_req(src_mod_id, file_param);
AUD_WAIT_EVENT(AUD_EVT_PLAY);
return aud_result;
}
其中的aud_send_play_file_req(src_mod_id, file_param调用msg_send_ext_queue(ilm_ptr);
向media task的external Message queue 发送播放请求消息.
其中AUD_WAIT_EVENT(AUD_EVT_PLAY);定义如下:
#define AUD_WAIT_EVENT(evt_) do{ \
kal_uint32 retrieved_events; \
kal_retrieve_eg_events(aud_context_p->aud_event, (evt_), \
KAL_OR_CONSUME, &retrieved_events, KAL_SUSPEND); }while(0)
等待AUD_EVT_PLAY事件的到达. 通过事件实现了同步.
2: Media Task层, media task启动后, med_task_main在获得外部消息后,调用
med_main((void*)¤t_ilm);进行消息处理, med_main会根据消息类型再进行一次
分发 ,audio消息会被分发给void aud_main(ilm_struct *ilm_ptr)来进行处理. 根据相应的
请求消息,aud_main调用相应的handler函数进行处理.
如对播放请求消息MSG_ID_L4AUD_MEDIA_PLAY_REQ的处理函数如下:
void aud_media_play_req_hdlr(ilm_struct *ilm_ptr)
{
…. // 省略其他分支处理,及错误处理
// step 1::释放冲突资源, 设置播放的参数等
// step 2: 根据格式选择播放函数
switch (aud_context_p->current_format)
{
...
case MED_TYPE_MMF:
result = aud_melody_play_by_name(msg_p->file_name, msg_p->play_style, 0);
break;
…
case MED_TYPE_M4A:
aud_context_p->source_type = AUD_FILE;
aud_context_p->play_style = msg_p->play_style;
result = aud_media_play_file_stream(
msg_p->file_name,
msg_p->play_style,
1,
KAL_FALSE,
msg_p->cache_p);
break;
case MED_TYPE_3GP:
case MED_TYPE_MP4:
aud_context_p->source_type = AUD_FILE;
aud_context_p->play_style = msg_p->play_style;
result = aud_media_play_audio_track_in_video(
msg_p->file_name,
msg_p->play_style,
KAL_TRUE,
KAL_FALSE);
break;
default:
result = MED_RES_INVALID_FORMAT;
break;
}
// step 3: 开始播放后处理
aud_set_result((kal_int32) result); // 设置播放操作返回结果
AUD_SET_EVENT(AUD_EVT_PLAY); // 设置AUD_EVT_PLAY事件
if (aud_context_p->src_mod != MOD_MMI) //播放请求是否来自MMI task
{
aud_send_media_play_cnf(result); //发送播放反馈消息到请求模块
}
}
3:L1Audio module层, 该层包括了底层的解码库和对更底层的驱动程序,及音频硬件
的调用和处理. 其中包括了对具体的音频格式的处理接口,如对AAC文件的接口有:
MHdl *AAC_Open(void(*handler)( MHdl *handle, Media_Event event ),
STFSAL *pstFSAL, void *param)
Media_Status aacMFPlayFile( MHdl *hdl );
Media_Status aacMFResumeFile( MHdl *hdl );
Media_Status aacMFPause( MHdl *hdl );
Media_Status aacMFStop( MHdl *hdl );
....
一整套的接口. 在上面的第二层的讲解中的play请求的处理函数中, 如果待处理的文
件格式是AAC, 则实现上它会调用AAC_Open接口来获得与播放操作相关的所有函
数接口. 为此后的其他操作提供处理函数.
- 大小: 45.8 KB
分享到:
相关推荐
这是一款MTK手机音乐播放器 支持MP3.WAR==格式的音乐
MTK播放PCM流
中文MTK学习资料MTK-Find information on recent Chinese MTK ... 嵌入式开发,MTK开发环境的搭建详细
MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK MTK
MTK 刷机工具 WWR WWR MTK v2.30
MTK WIFI GPIO 配置 MTK5931
联发科刷机win10驱动, MTK = "laurentiumihet.ro" MTK6218 = "MTK USB Port" MTK_COM = "MTK USB Modem Port" MTK_CAT = "MTK USB Debug Port" MTK_PRELOADER = "...
MTK多媒体手机平台 GSM/GPRS手机软件方案 MTK软件分层介绍 软件结构图表
MTK 刷机工具 WWR WWR MTK v2.40
一般来讲,Android设备可以正常开机情况下,我们可以通过各种方式和手段访问Android各个分区内容,比如通过adb获取cache分区中recovery目录下的OTA升级日志等。但有时候,遇到设备无法开机的情况,或者需要将设备中...
MTK 中制作UI工具,这是mtk软件开发者想要的资料
MTK CVE-2020-0069 su文件 使用方式翻译和解释 add by https://blog.csdn.net/OneT1me 1.使用adb命令,将文件push到/data/local/tmp 目录下 2.给这个文件云心权限,具体是chmod +x mtk-su 3.运行mtk-su ./mtk-su 4....
MTK配置文件参数说明MTK配置文件参数说明 MTK配置文件参数说明MTK配置文件参数说明 MTK配置文件参数说明 MTK配置文件参数说明
MTK 软件包MTK 软件包MTK 软件包
MTK-COM MTK方案串口读写软件2
MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台 MTK刷机平台
MTK 层的基础知识笔记/MTK 层的应用/MTK 写窗口/MTK编程起步——常用函数及宏定义/MTK拨号字体大小/mtk常用函数/MTK的DM应用实例/MTK的层和它的一些层函数/MTK的高亮机制/MTK之GPIO设置函数/MTK文件读写相关.....
MTK 刷机工具 WWR
MTK平台软件架构,详细描述了MTK的软件构架: MTK软件分层介绍 MTK 方案Task架构
MTK开发心得,MTK开发心得,MTK开发心得.