VLC 模組動態載入邏輯

2021-08-31 21:16:36 字數 1365 閱讀 7557

模組初始化:libvlc_new--->libvlc_internalinit->module_loadplugins

---->allocateallplugins--->allocatepluginpath--->allocateplugindir---->allocatepluginfile

一、----->module_initdynamic(src\modules\bank.c)  此介面中完成模組構造

其中:1,module_load(plugin.c) 完成庫載入 windows使用api: loadlibrary

2,vlc_plugin_cb entry = (vlc_plugin_cb)module_lookup(handle, entry_name); (plugin.c)

查詢模組的建構函式,所有模組為  vlc_entry__版本號如(vlc_entry__2_2_0b)此介面在模組中是顯示看不見的,是由巨集vlc_module_begin ()、vlc_module_end ()對實現的,展開後才能見到。

windows使用api:getprocaddress

3,module_t *module =vlc_plugin_describe(entry);  

這兒實現了建構函式的呼叫。生成了vlc的模組記憶體module。

將模組屬性配置完成,模組使用時需要呼叫的介面指標(一般為open  close)也放入了模組。

二、------>module_storebank (module);  

此介面中將生成模組記憶體關聯模組鍊錶modules(這是乙個全域性變數,通過內部鍊錶將所有模組串起來)

模組使用:使用時需要用到modules.c中的幾個介面。

例:input.c     執行緒中

run---->init---->initsout---->input_resource_requestsout--->requestsout

---->sout_newinstance--->sout_streamchainnew----->sout_streamnew中:

p_stream->p_module =module_need( p_stream, "sout stream", p_stream->psz_name, true );

此介面內部呼叫vlc_module_load---->module_load---->generic_start  即呼叫了模組的啟用介面(一般為open)

Lua動態載入模組

function reload modulename package.loaded modulename nil require modulename end 使用以上 即可重新載入乙個檔案。這樣修改完lua 後,可以不用重啟程式立刻生效。模組a a function a.test1 print 1...

nginx載入動態模組

不使用動態模組時 使用動態模組 不是所有的nginx模組都可以以動態模組方式加入nginx 載入方式參見nginx模組載入 需要注意的是 with http image filter module dynamic 如果採用動態模組的載入方式,那麼需要將 usr local src nginx 1.8...

Python動態載入模組

需求 實現乙個簡單的pyton程式,接收兩個引數 plugin name,data,根據不同的plugin name定位到不同的邏輯處理模組並進行輸出。實現方案 使用python的庫函式 load source,將外掛程式模組載入到乙個dict中key為模組名稱,value為類的例項,核心 def ...