1 /*****************************************************************************
2 * vlc_modules.h : Module descriptor and load functions
3 *****************************************************************************
4 * Copyright (C) 2001-2011 VLC authors and VideoLAN
6 * Authors: Samuel Hocevar <sam@zoy.org>
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation; either version 2.1 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21 *****************************************************************************/
24 #define VLC_MODULES_H 1
28 * This file defines functions for modules in vlc
31 typedef int (*vlc_activate_t
)(void *func
, bool forced
, va_list args
);
34 /*****************************************************************************
36 *****************************************************************************/
39 * Finds the candidate modules for given criteria.
41 * All candidates modules having the specified capability and name will be
42 * sorted in decreasing order of priority and returned in a heap-allocated
45 * \param capability capability, i.e. class of module
46 * \param names string of comma-separated requested module shortcut names,
47 * or NULL for defaults
48 * \param strict whether to exclude modules with no unmatching shortcut names
49 * \param modules storage location for the base address of a sorted table
50 * of candidate modules (NULL on error) [OUT]
51 * \param strict_matches storage location for the count of strictly matched
53 * \return number of modules found or a strictly negative value on error
56 ssize_t
vlc_module_match(const char *capability
, const char *names
,
57 bool strict
, module_t
***restrict modules
,
58 size_t *restrict strict_matches
);
61 * Maps a module in memory.
63 * This function attempts to map a given module in memory, if it is not
64 * already mapped. If it is already mapped, this function does nothing.
66 * \param log message logger
67 * \param mod module to map
69 * \return the module activation function on success, NULL on failure
72 void *vlc_module_map(struct vlc_logger
*log
, module_t
*mod
);
75 * Finds and instantiates the best module of a certain type.
76 * All candidates modules having the specified capability and name will be
77 * sorted in decreasing order of priority. Then the probe callback will be
78 * invoked for each module, until it succeeds (returns 0), or all candidate
79 * module failed to initialize.
81 * The probe callback first parameter is the address of the module entry point.
82 * Further parameters are passed as an argument list; it corresponds to the
83 * variable arguments passed to this function. This scheme is meant to
84 * support arbitrary prototypes for the module entry point.
86 * \param log logger for debugging (or NULL to ignore)
87 * \param capability capability, i.e. class of module
88 * \param name name of the module asked, if any
89 * \param strict if true, do not fallback to plugin with a different name
90 * but the same capability
91 * \param probe module probe callback
92 * \return the module or NULL in case of a failure
94 VLC_API module_t
*vlc_module_load(struct vlc_logger
*log
, const char *cap
,
95 const char *name
, bool strict
,
96 vlc_activate_t probe
, ... ) VLC_USED
;
98 #define vlc_module_load(ctx, cap, name, strict, ...) \
100 struct vlc_logger *: \
101 vlc_module_load((void *)(ctx), cap, name, strict, __VA_ARGS__), \
103 vlc_module_load((void *)(ctx), cap, name, strict, __VA_ARGS__), \
105 vlc_module_load(vlc_object_logger((vlc_object_t *)(ctx)), cap, \
106 name, strict, __VA_ARGS__))
109 VLC_API module_t
* module_need( vlc_object_t
*, const char *, const char *, bool ) VLC_USED
;
110 #define module_need(a,b,c,d) module_need(VLC_OBJECT(a),b,c,d)
113 static inline module_t
*module_need_var(vlc_object_t
*obj
, const char *cap
,
116 char *list
= var_InheritString(obj
, varname
);
117 module_t
*m
= module_need(obj
, cap
, list
, false);
122 #define module_need_var(a,b,c) module_need_var(VLC_OBJECT(a),b,c)
124 VLC_API
void module_unneed( vlc_object_t
*, module_t
* );
125 #define module_unneed(a,b) module_unneed(VLC_OBJECT(a),b)
128 * Checks if a module exists.
130 * \param name name of the module
131 * \retval true if the module exists
132 * \retval false if the module does not exist (in the running installation)
134 VLC_API
bool module_exists(const char *) VLC_USED
;
137 * Get a pointer to a module_t given it's name.
139 * \param name the name of the module
140 * \return a pointer to the module or NULL in case of a failure
142 VLC_API module_t
*module_find(const char *name
) VLC_USED
;
145 * Gets the table of module configuration items.
147 * \note Use module_config_free() to release the allocated memory.
149 * \param module the module
150 * \param psize the size of the configuration returned
151 * \return the configuration as an array
153 VLC_API module_config_t
*module_config_get(const module_t
*module
,
154 unsigned *restrict psize
) VLC_USED
;
157 * Releases the configuration items table.
159 * \param tab base address of a table returned by module_config_get()
161 VLC_API
void module_config_free( module_config_t
*tab
);
163 VLC_API
void module_list_free(module_t
**);
164 VLC_API module_t
** module_list_get(size_t *n
) VLC_USED
;
167 * Checks whether a module implements a capability.
169 * \param m the module
170 * \param cap the capability to check
171 * \retval true if the module has the capability
172 * \retval false if the module has another capability
174 VLC_API
bool module_provides(const module_t
*m
, const char *cap
);
177 * Gets the internal name of a module.
179 * \param m the module
180 * \return the module name
182 VLC_API
const char * module_get_object(const module_t
*m
) VLC_USED
;
185 * Gets the human-friendly name of a module.
187 * \param m the module
188 * \param longname TRUE to have the long name of the module
189 * \return the short or long name of the module
191 VLC_API
const char *module_get_name(const module_t
*m
, bool longname
) VLC_USED
;
192 #define module_GetLongName( m ) module_get_name( m, true )
195 * Gets the help text for a module.
197 * \param m the module
200 VLC_API
const char *module_get_help(const module_t
*m
) VLC_USED
;
203 * Gets the capability string of a module.
205 * \param m the module
206 * \return the capability, or "none" if unspecified
208 VLC_API
const char *module_get_capability(const module_t
*m
) VLC_USED
;
211 * Gets the precedence of a module.
213 * \param m the module
214 * return the score for the capability
216 VLC_API
int module_get_score(const module_t
*m
) VLC_USED
;
219 * Translates a string using the module's text domain
221 * \param m the module
222 * \param s the American English ASCII string to localize
223 * \return the gettext-translated string
225 VLC_API
const char *module_gettext(const module_t
*m
, const char *s
) VLC_USED
;
227 VLC_USED
static inline module_t
*module_get_main (void)
229 return module_find ("core");
231 #define module_get_main(a) module_get_main()
233 VLC_USED
static inline bool module_is_main( const module_t
* p_module
)
235 return !strcmp( module_get_object( p_module
), "core" );
238 #endif /* VLC_MODULES_H */