X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fmodules.h;h=91c29614a25f890f5bb4d7ec6e23d075d6e900e0;hb=54bfce03bbcc85369e5f775206921b91ce3db91b;hp=0d2ab3155aa987ef18a6c0b275c4c0124e744198;hpb=1f253f8d9a0730b61dc41a7baffdf9c634983446;p=vlc diff --git a/src/modules/modules.h b/src/modules/modules.h index 0d2ab3155a..91c29614a2 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -21,43 +21,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#if defined(__PLUGIN__) || defined(__BUILTIN__) || !defined(__LIBVLC__) -# error This header file can only be included from LibVLC. -#endif +#ifndef LIBVLC_MODULES_H +# define LIBVLC_MODULES_H 1 -#ifndef __LIBVLC_MODULES_H -# define __LIBVLC_MODULES_H 1 - - -/* Number of tries before we unload an unused module */ -#define MODULE_HIDE_DELAY 50 - -/***************************************************************************** - * module_bank_t: the module bank - ***************************************************************************** - * This variable is accessed by any function using modules. - *****************************************************************************/ -struct module_bank_t -{ - VLC_COMMON_MEMBERS - - int i_usage; - - vlc_bool_t b_main; - vlc_bool_t b_builtins; - vlc_bool_t b_plugins; - - /* Plugins cache */ - vlc_bool_t b_cache; - vlc_bool_t b_cache_dirty; - vlc_bool_t b_cache_delete; - - int i_cache; - module_cache_t **pp_cache; - - int i_loaded_cache; - module_cache_t **pp_loaded_cache; -}; +typedef struct module_cache_t module_cache_t; /***************************************************************************** * Module cache description structure @@ -65,63 +32,56 @@ struct module_bank_t struct module_cache_t { /* Mandatory cache entry header */ - char *psz_file; - int64_t i_time; - int64_t i_size; - vlc_bool_t b_junk; + char *path; + time_t mtime; + off_t size; /* Optional extra data */ module_t *p_module; - vlc_bool_t b_used; }; -#define MODULE_SHORTCUT_MAX 50 - -/* The module handle type. */ -#if defined(HAVE_DL_DYLD) -# if defined (HAVE_MACH_O_DYLD_H) -# include -# endif -typedef NSModule module_handle_t; -#elif defined(HAVE_IMAGE_H) -typedef int module_handle_t; -#elif defined(WIN32) || defined(UNDER_CE) -typedef void * module_handle_t; -#elif defined(HAVE_DL_DLOPEN) -typedef void * module_handle_t; -#elif defined(HAVE_DL_SHL_LOAD) -typedef shl_t module_handle_t; -#endif +#define MODULE_SHORTCUT_MAX 20 + +/** The module handle type */ +typedef void *module_handle_t; + +/** Plugin entry point prototype */ +typedef int (*vlc_plugin_cb) (int (*)(void *, void *, int, ...), void *); + +/** Main module */ +int vlc_entry__main (int (*)(void *, void *, int, ...), void *); /** * Internal module descriptor */ struct module_t { - VLC_COMMON_MEMBERS + module_t *next; + module_t *parent; + module_t *submodule; + unsigned submodule_count; + + /** Shortcuts to the module */ + unsigned i_shortcuts; + char **pp_shortcuts; /* * Variables set by the module to identify itself */ - const char *psz_shortname; /**< Module name */ - const char *psz_longname; /**< Module descriptive name */ - const char *psz_help; /**< Long help string for "special" modules */ - - /** Shortcuts to the module */ - const char *pp_shortcuts[ MODULE_SHORTCUT_MAX ]; + char *psz_shortname; /**< Module name */ + char *psz_longname; /**< Module descriptive name */ + char *psz_help; /**< Long help string for "special" modules */ char *psz_capability; /**< Capability */ int i_score; /**< Score for the capability */ - uint32_t i_cpu; /**< Required CPU capabilities */ - vlc_bool_t b_unloadable; /**< Can we be dlclosed? */ - vlc_bool_t b_reentrant; /**< Are we reentrant? */ - vlc_bool_t b_submodule; /**< Is this a submodule? */ + bool b_loaded; /* Set to true if the dll is loaded */ + bool b_unloadable; /**< Can we be dlclosed? */ /* Callbacks */ - int ( * pf_activate ) ( vlc_object_t * ); - void ( * pf_deactivate ) ( vlc_object_t * ); + void *pf_activate; + void *pf_deactivate; /* * Variables set by the module to store its config options @@ -137,32 +97,34 @@ struct module_t /* Plugin-specific stuff */ module_handle_t handle; /* Unique handle */ char * psz_filename; /* Module filename */ - - vlc_bool_t b_builtin; /* Set to true if the module is built in */ - vlc_bool_t b_loaded; /* Set to true if the dll is loaded */ + char * domain; /* gettext domain */ }; +module_t *vlc_plugin_describe (vlc_plugin_cb); +module_t *vlc_module_create (module_t *); +void vlc_module_destroy (module_t *); -#define module_InitBank(a) __module_InitBank(VLC_OBJECT(a)) -void __module_InitBank ( vlc_object_t * ); -#define module_LoadBuiltins(a) __module_LoadBuiltins(VLC_OBJECT(a)) -void __module_LoadBuiltins ( vlc_object_t * ); -#define module_LoadPlugins(a) __module_LoadPlugins(VLC_OBJECT(a)) -void __module_LoadPlugins ( vlc_object_t * ); -#define module_EndBank(a) __module_EndBank(VLC_OBJECT(a)) -void __module_EndBank ( vlc_object_t * ); -#define module_ResetBank(a) __module_ResetBank(VLC_OBJECT(a)) -void __module_ResetBank ( vlc_object_t * ); - -/* Low-level OS-dependant handler */ -int module_Call (module_t *); -int module_Load (vlc_object_t *, const char *, module_handle_t *); +void module_InitBank (void); +size_t module_LoadPlugins( vlc_object_t * ); +#define module_LoadPlugins(a) module_LoadPlugins(VLC_OBJECT(a)) +void module_EndBank (bool); +int module_Map (vlc_object_t *, module_t *); + +int vlc_bindtextdomain (const char *); + +/* Low-level OS-dependent handler */ +int module_Load (vlc_object_t *, const char *, module_handle_t *, bool); +void *module_Lookup (module_handle_t, const char *); void module_Unload (module_handle_t); /* Plugins cache */ void CacheMerge (vlc_object_t *, module_t *, module_t *); -void CacheLoad (vlc_object_t * ); -void CacheSave (vlc_object_t * ); -module_cache_t * CacheFind (const char *, int64_t, int64_t); - -#endif /* !__LIBVLC_MODULES_H */ +void CacheDelete(vlc_object_t *, const char *); +size_t CacheLoad (vlc_object_t *, const char *, module_cache_t **); +int CacheAdd (module_cache_t **, size_t *, + const char *, const struct stat *, module_t *); +void CacheSave (vlc_object_t *, const char *, module_cache_t *, size_t); +module_t *CacheFind (module_cache_t *, size_t, + const char *, const struct stat *); + +#endif /* !LIBVLC_MODULES_H */