]> git.sesse.net Git - vlc/blobdiff - src/libvlc-common.c
libvlc_InternalAddIntf: remove useless options
[vlc] / src / libvlc-common.c
index 76c241d09bdd0322fd5f33feccd12473e73cea65..47b0302569fd1b63fd7aad6d4dc175026bb9d807 100644 (file)
 
 #include <vlc_vlm.h>
 
+#include <assert.h>
+
 /*****************************************************************************
  * The evil global variables. We handle them with care, don't worry.
  *****************************************************************************/
 static libvlc_int_t *    p_static_vlc = NULL;
-static volatile unsigned int i_instances = 0;
+static unsigned          i_instances = 0;
 
 static bool b_daemon = false;
 
@@ -206,9 +208,7 @@ libvlc_int_t * libvlc_InternalCreate( void )
     /* Initialize mutexes */
     vlc_mutex_init( &priv->timer_lock );
     vlc_mutex_init( &priv->config_lock );
-#ifdef __APPLE__
-    vlc_thread_set_priority( p_libvlc, VLC_THREAD_PRIORITY_LOW );
-#endif
+
     /* Store data for the non-reentrant API */
     p_static_vlc = p_libvlc;
 
@@ -279,6 +279,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         return VLC_EGENERIC;
     }
 
+#ifdef __APPLE__
+    /* vlc_thread_set_priority needs to query the config,
+     * so this is the earliest moment where we can set this */
+    vlc_thread_set_priority( p_libvlc, VLC_THREAD_PRIORITY_LOW );
+#endif
+
     /* Check for short help option */
     if( config_GetInt( p_libvlc, "help" ) > 0 )
     {
@@ -295,7 +301,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     }
 
     /* Set the config file stuff */
-    p_libvlc->psz_homedir    = config_GetHomeDir();
     priv->psz_configfile = config_GetCustomConfigFile( p_libvlc );
 
     /* Check for plugins cache options */
@@ -801,7 +806,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         if( psz_temp )
         {
             sprintf( psz_temp, "%s,none", psz_module );
-            libvlc_InternalAddIntf( p_libvlc, psz_temp, false, false, 0, NULL );
+            libvlc_InternalAddIntf( p_libvlc, psz_temp, false );
             free( psz_temp );
         }
     }
@@ -811,18 +816,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     /*
      * Always load the hotkeys interface if it exists
      */
-    libvlc_InternalAddIntf( p_libvlc, "hotkeys,none", false, false, 0, NULL );
+    libvlc_InternalAddIntf( p_libvlc, "hotkeys,none", false );
 
 #ifdef HAVE_DBUS_3
     /* loads dbus control interface if in one-instance mode
      * we do it only when playlist exists, because dbus module needs it */
     if( config_GetInt( p_libvlc, "one-instance" ) > 0 )
