]> git.sesse.net Git - vlc/blobdiff - src/modules/modules.c
Partially abstract module_t: add module_IsCapable()
[vlc] / src / modules / modules.c
index 9e426c6cf7eeda5ab78eb652b98c5a40333482f9..fdf123683371be952f0d51c70fcf6461585e64c9 100644 (file)
@@ -25,6 +25,7 @@
  *****************************************************************************/
 
 #include <vlc/vlc.h>
+#include "../libvlc.h"
 
 /* Some faulty libcs have a broken struct dirent when _FILE_OFFSET_BITS
  * is set to 64. Don't try to be cleverer. */
@@ -76,6 +77,7 @@
 #endif
 
 #include "modules/configuration.h"
+#include "libvlc.h"
 
 #include "vlc_interface.h"
 #include "vlc_playlist.h"
@@ -83,6 +85,7 @@
 #include "vlc_stream.h"
 #include "vlc_access.h"
 #include "vlc_demux.h"
+#include "vlc_codec.h"
 
 #include "vlc_vout.h"
 #include "vlc_vout_synchro.h"
@@ -154,10 +157,9 @@ static char * GetWindowsError  ( void );
 
 static void module_LoadMain( vlc_object_t *p_this );
 
-
 /* Sub-version number
  * (only used to avoid breakage in dev version when cache structure changes) */
-#define CACHE_SUBVERSION_NUM 2
+#define CACHE_SUBVERSION_NUM 3
 
 /*****************************************************************************
  * module_InitBank: create the module bank.
@@ -169,19 +171,20 @@ void __module_InitBank( vlc_object_t *p_this )
 {
     module_bank_t *p_bank = NULL;
     vlc_value_t  lockval;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
-    var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+    var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+    var_Get( p_libvlc_global, "libvlc", &lockval );
     vlc_mutex_lock( lockval.p_address );
-    if( p_this->p_libvlc_global->p_module_bank )
+    if( p_libvlc_global->p_module_bank )
     {
-        p_this->p_libvlc_global->p_module_bank->i_usage++;
+        p_libvlc_global->p_module_bank->i_usage++;
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
     vlc_mutex_unlock( lockval.p_address );
-    var_Destroy( p_this->p_libvlc_global, "libvlc" );
+    var_Destroy( p_libvlc_global, "libvlc" );
 
     p_bank = vlc_object_create( p_this, sizeof(module_bank_t) );
     if( !p_bank )
@@ -193,31 +196,13 @@ void __module_InitBank( vlc_object_t *p_this )
     p_bank->b_cache = p_bank->b_cache_dirty =
         p_bank->b_cache_delete = VLC_FALSE;
 
-    /*
-     * Store the symbols to be exported
-     */
-#if defined (HAVE_DYNAMIC_PLUGINS) && !defined (HAVE_SHARED_LIBVLC)
-    STORE_SYMBOLS( &p_bank->symbols );
-#endif
-
     /* Everything worked, attach the object */
-    p_this->p_libvlc_global->p_module_bank = p_bank;
-    vlc_object_attach( p_bank, p_this->p_libvlc_global );
+    p_libvlc_global->p_module_bank = p_bank;
+    vlc_object_attach( p_bank, p_libvlc_global );
 
     module_LoadMain( p_this );
 }
 
