]> git.sesse.net Git - vlc/blobdiff - src/misc/modules.c
* modules/stream_out/transcode.c: added support for subtitles overlaying when transco...
[vlc] / src / misc / modules.c
index 73d35fdec3bc73fea613622dcd42abb1744ee5ef..cc0457224b4cb05e65e66dfb3dd3f34bc711f152 100644 (file)
@@ -328,6 +328,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
     {
         module_t *p_module;
         int i_score;
+        vlc_bool_t b_force;
         module_list_t *p_next;
     };
 
@@ -403,33 +404,16 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
     /* 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++ )
     {
-        module_t * p_submodule = NULL;
-        int i_shortcut_bonus = 0, i_submodule;
+        int i_shortcut_bonus = 0;
 
         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 ) )
         {
-            for( i_submodule = 0;
-                 i_submodule < p_module->i_children;
-                 i_submodule++ )
-            {
-                if( !strcmp( ((module_t*)p_module->pp_children[ i_submodule ])
-                                           ->psz_capability, psz_capability ) )
-                {
-                    p_submodule =
-                            (module_t*)p_module->pp_children[ i_submodule ];
-                    break;
-                }
-            }
-
-            if( p_submodule == NULL )
-            {
-                continue;
-            }
-
-            p_module = p_submodule;
+            /* Don't recurse through the sub-modules because vlc_list_find()
+             * will list them anyway. */
+            continue;
         }
 
         /* Test if we have the required CPU */
@@ -518,6 +502,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
         /* Store this new module */
         p_list[ i_index ].p_module = p_module;
         p_list[ i_index ].i_score = p_module->i_score + i_shortcut_bonus;
+        p_list[ i_index ].b_force = !!i_shortcut_bonus;
 
         /* Add it to the modules-to-probe list */
         if( i_index == 0 )
@@ -588,6 +573,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
         }
 #endif
 
+        p_this->b_force = p_tmp->b_force;
         if( p_tmp->p_module->pf_activate
              && p_tmp->p_module->pf_activate( p_this ) == VLC_SUCCESS )
         {
@@ -617,6 +603,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability,
     }
 
     free( p_list );
+    p_this->b_force = VLC_FALSE;
 
     if( p_module != NULL )
     {
@@ -1762,7 +1749,7 @@ int CacheLoadConfig( module_t *p_module, FILE *file )
             }
         }
 
-        p_module->p_config[i].pf_callback = 0;
+        LOAD_IMMEDIATE( p_module->p_config[i].pf_callback );
     }
 
     p_module->p_config[i].i_type = CONFIG_HINT_END;
@@ -1953,6 +1940,8 @@ void CacheSaveConfig( module_t *p_module, FILE *file )
 
         for( j = 0; j < p_module->p_config[i].i_action; j++ )
             SAVE_STRING( p_module->p_config[i].ppsz_action_text[j] );
+
+        SAVE_IMMEDIATE( p_module->p_config[i].pf_callback );
     }
 }