VLC 模組動態載入邏輯
模組初始化: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
查詢模組的建構函式,所有模組為 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)