Commit 6c11c08a authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Partially abstract module_t: add module_IsCapable()

parent 4c4c4ce2
......@@ -46,6 +46,7 @@ typedef shl_t module_handle_t;
/**
* Module descriptor
*/
/* FIXME: scheduled for privatization */
struct module_t
{
VLC_COMMON_MEMBERS
......@@ -65,7 +66,7 @@ struct module_t
/** Shortcuts to the module */
const char *pp_shortcuts[ MODULE_SHORTCUT_MAX ];
const char *psz_capability; /**< Capability */
char *psz_capability; /**< Capability */
int i_score; /**< Score for the capability */
uint32_t i_cpu; /**< Required CPU capabilities */
......@@ -110,7 +111,7 @@ VLC_EXPORT( module_t *, vlc_module_create, ( vlc_object_t * ) );
VLC_EXPORT( module_t *, vlc_submodule_create, ( module_t * ) );
VLC_EXPORT( int, vlc_module_set, (module_t *module, int propid, void *value) );
enum
enum vlc_module_properties
{
/* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
* Append new items at the end ONLY. */
......@@ -128,3 +129,4 @@ enum
VLC_MODULE_NAME
};
VLC_EXPORT( vlc_bool_t, module_IsCapable, ( const module_t *, const char *cap ) );
......@@ -177,6 +177,7 @@ mdate
__module_Exists
__module_Need
__module_Unneed
module_IsCapable
__msg_Dbg
__msg_Err
__msg_Generic
......
......@@ -383,6 +383,14 @@ void __module_LoadPlugins( vlc_object_t * p_this )
#endif
}
/*****************************************************************************
* module_IsCapable: checks whether a module implements a capability.
*****************************************************************************/
vlc_bool_t module_IsCapable( const module_t *m, const char *cap )
{
return !strcmp( m->psz_capability, cap );
}
/*****************************************************************************
* module_Need: return the best module function, given a capability list.
*****************************************************************************
......@@ -479,7 +487,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
p_module = (module_t *)p_all->p_values[i_which_module].p_object;
/* Test that this module can do what we need */
if( strcmp( p_module->psz_capability, psz_capability ) )
if( !module_IsCapable( p_module, psz_capability ) )
{
/* Don't recurse through the sub-modules because vlc_list_find()
* will list them anyway. */
......@@ -1199,7 +1207,7 @@ static void UndupModule( module_t *p_module )
}
free( (void*)p_module->psz_object_name );
free( (void*)p_module->psz_capability );
free( p_module->psz_capability );
free( (void*)p_module->psz_shortname );
free( (void*)p_module->psz_longname );
free( (void*)p_module->psz_help );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment