Commit 7bc11355 authored by Antoine Cellerier's avatar Antoine Cellerier

Add new module_FindName function to find a module when given it's name. Use...

Add new module_FindName function to find a module when given it's name. Use this to fix the qt interface extended panel (video filters).
Change module_Exists to take the module name (and not short name) as parameter. Update the only known use of that function acordingly.
parent 4de1a9ca
...@@ -109,6 +109,10 @@ VLC_EXPORT( void, __module_Unneed, ( vlc_object_t *, module_t * ) ); ...@@ -109,6 +109,10 @@ VLC_EXPORT( void, __module_Unneed, ( vlc_object_t *, module_t * ) );
#define module_Exists(a,b) __module_Exists(VLC_OBJECT(a),b) #define module_Exists(a,b) __module_Exists(VLC_OBJECT(a),b)
VLC_EXPORT( vlc_bool_t, __module_Exists, ( vlc_object_t *, const char * ) ); VLC_EXPORT( vlc_bool_t, __module_Exists, ( vlc_object_t *, const char * ) );
/* Use only if you know what you're doing... */
#define module_FindName(a,b) __module_FindName(VLC_OBJECT(a),b)
VLC_EXPORT( module_t *, __module_FindName, ( vlc_object_t *, const char * ) );
VLC_EXPORT( module_t *, vlc_module_create, ( vlc_object_t * ) ); 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) );
......
...@@ -756,7 +756,7 @@ static int ParseImageAttachments( decoder_t *p_dec ) ...@@ -756,7 +756,7 @@ static int ParseImageAttachments( decoder_t *p_dec )
fmt_out.i_chroma = VLC_FOURCC('Y','U','V','A'); fmt_out.i_chroma = VLC_FOURCC('Y','U','V','A');
/* Find a suitable decoder module */ /* Find a suitable decoder module */
if( module_Exists( p_dec, "SDL Image decoder" ) ) if( module_Exists( p_dec, "sdl_image" ) )
{ {
/* ffmpeg thinks it can handle bmp properly but it can't (at least /* ffmpeg thinks it can handle bmp properly but it can't (at least
* not all of them), so use sdl_image if it is available */ * not all of them), so use sdl_image if it is available */
......
...@@ -208,29 +208,25 @@ void ExtVideo::ChangeVFiltersString( char *psz_name, vlc_bool_t b_add ) ...@@ -208,29 +208,25 @@ void ExtVideo::ChangeVFiltersString( char *psz_name, vlc_bool_t b_add )
char *psz_parser, *psz_string; char *psz_parser, *psz_string;
char *psz_filter_type; char *psz_filter_type;
msg_Err( p_intf, "FIXME %s %s %d.", __FILE__, __func__, __LINE__ );
return;
#if 0
/* Please leave p_libvlc_global. This is where cached modules are /* Please leave p_libvlc_global. This is where cached modules are
* stored. We're not trying to find a module instance. */ * stored. We're not trying to find a module instance. */
vlc_object_t *p_obj = (vlc_object_t *) module_t *p_obj = module_FindName( p_intf, psz_name );
vlc_object_find_name( vlc_global_object(), psz_name, FIND_CHILD );
if( !p_obj ) if( !p_obj )
{ {
msg_Err( p_intf, "Unable to find filter module \"%s\n.", psz_name ); msg_Err( p_intf, "Unable to find filter module \"%s\n.", psz_name );
return; return;
} }
if( module_IsCapable( (module_t*)p_obj, "video filter2" ) ) if( module_IsCapable( p_obj, "video filter2" ) )
{ {
psz_filter_type = "video-filter"; psz_filter_type = "video-filter";
} }
else if( module_IsCapable( (module_t*)p_obj, "video filter" ) ) else if( module_IsCapable( p_obj, "video filter" ) )
{ {
psz_filter_type = "vout-filter"; psz_filter_type = "vout-filter";
} }
else if( module_IsCapable( (module_t*)p_obj, "sub filter" ) ) else if( module_IsCapable( p_obj, "sub filter" ) )
{ {
psz_filter_type = "sub-filter"; psz_filter_type = "sub-filter";
} }
...@@ -311,7 +307,6 @@ void ExtVideo::ChangeVFiltersString( char *psz_name, vlc_bool_t b_add ) ...@@ -311,7 +307,6 @@ void ExtVideo::ChangeVFiltersString( char *psz_name, vlc_bool_t b_add )
} }
free( psz_string ); free( psz_string );
#endif
} }
void ExtVideo::updateFilters() void ExtVideo::updateFilters()
......
...@@ -766,27 +766,46 @@ void __module_Unneed( vlc_object_t * p_this, module_t * p_module ) ...@@ -766,27 +766,46 @@ void __module_Unneed( vlc_object_t * p_this, module_t * p_module )
} }
/***************************************************************************** /*****************************************************************************
* module_Exists: tell if a module exists. * module_FindName: get a pointer to a module_t given it's name.
*****************************************************************************
* This function is a boolean function that tells if a module exist or not.
*****************************************************************************/ *****************************************************************************/
module_t *__module_FindName( vlc_object_t *p_this, const char * psz_name )
vlc_bool_t __module_Exists( vlc_object_t *p_this, const char * psz_name )
{ {
vlc_list_t *p_list; vlc_list_t *p_list;
int i; int i;
p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
for( i = 0 ; i < p_list->i_count; i++) for( i = 0 ; i < p_list->i_count; i++)
{ {
const char *psz_module_name = module_t *p_module = ((module_t *) p_list->p_values[i].p_object);
((module_t *) p_list->p_values[i].p_object)->psz_shortname; const char *psz_module_name = p_module->psz_object_name;
if( psz_module_name && !strcmp( psz_module_name, psz_name ) ) if( psz_module_name && !strcmp( psz_module_name, psz_name ) )
{ {
/* We can release the list, and return yes */ /* We can release the list, and return yes */
vlc_list_release( p_list ); return VLC_TRUE; vlc_list_release( p_list );
vlc_object_yield( p_module );
return p_module;
} }
} }
vlc_list_release( p_list ); return VLC_FALSE; vlc_list_release( p_list );
return NULL;
}
/*****************************************************************************
* module_Exists: tell if a module exists.
*****************************************************************************
* This function is a boolean function that tells if a module exist or not.
*****************************************************************************/
vlc_bool_t __module_Exists( vlc_object_t *p_this, const char * psz_name )
{
module_t *p_module = __module_FindName( p_this, psz_name );
if( p_module )
{
vlc_object_release( p_module );
return VLC_TRUE;
}
else
{
return VLC_FALSE;
}
} }
......
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