- 首先从 vlc/lib/libvlc_new()入手 : 用于初始化一个libvlc的实例,argc表示参数的个数,argv表示参数,
- 返回创建的实例若当发生错误时返回NULL
- {
- //vlc/src/libvlc.c
- libvlc_InternalCreate();
- libvlc_InternalInit( p_libvlc_int, argc + 1, my_argv ) --->
- module_InitBank (); ---> //加载模块,
- module_InitStatic(vlc_entry__main); --->
- vlc_plugin_describe (entry) --->
- entry (vlc_plugin_setter, &module); ---->//加载main()
- //libvlc-module.c
- vlc_module_begin ()
- set_category( CAT_AUDIO )
- set_subcategory( SUBCAT_AUDIO_GENERAL )
- add_category_hint( N_("Audio"), AOUT_CAT_LONGTEXT , false )
- .......
- .......
- .......
- vlc_module_end ()
- module_StoreBank();//加入链表
- config_LoadCmdLine() //解译命令参数
- module_LoadPlugins(); //加载各个插件模块
- }
#define CONCATENATE( y, z ) CRUDE_HACK( y, z )
#define CRUDE_HACK( y, z ) y##__##z
# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME )
#define vlc_module_begin() \
EXTERN_SYMBOL DLL_SYMBOL \
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb, void *); \
EXTERN_SYMBOL DLL_SYMBOL \
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb vlc_set, void *opaque) \
{ \
module_t *module; \
module_config_t *config = NULL; \
if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \
goto error; \
if (vlc_module_set (VLC_MODULE_NAME, (MODULE_STRING))) \
goto error;
#define vlc_module_end() \
(void) config; \
return 0; \
error: \
return -1; \
} \
VLC_METADATA_EXPORTS
#define CRUDE_HACK( y, z ) y##__##z
# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME )
#define vlc_module_begin() \
EXTERN_SYMBOL DLL_SYMBOL \
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb, void *); \
EXTERN_SYMBOL DLL_SYMBOL \
int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb vlc_set, void *opaque) \
{ \
module_t *module; \
module_config_t *config = NULL; \
if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \
goto error; \
if (vlc_module_set (VLC_MODULE_NAME, (MODULE_STRING))) \
goto error;
#define vlc_module_end() \
(void) config; \
return 0; \
error: \
return -1; \
} \
VLC_METADATA_EXPORTS