X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Flibvlc.c;h=4b078a85716c0a80586cd824d1c71a0d0f276d05;hb=a1204db23c3f2bea126c7cb7882d04a0d3236e72;hp=0fb54b02469b35346f7f80fbfa0fd2207009d535;hpb=78d87996ccb92d1dc91c9987685f976ed3be08a6;p=vlc diff --git a/src/libvlc.c b/src/libvlc.c index 0fb54b0246..4b078a8571 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -195,7 +195,7 @@ void vlc_release (gc_object_t *p_gc) assert (refs != (uintptr_t)(-1)); /* reference underflow?! */ if (refs == 0) { -#ifdef USE_SYNC +#if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) #elif defined (WIN32) && defined (__GNUC__) #elif defined(__APPLE__) #else @@ -263,7 +263,6 @@ libvlc_int_t * libvlc_InternalCreate( void ) priv->p_playlist = NULL; priv->p_dialog_provider = NULL; priv->p_vlm = NULL; - p_libvlc->psz_object_name = strdup( "libvlc" ); /* Initialize message queue */ msg_Create( p_libvlc ); @@ -641,7 +640,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, { msg_Err( p_libvlc, "D-Bus problem" ); system_End( p_libvlc ); - exit( VLC_ETIMEOUT ); + exit( 1 ); } /* append MRLs */ @@ -651,7 +650,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, { dbus_message_unref( p_dbus_msg ); system_End( p_libvlc ); - exit( VLC_ENOMEM ); + exit( 1 ); } b_play = TRUE; if( config_GetInt( p_libvlc, "playlist-enqueue" ) > 0 ) @@ -661,7 +660,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, { dbus_message_unref( p_dbus_msg ); system_End( p_libvlc ); - exit( VLC_ENOMEM ); + exit( 1 ); } /* send message and get a handle for a reply */ @@ -671,7 +670,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, msg_Err( p_libvlc, "D-Bus problem" ); dbus_message_unref( p_dbus_msg ); system_End( p_libvlc ); - exit( VLC_ETIMEOUT ); + exit( 1 ); } if ( NULL == p_dbus_pending ) @@ -679,7 +678,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, msg_Err( p_libvlc, "D-Bus problem" ); dbus_message_unref( p_dbus_msg ); system_End( p_libvlc ); - exit( VLC_ETIMEOUT ); + exit( 1 ); } dbus_connection_flush( p_conn ); dbus_message_unref( p_dbus_msg ); @@ -690,7 +689,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, /* bye bye */ system_End( p_libvlc ); - exit( VLC_SUCCESS ); + exit( 0 ); } } /* we unreference the connection when we've finished with it */ @@ -733,6 +732,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, var_SetInteger( p_libvlc, "verbose", -1 ); priv->i_verbose = -1; } + vlc_threads_setup( p_libvlc ); if( priv->b_color ) priv->b_color = config_GetInt( p_libvlc, "color" ) > 0; @@ -814,6 +814,10 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, p_keys ); } + /* variables for signalling creation of new files */ + var_Create( p_libvlc, "snapshot-file", VLC_VAR_STRING ); + var_Create( p_libvlc, "record-file", VLC_VAR_STRING ); + /* Initialize playlist and get commandline files */ p_playlist = playlist_Create( VLC_OBJECT(p_libvlc) ); if( !p_playlist ) @@ -885,7 +889,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, } if( asprintf( &psz_temp, "%s,none", psz_module ) != -1) { - libvlc_InternalAddIntf( p_libvlc, psz_temp ); + intf_Create( p_libvlc, psz_temp ); free( psz_temp ); } } @@ -895,7 +899,7 @@ 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" ); + intf_Create( p_libvlc, "hotkeys,none" ); #ifdef HAVE_DBUS /* loads dbus control interface if in one-instance mode @@ -903,12 +907,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, if( config_GetInt( p_libvlc, "one-instance" ) > 0 || ( config_GetInt( p_libvlc, "one-instance-when-started-from-file" ) && config_GetInt( p_libvlc, "started-from-file" ) ) ) - libvlc_InternalAddIntf( p_libvlc, "dbus,none" ); + intf_Create( p_libvlc, "dbus,none" ); /* 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" ); + intf_Create( p_libvlc, "inhibit,none" ); #endif /* @@ -918,21 +922,21 @@ 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" ); + intf_Create( p_libvlc, "screensaver,none" ); } #endif if( (config_GetInt( p_libvlc, "file-logging" ) > 0) && !config_GetInt( p_libvlc, "syslog" ) ) { - libvlc_InternalAddIntf( p_libvlc, "logger,none" ); + intf_Create( p_libvlc, "logger,none" ); } #ifdef HAVE_SYSLOG_H if( config_GetInt( p_libvlc, "syslog" ) > 0 ) { char *logmode = var_CreateGetString( p_libvlc, "logmode" ); var_SetString( p_libvlc, "logmode", "syslog" ); - libvlc_InternalAddIntf( p_libvlc, "logger,none" ); + intf_Create( p_libvlc, "logger,none" ); if( logmode ) { @@ -944,14 +948,9 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, } #endif - if( config_GetInt( p_libvlc, "show-intf" ) > 0 ) - { - libvlc_InternalAddIntf( p_libvlc, "showintf,none" ); - } - if( config_GetInt( p_libvlc, "network-synchronisation") > 0 ) { - libvlc_InternalAddIntf( p_libvlc, "netsync,none" ); + intf_Create( p_libvlc, "netsync,none" ); } #ifdef WIN32 @@ -985,10 +984,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, /* Create volume callback system. */ var_Create( p_libvlc, "volume-change", VLC_VAR_BOOL ); - /* Create a variable for showing the interface (moved from playlist). */ + /* Create a variable for showing the fullscreen interface from hotkeys */ var_Create( p_libvlc, "intf-show", VLC_VAR_BOOL ); var_SetBool( p_libvlc, "intf-show", true ); + /* Create a variable for showing the right click menu */ var_Create( p_libvlc, "intf-popupmenu", VLC_VAR_BOOL ); /* @@ -1032,14 +1032,8 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) /* Ask the interfaces to stop and destroy them */ msg_Dbg( p_libvlc, "removing all interfaces" ); - intf_thread_t *p_intf; - while( (p_intf = vlc_object_find( p_libvlc, VLC_OBJECT_INTF, FIND_CHILD )) ) - { - intf_StopThread( p_intf ); - vlc_object_detach( p_intf ); - vlc_object_release( p_intf ); /* for intf_Create() */ - vlc_object_release( p_intf ); /* for vlc_object_find() */ - } + libvlc_Quit( p_libvlc ); + intf_DestroyAll( p_libvlc ); #ifdef ENABLE_VLM /* Destroy VLM if created in libvlc_InternalInit */ @@ -1138,9 +1132,6 @@ void libvlc_InternalDestroy( libvlc_int_t *p_libvlc ) */ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module ) { - int i_err; - intf_thread_t *p_intf = NULL; - if( !p_libvlc ) return VLC_EGENERIC; @@ -1164,25 +1155,14 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module ) } /* Try to create the interface */ - p_intf = intf_Create( p_libvlc, psz_module ? psz_module : "$intf" ); - if( p_intf == NULL ) + if( intf_Create( p_libvlc, psz_module ? psz_module : "$intf" ) ) { msg_Err( p_libvlc, "interface \"%s\" initialization failed", - psz_module ); + psz_module ? psz_module : "default" ); return VLC_EGENERIC; } - - /* Try to run the interface */ - i_err = intf_RunThread( p_intf ); - if( i_err ) - { - vlc_object_detach( p_intf ); - vlc_object_release( p_intf ); - return i_err; - } - return VLC_SUCCESS; -}; +} static vlc_mutex_t exit_lock = VLC_STATIC_MUTEX; @@ -1337,6 +1317,38 @@ static inline void print_help_on_full_help( void ) utf8_fprintf( stdout, "%s\n", _("To get exhaustive help, use '-H'.") ); } +static const char vlc_usage[] = N_( + "Usage: %s [options] [stream] ..." + "\nYou can specify multiple streams on the commandline. They will be enqueued in the playlist." + "\nThe first item specified will be played first." + "\n" + "\nOptions-styles:" + "\n --option A global option that is set for the duration of the program." + "\n -option A single letter version of a global --option." + "\n :option An option that only applies to the stream directly before it" + "\n and that overrides previous settings." + "\n" + "\nStream MRL syntax:" + "\n [[access][/demux]://]URL[@[title][:chapter][-[title][:chapter]]] [:option=value ...]" + "\n" + "\n Many of the global --options can also be used as MRL specific :options." + "\n Multiple :option=value pairs can be specified." + "\n" + "\nURL syntax:" + "\n [file://]filename Plain media file" + "\n http://ip:port/file HTTP URL" + "\n ftp://ip:port/file FTP URL" + "\n mms://ip:port/file MMS URL" + "\n screen:// Screen capture" + "\n [dvd://][device][@raw_device] DVD device" + "\n [vcd://][device] VCD device" + "\n [cdda://][device] Audio CD device" + "\n udp://[[]@[][:]]" + "\n UDP stream sent by a streaming server" + "\n vlc://pause: Special item to pause the playlist for a certain time" + "\n vlc://quit Special item to quit VLC" + "\n"); + static void Help( libvlc_int_t *p_this, char const *psz_help_name ) { #ifdef WIN32 @@ -1866,11 +1878,11 @@ static void Usage( libvlc_int_t *p_this, char const *psz_search ) { if( b_color ) utf8_fprintf( stdout, "\n" WHITE "%s" GRAY "\n", - _( "No matching module found. Use --list or" \ + _( "No matching module found. Use --list or " \ "--list-verbose to list available modules." ) ); else utf8_fprintf( stdout, "\n%s\n", - _( "No matching module found. Use --list or" \ + _( "No matching module found. Use --list or " \ "--list-verbose to list available modules." ) ); } @@ -1966,11 +1978,13 @@ static void ListModules( libvlc_int_t *p_this, bool b_verbose ) *****************************************************************************/ static void Version( void ) { + extern const char psz_vlc_changeset[]; #ifdef WIN32 ShowConsole( true ); #endif - utf8_fprintf( stdout, _("VLC version %s\n"), VLC_Version() ); + utf8_fprintf( stdout, _("VLC version %s (%s)\n"), VLC_Version(), + psz_vlc_changeset ); utf8_fprintf( stdout, _("Compiled by %s@%s.%s\n"), VLC_CompileBy(), VLC_CompileHost(), VLC_CompileDomain() ); utf8_fprintf( stdout, _("Compiler: %s\n"), VLC_Compiler() );