-/*****************************************************************************
- * module_ResetBank: reset the module bank.
- *****************************************************************************
- * This function resets the module bank by unloading all unused plugin
- * modules.
- *****************************************************************************/
-void __module_ResetBank( vlc_object_t *p_this )
-{
-    msg_Err( p_this, "FIXME: module_ResetBank unimplemented" );
-    return;
-}
 
 /*****************************************************************************
  * module_EndBank: empty the module bank.
@@ -229,35 +214,37 @@ void __module_EndBank( vlc_object_t *p_this )
 {
     module_t * p_next = NULL;
     vlc_value_t lockval;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
-    var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+    var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+    var_Get( p_libvlc_global, "libvlc", &lockval );
     vlc_mutex_lock( lockval.p_address );
-    if( !p_this->p_libvlc_global->p_module_bank )
+    if( !p_libvlc_global->p_module_bank )
     {
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
-    if( --p_this->p_libvlc_global->p_module_bank->i_usage )
+    if( --p_libvlc_global->p_module_bank->i_usage )
     {
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
     vlc_mutex_unlock( lockval.p_address );
-    var_Destroy( p_this->p_libvlc_global, "libvlc" );
+    var_Destroy( p_libvlc_global, "libvlc" );
 
     config_AutoSaveConfigFile( p_this );
 
 #ifdef HAVE_DYNAMIC_PLUGINS
-#define p_bank p_this->p_libvlc_global->p_module_bank
+# define p_bank p_libvlc_global->p_module_bank
     if( p_bank->b_cache ) CacheSave( p_this );
     while( p_bank->i_loaded_cache-- )
     {
         if( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] )
         {
-            DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module, p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used );
+            DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module,
+                          p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used );
             free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->psz_file );
             free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] );
             p_bank->pp_loaded_cache[p_bank->i_loaded_cache] = NULL;
@@ -279,14 +266,14 @@ void __module_EndBank( vlc_object_t *p_this )
         free( p_bank->pp_cache );
         p_bank->pp_cache = NULL;
     }
-#undef p_bank
+# undef p_bank
 #endif
 
-    vlc_object_detach( p_this->p_libvlc_global->p_module_bank );
+    vlc_object_detach( p_libvlc_global->p_module_bank );
 
-    while( p_this->p_libvlc_global->p_module_bank->i_children )
+    while( p_libvlc_global->p_module_bank->i_children )
     {
-        p_next = (module_t *)p_this->p_libvlc_global->p_module_bank->pp_children[0];
+        p_next = (module_t *)p_libvlc_global->p_module_bank->pp_children[0];
 
         if( DeleteModule( p_next, VLC_TRUE ) )
         {
@@ -300,10 +287,8 @@ void __module_EndBank( vlc_object_t *p_this )
         }
     }
 
-    vlc_object_destroy( p_this->p_libvlc_global->p_module_bank );
-    p_this->p_libvlc_global->p_module_bank = NULL;
-
-    return;
+    vlc_object_destroy( p_libvlc_global->p_module_bank );
+    p_libvlc_global->p_module_bank = NULL;
 }
 
 /*****************************************************************************
@@ -317,19 +302,20 @@ void __module_EndBank( vlc_object_t *p_this )
 static void module_LoadMain( vlc_object_t *p_this )
 {
     vlc_value_t lockval;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
-    var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+    var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+    var_Get( p_libvlc_global, "libvlc", &lockval );
     vlc_mutex_lock( lockval.p_address );
-    if( p_this->p_libvlc_global->p_module_bank->b_main )
+    if( p_libvlc_global->p_module_bank->b_main )
     {
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
-    p_this->p_libvlc_global->p_module_bank->b_main = VLC_TRUE;
+    p_libvlc_global->p_module_bank->b_main = VLC_TRUE;
     vlc_mutex_unlock( lockval.p_address );
-    var_Destroy( p_this->p_libvlc_global, "libvlc" );
+    var_Destroy( p_libvlc_global, "libvlc" );
 
     AllocateBuiltinModule( p_this, vlc_entry__main );
 }
@@ -342,19 +328,20 @@ static void module_LoadMain( vlc_object_t *p_this )
 void __module_LoadBuiltins( vlc_object_t * p_this )
 {
     vlc_value_t lockval;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
-    var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+    var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+    var_Get( p_libvlc_global, "libvlc", &lockval );
     vlc_mutex_lock( lockval.p_address );
-    if( p_this->p_libvlc_global->p_module_bank->b_builtins )
+    if( p_libvlc_global->p_module_bank->b_builtins )
     {
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
-    p_this->p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE;
+    p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE;
     vlc_mutex_unlock( lockval.p_address );
-    var_Destroy( p_this->p_libvlc_global, "libvlc" );
+    var_Destroy( p_libvlc_global, "libvlc" );
 
     msg_Dbg( p_this, "checking builtin modules" );
     ALLOCATE_ALL_BUILTINS();
@@ -369,32 +356,41 @@ void __module_LoadPlugins( vlc_object_t * p_this )
 {
 #ifdef HAVE_DYNAMIC_PLUGINS
     vlc_value_t lockval;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
-    var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+    var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+    var_Get( p_libvlc_global, "libvlc", &lockval );
     vlc_mutex_lock( lockval.p_address );
-    if( p_this->p_libvlc_global->p_module_bank->b_plugins )
+    if( p_libvlc_global->p_module_bank->b_plugins )
     {
         vlc_mutex_unlock( lockval.p_address );
-        var_Destroy( p_this->p_libvlc_global, "libvlc" );
+        var_Destroy( p_libvlc_global, "libvlc" );
         return;
     }
-    p_this->p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE;
+    p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE;
     vlc_mutex_unlock( lockval.p_address );
-    var_Destroy( p_this->p_libvlc_global, "libvlc" );
+    var_Destroy( p_libvlc_global, "libvlc" );
 
     msg_Dbg( p_this, "checking plugin modules" );
 
     if( config_GetInt( p_this, "plugins-cache" ) )
-        p_this->p_libvlc_global->p_module_bank->b_cache = VLC_TRUE;
+        p_libvlc_global->p_module_bank->b_cache = VLC_TRUE;
 
-    if( p_this->p_libvlc_global->p_module_bank->b_cache ||
-        p_this->p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this );
+    if( p_libvlc_global->p_module_bank->b_cache ||
+        p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this );
 
     AllocateAllPlugins( 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.
  *****************************************************************************
@@ -481,6 +477,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
     p_all = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
     p_list = malloc( p_all->i_count * sizeof( module_list_t ) );
     p_first = NULL;
+    unsigned i_cpu = vlc_CPU();
 
     /* Parse the module list for capabilities and probe each of them */
     for( i_which_module = 0; i_which_module < p_all->i_count; i_which_module++ )
