static void GetFilenames ( libvlc_int_t *, unsigned, const char *const [] );
/**
- * Allocate a libvlc instance, initialize global data if needed
- * It also initializes the threading system
+ * Allocate a blank libvlc instance, also setting the exit handler.
+ * Vlc's threading system must have been initialized first
*/
libvlc_int_t * libvlc_InternalCreate( void )
{
libvlc_int_t *p_libvlc;
libvlc_priv_t *priv;
- /* Now that the thread system is initialized, we don't have much, but
- * at least we have variables */
/* Allocate a libvlc instance object */
p_libvlc = vlc_custom_create( (vlc_object_t *)NULL, sizeof (*priv),
"libvlc" );
/* System specific initialization code */
system_Init();
+ vlc_LogPreinit(p_libvlc);
+
/* Initialize the module bank and load the configuration of the
* core module. We need to do this at this stage to be able to display
* a short help if required by the user. (short help == core module
return VLC_EGENERIC;
}
- vlc_LogInit (p_libvlc);
vlc_threads_setup (p_libvlc);
/* Load the builtins and plugins into the module_bank.
int vlc_optind;
if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, &vlc_optind ) )
{
- module_EndBank (true);
vlc_LogDeinit (p_libvlc);
+ module_EndBank (true);
return VLC_EGENERIC;
}
+ vlc_LogInit(p_libvlc);
+
/*
* Support for gettext
*/
if( module_count <= 1 )
{
msg_Err( p_libvlc, "No plugins found! Check your VLC installation.");
- module_EndBank (true);
vlc_LogDeinit (p_libvlc);
+ module_EndBank (true);
return VLC_ENOMOD;
}
if( daemon( 1, 0) != 0 )
{
msg_Err( p_libvlc, "Unable to fork vlc to daemon mode" );
- module_EndBank (true);
vlc_LogDeinit (p_libvlc);
+ module_EndBank (true);
return VLC_ENOMEM;
}
}
if( asprintf( &psz_temp, "%s,none", psz_module ) != -1)
{
- intf_Create( p_libvlc, psz_temp );
+ libvlc_InternalAddIntf( p_libvlc, psz_temp );
free( psz_temp );
}
}
free( psz_modules );
free( psz_control );
-#ifdef HAVE_SYSLOG_H
- if( var_InheritBool( p_libvlc, "syslog" ) )
- {
- char *logmode = var_CreateGetNonEmptyString( p_libvlc, "logmode" );
- var_SetString( p_libvlc, "logmode", "syslog" );
- intf_Create( p_libvlc, "logger,none" );
-
- if( logmode )
- {
- var_SetString( p_libvlc, "logmode", logmode );
- free( logmode );
- }
- var_Destroy( p_libvlc, "logmode" );
- }
- else
-#endif
- if( var_InheritBool( p_libvlc, "file-logging" ) )
- intf_Create( p_libvlc, "logger,none" );
-
if( var_InheritBool( p_libvlc, "network-synchronisation") )
- {
- intf_Create( p_libvlc, "netsync,none" );
- }
+ libvlc_InternalAddIntf( p_libvlc, "netsync,none" );
#ifdef __APPLE__
var_Create( p_libvlc, "drawable-view-top", VLC_VAR_INTEGER );
var_Create( p_libvlc, "drawable-clip-right", VLC_VAR_INTEGER );
var_Create( p_libvlc, "drawable-nsobject", VLC_VAR_ADDRESS );
#endif
-#if defined (_WIN32) || defined (__OS2__)
- var_Create( p_libvlc, "drawable-hwnd", VLC_VAR_INTEGER );
-#endif
/*
* Get input filenames given as commandline arguments.
psz_val = var_InheritString( p_libvlc, "open" );
if ( psz_val != NULL )
{
- playlist_AddExt( pl_Get(p_libvlc), psz_val, NULL, PLAYLIST_INSERT, 0,
- -1, 0, NULL, 0, true, pl_Unlocked );
+ intf_InsertItem( p_libvlc, psz_val, 0, NULL, 0 );
free( psz_val );
}
}
#endif
- /* Free playlist now, all threads are gone */
- playlist_t *p_playlist = libvlc_priv (p_libvlc)->playlist;
- if( p_playlist != NULL )
- playlist_Destroy( p_playlist );
-
#if !defined( _WIN32 ) && !defined( __OS2__ )
char *pidfile = var_InheritString( p_libvlc, "pidfile" );
if( pidfile != NULL )
config_AutoSaveConfigFile( VLC_OBJECT(p_libvlc) );
/* Free module bank. It is refcounted, so we call this each time */
- module_EndBank (true);
vlc_LogDeinit (p_libvlc);
+ module_EndBank (true);
#if defined(_WIN32) || defined(__OS2__)
system_End( );
#endif
vlc_object_release( p_libvlc );
}
-/**
- * Add an interface plugin and run it
- */
-int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, const char *name )
-{
- int ret;
-
- if( !p_libvlc )
- return VLC_EGENERIC;
-
- if( name != NULL )
- ret = intf_Create( p_libvlc, name );
- else
- { /* Default interface */
- char *intf = var_InheritString( p_libvlc, "intf" );
- if( intf == NULL ) /* "intf" has not been set */
- {
- char *pidfile = var_InheritString( p_libvlc, "pidfile" );
- if( pidfile != NULL )
- free( pidfile );
- else
- msg_Info( p_libvlc, "%s",
- _("Running vlc with the default interface. "
- "Use 'cvlc' to use vlc without interface.") );
- }
- ret = intf_Create( p_libvlc, intf );
- name = "default";
- }
- if( ret )
- msg_Err( p_libvlc, "interface \"%s\" initialization failed", name );
- return ret;
-}
-
/*****************************************************************************
* GetFilenames: parse command line options which are not flags
*****************************************************************************
continue;
}
- playlist_AddExt( pl_Get( p_vlc ), (mrl != NULL) ? mrl : args[n], NULL,
- PLAYLIST_INSERT, 0, -1, i_options,
+ intf_InsertItem( p_vlc, (mrl != NULL) ? mrl : args[n], i_options,
( i_options ? &args[n + 1] : NULL ),
- VLC_INPUT_OPTION_TRUSTED, true, pl_Unlocked );
+ VLC_INPUT_OPTION_TRUSTED );
free( mrl );
}
}
* Requests extraction of the meta data for an input item (a.k.a. preparsing).
* The actual extraction is asynchronous.
*/
-int libvlc_MetaRequest(libvlc_int_t *libvlc, input_item_t *item)
+int libvlc_MetaRequest(libvlc_int_t *libvlc, input_item_t *item,
+ input_item_meta_request_option_t i_options)
{
libvlc_priv_t *priv = libvlc_priv(libvlc);
if (unlikely(priv->parser == NULL))
return VLC_ENOMEM;
- playlist_preparser_Push(priv->parser, item);
+ playlist_preparser_Push(priv->parser, item, i_options);
return VLC_SUCCESS;
}
* Requests retrieving/downloading art for an input item.
* The retrieval is performed asynchronously.
*/
-int libvlc_ArtRequest(libvlc_int_t *libvlc, input_item_t *item)
+int libvlc_ArtRequest(libvlc_int_t *libvlc, input_item_t *item,
+ input_item_meta_request_option_t i_options)
{
libvlc_priv_t *priv = libvlc_priv(libvlc);
if (unlikely(priv->parser == NULL))
return VLC_ENOMEM;
- playlist_preparser_fetcher_Push(priv->parser, item);
+ playlist_preparser_fetcher_Push(priv->parser, item, i_options);
return VLC_SUCCESS;
}