-        libvlc_InternalAddIntf( p_libvlc, "dbus,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "dbus,none", false );
 
     /* Prevents the power management daemon from suspending the system
      * when VLC is active */
     if( config_GetInt( p_libvlc, "inhibit" ) > 0 )
-        libvlc_InternalAddIntf( p_libvlc, "inhibit,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "inhibit,none", false );
 #endif
 
     /*
@@ -832,31 +837,39 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 #ifdef HAVE_X11_XLIB_H
     if( config_GetInt( p_libvlc, "disable-screensaver" ) )
     {
-        libvlc_InternalAddIntf( p_libvlc, "screensaver,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "screensaver,none", false );
     }
 #endif
 
     if( config_GetInt( p_libvlc, "file-logging" ) > 0 )
     {
-        libvlc_InternalAddIntf( p_libvlc, "logger,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "logger,none", false );
     }
 #ifdef HAVE_SYSLOG_H
     if( config_GetInt( p_libvlc, "syslog" ) > 0 )
     {
-        const char *psz_logmode = "logmode=syslog";
-        libvlc_InternalAddIntf( p_libvlc, "logger,none", false, false,
-                                1, &psz_logmode );
+        char *logmode = var_CreateGetString( p_libvlc, "logmode" );
+        var_SetString( p_libvlc, "logmode", "syslog" );
+        libvlc_InternalAddIntf( p_libvlc, "logger,none", false );
+
+        if( logmode )
+        {
+            var_SetString( p_libvlc, "logmode", logmode );
+            free( logmode );
+        }
+        else
+            var_Destroy( p_libvlc, "logmode" );
     }
 #endif
 
     if( config_GetInt( p_libvlc, "show-intf" ) > 0 )
     {
-        libvlc_InternalAddIntf( p_libvlc, "showintf,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "showintf,none", false );
     }
 
     if( config_GetInt( p_libvlc, "network-synchronisation") > 0 )
     {
-        libvlc_InternalAddIntf( p_libvlc, "netsync,none", false, false, 0, NULL );
+        libvlc_InternalAddIntf( p_libvlc, "netsync,none", false );
     }
 
 #ifdef WIN32
@@ -923,7 +936,6 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 {
     intf_thread_t      * p_intf = NULL;
     vout_thread_t      * p_vout = NULL;
-    aout_instance_t    * p_aout = NULL;
     libvlc_priv_t      *priv = libvlc_priv (p_libvlc);
 
     /* Ask the interfaces to stop and destroy them */
@@ -932,9 +944,8 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     {
         intf_StopThread( p_intf );
         vlc_object_detach( p_intf );
-        vlc_object_release( p_intf );
-        intf_Destroy( p_intf );
-        p_intf = NULL;
+        vlc_object_release( p_intf ); /* for intf_Create() */
+        vlc_object_release( p_intf ); /* for vlc_object_find() */
     }
 
     /* Free video outputs */
@@ -946,15 +957,6 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
         vout_Destroy( p_vout );
     }
 
-    /* Free audio outputs */
-    msg_Dbg( p_libvlc, "removing all audio outputs" );
-    while( (p_aout = vlc_object_find( p_libvlc, VLC_OBJECT_AOUT, FIND_CHILD )) )
-    {
-        vlc_object_detach( (vlc_object_t *)p_aout );
-        vlc_object_release( (vlc_object_t *)p_aout );
-        aout_Delete( p_aout );
-    }
-
 #ifdef ENABLE_SOUT
     playlist_t         * p_playlist;
     sout_instance_t    * p_sout;
@@ -1065,7 +1067,6 @@ int libvlc_InternalDestroy( libvlc_int_t *p_libvlc, bool b_release )
     /* Free module bank. It is refcounted, so we call this each time  */
     module_EndBank( p_libvlc );
 
-    FREENULL( p_libvlc->psz_homedir );
     FREENULL( priv->psz_configfile );
     var_DelCallback( p_libvlc, "key-pressed", vlc_key_to_action,
                      p_libvlc->p_hotkeys );
@@ -1103,10 +1104,8 @@ int libvlc_InternalDestroy( libvlc_int_t *p_libvlc, bool b_release )
 /**
  * Add an interface plugin and run it
  */
-int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc,
-                            char const *psz_module,
-                            bool b_block, bool b_play,
-                            int i_options, const char *const *ppsz_options )
+int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module,
+                            bool b_play )
 {
     int i_err;
     intf_thread_t *p_intf = NULL;
@@ -1118,24 +1117,21 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc,
     {
         char *psz_interface = config_GetPsz( p_libvlc, "intf" );
         if( !psz_interface || !*psz_interface ) /* "intf" has not been set */
-            msg_Info( p_libvlc, _("Running vlc with the default interface. Use 'cvlc' to use vlc without interface.") );
-        free( psz_interface );
-    }
-
+        {
 #ifndef WIN32
-    if( b_daemon && b_block && !psz_module )
-    {
-        /* Daemon mode hack.
-         * We prefer the dummy interface if none is specified. */
-        char *psz_interface = config_GetPsz( p_libvlc, "intf" );
-        if( !psz_interface || !*psz_interface ) psz_module = "dummy";
+            if( b_daemon )
+                 /* Daemon mode hack.
+                  * We prefer the dummy interface if none is specified. */
+                psz_module = "dummy";
+            else
+#endif
+                msg_Info( p_libvlc, _("Running vlc with the default interface. Use 'cvlc' to use vlc without interface.") );
+        }
         free( psz_interface );
     }
-#endif
 
     /* Try to create the interface */
-    p_intf = intf_Create( p_libvlc, psz_module ? psz_module : "$intf",
-                          i_options, ppsz_options );
+    p_intf = intf_Create( p_libvlc, psz_module ? psz_module : "$intf", 0, NULL );
     if( p_intf == NULL )
     {
         msg_Err( p_libvlc, "interface \"%s\" initialization failed",
@@ -1150,26 +1146,13 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc,
     /* Try to run the interface */
     p_intf->b_play = b_play;
     i_err = intf_RunThread( p_intf );
-    if( i_err || p_intf->b_should_run_on_first_thread )
+    if( i_err )
     {
         vlc_object_detach( p_intf );
-        intf_Destroy( p_intf );
-        p_intf = NULL;
+        vlc_object_release( p_intf );
         return i_err;
     }
 
-    if( b_block )
-    {
-        /* FIXME: should be moved to interface/interface.c */
-        if( p_intf->pf_run )
-            vlc_thread_join( p_intf );
-        else
-            while( vlc_object_lock_and_wait( p_intf ) == 0 );
-
-        vlc_object_detach( p_intf );
-        intf_Destroy( p_intf );
-    }
-
     return VLC_SUCCESS;
 };