@@ -490,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. */
@@ -498,7 +495,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
         }
 
         /* Test if we have the required CPU */
-        if( (p_module->i_cpu & p_this->p_libvlc_global->i_cpu) != p_module->i_cpu )
+        if( (p_module->i_cpu & i_cpu) != p_module->i_cpu )
         {
             continue;
         }
@@ -808,8 +805,8 @@ static void AllocateAllPlugins( vlc_object_t *p_this )
         if( (*ppsz_path)[0] != '/' )
 #endif
         {
-            if( 0>= asprintf(&psz_fullpath, "%s"DIR_SEP"%s",
-                          p_this->p_libvlc_global->psz_vlcpath, *ppsz_path) )
+            if( 0>= asprintf( &psz_fullpath, "%s"DIR_SEP"%s",
+                              vlc_global( p_this )->psz_vlcpath, *ppsz_path) )
                 psz_fullpath = NULL;
         }
         else
@@ -1071,6 +1068,8 @@ static int AllocatePluginFile( vlc_object_t * p_this, char * psz_file,
 
     if( p_module )
     {
+        libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
+
         /* Everything worked fine !
          * The module is ready to be added to the list. */
         p_module->b_builtin = VLC_FALSE;
@@ -1078,13 +1077,13 @@ static int AllocatePluginFile( vlc_object_t * p_this, char * psz_file,
         /* msg_Dbg( p_this, "plugin \"%s\", %s",
                     p_module->psz_object_name, p_module->psz_longname ); */
 
-        vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank );
+        vlc_object_attach( p_module, p_libvlc_global->p_module_bank );
 
-        if( !p_this->p_libvlc_global->p_module_bank->b_cache )
+        if( !p_libvlc_global->p_module_bank->b_cache )
             return 0;
 
+#define p_bank p_libvlc_global->p_module_bank
         /* Add entry to cache */
-#define p_bank p_this->p_libvlc_global->p_module_bank
         p_bank->pp_cache =
             realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
         p_bank->pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );
@@ -1119,7 +1118,7 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, char * psz_file )
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
-    p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+    p_module = vlc_module_create( p_this );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
@@ -1130,9 +1129,6 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, char * psz_file )
     /* We need to fill these since they may be needed by CallEntry() */
     p_module->psz_filename = psz_file;
     p_module->handle = handle;
