国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MTK音頻播放器案例實現

移動開發
MTK音頻播放器案例實現是本文介紹的內容,MTK平臺對事件的處理是通過callback function方式, 所以程序的流程不是順序的,主要是介紹MTK音頻播放器的使用,具體內容的實現來看本文詳解。

MTK音頻播放器案例實現是本文介紹的內容,主要是介紹MTK音頻播放器的使用。MTK 6225上的audio player 的結構整體上可以分為三層,最上面的應用程序界面層, 中間的audio 播放api層, 和底層的編解碼庫及音頻驅動. 其結構圖大致如下所示:

MTK音頻播放器案例實現

由上圖可以看出,整個調用層次較深. 我們分別來學習個層.
 
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層接口是

  1. mdi_result mdi_audio_play_file(void *file_name, U8 play_style, void *cache_p, mdi_callback handler); 

調用的Media接口為:

  1. kal_int32 media_aud_play_file(module_type src_mod_id, void *file_param)  
  2. {  
  3.       aud_result = MED_RES_OK;  
  4.     aud_send_play_file_req(src_mod_id, file_param);  
  5.     AUD_WAIT_EVENT(AUD_EVT_PLAY);  
  6.     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);定義如下:

  1. #define AUD_WAIT_EVENT(evt_) do{                                   
  2.          kal_uint32 retrieved_events;                                    
  3.          kal_retrieve_eg_events(aud_context_p->aud_event, (evt_),            
  4.          KAL_OR_CONSUME, &retrieved_events, KAL_SUSPEND); }while(0) 

等待AUD_EVT_PLAY事件的到達. 通過事件實現了同步.
 
