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; ...@@ -46,6 +46,7 @@ typedef shl_t module_handle_t;
/** /**
* Module descriptor * Module descriptor
*/ */
/* FIXME: scheduled for privatization */
struct module_t struct module_t
{ {
VLC_COMMON_MEMBERS VLC_COMMON_MEMBERS
...@@ -65,7 +66,7 @@ struct module_t ...@@ -65,7 +66,7 @@ struct module_t
/** Shortcuts to the module */ /** Shortcuts to the module */
const char *pp_shortcuts[ MODULE_SHORTCUT_MAX ]; const char *pp_shortcuts[ MODULE_SHORTCUT_MAX ];
const char *psz_capability; /**< Capability */ char *psz_capability; /**< Capability */
int i_score; /**< Score for the capability */ int i_score; /**< Score for the capability */
uint32_t i_cpu; /**< Required CPU capabilities */ uint32_t i_cpu; /**< Required CPU capabilities */
...@@ -110,7 +111,7 @@ VLC_EXPORT( module_t *, vlc_module_create, ( vlc_object_t * ) ); ...@@ -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( module_t *, vlc_submodule_create, ( module_t * ) );
VLC_EXPORT( int, vlc_module_set, (module_t *module, int propid, void *value) ); 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! /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI!
* Append new items at the end ONLY. */ * Append new items at the end ONLY. */
...@@ -128,3 +129,4 @@ enum ...@@ -128,3 +129,4 @@ enum
VLC_MODULE_NAME VLC_MODULE_NAME
}; };
VLC_EXPORT( vlc_bool_t, module_IsCapable, ( const module_t *, const char *cap ) );
...@@ -177,6 +177,7 @@ mdate ...@@ -177,6 +177,7 @@ mdate
__module_Exists __module_Exists
__module_Need __module_Need
__module_Unneed __module_Unneed
module_IsCapable
__msg_Dbg __msg_Dbg
__msg_Err __msg_Err
__msg_Generic __msg_Generic
......
...@@ -383,6 +383,14 @@ void __module_LoadPlugins( vlc_object_t * p_this ) ...@@ -383,6 +383,14 @@ void __module_LoadPlugins( vlc_object_t * p_this )
#endif #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. * 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, ...@@ -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; p_module = (module_t *)p_all->p_values[i_which_module].p_object;
/* Test that this module can do what we need */ /* 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() /* Don't recurse through the sub-modules because vlc_list_find()
* will list them anyway. */ * will list them anyway. */
...@@ -1199,7 +1207,7 @@ static void UndupModule( module_t *p_module ) ...@@ -1199,7 +1207,7 @@ static void UndupModule( module_t *p_module )
} }
free( (void*)p_module->psz_object_name ); 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_shortname );
free( (void*)p_module->psz_longname ); free( (void*)p_module->psz_longname );
free( (void*)p_module->psz_help ); 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