-#ifndef HAVE_SHARED_LIBVLC
-    p_module->p_symbols = &p_this->p_libvlc_global->p_module_bank->symbols;
-#endif
     p_module->b_loaded = VLC_TRUE;
 
     /* Initialize the module: fill p_module, default config */
@@ -1211,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 );
@@ -1234,7 +1230,7 @@ static int AllocateBuiltinModule( vlc_object_t * p_this,
 
     /* Now that we have successfully loaded the module, we can
      * allocate a structure for it */
-    p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+    p_module = vlc_module_create( p_this );
     if( p_module == NULL )
     {
         msg_Err( p_this, "out of memory" );
@@ -1257,7 +1253,7 @@ static int AllocateBuiltinModule( vlc_object_t * p_this,
     /* msg_Dbg( p_this, "builtin \"%s\", %s",
                 p_module->psz_object_name, p_module->psz_longname ); */
 
-    vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank );
+    vlc_object_attach( p_module, vlc_global( p_this )->p_module_bank );
 
     return 0;
 }
@@ -1496,7 +1492,9 @@ static void CloseModule( module_handle_t handle )
     FreeLibrary( handle );
 
 #elif defined(HAVE_DL_DLOPEN)
+# ifndef NDEBUG
     dlclose( handle );
+# endif
 
 #elif defined(HAVE_DL_SHL_LOAD)
     shl_unload( handle );
@@ -1631,6 +1629,7 @@ static void CacheLoad( vlc_object_t *p_this )
     int i_cache;
     module_cache_t **pp_cache = 0;
     int32_t i_file_size, i_marker;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
     psz_homedir = p_this->p_libvlc->psz_homedir;
     if( !psz_homedir )
@@ -1647,7 +1646,7 @@ static void CacheLoad( vlc_object_t *p_this )
         return;
     }
 
-    if( p_this->p_libvlc_global->p_module_bank->b_cache_delete )
+    if( p_libvlc_global->p_module_bank->b_cache_delete )
     {
 #if !defined( UNDER_CE )
         unlink( psz_filename );
@@ -1736,7 +1735,7 @@ static void CacheLoad( vlc_object_t *p_this )
         return;
     }
 
-    p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
+    p_libvlc_global->p_module_bank->i_loaded_cache = 0;
     if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) )
     {
         msg_Warn( p_this, "This doesn't look like a valid plugins cache "
@@ -1746,7 +1745,7 @@ static void CacheLoad( vlc_object_t *p_this )
     }
 
     if( i_cache )
-        pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache =
+        pp_cache = p_libvlc_global->p_module_bank->pp_loaded_cache =
                    malloc( i_cache * sizeof(void *) );
 
 #define LOAD_IMMEDIATE(a) \
@@ -1777,7 +1776,7 @@ static void CacheLoad( vlc_object_t *p_this )
         int i_submodules;
 
         pp_cache[i] = malloc( sizeof(module_cache_t) );
-        p_this->p_libvlc_global->p_module_bank->i_loaded_cache++;
+        p_libvlc_global->p_module_bank->i_loaded_cache++;
 
         /* Load common info */
         LOAD_STRING( pp_cache[i]->psz_file );
@@ -1788,7 +1787,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
         if( pp_cache[i]->b_junk ) continue;
 
-        pp_cache[i]->p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE );
+        pp_cache[i]->p_module = vlc_module_create( p_this );
 
         /* Load additional infos */
         LOAD_STRING( pp_cache[i]->p_module->psz_object_name );