2、Media Task層, media task啟動后, med_task_main在獲得外部消息后,調用med_main((void*)&current_ilm);進行消息處理, med_main會根據消息類型再進行一次
分發 ,audio消息會被分發給void aud_main(ilm_struct *ilm_ptr)來進行處理. 根據相應的請求消息,aud_main調用相應的handler函數進行處理.如對播放請求消息MSG_ID_L4AUD_MEDIA_PLAY_REQ的處理函數如下:

  1. void aud_media_play_req_hdlr(ilm_struct *ilm_ptr)  
  2. {  
  3. …. // 省略其他分支處理,及錯誤處理  
  4.    
  5. // step 1::釋放沖突資源, 設置播放的參數等  
  6.    
  7. // step 2: 根據格式選擇播放函數  
  8. switch (aud_context_p->current_format)  
  9. {      
  10.      ...  
  11.      case MED_TYPE_MMF:  
  12.       result = aud_melody_play_by_name(msg_p->file_name, msg_p->play_style, 0);  
  13.       break;  
  14.     …  
  15.     case MED_TYPE_M4A:  
  16.       aud_context_p->source_type = AUD_FILE;  
  17.       aud_context_p->play_style = msg_p->play_style;  
  18.       result = aud_media_play_file_stream(  
  19.               msg_p->file_name,  
  20.               msg_p->play_style,  
  21.               1,  
  22.               KAL_FALSE,  
  23.               msg_p->cache_p);  
  24.        break;  
  25.            case MED_TYPE_3GP:  
  26.        case MED_TYPE_MP4:  
  27.             aud_context_p->source_type = AUD_FILE;  
  28.             aud_context_p->play_style = msg_p->play_style;  
  29.             result = aud_media_play_audio_track_in_video(  
  30.                         msg_p->file_name,  
  31.                         msg_p->play_style,  
  32.                         KAL_TRUE,  
  33.                         KAL_FALSE);  
  34.             break;  
  35.         default:  
  36.             result = MED_RES_INVALID_FORMAT;  
  37.             break;  
  38. }  
  39.    
  40. // step 3: 開始播放后處理  
  41. aud_set_result((kal_int32) result);        // 設置播放操作返回結果  
  42. AUD_SET_EVENT(AUD_EVT_PLAY); // 設置AUD_EVT_PLAY事件  
  43. if (aud_context_p->src_mod != MOD_MMI) //播放請求是否來自MMI task  
  44. {  
  45.      aud_send_media_play_cnf(result);   //發送播放反饋消息到請求模塊  
  46. }  

3、L1Audio module層, 該層包括了底層的解碼庫和對更底層的驅動程序,及音頻硬件的調用和處理. 其中包括了對具體的音頻格式的處理接口,如對AAC文件的接口有:

  1. MHdl *AAC_Open(void(*handler)( MHdl *handle, Media_Event event ),  
  2. STFSAL *pstFSAL, void *param)  
  3. Media_Status aacMFPlayFile( MHdl *hdl );  
  4. Media_Status aacMFResumeFile( MHdl *hdl );  
  5. Media_Status aacMFPause( MHdl *hdl );  
  6. Media_Status aacMFStop( MHdl *hdl ); 

....

一整套的接口. 在上面的第二層的講解中的play請求的處理函數中, 如果待處理的文件格式是AAC, 則實現上它會調用AAC_Open接口來獲得與播放操作相關的所有函數接口. 為此后的其他操作提供處理函數.

MTK的task和mod是怎么劃分的?

實在搞不清MTK中task與mod,一個task就只加載一個mod么?

在task_init.c 里面void InitApplication()中,

  1. for(i=0;i<TOTAL_TASKS-9;i++)  
  2.  {  
  3.   task_info_g1[i+9].task_ext_qid=OslCreateMsgQ(task_create_tbl[i].task_qname,  
  4.         sizeof(MYQUEUE),  
  5.         task_create_tbl[i].task_ext_qsize);  
  6.   task_info_g1[i+9].task_id = osl_create_task (task_create_tbl[i].task_name,  
  7.         task_create_tbl[i].task_priority,  
  8.         task_create_tbl[i].task_stack_size,  
  9.         task_create_tbl[i].task_entry_func,  
  10.         (void *)(i+9),0);  
  11.    
  12.   task_info_g1[i+9].task_name=task_create_tbl[i].task_name;  
  13.   task_info_g1[i+9].task_priority=task_create_tbl[i].task_priority;  
  14.   task_info_g1[i+9].task_stack_size=task_create_tbl[i].task_stack_size;  
  15.   task_info_g1[i+9].task_entry_func=task_create_tbl[i].task_entry_func;  
  16.  
  17.   task_info_g1[i+9].task_qname=task_create_tbl[i].task_qname;  
  18.   task_info_g1[i+9].task_ext_qsize=task_create_tbl[i].task_ext_qsize;  
  19.  
  20.  } 

這里為什么是task_info_g1[i+9],在0到9的位置上還有 別的什么任務在運行?

這里生成的各個任務,TOTAL_TASKS的定義,我選取了MMItask.c中的一個如下:

  1. #ifdef MMI_ON_WIN32  
  2. #define MOD_MMI MOD_PRT  
  3. typedef enum {  
  4.   MOD_DUM1=0x09,  
  5.   MOD_L4C1,  
  6.   MOD_PRT,  
  7.   MOD_DUM2,  
  8.   TOTAL_TASKS  
  9. }task_indx_type;  
  10. extern osl_task_info   task_info_g1[TOTAL_TASKS];  
  11. #endif 

這一看, 在task生成之時,就把task和mod對上關系了。但是任務通信時,又有很多msg_send_ext_queue 和receive_ext_queue,src_mod_id 和dest_mod_id,分別為不同的mod。

請教除了MMI task與MOD_MMI,別的mod在哪些任務中運行?

不是的。task就像一個進程一樣在運行,當從隊列中得到消息后就被喚醒。

一個task可以加載N個mod。

小結:MTK音頻播放器案例實現的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-09-06 10:46:19

QT播放器

2011-07-20 16:21:20

iPhone 視頻 播放器

2012-06-04 13:44:08

2010-06-11 12:53:56

openSUSE播放器

2021-01-19 13:30:52

Linux播放器互聯網

2022-08-16 17:37:06

視頻播放器鴻蒙

2011-06-13 09:33:04

2015-09-16 16:38:10

QmmpWinampUbuntu

2011-06-27 11:23:21

Qt 音樂播放器

2010-07-30 09:35:47

Flex播放器

2011-09-09 11:28:35

Android Mus

2015-05-21 15:25:42

VLC播放器

2023-04-06 13:47:47

2012-05-03 09:51:09

HTML5

2014-12-31 16:52:53

音樂播放器源碼

2018-05-25 14:37:58

2022-06-21 14:41:38

播放器適配西瓜視頻

2009-12-17 15:10:31

Linux音樂播放器

2010-07-30 09:50:36

Flex播放器

2011-09-06 11:08:21

QT播放器Mplayer
點贊
收藏

51CTO技術棧公眾號

永久免费精品视频| 欧美三级中文字| 日韩一区二区三区精品视频| 一区二区三区四区五区视频| 天堂√8在线中文| 9999精品视频| 亚洲色图官网| 久久久人人人| 精品免费在线观看| 欧美激情女人20p| 日本人体一区二区| 激情综合网五月| 亚洲精品网站在线播放gif| 国产日本在线视频| 亚洲情趣在线观看| 成年网站在线播放| 久久精品日产第一区二区三区高清版 | 亚洲妇女屁股眼交7| 亚洲77777| 国产精品女同一区二区三区| 日韩av资源在线| 国产亚洲欧美在线| 手机在线看福利| 亚洲欧美日韩国产中文在线| 黄色成人免费观看| 亚洲免费观看高清完整版在线观看| 1024欧美极品| 亚洲老妇xxxxxx| 污网站视频在线观看| 色综合久久88色综合天天 | 日本一区二区视频在线观看| 国模吧无码一区二区三区| 久久综合久久综合久久| 嫩草av久久伊人妇女超级a| 国产精品成人一区二区艾草 | 国产福利成人在线| 国产探花在线精品一区二区| 国产欧美日韩中文字幕| 一精品久久久| 日本10禁啪啪无遮挡免费一区二区| 久久国产精品免费| 国内精品在线观看视频| 1区2区3区国产精品| 日本福利在线观看| 亚洲第一精品夜夜躁人人爽| 久久久久久久性潮| 国产精品日韩欧美综合| 国产乱码精品| 成年丰满熟妇午夜免费视频| 91麻豆成人久久精品二区三区| 激情亚洲综合网| 欧美性生活影院| 香蕉成人av| 青青久久av北条麻妃黑人| 国产精品www.| 波多野结衣综合网| 亚洲一级二级在线| 丝袜美腿av在线| 中文字幕一区电影| 成人在线电影在线观看视频| 日韩中文字幕av在线| 国产日韩一级二级三级| 香蕉网站在线观看| 亚洲美腿欧美激情另类| 台湾佬综合网| 性欧美大战久久久久久久免费观看 | 97视频在线观看免费高清完整版在线观看| 精品香蕉视频| 日本在线一区| 成人免费小视频| 青春草在线视频| 91精品国产91久久久久久最新 | 国产99视频精品免费视频36| 成人激情视频网站| 在线一二三区| 日韩亚洲欧美成人| 欧美三级黄美女| 大香煮伊手机一区| 正在播放亚洲一区| 露出调教综合另类| 亚洲一区二区在| 欧美日韩中文字幕在线视频| 亚洲日本在线观看视频| 99久久99久久| 亚洲欧美综合另类在线卡通| 国产黄大片在线观看| 日本精品在线视频| 国产九色精品成人porny| 深夜福利在线观看直播| 日韩中文视频免费在线观看| 一本综合精品| а√最新版地址在线天堂| 国产丝袜高跟一区| 欧美国产另类| 久久小说免费下载| 大胆欧美人体视频| 另类中文字幕网| 久久精品蜜桃| 国产91精品久久久久| 国产成人亚洲综合色影视| eeuss影院在线播放| 91国语精品自产拍在线观看性色 | 黄色综合网址| 国产一区二区黄色| 亚洲成人综合网站| 一区二区在线视频观看| 可以在线看黄的网站| 丝袜诱惑制服诱惑色一区在线观看| 伊人网在线视频| 欧美电影一区二区| 国产三级在线播放| 欧美国产日韩在线观看| 在线观看小视频| 91网免费观看| 亚洲国产精品精华液2区45| 欧美大片1688| 亚洲人成网站在线观看播放 | 国产极品粉嫩福利姬萌白酱| 亚洲国模精品私拍| 亚洲永久视频| 婷婷在线视频观看| 超碰97人人人人人蜜桃| 一区二区不卡在线播放| 97久久超碰| 天天爽夜夜爽一区二区三区| 欧美人成在线视频| 91亚洲资源网| a看欧美黄色女同性恋| 无码无遮挡又大又爽又黄的视频| 亚洲视频日韩精品| 国产精品亚洲成人| 性欧美超级视频| 黄色一级片国产| 国产一区二区三区三区在线观看| 国产精品亚洲а∨天堂免在线| 在线亚洲人成| 国内精品在线观看视频| 日韩亚洲精品电影| 欧美激情在线看| 日韩三级毛片| 欧洲免费在线视频| 国内不卡一区二区三区| 欧美一激情一区二区三区| 美女在线视频一区| 无遮挡在线观看| 黄色片一级视频| 2019精品视频| 色婷婷av一区二区三区大白胸 | 亚洲小少妇裸体bbw| 免费人成在线观看视频播放| 久久精品中文字幕电影| 久久精品一区二区三区不卡牛牛| 136福利精品导航| 一级片免费看| 精品卡一卡二| 在线观看国产精品91| 国产精品久久免费看| 亚洲综合婷婷| 欧美xxxhd| 成人高清免费| 欧美一区二区三区四区五区六区| 亚洲天堂av网| 亚洲黄色录像片| 一区二区三区国产盗摄| 成人免费影院| а√最新版天堂中文在线| 91久久久久久| 亚洲精品永久免费精品| 中文字幕成人av| 国内精品99| 成人日韩av| 深夜福利免费在线观看| 亚洲自拍偷拍一区二区三区| 91成品人片a无限观看| 欧美日韩免费视频| 91在线观看免费视频| 在线中文一区| 欧美亚洲综合视频| 伊人影院在线播放| 黄网站色视频免费观看 | 欧美片网站免费| 中文字幕伊人| 日本不卡一区二区三区四区| 久久青草福利网站| 日韩亚洲国产中文字幕欧美| 国产精品―色哟哟| 久久综合伊人| 你懂的视频欧美| 欧美aa在线观看| 无人视频在线观看免费| 男女激情无遮挡| 91精品国自产在线观看 | 国产精品美女一区二区三区| 国产日韩免费| 日韩有码一区| 欧美电影免费观看| 国产特黄在线| 蜜桃传媒av| 国产自产在线视频| 成人黄色片视频网站|