X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Flibvlc.c;h=81dacf921bcab3f1c2f684fe6e9c71076f500f11;hb=51f8337ec523733193da6eb8990bcd82991aa827;hp=3cef1bfa00e178a600ce07a47dcec211fd458503;hpb=709be17708bf62399b3e1a3104e8489cef01e8a3;p=vlc diff --git a/src/libvlc.c b/src/libvlc.c index 3cef1bfa00..81dacf921b 100644 --- a/src/libvlc.c +++ b/src/libvlc.c @@ -43,7 +43,6 @@ #include "modules/modules.h" #include "config/configuration.h" -#include /* ENOMEM */ #include /* sprintf() */ #include #include /* free() */ @@ -277,7 +276,6 @@ libvlc_int_t * libvlc_InternalCreate( void ) /* Initialize mutexes */ vlc_mutex_init( &priv->timer_lock ); - vlc_cond_init( &priv->exiting ); return p_libvlc; } @@ -475,12 +473,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, module_list_free( list ); msg_Dbg( p_libvlc, "module bank initialized (%zu modules)", module_count ); - if( module_count <= 1) - { - msg_Err( p_libvlc, "No modules were found, refusing to start. Check " - "that you properly gave a module path with --plugin-path."); - abort(); - } /* Check for help on modules */ if( (p_tmp = var_CreateGetNonEmptyString( p_libvlc, "module" )) ) { @@ -536,6 +528,14 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, } } + if( module_count <= 1) + { + msg_Err( p_libvlc, "No modules were found, refusing to start. Check " + "that you properly gave a module path with --plugin-path."); + b_exit = true; + i_ret = VLC_ENOITEM; + } + if( b_exit ) { module_EndBank( p_libvlc, true ); @@ -769,7 +769,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, PRINT_CAPABILITY( CPU_CAPABILITY_SSE, "SSE" ); PRINT_CAPABILITY( CPU_CAPABILITY_SSE2, "SSE2" ); PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSE3" ); - PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSSE3" ); + PRINT_CAPABILITY( CPU_CAPABILITY_SSSE3, "SSSE3" ); PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_1, "SSE4.1" ); PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_2, "SSE4.2" ); PRINT_CAPABILITY( CPU_CAPABILITY_SSE4A, "SSE4A" ); @@ -809,27 +809,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, /* * Initialize hotkey handling */ - var_Create( p_libvlc, "key-pressed", VLC_VAR_INTEGER ); - var_Create( p_libvlc, "key-action", VLC_VAR_INTEGER ); - { - struct hotkey *p_keys = - malloc( (libvlc_actions_count + 1) * sizeof (*p_keys) ); - - /* Initialize from configuration */ - for( size_t i = 0; i < libvlc_actions_count; i++ ) - { - p_keys[i].psz_action = libvlc_actions[i].name; - p_keys[i].i_key = config_GetInt( p_libvlc, - libvlc_actions[i].name ); - p_keys[i].i_action = libvlc_actions[i].value; - } - p_keys[libvlc_actions_count].psz_action = NULL; - p_keys[libvlc_actions_count].i_key = 0; - p_keys[libvlc_actions_count].i_action = 0; - p_libvlc->p_hotkeys = p_keys; - var_AddCallback( p_libvlc, "key-pressed", vlc_key_to_action, - p_keys ); - } + vlc_InitActions( p_libvlc ); /* variables for signalling creation of new files */ var_Create( p_libvlc, "snapshot-file", VLC_VAR_STRING ); @@ -877,7 +857,8 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, */ /* Create volume callback system. (this variable must be created before all interfaces as they can use it) */ - var_Create( p_libvlc, "volume-change", VLC_VAR_BOOL ); + var_Create( p_libvlc, "volume-change", VLC_VAR_VOID ); + var_Create( p_libvlc, "volume-muted", VLC_VAR_BOOL ); psz_modules = var_CreateGetNonEmptyString( p_libvlc, "extraintf" ); psz_control = var_CreateGetNonEmptyString( p_libvlc, "control" ); @@ -1093,9 +1074,7 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc ) /* Free module bank. It is refcounted, so we call this each time */ module_EndBank( p_libvlc, true ); - var_DelCallback( p_libvlc, "key-pressed", vlc_key_to_action, - (void *)p_libvlc->p_hotkeys ); - free( (void *)p_libvlc->p_hotkeys ); + vlc_DeinitActions( p_libvlc ); } /** @@ -1122,7 +1101,6 @@ void libvlc_InternalDestroy( libvlc_int_t *p_libvlc ) msg_Destroy( p_libvlc ); /* Destroy mutexes */ - vlc_cond_destroy( &priv->exiting ); vlc_mutex_destroy( &priv->timer_lock ); #ifndef NDEBUG /* Hack to dump leaked objects tree */ @@ -1160,6 +1138,7 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module ) "Use 'cvlc' to use vlc without interface.") ); } free( psz_interface ); + var_Destroy( p_libvlc, "intf" ); } /* Try to create the interface */ @@ -1167,11 +1146,18 @@ int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module ) if( ret ) msg_Err( p_libvlc, "interface \"%s\" initialization failed", psz_module ? psz_module : "default" ); - var_Destroy( p_libvlc, "intf" ); return ret; } +#ifndef WIN32 static vlc_mutex_t exit_lock = VLC_STATIC_MUTEX; +static vlc_cond_t exiting = VLC_STATIC_COND; +#else +extern vlc_mutex_t super_mutex; +extern vlc_cond_t super_variable; +# define exit_lock super_mutex +# define exiting super_variable +#endif /** * Waits until the LibVLC instance gets an exit signal. Normally, this happens @@ -1179,11 +1165,9 @@ static vlc_mutex_t exit_lock = VLC_STATIC_MUTEX; */ void libvlc_InternalWait( libvlc_int_t *p_libvlc ) { - libvlc_priv_t *priv = libvlc_priv( p_libvlc ); - vlc_mutex_lock( &exit_lock ); while( vlc_object_alive( p_libvlc ) ) - vlc_cond_wait( &priv->exiting, &exit_lock ); + vlc_cond_wait( &exiting, &exit_lock ); vlc_mutex_unlock( &exit_lock ); } @@ -1193,11 +1177,9 @@ void libvlc_InternalWait( libvlc_int_t *p_libvlc ) */ void libvlc_Quit( libvlc_int_t *p_libvlc ) { - libvlc_priv_t *priv = libvlc_priv( p_libvlc ); - vlc_mutex_lock( &exit_lock ); vlc_object_kill( p_libvlc ); - vlc_cond_signal( &priv->exiting ); + vlc_cond_broadcast( &exiting ); vlc_mutex_unlock( &exit_lock ); } @@ -1243,7 +1225,7 @@ static inline int LoadMessages (void) #else char psz_path[1024]; if (snprintf (psz_path, sizeof (psz_path), "%s" DIR_SEP "%s", - config_GetDataDir(), "locale") + config_GetDataDirDefault(), "locale") >= (int)sizeof (psz_path)) return -1; @@ -1918,6 +1900,10 @@ static void ListModules( libvlc_int_t *p_this, bool b_verbose ) #ifdef WIN32 ShowConsole( true ); + b_color = false; // don't put color control codes in a .txt file +#else + if( !isatty( 1 ) ) + b_color = false; #endif /* List all modules */