@@ -1817,10 +1816,7 @@ static void CacheLoad( vlc_object_t *p_this )
 
         while( i_submodules-- )
         {
-            module_t *p_module = vlc_object_create( p_this, VLC_OBJECT_MODULE);
-            vlc_object_attach( p_module, pp_cache[i]->p_module );
-            p_module->b_submodule = VLC_TRUE;
-
+            module_t *p_module = vlc_submodule_create( pp_cache[i]->p_module );
             LOAD_STRING( p_module->psz_object_name );
             LOAD_STRING( p_module->psz_shortname );
             LOAD_STRING( p_module->psz_longname );
@@ -1846,7 +1842,7 @@ static void CacheLoad( vlc_object_t *p_this )
     msg_Warn( p_this, "plugins cache not loaded (corrupted)" );
 
     /* TODO: cleanup */
-    p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
+    p_libvlc_global->p_module_bank->i_loaded_cache = 0;
 
     fclose( file );
     return;
@@ -1987,6 +1983,7 @@ static void CacheSave( vlc_object_t *p_this )
     int i, j, i_cache;
     module_cache_t **pp_cache;
     int32_t i_file_size = 0;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
     psz_homedir = p_this->p_libvlc->psz_homedir;
     if( !psz_homedir )
@@ -2054,8 +2051,8 @@ static void CacheSave( vlc_object_t *p_this )
     i_file_size = ftell( file );
     fwrite( &i_file_size, sizeof(char), sizeof(i_file_size), file );
 
-    i_cache = p_this->p_libvlc_global->p_module_bank->i_cache;
-    pp_cache = p_this->p_libvlc_global->p_module_bank->pp_cache;
+    i_cache = p_libvlc_global->p_module_bank->i_cache;
+    pp_cache = p_libvlc_global->p_module_bank->pp_cache;
 
     fwrite( &i_cache, sizeof(char), sizeof(i_cache), file );
 
@@ -2211,9 +2208,6 @@ static void CacheMerge( vlc_object_t *p_this, module_t *p_cache,
 
     p_cache->pf_activate = p_module->pf_activate;
     p_cache->pf_deactivate = p_module->pf_deactivate;
-#ifndef HAVE_SHARED_LIBVLC
-    p_cache->p_symbols = p_module->p_symbols;
-#endif
     p_cache->handle = p_module->handle;
 
     for( i_submodule = 0; i_submodule < p_module->i_children; i_submodule++ )
@@ -2222,9 +2216,6 @@ static void CacheMerge( vlc_object_t *p_this, module_t *p_cache,
         module_t *p_cchild = (module_t*)p_cache->pp_children[i_submodule];
         p_cchild->pf_activate = p_child->pf_activate;
         p_cchild->pf_deactivate = p_child->pf_deactivate;
-#ifndef HAVE_SHARED_LIBVLC
-        p_cchild->p_symbols = p_child->p_symbols;
-#endif
     }
 
     p_cache->b_loaded = VLC_TRUE;
@@ -2239,9 +2230,10 @@ static module_cache_t *CacheFind( vlc_object_t *p_this, char *psz_file,
 {
     module_cache_t **pp_cache;
     int i_cache, i;
+    libvlc_global_data_t *p_libvlc_global = vlc_global( p_this );
 
-    pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache;
-    i_cache = p_this->p_libvlc_global->p_module_bank->i_loaded_cache;
+    pp_cache = p_libvlc_global->p_module_bank->pp_loaded_cache;
+    i_cache = p_libvlc_global->p_module_bank->i_loaded_cache;
 
     for( i = 0; i < i_cache; i++ )
     {