X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fmodules.h;h=e38e9524c1bf51ed0ac8e6da61759bb169b53b4c;hb=97956957542fa34e97698a15dc0f2374b2980857;hp=13be2640085c0ef795b63f3e8ec926f56bbdd9a0;hpb=2eeecb47c846664e466677e9a592091e841290e4;p=vlc diff --git a/src/modules/modules.h b/src/modules/modules.h index 13be264008..e38e9524c1 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -1,82 +1,135 @@ /***************************************************************************** * modules.h : Module management functions. ***************************************************************************** - * Copyright (C) 2001 the VideoLAN team - * $Id: modules.h 17958 2006-11-22 17:13:24Z courmisch $ + * Copyright (C) 2001 VLC authors and VideoLAN + * $Id$ * * Authors: Samuel Hocevar * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -/* Number of tries before we unload an unused module */ -#define MODULE_HIDE_DELAY 50 +#ifndef LIBVLC_MODULES_H +# define LIBVLC_MODULES_H 1 + +typedef struct module_cache_t module_cache_t; /***************************************************************************** - * module_bank_t: the module bank - ***************************************************************************** - * This variable is accessed by any function using modules. + * Module cache description structure *****************************************************************************/ -struct module_bank_t +struct module_cache_t { - VLC_COMMON_MEMBERS + /* Mandatory cache entry header */ + char *path; + time_t mtime; + off_t size; + + /* Optional extra data */ + module_t *p_module; +}; - int i_usage; -#ifndef HAVE_SHARED_LIBVLC - module_symbols_t symbols; -#endif - vlc_bool_t b_main; - vlc_bool_t b_builtins; - vlc_bool_t b_plugins; +#define MODULE_SHORTCUT_MAX 20 - /* Plugins cache */ - vlc_bool_t b_cache; - vlc_bool_t b_cache_dirty; - vlc_bool_t b_cache_delete; +/** The module handle type */ +typedef void *module_handle_t; - int i_cache; - module_cache_t **pp_cache; +/** Plugin entry point prototype */ +typedef int (*vlc_plugin_cb) (int (*)(void *, void *, int, ...), void *); - int i_loaded_cache; - module_cache_t **pp_loaded_cache; -}; +/** Core module */ +int vlc_entry__core (int (*)(void *, void *, int, ...), void *); -/***************************************************************************** - * Module cache description structure - *****************************************************************************/ -struct module_cache_t +/** + * Internal module descriptor + */ +struct module_t { - /* Mandatory cache entry header */ - char *psz_file; - int64_t i_time; - int64_t i_size; - vlc_bool_t b_junk; + module_t *next; + module_t *parent; + module_t *submodule; + unsigned submodule_count; - /* Optional extra data */ - module_t *p_module; - vlc_bool_t b_used; + /** Shortcuts to the module */ + unsigned i_shortcuts; + char **pp_shortcuts; + + /* + * Variables set by the module to identify itself + */ + 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 */ + + bool b_loaded; /* Set to true if the dll is loaded */ + bool b_unloadable; /**< Can we be dlclosed? */ + + /* Callbacks */ + void *pf_activate; + void *pf_deactivate; + + /* + * Variables set by the module to store its config options + */ + module_config_t *p_config; /* Module configuration structure */ + size_t confsize; /* Number of module_config_t items */ + unsigned int i_config_items; /* number of configuration items */ + unsigned int i_bool_items; /* number of bool config items */ + + /* + * Variables used internally by the module manager + */ + /* Plugin-specific stuff */ + module_handle_t handle; /* Unique handle */ + char * psz_filename; /* Module filename */ + char * domain; /* gettext domain */ }; -#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 * ); +module_t *vlc_plugin_describe (vlc_plugin_cb); +module_t *vlc_module_create (module_t *); +void vlc_module_destroy (module_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 *); + +ssize_t module_list_cap (module_t ***, const char *); + +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 CacheDelete(vlc_object_t *, const char *); +size_t CacheLoad (vlc_object_t *, const char *, module_cache_t **); + +struct stat; + +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 */