Doubango(2):plugin結(jié)構(gòu)

doubango把功能劃分為很多部件稳摄,如音視頻的生產(chǎn)者producer儒搭,音視頻的消耗者consumer,負(fù)責(zé)編解碼的codec等棉浸。每個部件其實(shí)可以有不同的實(shí)現(xiàn)揖曾。如producer在不同平臺上就有不同的實(shí)現(xiàn)贩毕,即使是同一平臺悯许,如音頻的生產(chǎn),也可以直接采集麥克風(fēng)辉阶,或者從文件獲取音頻數(shù)據(jù)先壕。

doubango通過插件的方式來管理這些不同的選擇。

插件的定義

插件的定義在tinyMedia目錄谆甜,而插件的具體實(shí)現(xiàn)在tinyDav目錄垃僚。

以consumer部件為例。
首先在tinyMedia目錄规辱,定義了一個tmedia_consumer_t結(jié)構(gòu)谆棺,用于存放所有consumer插件都需要的一些公共數(shù)據(jù)。緊接著定義了tmedia_consumer_plugin_def_t結(jié)構(gòu)按摘,用于描述插件應(yīng)該支持的行為包券。tmedia_consumer_plugin_def_t包含了具體插件的xx_def_t(里面包含plugin的size和構(gòu)造析構(gòu)函數(shù))的指針,以及應(yīng)該支持的函數(shù)炫贤。

當(dāng)定義一個具體的consumer插件時溅固,如video_consumer_android_t,需要直接或者間接繼承tmedia_consumer_t結(jié)構(gòu)。并提供一個tmedia_consumer_plugin_def_t全局變量來保存自己作為consumer_plugin提供的函數(shù)及其他信息兰珍。

static const tmedia_consumer_plugin_def_t video_consumer_android_plugin_def_s =
{
    &video_consumer_android_def_s,
    tmedia_video,
    "ANDROID video consumer",
    
    video_consumer_android_set,
    tsk_null,
    video_consumer_android_prepare,
    video_consumer_android_start,
    video_consumer_android_consume,
    video_consumer_android_pause,
    video_consumer_android_stop
};
const tmedia_consumer_plugin_def_t *video_consumer_android_plugin_def_t = &video_consumer_android_plugin_def_s;

插件的注冊

tinyMedia里還提供了consumer插件的注冊函數(shù)tmedia_consumer_plugin_register侍郭。調(diào)用注冊函數(shù)后,創(chuàng)建tmedia_consumer_t時就可以創(chuàng)建該插件了掠河。
插件的注冊亮元,放在tdav_init函數(shù)中調(diào)用。

tmedia_consumer_plugin_register (audio_consumer_android_plugin_def_t);

部件的創(chuàng)建

tmedia_consumer_t中有一個plugin(xxx_plugin_def_t類型)的變量唠摹。當(dāng)調(diào)用tmedia_consumer_create創(chuàng)建tmedia_consumer_t時爆捞,會從已經(jīng)注冊的插件列表中,找到合適的插件勾拉,生成一個實(shí)例煮甥,作為tmedia_consumer_t返回給調(diào)用方(插件是繼承tmedia_consumer_t,還記得嗎)藕赞。并把該插件的xxx_plugin_def_t賦值給plugin變量成肘。

typedef struct tmedia_consumer_s
{
//其他變量
const struct tmedia_consumer_plugin_def_s* plugin;
} tmedia_consumer_t;

對部件的操作

現(xiàn)在對部件進(jìn)行操作的時候,就可以委托給plugin的對應(yīng)函數(shù)了斧蜕。
這里的plugin其實(shí)是regist的video_consumer_android_plugin_def_t双霍;
plugin->consume就是video_consumer_android_consume
tmedia_consumer_t *self則是返回出去的video_consumer_android_t對象。在video_consumer_android_consume可以強(qiáng)轉(zhuǎn)為video_consumer_android_t類型洒闸。

int tmedia_consumer_consume (tmedia_consumer_t *self, const void *buffer, tsk_size_t size, tsk_object_t *proto_hdr)
{
    if (!self || !self->plugin || !self->plugin->consume || !proto_hdr)
    {
        TSK_DEBUG_ERROR ("Invalid parameter");
        return -1;
    }
    return self->plugin->consume (self, buffer, size, proto_hdr);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末染坯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丘逸,更是在濱河造成了極大的恐慌酒请,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸣个,死亡現(xiàn)場離奇詭異羞反,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)囤萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門昼窗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涛舍,你說我怎么就攤上這事澄惊。” “怎么了富雅?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵掸驱,是天一觀的道長。 經(jīng)常有香客問我没佑,道長毕贼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蛤奢,我火速辦了婚禮鬼癣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啤贩。我一直安慰自己待秃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布痹屹。 她就那樣靜靜地躺著章郁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪志衍。 梳的紋絲不亂的頭發(fā)上暖庄,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音足画,去河邊找鬼雄驹。 笑死佃牛,一個胖子當(dāng)著我的面吹牛淹辞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼象缀,長吁一口氣:“原來是場噩夢啊……” “哼蔬将!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起央星,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霞怀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后莉给,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毙石,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年颓遏,在試婚紗的時候發(fā)現(xiàn)自己被綠了徐矩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡叁幢,死狀恐怖滤灯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曼玩,我是刑警寧澤鳞骤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站黍判,受9級特大地震影響豫尽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顷帖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一拂募、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窟她,春花似錦陈症、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吊说,卻和暖如春论咏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颁井。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工厅贪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雅宾。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓养涮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贯吓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355