* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
/*****************************************************************************
|
2008-05-31 21:30:46 +02:00
|
|
|
* libvlc.c: libvlc instances creation and deletion, interfaces handling
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
*****************************************************************************
|
2008-05-31 21:30:46 +02:00
|
|
|
* Copyright (C) 1998-2008 the VideoLAN team
|
* ALL: Better announce system
- The SAP handler now runs in a separate thread.
- RTP sessions can be announced with sap (sdp=sap://,name=...)
TODO: Make this more configurable
- Better SDP generation (the timestamp problem is not resolved)
About this, there is a problem : as, for a RTP session, the URI
is the complete SDP, if the session is recreated, as the URI has
changed, a new item is added to the playlist
- Experimental flow control algorithm :
It does not follow the "Recommended" implementation, as it needs
to count the sessions (to achieve this, we should make this work
together with the SAP listener)
It is disabled by default (use --sap-flow-control to enable).
When it is disabled, sap announcement interval is set by --sap-interval
* src/misc/net.c : created net_ReadNonBlock
* sap.c : Fixed memory problem
2004-04-18 20:21:09 +02:00
|
|
|
* $Id$
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
*
|
|
|
|
* Authors: Vincent Seguin <seguin@via.ecp.fr>
|
|
|
|
* Samuel Hocevar <sam@zoy.org>
|
2004-09-26 19:54:56 +02:00
|
|
|
* Gildas Bazin <gbazin@videolan.org>
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
* Derk-Jan Hartman <hartman at videolan dot org>
|
2006-01-30 23:02:47 +01:00
|
|
|
* Rémi Denis-Courmont <rem # videolan : org>
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2006-01-13 00:10:04 +01:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
*****************************************************************************/
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/** \file
|
|
|
|
* This file contains functions to create and destroy libvlc instances
|
|
|
|
*/
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* Preamble
|
|
|
|
*****************************************************************************/
|
2008-01-23 22:50:58 +01:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2008-05-31 20:56:22 +02:00
|
|
|
#include <vlc_common.h>
|
2006-11-26 15:20:34 +01:00
|
|
|
#include "control/libvlc_internal.h"
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <vlc_input.h>
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include "modules/modules.h"
|
|
|
|
#include "config/configuration.h"
|
2006-09-15 18:18:08 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <stdio.h> /* sprintf() */
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdlib.h> /* free() */
|
2006-09-15 18:18:08 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifndef WIN32
|
|
|
|
# include <netinet/in.h> /* BSD: struct in_addr */
|
|
|
|
#endif
|
2002-08-20 20:08:51 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifdef HAVE_UNISTD_H
|
|
|
|
# include <unistd.h>
|
|
|
|
#elif defined( WIN32 ) && !defined( UNDER_CE )
|
|
|
|
# include <io.h>
|
|
|
|
#endif
|
2002-08-20 20:08:51 +02:00
|
|
|
|
2010-02-28 14:25:17 +01:00
|
|
|
#include "config/vlc_getopt.h"
|
2002-08-20 20:08:51 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifdef HAVE_LOCALE_H
|
|
|
|
# include <locale.h>
|
|
|
|
#endif
|
2008-05-08 22:29:40 +02:00
|
|
|
|
2008-06-02 22:10:26 +02:00
|
|
|
#ifdef HAVE_DBUS
|
2008-05-31 21:30:46 +02:00
|
|
|
/* used for one-instance mode */
|
|
|
|
# include <dbus/dbus.h>
|
|
|
|
#endif
|
2002-08-20 20:08:51 +02:00
|
|
|
|
2010-06-21 18:56:52 +02:00
|
|
|
|
|
|
|
#include <vlc_media_library.h>
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <vlc_playlist.h>
|
|
|
|
#include <vlc_interface.h>
|
Changes to the libvlc API:
* ./include/vlc/vlc.h: changed the naming conventions for libvlc. Now
exported functions start with VLC_ instead of vlc_ to avoid conflicts.
* ./include/vlc/vlc.h: removed the vlc_object_t, vlc_list_t, vlc_error_t
and vlc_t types; they are now internal types only.
* ./include/vlc/vlc.h: merged the reentrant and non-reentrant libvlc
calls. In non-reentrant mode, we just use 0 as the first argument. In
reentrant mode, we use an object's ID. (see below)
Internal changes:
* ./src/libvlc.c, ./src/misc/objects.c: instead of manipulating vlc_object_t
pointers, we manipulate their i_object_id. When needed, an object is
retrieved using vlc_object_get (I hope the lookup isn't too expensive,
that's why I designed the pp_objects layout to allow log2(n) seeks).
* ./src/misc/objects.c: activated the per-object variable storage. Unused
yet, unless you want to try "getfoo" and "setfoo blablah" in vlc -I rc.
* ./include/vlc_objects.h: moved the vlc_object_t and vlc_list_t definitions
here.
Misc:
* ./src/vlc.c, ./mozilla/vlcshell.cpp: removed inclusion of config.h in
code portions not part of libvlc; it was just required for the
COPYRIGHT_MESSAGE string which is now available from VLC_Version().
2002-10-12 00:32:56 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <vlc_aout.h>
|
|
|
|
#include "audio_output/aout_internal.h"
|
2002-08-20 20:08:51 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <vlc_charset.h>
|
2010-02-07 14:18:02 +01:00
|
|
|
#include <vlc_fs.h>
|
2009-09-22 17:21:14 +02:00
|
|
|
#include <vlc_cpu.h>
|
2009-10-05 21:58:46 +02:00
|
|
|
#include <vlc_url.h>
|
2010-06-28 01:19:22 +02:00
|
|
|
#include <vlc_atomic.h>
|
2010-07-27 21:11:58 +02:00
|
|
|
#include <vlc_modules.h>
|
src/libvlc.c,include/vlc/vlc.h, include/variables.h: added a new a API to libvlc called VLC_VariableType, this API allows to retrieve the type of a VLC variable. this API is very useful for binding with highlevel languages, such as javascript, VBScript, etc... which allow for weakly typed variables such as Javascript. in order to support the VLC_VariableType API, i've had to move the variable type definitions from variables.h to vlc/vlc.h
vlccontrol.cpp, axvlc.idl, axvlc.tlb, axvlc_idl.h: added a getVariable and setVariable to provide support for VLC_GetVariable and VLC_SetVariable respectively,and requires the new VLC_VariableType API.
main.cpp, viewobject.h, viewobject.cpp: support for advise on viewobject
2005-05-11 18:56:46 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include "libvlc.h"
|
src/libvlc.c,include/vlc/vlc.h, include/variables.h: added a new a API to libvlc called VLC_VariableType, this API allows to retrieve the type of a VLC variable. this API is very useful for binding with highlevel languages, such as javascript, VBScript, etc... which allow for weakly typed variables such as Javascript. in order to support the VLC_VariableType API, i've had to move the variable type definitions from variables.h to vlc/vlc.h
vlccontrol.cpp, axvlc.idl, axvlc.tlb, axvlc_idl.h: added a getVariable and setVariable to provide support for VLC_GetVariable and VLC_SetVariable respectively,and requires the new VLC_VariableType API.
main.cpp, viewobject.h, viewobject.cpp: support for advise on viewobject
2005-05-11 18:56:46 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include "playlist/playlist_internal.h"
|
src/libvlc.c,include/vlc/vlc.h, include/variables.h: added a new a API to libvlc called VLC_VariableType, this API allows to retrieve the type of a VLC variable. this API is very useful for binding with highlevel languages, such as javascript, VBScript, etc... which allow for weakly typed variables such as Javascript. in order to support the VLC_VariableType API, i've had to move the variable type definitions from variables.h to vlc/vlc.h
vlccontrol.cpp, axvlc.idl, axvlc.tlb, axvlc_idl.h: added a getVariable and setVariable to provide support for VLC_GetVariable and VLC_SetVariable respectively,and requires the new VLC_VariableType API.
main.cpp, viewobject.h, viewobject.cpp: support for advise on viewobject
2005-05-11 18:56:46 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <vlc_vlm.h>
|
2006-09-15 18:18:08 +02:00
|
|
|
|
2008-09-19 23:59:26 +02:00
|
|
|
#ifdef __APPLE__
|
|
|
|
# include <libkern/OSAtomic.h>
|
|
|
|
#endif
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#include <assert.h>
|
2006-09-15 18:18:08 +02:00
|
|
|
|
2004-01-06 09:50:20 +01:00
|
|
|
/*****************************************************************************
|
2008-05-31 21:30:46 +02:00
|
|
|
* The evil global variables. We handle them with care, don't worry.
|
2004-01-06 09:50:20 +01:00
|
|
|
*****************************************************************************/
|
2008-05-31 21:30:46 +02:00
|
|
|
static unsigned i_instances = 0;
|
2006-09-15 18:18:08 +02:00
|
|
|
|
2008-08-13 00:05:57 +02:00
|
|
|
#ifndef WIN32
|
2008-05-31 21:30:46 +02:00
|
|
|
static bool b_daemon = false;
|
2008-08-13 00:05:57 +02:00
|
|
|
#endif
|
2004-01-06 09:50:20 +01:00
|
|
|
|
2008-09-19 15:49:29 +02:00
|
|
|
#undef vlc_gc_init
|
|
|
|
#undef vlc_hold
|
|
|
|
#undef vlc_release
|
2008-07-08 21:32:49 +02:00
|
|
|
|
2008-09-19 15:49:29 +02:00
|
|
|
/**
|
|
|
|
* Atomically set the reference count to 1.
|
|
|
|
* @param p_gc reference counted object
|
|
|
|
* @param pf_destruct destruction calback
|
|
|
|
* @return p_gc.
|
|
|
|
*/
|
|
|
|
void *vlc_gc_init (gc_object_t *p_gc, void (*pf_destruct) (gc_object_t *))
|
|
|
|
{
|
2008-09-22 12:50:45 +02:00
|
|
|
/* There is no point in using the GC if there is no destructor... */
|
2008-09-21 11:56:23 +02:00
|
|
|
assert (pf_destruct);
|
2008-09-19 15:49:29 +02:00
|
|
|
p_gc->pf_destructor = pf_destruct;
|
|
|
|
|
2010-06-28 01:19:22 +02:00
|
|
|
vlc_atomic_set (&p_gc->refs, 1);
|
2008-09-19 15:49:29 +02:00
|
|
|
return p_gc;
|
2008-07-08 21:32:49 +02:00
|
|
|
}
|
|
|
|
|
2008-09-19 15:49:29 +02:00
|
|
|
/**
|
|
|
|
* Atomically increment the reference count.
|
|
|
|
* @param p_gc reference counted object
|
|
|
|
* @return p_gc.
|
|
|
|
*/
|
|
|
|
void *vlc_hold (gc_object_t * p_gc)
|
2008-07-08 21:32:49 +02:00
|
|
|
{
|
2008-09-18 22:24:18 +02:00
|
|
|
uintptr_t refs;
|
2010-06-28 01:19:22 +02:00
|
|
|
|
2008-07-08 21:32:49 +02:00
|
|
|
assert( p_gc );
|
2010-06-28 01:19:22 +02:00
|
|
|
refs = vlc_atomic_inc (&p_gc->refs);
|
2008-09-21 20:48:19 +02:00
|
|
|
assert (refs != 1); /* there had to be a reference already */
|
2008-09-19 15:49:29 +02:00
|
|
|
return p_gc;
|
2008-07-08 21:32:49 +02:00
|
|
|
}
|
|
|
|
|
2008-09-19 15:49:29 +02:00
|
|
|
/**
|
|
|
|
* Atomically decrement the reference count and, if it reaches zero, destroy.
|
|
|
|
* @param p_gc reference counted object.
|
|
|
|
*/
|
|
|
|
void vlc_release (gc_object_t *p_gc)
|
2008-07-08 21:32:49 +02:00
|
|
|
{
|
2008-09-18 22:24:18 +02:00
|
|
|
unsigned refs;
|
2008-09-19 15:49:29 +02:00
|
|
|
|
|
|
|
assert( p_gc );
|
2010-06-28 01:19:22 +02:00
|
|
|
refs = vlc_atomic_dec (&p_gc->refs);
|
2008-09-21 20:48:19 +02:00
|
|
|
assert (refs != (uintptr_t)(-1)); /* reference underflow?! */
|
|
|
|
if (refs == 0)
|
2008-09-19 15:49:29 +02:00
|
|
|
p_gc->pf_destructor (p_gc);
|
2008-07-08 21:32:49 +02:00
|
|
|
}
|
|
|
|
|
2004-01-06 09:50:20 +01:00
|
|
|
/*****************************************************************************
|
2008-05-31 21:30:46 +02:00
|
|
|
* Local prototypes
|
2004-01-06 09:50:20 +01:00
|
|
|
*****************************************************************************/
|
2010-01-28 20:23:37 +01:00
|
|
|
#if defined( ENABLE_NLS ) && (defined (__APPLE__) || defined (WIN32)) && \
|
|
|
|
( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
|
|
|
|
static void SetLanguage ( char const * );
|
|
|
|
#endif
|
2010-03-29 22:41:32 +02:00
|
|
|
static void GetFilenames ( libvlc_int_t *, unsigned, const char *const [] );
|
2008-05-31 21:30:46 +02:00
|
|
|
static void Help ( libvlc_int_t *, char const *psz_help_name );
|
2008-09-02 01:29:38 +02:00
|
|
|
static void Usage ( libvlc_int_t *, char const *psz_search );
|
2008-05-31 21:30:46 +02:00
|
|
|
static void ListModules ( libvlc_int_t *, bool );
|
|
|
|
static void Version ( void );
|
|
|
|
|
|
|
|
#ifdef WIN32
|
|
|
|
static void ShowConsole ( bool );
|
|
|
|
static void PauseConsole ( void );
|
|
|
|
#endif
|
|
|
|
static int ConsoleWidth ( void );
|
2004-01-06 09:50:20 +01:00
|
|
|
|
2008-10-05 15:41:00 +02:00
|
|
|
static vlc_mutex_t global_lock = VLC_STATIC_MUTEX;
|
2010-03-13 18:32:20 +01:00
|
|
|
extern const char psz_vlc_changeset[];
|
2008-10-05 10:28:32 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/**
|
|
|
|
* Allocate a libvlc instance, initialize global data if needed
|
|
|
|
* It also initializes the threading system
|
|
|
|
*/
|
|
|
|
libvlc_int_t * libvlc_InternalCreate( void )
|
|
|
|
{
|
|
|
|
libvlc_int_t *p_libvlc;
|
|
|
|
libvlc_priv_t *priv;
|
|
|
|
char *psz_env = NULL;
|
|
|
|
|
|
|
|
/* Now that the thread system is initialized, we don't have much, but
|
|
|
|
* at least we have variables */
|
2008-10-05 10:28:32 +02:00
|
|
|
vlc_mutex_lock( &global_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( i_instances == 0 )
|
2005-08-11 00:31:12 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Guess what CPU we have */
|
|
|
|
cpu_flags = CPUCapabilities();
|
2008-08-30 13:59:03 +02:00
|
|
|
/* The module bank will be initialized later */
|
2005-11-15 15:37:18 +01:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Allocate a libvlc instance object */
|
2010-02-07 11:36:53 +01:00
|
|
|
p_libvlc = vlc_custom_create( (vlc_object_t *)NULL, sizeof (*priv),
|
2008-09-28 19:51:36 +02:00
|
|
|
VLC_OBJECT_GENERIC, "libvlc" );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( p_libvlc != NULL )
|
|
|
|
i_instances++;
|
2008-10-05 10:28:32 +02:00
|
|
|
vlc_mutex_unlock( &global_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
if( p_libvlc == NULL )
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
priv = libvlc_priv (p_libvlc);
|
|
|
|
priv->p_playlist = NULL;
|
2010-06-21 18:56:52 +02:00
|
|
|
priv->p_ml = NULL;
|
2009-03-05 19:42:47 +01:00
|
|
|
priv->p_dialog_provider = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
priv->p_vlm = NULL;
|
|
|
|
|
|
|
|
/* Initialize message queue */
|
2010-02-06 17:18:30 +01:00
|
|
|
priv->msg_bank = msg_Create ();
|
|
|
|
if (unlikely(priv->msg_bank == NULL))
|
|
|
|
goto error;
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Find verbosity from VLC_VERBOSE environment variable */
|
|
|
|
psz_env = getenv( "VLC_VERBOSE" );
|
|
|
|
if( psz_env != NULL )
|
|
|
|
priv->i_verbose = atoi( psz_env );
|
2005-11-15 15:37:18 +01:00
|
|
|
else
|
2008-05-31 21:30:46 +02:00
|
|
|
priv->i_verbose = 3;
|
|
|
|
#if defined( HAVE_ISATTY ) && !defined( WIN32 )
|
|
|
|
priv->b_color = isatty( 2 ); /* 2 is for stderr */
|
|
|
|
#else
|
|
|
|
priv->b_color = false;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Initialize mutexes */
|
2010-07-03 20:21:01 +02:00
|
|
|
vlc_mutex_init( &priv->ml_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
vlc_mutex_init( &priv->timer_lock );
|
2010-05-30 19:17:27 +02:00
|
|
|
vlc_ExitInit( &priv->exit );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
return p_libvlc;
|
2010-02-06 17:18:30 +01:00
|
|
|
error:
|
|
|
|
vlc_object_release (p_libvlc);
|
|
|
|
return NULL;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2008-05-31 21:30:46 +02:00
|
|
|
* Initialize a libvlc instance
|
|
|
|
* This function initializes a previously allocated libvlc instance:
|
|
|
|
* - CPU detection
|
|
|
|
* - gettext initialization
|
|
|
|
* - message queue, module bank and playlist initialization
|
|
|
|
* - configuration and commandline parsing
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
*/
|
2008-05-31 21:30:46 +02:00
|
|
|
int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
|
2010-10-31 20:32:49 +01:00
|
|
|
const char *ppsz_argv[], const void **builtins_module )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
libvlc_priv_t *priv = libvlc_priv (p_libvlc);
|
|
|
|
char * p_tmp = NULL;
|
|
|
|
char * psz_modules = NULL;
|
|
|
|
char * psz_parser = NULL;
|
|
|
|
char * psz_control = NULL;
|
|
|
|
bool b_exit = false;
|
|
|
|
int i_ret = VLC_EEXIT;
|
|
|
|
playlist_t *p_playlist = NULL;
|
2009-09-25 12:47:28 +02:00
|
|
|
char *psz_val;
|
2008-05-31 21:30:46 +02:00
|
|
|
#if defined( ENABLE_NLS ) \
|
|
|
|
&& ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
|
|
|
|
# if defined (WIN32) || defined (__APPLE__)
|
|
|
|
char * psz_language;
|
|
|
|
#endif
|
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* System specific initialization code */
|
|
|
|
system_Init( p_libvlc, &i_argc, ppsz_argv );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*
|
|
|
|
* Support for gettext
|
|
|
|
*/
|
2010-01-28 18:48:06 +01:00
|
|
|
vlc_bindtextdomain (PACKAGE_NAME);
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Initialize the module bank and load the configuration of the
|
|
|
|
* main module. We need to do this at this stage to be able to display
|
|
|
|
* a short help if required by the user. (short help == main module
|
|
|
|
* options) */
|
|
|
|
module_InitBank( p_libvlc );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2010-03-29 22:52:21 +02:00
|
|
|
if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, NULL ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, false );
|
2008-05-31 21:30:46 +02:00
|
|
|
return VLC_EGENERIC;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
|
2008-12-28 21:15:22 +01:00
|
|
|
/* Announce who we are - Do it only for first instance ? */
|
2010-03-13 18:31:04 +01:00
|
|
|
msg_Dbg( p_libvlc, "VLC media player - %s", VERSION_MESSAGE );
|
2008-12-28 21:15:22 +01:00
|
|
|
msg_Dbg( p_libvlc, "%s", COPYRIGHT_MESSAGE );
|
2010-03-13 18:32:20 +01:00
|
|
|
msg_Dbg( p_libvlc, "revision %s", psz_vlc_changeset );
|
|
|
|
msg_Dbg( p_libvlc, "configured with %s", CONFIGURE_LINE );
|
2009-04-18 02:32:46 +02:00
|
|
|
/*xgettext: Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
|
2008-12-28 21:15:22 +01:00
|
|
|
msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") );
|
2008-12-28 21:06:14 +01:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check for short help option */
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "help" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
Help( p_libvlc, "help" );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
|
|
|
/* Check for version option */
|
2010-01-17 20:51:15 +01:00
|
|
|
else if( var_InheritBool( p_libvlc, "version" ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
Version();
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check for daemon mode */
|
2010-11-23 17:55:22 +01:00
|
|
|
#if !defined( WIN32 ) && !defined( __SYMBIAN32__ )
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "daemon" ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifdef HAVE_DAEMON
|
|
|
|
char *psz_pidfile = NULL;
|
|
|
|
|
|
|
|
if( daemon( 1, 0) != 0 )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "Unable to fork vlc to daemon mode" );
|
|
|
|
b_exit = true;
|
|
|
|
}
|
|
|
|
b_daemon = true;
|
|
|
|
|
|
|
|
/* lets check if we need to write the pidfile */
|
2009-12-10 17:44:20 +01:00
|
|
|
psz_pidfile = var_CreateGetNonEmptyString( p_libvlc, "pidfile" );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( psz_pidfile != NULL )
|
|
|
|
{
|
|
|
|
FILE *pidfile;
|
|
|
|
pid_t i_pid = getpid ();
|
|
|
|
msg_Dbg( p_libvlc, "PID is %d, writing it to %s",
|
|
|
|
i_pid, psz_pidfile );
|
2010-02-07 14:25:29 +01:00
|
|
|
pidfile = vlc_fopen( psz_pidfile,"w" );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( pidfile != NULL )
|
|
|
|
{
|
|
|
|
utf8_fprintf( pidfile, "%d", (int)i_pid );
|
|
|
|
fclose( pidfile );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "cannot open pid file for writing: %s (%m)",
|
|
|
|
psz_pidfile );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free( psz_pidfile );
|
|
|
|
|
|
|
|
#else
|
|
|
|
pid_t i_pid;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
if( ( i_pid = fork() ) < 0 )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "unable to fork vlc to daemon mode" );
|
|
|
|
b_exit = true;
|
|
|
|
}
|
|
|
|
else if( i_pid )
|
|
|
|
{
|
|
|
|
/* This is the parent, exit right now */
|
|
|
|
msg_Dbg( p_libvlc, "closing parent process" );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* We are the child */
|
|
|
|
msg_Dbg( p_libvlc, "daemon spawned" );
|
|
|
|
close( STDIN_FILENO );
|
|
|
|
close( STDOUT_FILENO );
|
|
|
|
close( STDERR_FILENO );
|
|
|
|
|
|
|
|
b_daemon = true;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
if( b_exit )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, false );
|
2008-05-31 21:30:46 +02:00
|
|
|
return i_ret;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check for translation config option */
|
|
|
|
#if defined( ENABLE_NLS ) \
|
|
|
|
&& ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
|
|
|
|
# if defined (WIN32) || defined (__APPLE__)
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "ignore-config" ) )
|
2010-11-17 17:34:33 +01:00
|
|
|
config_LoadConfigFile( p_libvlc );
|
2010-01-17 20:51:15 +01:00
|
|
|
priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check if the user specified a custom language */
|
2009-12-10 17:44:20 +01:00
|
|
|
psz_language = var_CreateGetNonEmptyString( p_libvlc, "language" );
|
|
|
|
if( psz_language && strcmp( psz_language, "auto" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
/* Reset the default domain */
|
|
|
|
SetLanguage( psz_language );
|
|
|
|
|
|
|
|
/* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
|
|
|
|
msg_Dbg( p_libvlc, "translation test: code is \"%s\"", _("C") );
|
|
|
|
}
|
|
|
|
free( psz_language );
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Load the builtins and plugins into the module_bank.
|
|
|
|
* We have to do it before config_Load*() because this also gets the
|
|
|
|
* list of configuration options exported by each module and loads their
|
|
|
|
* default values.
|
|
|
|
*/
|
2010-10-31 20:32:49 +01:00
|
|
|
module_LoadPlugins( p_libvlc, builtins_module );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( p_libvlc->b_die )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
b_exit = true;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-09-21 15:11:24 +02:00
|
|
|
size_t module_count;
|
|
|
|
module_t **list = module_list_get( &module_count );
|
|
|
|
module_list_free( list );
|
2008-10-13 17:58:59 +02:00
|
|
|
msg_Dbg( p_libvlc, "module bank initialized (%zu modules)", module_count );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Check for help on modules */
|
2010-01-17 20:51:15 +01:00
|
|
|
if( (p_tmp = var_InheritString( p_libvlc, "module" )) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
Help( p_libvlc, p_tmp );
|
|
|
|
free( p_tmp );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
2008-07-06 21:55:18 +02:00
|
|
|
/* Check for full help option */
|
2010-01-17 20:51:15 +01:00
|
|
|
else if( var_InheritBool( p_libvlc, "full-help" ) )
|
2008-07-06 21:55:18 +02:00
|
|
|
{
|
2010-01-23 19:25:57 +01:00
|
|
|
var_Create( p_libvlc, "advanced", VLC_VAR_BOOL );
|
|
|
|
var_SetBool( p_libvlc, "advanced", true );
|
|
|
|
var_Create( p_libvlc, "help-verbose", VLC_VAR_BOOL );
|
|
|
|
var_SetBool( p_libvlc, "help-verbose", true );
|
2008-07-06 21:55:18 +02:00
|
|
|
Help( p_libvlc, "full-help" );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check for long help option */
|
2010-01-17 20:51:15 +01:00
|
|
|
else if( var_InheritBool( p_libvlc, "longhelp" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
Help( p_libvlc, "longhelp" );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
|
|
|
/* Check for module list option */
|
2010-01-17 20:51:15 +01:00
|
|
|
else if( var_InheritBool( p_libvlc, "list" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
ListModules( p_libvlc, false );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
2010-01-17 20:51:15 +01:00
|
|
|
else if( var_InheritBool( p_libvlc, "list-verbose" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
ListModules( p_libvlc, true );
|
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_EEXITSUCCESS;
|
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Check for config file options */
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "ignore-config" ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "reset-config" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
config_ResetAll( p_libvlc );
|
2011-04-29 22:43:11 +02:00
|
|
|
config_SaveConfigFile( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2010-10-31 20:32:49 +01:00
|
|
|
if( module_count <= 1 )
|
2009-12-10 23:05:27 +01:00
|
|
|
{
|
2011-02-12 10:00:03 +01:00
|
|
|
msg_Err( p_libvlc, "No plugins found! Check your VLC installation.");
|
2009-12-10 23:05:27 +01:00
|
|
|
b_exit = true;
|
|
|
|
i_ret = VLC_ENOITEM;
|
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
if( b_exit )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, true );
|
2008-05-31 21:30:46 +02:00
|
|
|
return i_ret;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Override default configuration with config file settings
|
|
|
|
*/
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "ignore-config" ) )
|
2010-11-17 17:34:33 +01:00
|
|
|
config_LoadConfigFile( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Override configuration with command line settings
|
|
|
|
*/
|
2010-03-29 22:52:21 +02:00
|
|
|
int vlc_optind;
|
|
|
|
if( config_LoadCmdLine( p_libvlc, i_argc, ppsz_argv, &vlc_optind ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifdef WIN32
|
|
|
|
ShowConsole( false );
|
|
|
|
/* Pause the console because it's destroyed when we exit */
|
|
|
|
fprintf( stderr, "The command line options couldn't be loaded, check "
|
|
|
|
"that they are valid.\n" );
|
|
|
|
PauseConsole();
|
|
|
|
#endif
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, true );
|
2008-05-31 21:30:46 +02:00
|
|
|
return VLC_EGENERIC;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2010-01-17 20:51:15 +01:00
|
|
|
priv->i_verbose = var_InheritInteger( p_libvlc, "verbose" );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* FIXME: could be replaced by using Unix sockets */
|
2008-06-02 22:10:26 +02:00
|
|
|
#ifdef HAVE_DBUS
|
2008-05-31 21:30:46 +02:00
|
|
|
dbus_threads_init_default();
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "one-instance" )
|
|
|
|
|| ( var_InheritBool( p_libvlc, "one-instance-when-started-from-file" )
|
|
|
|
&& var_InheritBool( p_libvlc, "started-from-file" ) ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Initialise D-Bus interface, check for other instances */
|
|
|
|
DBusConnection *p_conn = NULL;
|
|
|
|
DBusError dbus_error;
|
|
|
|
|
|
|
|
dbus_error_init( &dbus_error );
|
|
|
|
|
|
|
|
/* connect to the session bus */
|
|
|
|
p_conn = dbus_bus_get( DBUS_BUS_SESSION, &dbus_error );
|
|
|
|
if( !p_conn )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "Failed to connect to D-Bus session daemon: %s",
|
|
|
|
dbus_error.message );
|
|
|
|
dbus_error_free( &dbus_error );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* check if VLC is available on the bus
|
|
|
|
* if not: D-Bus control is not enabled on the other
|
|
|
|
* instance and we can't pass MRLs to it */
|
|
|
|
DBusMessage *p_test_msg = NULL;
|
|
|
|
DBusMessage *p_test_reply = NULL;
|
|
|
|
p_test_msg = dbus_message_new_method_call(
|
|
|
|
"org.mpris.vlc", "/",
|
|
|
|
"org.freedesktop.MediaPlayer", "Identity" );
|
|
|
|
/* block until a reply arrives */
|
|
|
|
p_test_reply = dbus_connection_send_with_reply_and_block(
|
|
|
|
p_conn, p_test_msg, -1, &dbus_error );
|
|
|
|
dbus_message_unref( p_test_msg );
|
|
|
|
if( p_test_reply == NULL )
|
|
|
|
{
|
|
|
|
dbus_error_free( &dbus_error );
|
|
|
|
msg_Dbg( p_libvlc, "No Media Player is running. "
|
|
|
|
"Continuing normally." );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
int i_input;
|
|
|
|
DBusMessage* p_dbus_msg = NULL;
|
|
|
|
DBusMessageIter dbus_args;
|
|
|
|
DBusPendingCall* p_dbus_pending = NULL;
|
|
|
|
dbus_bool_t b_play;
|
|
|
|
|
|
|
|
dbus_message_unref( p_test_reply );
|
|
|
|
msg_Warn( p_libvlc, "Another Media Player is running. Exiting");
|
|
|
|
|
2010-02-28 15:24:40 +01:00
|
|
|
for( i_input = vlc_optind; i_input < i_argc;i_input++ )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2011-01-28 02:45:46 +01:00
|
|
|
/* Skip input options, we can't pass them through D-Bus */
|
|
|
|
if( ppsz_argv[i_input][0] == ':' )
|
|
|
|
{
|
|
|
|
msg_Warn( p_libvlc, "Ignoring option %s",
|
|
|
|
ppsz_argv[i_input] );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2011-01-27 15:36:43 +01:00
|
|
|
/* We need to resolve relative paths in this instance */
|
|
|
|
char *psz_mrl = make_URI( ppsz_argv[i_input], NULL );
|
|
|
|
if( psz_mrl == NULL )
|
|
|
|
continue;
|
2008-05-31 21:30:46 +02:00
|
|
|
msg_Dbg( p_libvlc, "Adds %s to the running Media Player",
|
2011-01-27 15:36:43 +01:00
|
|
|
psz_mrl );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
p_dbus_msg = dbus_message_new_method_call(
|
|
|
|
"org.mpris.vlc", "/TrackList",
|
|
|
|
"org.freedesktop.MediaPlayer", "AddTrack" );
|
|
|
|
|
|
|
|
if ( NULL == p_dbus_msg )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "D-Bus problem" );
|
2011-01-27 15:36:43 +01:00
|
|
|
free( psz_mrl );
|
2008-05-31 21:30:46 +02:00
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* append MRLs */
|
|
|
|
dbus_message_iter_init_append( p_dbus_msg, &dbus_args );
|
|
|
|
if ( !dbus_message_iter_append_basic( &dbus_args,
|
2011-01-27 15:36:43 +01:00
|
|
|
DBUS_TYPE_STRING, &psz_mrl ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
dbus_message_unref( p_dbus_msg );
|
2011-01-27 15:36:43 +01:00
|
|
|
free( psz_mrl );
|
2008-05-31 21:30:46 +02:00
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2011-01-27 15:36:43 +01:00
|
|
|
free( psz_mrl );
|
2008-05-31 21:30:46 +02:00
|
|
|
b_play = TRUE;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "playlist-enqueue" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
b_play = FALSE;
|
|
|
|
if ( !dbus_message_iter_append_basic( &dbus_args,
|
|
|
|
DBUS_TYPE_BOOLEAN, &b_play ) )
|
|
|
|
{
|
|
|
|
dbus_message_unref( p_dbus_msg );
|
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* send message and get a handle for a reply */
|
|
|
|
if ( !dbus_connection_send_with_reply ( p_conn,
|
|
|
|
p_dbus_msg, &p_dbus_pending, -1 ) )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "D-Bus problem" );
|
|
|
|
dbus_message_unref( p_dbus_msg );
|
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( NULL == p_dbus_pending )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "D-Bus problem" );
|
|
|
|
dbus_message_unref( p_dbus_msg );
|
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
dbus_connection_flush( p_conn );
|
|
|
|
dbus_message_unref( p_dbus_msg );
|
|
|
|
/* block until we receive a reply */
|
|
|
|
dbus_pending_call_block( p_dbus_pending );
|
|
|
|
dbus_pending_call_unref( p_dbus_pending );
|
|
|
|
} /* processes all command line MRLs */
|
|
|
|
|
|
|
|
/* bye bye */
|
|
|
|
system_End( p_libvlc );
|
2009-08-02 18:54:19 +02:00
|
|
|
exit( 0 );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
/* we unreference the connection when we've finished with it */
|
|
|
|
if( p_conn ) dbus_connection_unref( p_conn );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*
|
|
|
|
* Message queue options
|
|
|
|
*/
|
2009-12-10 17:44:20 +01:00
|
|
|
char * psz_verbose_objects = var_CreateGetNonEmptyString( p_libvlc, "verbose-objects" );
|
2008-07-06 15:45:23 +02:00
|
|
|
if( psz_verbose_objects )
|
|
|
|
{
|
|
|
|
char * psz_object, * iter = psz_verbose_objects;
|
|
|
|
while( (psz_object = strsep( &iter, "," )) )
|
|
|
|
{
|
|
|
|
switch( psz_object[0] )
|
|
|
|
{
|
|
|
|
printf("%s\n", psz_object+1);
|
|
|
|
case '+': msg_EnableObjectPrinting(p_libvlc, psz_object+1); break;
|
|
|
|
case '-': msg_DisableObjectPrinting(p_libvlc, psz_object+1); break;
|
|
|
|
default:
|
|
|
|
msg_Err( p_libvlc, "verbose-objects usage: \n"
|
|
|
|
"--verbose-objects=+printthatobject,"
|
|
|
|
"-dontprintthatone\n"
|
2009-02-12 18:11:36 +01:00
|
|
|
"(keyword 'all' to applies to all objects)");
|
2008-07-06 15:45:23 +02:00
|
|
|
free( psz_verbose_objects );
|
2009-01-17 21:22:15 +01:00
|
|
|
/* FIXME: leaks!!!! */
|
2008-07-06 15:45:23 +02:00
|
|
|
return VLC_EGENERIC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free( psz_verbose_objects );
|
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2009-02-17 01:10:39 +01:00
|
|
|
/* Last chance to set the verbosity. Once we start interfaces and other
|
2009-02-10 18:43:36 +01:00
|
|
|
* threads, verbosity becomes read-only. */
|
2008-05-31 21:30:46 +02:00
|
|
|
var_Create( p_libvlc, "verbose", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "quiet" ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2009-02-10 18:43:36 +01:00
|
|
|
var_SetInteger( p_libvlc, "verbose", -1 );
|
|
|
|
priv->i_verbose = -1;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2009-07-25 15:21:18 +02:00
|
|
|
vlc_threads_setup( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
if( priv->b_color )
|
2010-01-17 20:51:15 +01:00
|
|
|
priv->b_color = var_InheritBool( p_libvlc, "color" );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2009-09-22 17:13:36 +02:00
|
|
|
char p_capabilities[200];
|
|
|
|
#define PRINT_CAPABILITY( capability, string ) \
|
|
|
|
if( vlc_CPU() & capability ) \
|
|
|
|
{ \
|
|
|
|
strncat( p_capabilities, string " ", \
|
|
|
|
sizeof(p_capabilities) - strlen(p_capabilities) ); \
|
|
|
|
p_capabilities[sizeof(p_capabilities) - 1] = '\0'; \
|
|
|
|
}
|
|
|
|
p_capabilities[0] = '\0';
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#if defined( __i386__ ) || defined( __x86_64__ )
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "mmx" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_MMX;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "3dn" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_3DNOW;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "mmxext" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_MMXEXT;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "sse" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSE;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "sse2" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSE2;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "sse3" ) )
|
2009-09-22 19:34:00 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSE3;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "ssse3" ) )
|
2009-11-23 21:24:07 +01:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSSE3;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "sse41" ) )
|
2009-11-23 21:24:07 +01:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSE4_1;
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "sse42" ) )
|
2009-11-23 21:24:07 +01:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_SSE4_2;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_MMX, "MMX" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_3DNOW, "3DNow!" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_MMXEXT, "MMXEXT" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE, "SSE" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE2, "SSE2" );
|
2009-09-22 19:34:00 +02:00
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSE3" );
|
2010-01-12 23:13:33 +01:00
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSSE3, "SSSE3" );
|
2009-11-23 21:24:07 +01:00
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_1, "SSE4.1" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_2, "SSE4.2" );
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_SSE4A, "SSE4A" );
|
2009-09-22 17:13:36 +02:00
|
|
|
|
|
|
|
#elif defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
|
2010-01-17 20:51:15 +01:00
|
|
|
if( !var_InheritBool( p_libvlc, "altivec" ) )
|
2009-09-22 17:13:36 +02:00
|
|
|
cpu_flags &= ~CPU_CAPABILITY_ALTIVEC;
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_ALTIVEC, "AltiVec" );
|
2009-09-22 17:13:36 +02:00
|
|
|
|
|
|
|
#elif defined( __arm__ )
|
|
|
|
PRINT_CAPABILITY( CPU_CAPABILITY_NEON, "NEONv1" );
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2009-10-19 21:15:30 +02:00
|
|
|
#if HAVE_FPU
|
|
|
|
strncat( p_capabilities, "FPU ",
|
|
|
|
sizeof(p_capabilities) - strlen( p_capabilities) );
|
|
|
|
p_capabilities[sizeof(p_capabilities) - 1] = '\0';
|
|
|
|
#endif
|
|
|
|
|
2010-01-18 20:12:00 +01:00
|
|
|
if (p_capabilities[0])
|
|
|
|
msg_Dbg( p_libvlc, "CPU has capabilities %s", p_capabilities );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Choose the best memcpy module
|
|
|
|
*/
|
2008-12-13 17:05:14 +01:00
|
|
|
priv->p_memcpy_module = module_need( p_libvlc, "memcpy", "$memcpy", false );
|
2009-09-20 11:43:20 +02:00
|
|
|
/* Avoid being called "memcpy":*/
|
|
|
|
vlc_object_set_name( p_libvlc, "main" );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
priv->b_stats = var_InheritBool( p_libvlc, "stats" );
|
2008-05-31 21:30:46 +02:00
|
|
|
priv->i_timers = 0;
|
|
|
|
priv->pp_timers = NULL;
|
|
|
|
|
2008-09-27 11:25:44 +02:00
|
|
|
priv->i_last_input_id = 0; /* Not very safe, should be removed */
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*
|
|
|
|
* Initialize hotkey handling
|
|
|
|
*/
|
2011-02-12 22:13:18 +01:00
|
|
|
priv->actions = vlc_InitActions( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2010-02-16 15:16:32 +01:00
|
|
|
/* Create a variable for showing the fullscreen interface */
|
|
|
|
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 );
|
|
|
|
|
2009-08-19 20:58:07 +02:00
|
|
|
/* 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 );
|
|
|
|
|
2010-07-08 21:45:43 +02:00
|
|
|
/* some default internal settings */
|
2010-07-08 18:52:30 +02:00
|
|
|
var_Create( p_libvlc, "window", VLC_VAR_STRING );
|
2010-07-08 21:45:43 +02:00
|
|
|
var_Create( p_libvlc, "user-agent", VLC_VAR_STRING );
|
|
|
|
var_SetString( p_libvlc, "user-agent", "(LibVLC "VERSION")" );
|
2010-07-08 18:52:30 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Initialize playlist and get commandline files */
|
2008-12-22 18:22:09 +01:00
|
|
|
p_playlist = playlist_Create( VLC_OBJECT(p_libvlc) );
|
|
|
|
if( !p_playlist )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "playlist initialization failed" );
|
|
|
|
if( priv->p_memcpy_module != NULL )
|
|
|
|
{
|
2008-09-21 13:58:57 +02:00
|
|
|
module_unneed( p_libvlc, priv->p_memcpy_module );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, true );
|
2008-05-31 21:30:46 +02:00
|
|
|
return VLC_EGENERIC;
|
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2010-03-05 22:14:56 +01:00
|
|
|
/* System specific configuration */
|
2010-03-29 22:49:08 +02:00
|
|
|
system_Configure( p_libvlc, i_argc - vlc_optind, ppsz_argv + vlc_optind );
|
2010-03-05 22:14:56 +01:00
|
|
|
|
2010-06-21 18:56:52 +02:00
|
|
|
#if defined(MEDIA_LIBRARY)
|
|
|
|
/* Get the ML */
|
2011-03-21 22:21:51 +01:00
|
|
|
if( var_GetBool( p_libvlc, "load-media-library-on-startup" ) )
|
2010-06-21 18:56:52 +02:00
|
|
|
{
|
2010-07-03 17:43:56 +02:00
|
|
|
priv->p_ml = ml_Create( VLC_OBJECT( p_libvlc ), NULL );
|
2010-06-21 18:56:52 +02:00
|
|
|
if( !priv->p_ml )
|
|
|
|
{
|
|
|
|
msg_Err( p_libvlc, "ML initialization failed" );
|
|
|
|
return VLC_EGENERIC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
priv->p_ml = NULL;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-01-10 19:28:51 +01:00
|
|
|
/* Add service discovery modules */
|
2010-01-30 23:46:58 +01:00
|
|
|
psz_modules = var_InheritString( p_libvlc, "services-discovery" );
|
2009-12-10 17:44:20 +01:00
|
|
|
if( psz_modules )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-01-10 19:28:51 +01:00
|
|
|
char *p = psz_modules, *m;
|
|
|
|
while( ( m = strsep( &p, " :," ) ) != NULL )
|
|
|
|
playlist_ServicesDiscoveryAdd( p_playlist, m );
|
2010-01-30 23:46:58 +01:00
|
|
|
free( psz_modules );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-07-17 21:25:18 +02:00
|
|
|
#ifdef ENABLE_VLM
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Initialize VLM if vlm-conf is specified */
|
2009-12-10 17:44:20 +01:00
|
|
|
psz_parser = var_CreateGetNonEmptyString( p_libvlc, "vlm-conf" );
|
|
|
|
if( psz_parser )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
priv->p_vlm = vlm_New( p_libvlc );
|
|
|
|
if( !priv->p_vlm )
|
|
|
|
msg_Err( p_libvlc, "VLM initialization failed" );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
free( psz_parser );
|
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*
|
|
|
|
* Load background interfaces
|
|
|
|
*/
|
2009-12-10 17:44:20 +01:00
|
|
|
psz_modules = var_CreateGetNonEmptyString( p_libvlc, "extraintf" );
|
|
|
|
psz_control = var_CreateGetNonEmptyString( p_libvlc, "control" );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2009-12-10 17:44:20 +01:00
|
|
|
if( psz_modules && psz_control )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-01-26 16:10:54 +01:00
|
|
|
char* psz_tmp;
|
|
|
|
if( asprintf( &psz_tmp, "%s:%s", psz_modules, psz_control ) != -1 )
|
|
|
|
{
|
|
|
|
free( psz_modules );
|
|
|
|
psz_modules = psz_tmp;
|
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2009-12-10 17:44:20 +01:00
|
|
|
else if( psz_control )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
free( psz_modules );
|
|
|
|
psz_modules = strdup( psz_control );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_parser = psz_modules;
|
|
|
|
while ( psz_parser && *psz_parser )
|
|
|
|
{
|
|
|
|
char *psz_module, *psz_temp;
|
|
|
|
psz_module = psz_parser;
|
|
|
|
psz_parser = strchr( psz_module, ':' );
|
|
|
|
if ( psz_parser )
|
|
|
|
{
|
|
|
|
*psz_parser = '\0';
|
|
|
|
psz_parser++;
|
|
|
|
}
|
2008-10-29 19:39:22 +01:00
|
|
|
if( asprintf( &psz_temp, "%s,none", psz_module ) != -1)
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, psz_temp );
|
2008-05-31 21:30:46 +02:00
|
|
|
free( psz_temp );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free( psz_modules );
|
|
|
|
free( psz_control );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Always load the hotkeys interface if it exists
|
|
|
|
*/
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, "hotkeys,none" );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2008-06-02 22:10:26 +02:00
|
|
|
#ifdef HAVE_DBUS
|
2008-05-31 21:30:46 +02:00
|
|
|
/* loads dbus control interface if in one-instance mode
|
|
|
|
* we do it only when playlist exists, because dbus module needs it */
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "one-instance" )
|
|
|
|
|| ( var_InheritBool( p_libvlc, "one-instance-when-started-from-file" )
|
|
|
|
&& var_InheritBool( p_libvlc, "started-from-file" ) ) )
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, "dbus,none" );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2009-10-19 21:33:40 +02:00
|
|
|
# if !defined (HAVE_MAEMO)
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Prevents the power management daemon from suspending the system
|
|
|
|
* when VLC is active */
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "inhibit" ) > 0 )
|
2009-05-24 01:47:10 +02:00
|
|
|
intf_Create( p_libvlc, "inhibit,none" );
|
2009-10-19 21:33:40 +02:00
|
|
|
# endif
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "file-logging" ) &&
|
|
|
|
!var_InheritBool( p_libvlc, "syslog" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, "logger,none" );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
#ifdef HAVE_SYSLOG_H
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "syslog" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-12-10 17:45:04 +01:00
|
|
|
char *logmode = var_CreateGetNonEmptyString( p_libvlc, "logmode" );
|
2008-05-31 21:30:46 +02:00
|
|
|
var_SetString( p_libvlc, "logmode", "syslog" );
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, "logger,none" );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
if( logmode )
|
|
|
|
{
|
|
|
|
var_SetString( p_libvlc, "logmode", logmode );
|
|
|
|
free( logmode );
|
|
|
|
}
|
2009-12-10 17:45:04 +01:00
|
|
|
var_Destroy( p_libvlc, "logmode" );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
if( var_InheritBool( p_libvlc, "network-synchronisation") )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-05-23 20:25:23 +02:00
|
|
|
intf_Create( p_libvlc, "netsync,none" );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2010-07-08 18:49:38 +02:00
|
|
|
#ifdef __APPLE__
|
2008-05-31 21:30:46 +02:00
|
|
|
var_Create( p_libvlc, "drawable-view-top", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-view-left", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-view-bottom", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-view-right", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-clip-top", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-clip-left", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-clip-bottom", VLC_VAR_INTEGER );
|
|
|
|
var_Create( p_libvlc, "drawable-clip-right", VLC_VAR_INTEGER );
|
2011-02-05 16:07:19 +01:00
|
|
|
var_Create( p_libvlc, "drawable-nsobject", VLC_VAR_ADDRESS );
|
2010-07-08 18:49:38 +02:00
|
|
|
#endif
|
2010-02-21 18:41:12 +01:00
|
|
|
#ifdef WIN32
|
2011-04-11 17:21:34 +02:00
|
|
|
var_Create( p_libvlc, "drawable-hwnd", VLC_VAR_INTEGER );
|
2010-02-21 18:41:12 +01:00
|
|
|
#endif
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/*
|
2010-03-29 22:41:32 +02:00
|
|
|
* Get input filenames given as commandline arguments.
|
|
|
|
* We assume that the remaining parameters are filenames
|
|
|
|
* and their input options.
|
2008-05-31 21:30:46 +02:00
|
|
|
*/
|
2010-03-29 22:41:32 +02:00
|
|
|
GetFilenames( p_libvlc, i_argc - vlc_optind, ppsz_argv + vlc_optind );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Get --open argument
|
|
|
|
*/
|
2010-01-30 23:46:58 +01:00
|
|
|
psz_val = var_InheritString( p_libvlc, "open" );
|
2009-12-10 17:46:22 +01:00
|
|
|
if ( psz_val != NULL )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-09-25 12:47:28 +02:00
|
|
|
playlist_AddExt( p_playlist, psz_val, NULL, PLAYLIST_INSERT, 0,
|
2009-01-18 15:11:13 +01:00
|
|
|
-1, 0, NULL, 0, true, pl_Unlocked );
|
2010-01-30 23:46:58 +01:00
|
|
|
free( psz_val );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
return VLC_SUCCESS;
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2008-05-31 21:30:46 +02:00
|
|
|
* Cleanup a libvlc instance. The instance is not completely deallocated
|
|
|
|
* \param p_libvlc the instance to clean
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
*/
|
2009-01-17 21:09:40 +01:00
|
|
|
void libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-12-22 18:22:09 +01:00
|
|
|
libvlc_priv_t *priv = libvlc_priv (p_libvlc);
|
2010-01-31 00:08:21 +01:00
|
|
|
playlist_t *p_playlist = libvlc_priv (p_libvlc)->p_playlist;
|
2008-12-22 18:22:09 +01:00
|
|
|
|
|
|
|
/* Deactivate the playlist */
|
|
|
|
msg_Dbg( p_libvlc, "deactivating the playlist" );
|
2010-01-31 00:08:21 +01:00
|
|
|
pl_Deactivate( p_libvlc );
|
2008-12-22 18:22:09 +01:00
|
|
|
|
|
|
|
/* Remove all services discovery */
|
|
|
|
msg_Dbg( p_libvlc, "removing all services discovery tasks" );
|
|
|
|
playlist_ServicesDiscoveryKillAll( p_playlist );
|
2004-06-05 18:09:00 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Ask the interfaces to stop and destroy them */
|
|
|
|
msg_Dbg( p_libvlc, "removing all interfaces" );
|
2009-05-23 20:30:40 +02:00
|
|
|
libvlc_Quit( p_libvlc );
|
2009-05-23 19:45:24 +02:00
|
|
|
intf_DestroyAll( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2008-07-17 21:25:18 +02:00
|
|
|
#ifdef ENABLE_VLM
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Destroy VLM if created in libvlc_InternalInit */
|
|
|
|
if( priv->p_vlm )
|
|
|
|
{
|
|
|
|
vlm_Delete( priv->p_vlm );
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2011-01-24 17:02:57 +01:00
|
|
|
#if defined(MEDIA_LIBRARY)
|
|
|
|
media_library_t* p_ml = priv->p_ml;
|
|
|
|
if( p_ml )
|
|
|
|
{
|
|
|
|
ml_Destroy( VLC_OBJECT( p_ml ) );
|
|
|
|
vlc_object_release( p_ml );
|
|
|
|
libvlc_priv(p_playlist->p_libvlc)->p_ml = NULL;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2010-02-09 17:38:16 +01:00
|
|
|
/* Free playlist now, all threads are gone */
|
|
|
|
playlist_Destroy( p_playlist );
|
2008-05-31 21:30:46 +02:00
|
|
|
stats_TimersDumpAll( p_libvlc );
|
|
|
|
stats_TimersCleanAll( p_libvlc );
|
|
|
|
|
|
|
|
msg_Dbg( p_libvlc, "removing stats" );
|
|
|
|
|
|
|
|
#ifndef WIN32
|
|
|
|
char* psz_pidfile = NULL;
|
|
|
|
|
|
|
|
if( b_daemon )
|
|
|
|
{
|
2009-12-10 17:44:20 +01:00
|
|
|
psz_pidfile = var_CreateGetNonEmptyString( p_libvlc, "pidfile" );
|
2008-05-31 21:30:46 +02:00
|
|
|
if( psz_pidfile != NULL )
|
|
|
|
{
|
|
|
|
msg_Dbg( p_libvlc, "removing pid file %s", psz_pidfile );
|
|
|
|
if( unlink( psz_pidfile ) == -1 )
|
|
|
|
{
|
|
|
|
msg_Dbg( p_libvlc, "removing pid file %s: %m",
|
|
|
|
psz_pidfile );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free( psz_pidfile );
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if( priv->p_memcpy_module )
|
|
|
|
{
|
2008-09-21 13:58:57 +02:00
|
|
|
module_unneed( p_libvlc, priv->p_memcpy_module );
|
2008-05-31 21:30:46 +02:00
|
|
|
priv->p_memcpy_module = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Free module bank. It is refcounted, so we call this each time */
|
2009-02-17 22:28:40 +01:00
|
|
|
module_EndBank( p_libvlc, true );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2011-02-12 22:13:18 +01:00
|
|
|
vlc_DeinitActions( p_libvlc, priv->actions );
|
2009-01-17 21:14:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Destroy everything.
|
|
|
|
* This function requests the running threads to finish, waits for their
|
|
|
|
* termination, and destroys their structure.
|
|
|
|
* It stops the thread systems: no instance can run after this has run
|
|
|
|
* \param p_libvlc the instance to destroy
|
|
|
|
*/
|
|
|
|
void libvlc_InternalDestroy( libvlc_int_t *p_libvlc )
|
|
|
|
{
|
|
|
|
libvlc_priv_t *priv = libvlc_priv( p_libvlc );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2008-10-05 10:28:32 +02:00
|
|
|
vlc_mutex_lock( &global_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
i_instances--;
|
|
|
|
|
|
|
|
if( i_instances == 0 )
|
|
|
|
{
|
|
|
|
/* System specific cleaning code */
|
|
|
|
system_End( p_libvlc );
|
|
|
|
}
|
2008-10-05 10:28:32 +02:00
|
|
|
vlc_mutex_unlock( &global_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2010-02-06 17:18:30 +01:00
|
|
|
msg_Destroy (priv->msg_bank);
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Destroy mutexes */
|
2010-05-30 19:17:27 +02:00
|
|
|
vlc_ExitDestroy( &priv->exit );
|
2008-05-31 21:30:46 +02:00
|
|
|
vlc_mutex_destroy( &priv->timer_lock );
|
2010-07-03 20:21:01 +02:00
|
|
|
vlc_mutex_destroy( &priv->ml_lock );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2009-03-05 21:27:30 +01:00
|
|
|
#ifndef NDEBUG /* Hack to dump leaked objects tree */
|
|
|
|
if( vlc_internals( p_libvlc )->i_refcount > 1 )
|
|
|
|
while( vlc_internals( p_libvlc )->i_refcount > 0 )
|
|
|
|
vlc_object_release( p_libvlc );
|
|
|
|
#endif
|
|
|
|
|
2009-03-05 18:24:12 +01:00
|
|
|
assert( vlc_internals( p_libvlc )->i_refcount == 1 );
|
2008-05-31 21:30:46 +02:00
|
|
|
vlc_object_release( p_libvlc );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2008-05-31 21:30:46 +02:00
|
|
|
* Add an interface plugin and run it
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
*/
|
2008-06-04 18:32:23 +02:00
|
|
|
int libvlc_InternalAddIntf( libvlc_int_t *p_libvlc, char const *psz_module )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
if( !p_libvlc )
|
|
|
|
return VLC_EGENERIC;
|
|
|
|
|
|
|
|
if( !psz_module ) /* requesting the default interface */
|
|
|
|
{
|
2009-12-10 17:44:20 +01:00
|
|
|
char *psz_interface = var_CreateGetNonEmptyString( p_libvlc, "intf" );
|
|
|
|
if( !psz_interface ) /* "intf" has not been set */
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
#ifndef WIN32
|
|
|
|
if( b_daemon )
|
|
|
|
/* Daemon mode hack.
|
|
|
|
* We prefer the dummy interface if none is specified. */
|
|
|
|
psz_module = "dummy";
|
|
|
|
else
|
|
|
|
#endif
|
2009-03-24 22:23:41 +01:00
|
|
|
msg_Info( p_libvlc, "%s",
|
|
|
|
_("Running vlc with the default interface. "
|
|
|
|
"Use 'cvlc' to use vlc without interface.") );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
free( psz_interface );
|
2009-12-23 13:30:11 +01:00
|
|
|
var_Destroy( p_libvlc, "intf" );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Try to create the interface */
|
2009-12-10 17:44:20 +01:00
|
|
|
int ret = intf_Create( p_libvlc, psz_module ? psz_module : "$intf" );
|
|
|
|
if( ret )
|
2008-05-31 21:30:46 +02:00
|
|
|
msg_Err( p_libvlc, "interface \"%s\" initialization failed",
|
2009-07-12 22:31:35 +02:00
|
|
|
psz_module ? psz_module : "default" );
|
2009-12-10 17:44:20 +01:00
|
|
|
return ret;
|
2009-05-23 19:18:29 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
#if defined( ENABLE_NLS ) && (defined (__APPLE__) || defined (WIN32)) && \
|
|
|
|
( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
|
|
|
|
/*****************************************************************************
|
|
|
|
* SetLanguage: set the interface language.
|
|
|
|
*****************************************************************************
|
|
|
|
* We set the LC_MESSAGES locale category for interface messages and buttons,
|
|
|
|
* as well as the LC_CTYPE category for string sorting and possible wide
|
|
|
|
* character support.
|
|
|
|
*****************************************************************************/
|
|
|
|
static void SetLanguage ( const char *psz_lang )
|
|
|
|
{
|
|
|
|
#ifdef __APPLE__
|
|
|
|
/* I need that under Darwin, please check it doesn't disturb
|
|
|
|
* other platforms. --Meuuh */
|
|
|
|
setenv( "LANG", psz_lang, 1 );
|
|
|
|
|
|
|
|
#else
|
|
|
|
/* We set LC_ALL manually because it is the only way to set
|
|
|
|
* the language at runtime under eg. Windows. Beware that this
|
|
|
|
* makes the environment unconsistent when libvlc is unloaded and
|
|
|
|
* should probably be moved to a safer place like vlc.c. */
|
2011-02-12 21:35:17 +01:00
|
|
|
setenv( "LC_ALL", psz_lang, 1 );
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
setlocale( LC_ALL, psz_lang );
|
2002-09-29 20:19:53 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
2002-09-29 20:19:53 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* GetFilenames: parse command line options which are not flags
|
|
|
|
*****************************************************************************
|
|
|
|
* Parse command line for input files as well as their associated options.
|
|
|
|
* An option always follows its associated input and begins with a ":".
|
|
|
|
*****************************************************************************/
|
2010-03-29 22:41:32 +02:00
|
|
|
static void GetFilenames( libvlc_int_t *p_vlc, unsigned n,
|
|
|
|
const char *const args[] )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2010-03-29 22:41:32 +02:00
|
|
|
while( n > 0 )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
/* Count the input options */
|
2010-03-29 22:41:32 +02:00
|
|
|
unsigned i_options = 0;
|
|
|
|
|
|
|
|
while( args[--n][0] == ':' )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
i_options++;
|
2010-03-29 22:41:32 +02:00
|
|
|
if( n == 0 )
|
|
|
|
{
|
|
|
|
msg_Warn( p_vlc, "options %s without item", args[n] );
|
|
|
|
return; /* syntax!? */
|
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
2010-07-07 20:12:46 +02:00
|
|
|
char *mrl = make_URI( args[n], NULL );
|
2009-10-05 21:58:46 +02:00
|
|
|
if( !mrl )
|
|
|
|
continue;
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2010-02-09 20:18:40 +01:00
|
|
|
playlist_AddExt( pl_Get( p_vlc ), mrl, NULL, PLAYLIST_INSERT,
|
2010-03-29 22:41:32 +02:00
|
|
|
0, -1, i_options, ( i_options ? &args[n + 1] : NULL ),
|
2009-10-05 21:58:46 +02:00
|
|
|
VLC_INPUT_OPTION_TRUSTED, true, pl_Unlocked );
|
|
|
|
free( mrl );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2002-09-29 20:19:53 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* Help: print program help
|
|
|
|
*****************************************************************************
|
|
|
|
* Print a short inline help. Message interface is initialized at this stage.
|
|
|
|
*****************************************************************************/
|
2008-07-07 00:53:23 +02:00
|
|
|
static inline void print_help_on_full_help( void )
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "\n" );
|
2008-07-07 01:32:49 +02:00
|
|
|
utf8_fprintf( stdout, "%s\n", _("To get exhaustive help, use '-H'.") );
|
2008-07-07 00:53:23 +02:00
|
|
|
}
|
|
|
|
|
2009-08-20 19:06:58 +02:00
|
|
|
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://[[<source address>]@[<bind address>][:<bind port>]]"
|
|
|
|
"\n UDP stream sent by a streaming server"
|
|
|
|
"\n vlc://pause:<seconds> Special item to pause the playlist for a certain time"
|
|
|
|
"\n vlc://quit Special item to quit VLC"
|
|
|
|
"\n");
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
static void Help( libvlc_int_t *p_this, char const *psz_help_name )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifdef WIN32
|
|
|
|
ShowConsole( true );
|
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
if( psz_help_name && !strcmp( psz_help_name, "help" ) )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-09-06 12:57:04 +02:00
|
|
|
utf8_fprintf( stdout, vlc_usage, "vlc" );
|
2008-09-02 01:29:38 +02:00
|
|
|
Usage( p_this, "=help" );
|
|
|
|
Usage( p_this, "=main" );
|
2008-07-07 00:53:23 +02:00
|
|
|
print_help_on_full_help();
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
else if( psz_help_name && !strcmp( psz_help_name, "longhelp" ) )
|
2008-07-06 21:55:18 +02:00
|
|
|
{
|
2008-09-06 12:57:04 +02:00
|
|
|
utf8_fprintf( stdout, vlc_usage, "vlc" );
|
2008-07-06 21:55:18 +02:00
|
|
|
Usage( p_this, NULL );
|
2008-07-07 00:53:23 +02:00
|
|
|
print_help_on_full_help();
|
2008-07-06 21:55:18 +02:00
|
|
|
}
|
|
|
|
else if( psz_help_name && !strcmp( psz_help_name, "full-help" ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2008-09-06 12:57:04 +02:00
|
|
|
utf8_fprintf( stdout, vlc_usage, "vlc" );
|
2008-05-31 21:30:46 +02:00
|
|
|
Usage( p_this, NULL );
|
|
|
|
}
|
|
|
|
else if( psz_help_name )
|
|
|
|
{
|
|
|
|
Usage( p_this, psz_help_name );
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef WIN32 /* Pause the console because it's destroyed when we exit */
|
|
|
|
PauseConsole();
|
|
|
|
#endif
|
2010-08-23 20:41:48 +02:00
|
|
|
fflush( stdout );
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* Usage: print module usage
|
|
|
|
*****************************************************************************
|
|
|
|
* Print a short inline help. Message interface is initialized at this stage.
|
|
|
|
*****************************************************************************/
|
2008-07-07 01:07:48 +02:00
|
|
|
# define COL(x) "\033[" #x ";1m"
|
|
|
|
# define RED COL(31)
|
|
|
|
# define GREEN COL(32)
|
|
|
|
# define YELLOW COL(33)
|
|
|
|
# define BLUE COL(34)
|
|
|
|
# define MAGENTA COL(35)
|
|
|
|
# define CYAN COL(36)
|
|
|
|
# define WHITE COL(0)
|
|
|
|
# define GRAY "\033[0m"
|
2010-01-28 18:59:50 +01:00
|
|
|
static void
|
|
|
|
print_help_section( const module_t *m, const module_config_t *p_item,
|
|
|
|
bool b_color, bool b_description )
|
2008-07-07 01:07:48 +02:00
|
|
|
{
|
|
|
|
if( !p_item ) return;
|
|
|
|
if( b_color )
|
|
|
|
{
|
2010-01-28 18:59:50 +01:00
|
|
|
utf8_fprintf( stdout, RED" %s:\n"GRAY,
|
|
|
|
module_gettext( m, p_item->psz_text ) );
|
2010-08-19 22:40:56 +02:00
|
|
|
if( b_description && p_item->psz_longtext )
|
2008-07-07 01:07:48 +02:00
|
|
|
utf8_fprintf( stdout, MAGENTA" %s\n"GRAY,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( m, p_item->psz_longtext ) );
|
2008-07-07 01:07:48 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-01-28 18:59:50 +01:00
|
|
|
utf8_fprintf( stdout, " %s:\n",
|
|
|
|
module_gettext( m, p_item->psz_text ) );
|
2010-08-19 22:40:56 +02:00
|
|
|
if( b_description && p_item->psz_longtext )
|
2010-01-28 18:59:50 +01:00
|
|
|
utf8_fprintf( stdout, " %s\n",
|
|
|
|
module_gettext(m, p_item->psz_longtext ) );
|
2008-07-07 01:07:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-09-02 01:29:38 +02:00
|
|
|
static void Usage( libvlc_int_t *p_this, char const *psz_search )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
#define FORMAT_STRING " %s --%s%s%s%s%s%s%s "
|
|
|
|
/* short option ------' | | | | | | |
|
|
|
|
* option name ------------' | | | | | |
|
|
|
|
* <bra ---------------------' | | | | |
|
|
|
|
* option type or "" ----------' | | | |
|
|
|
|
* ket> -------------------------' | | |
|
|
|
|
* padding spaces -----------------' | |
|
|
|
|
* comment --------------------------' |
|
|
|
|
* comment suffix ---------------------'
|
|
|
|
*
|
|
|
|
* The purpose of having bra and ket is that we might i18n them as well.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define COLOR_FORMAT_STRING (WHITE" %s --%s"YELLOW"%s%s%s%s%s%s "GRAY)
|
|
|
|
#define COLOR_FORMAT_STRING_BOOL (WHITE" %s --%s%s%s%s%s%s%s "GRAY)
|
|
|
|
|
|
|
|
#define LINE_START 8
|
|
|
|
#define PADDING_SPACES 25
|
|
|
|
#ifdef WIN32
|
|
|
|
# define OPTION_VALUE_SEP "="
|
|
|
|
#else
|
|
|
|
# define OPTION_VALUE_SEP " "
|
|
|
|
#endif
|
|
|
|
char psz_spaces_text[PADDING_SPACES+LINE_START+1];
|
|
|
|
char psz_spaces_longtext[LINE_START+3];
|
2009-01-29 17:03:36 +01:00
|
|
|
char psz_format[sizeof(COLOR_FORMAT_STRING)];
|
|
|
|
char psz_format_bool[sizeof(COLOR_FORMAT_STRING_BOOL)];
|
2008-05-31 21:30:46 +02:00
|
|
|
char psz_buffer[10000];
|
|
|
|
char psz_short[4];
|
|
|
|
int i_width = ConsoleWidth() - (PADDING_SPACES+LINE_START+1);
|
|
|
|
int i_width_description = i_width + PADDING_SPACES - 1;
|
2010-01-17 20:51:15 +01:00
|
|
|
bool b_advanced = var_InheritBool( p_this, "advanced" );
|
|
|
|
bool b_description = var_InheritBool( p_this, "help-verbose" );
|
2008-05-31 21:30:46 +02:00
|
|
|
bool b_description_hack;
|
2010-01-17 20:51:15 +01:00
|
|
|
bool b_color = var_InheritBool( p_this, "color" );
|
2008-05-31 21:30:46 +02:00
|
|
|
bool b_has_advanced = false;
|
2008-09-02 01:02:39 +02:00
|
|
|
bool b_found = false;
|
2008-09-02 01:10:27 +02:00
|
|
|
int i_only_advanced = 0; /* Number of modules ignored because they
|
|
|
|
* only have advanced options */
|
2008-09-02 01:29:38 +02:00
|
|
|
bool b_strict = psz_search && *psz_search == '=';
|
|
|
|
if( b_strict ) psz_search++;
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
memset( psz_spaces_text, ' ', PADDING_SPACES+LINE_START );
|
|
|
|
psz_spaces_text[PADDING_SPACES+LINE_START] = '\0';
|
|
|
|
memset( psz_spaces_longtext, ' ', LINE_START+2 );
|
|
|
|
psz_spaces_longtext[LINE_START+2] = '\0';
|
2008-06-05 19:10:04 +02:00
|
|
|
#ifndef WIN32
|
|
|
|
if( !isatty( 1 ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
2008-06-05 19:10:04 +02:00
|
|
|
b_color = false; // don't put color control codes in a .txt file
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
if( b_color )
|
|
|
|
{
|
|
|
|
strcpy( psz_format, COLOR_FORMAT_STRING );
|
|
|
|
strcpy( psz_format_bool, COLOR_FORMAT_STRING_BOOL );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strcpy( psz_format, FORMAT_STRING );
|
|
|
|
strcpy( psz_format_bool, FORMAT_STRING );
|
|
|
|
}
|
|
|
|
|
|
|
|
/* List all modules */
|
2008-09-21 12:07:28 +02:00
|
|
|
module_t **list = module_list_get (NULL);
|
|
|
|
if (!list)
|
|
|
|
return;
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Ugly hack to make sure that the help options always come first
|
|
|
|
* (part 1) */
|
2008-09-02 01:29:38 +02:00
|
|
|
if( !psz_search )
|
2008-05-31 21:30:46 +02:00
|
|
|
Usage( p_this, "help" );
|
|
|
|
|
|
|
|
/* Enumerate the config for each module */
|
2008-09-21 12:07:28 +02:00
|
|
|
for (size_t i = 0; list[i]; i++)
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
bool b_help_module;
|
2008-09-21 12:07:28 +02:00
|
|
|
module_t *p_parser = list[i];
|
2008-05-31 21:30:46 +02:00
|
|
|
module_config_t *p_item = NULL;
|
2008-07-07 01:07:48 +02:00
|
|
|
module_config_t *p_section = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
module_config_t *p_end = p_parser->p_config + p_parser->confsize;
|
|
|
|
|
2008-09-02 01:29:38 +02:00
|
|
|
if( psz_search &&
|
|
|
|
( b_strict ? strcmp( psz_search, p_parser->psz_object_name )
|
|
|
|
: !strstr( p_parser->psz_object_name, psz_search ) ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2010-04-22 20:41:10 +02:00
|
|
|
char *const *pp_shortcuts = p_parser->pp_shortcuts;
|
2010-04-24 11:21:50 +02:00
|
|
|
unsigned i;
|
2010-04-22 20:41:10 +02:00
|
|
|
for( i = 0; i < p_parser->i_shortcuts; i++ )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2010-04-22 20:41:10 +02:00
|
|
|
if( b_strict ? !strcmp( psz_search, pp_shortcuts[i] )
|
|
|
|
: !!strstr( pp_shortcuts[i], psz_search ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
break;
|
|
|
|
}
|
2010-04-22 20:41:10 +02:00
|
|
|
if( i == p_parser->i_shortcuts )
|
2008-05-31 21:30:46 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Ignore modules without config options */
|
|
|
|
if( !p_parser->i_config_items )
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
b_help_module = !strcmp( "help", p_parser->psz_object_name );
|
|
|
|
/* Ugly hack to make sure that the help options always come first
|
|
|
|
* (part 2) */
|
2008-09-02 01:29:38 +02:00
|
|
|
if( !psz_search && b_help_module )
|
2008-05-31 21:30:46 +02:00
|
|
|
continue;
|
|
|
|
|
|
|
|
/* Ignore modules with only advanced config options if requested */
|
|
|
|
if( !b_advanced )
|
|
|
|
{
|
|
|
|
for( p_item = p_parser->p_config;
|
|
|
|
p_item < p_end;
|
|
|
|
p_item++ )
|
|
|
|
{
|
|
|
|
if( (p_item->i_type & CONFIG_ITEM) &&
|
2008-09-02 13:31:17 +02:00
|
|
|
!p_item->b_advanced && !p_item->b_removed ) break;
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2008-09-02 00:51:10 +02:00
|
|
|
|
|
|
|
if( p_item == p_end )
|
2008-09-02 01:10:27 +02:00
|
|
|
{
|
|
|
|
i_only_advanced++;
|
2008-09-02 00:51:10 +02:00
|
|
|
continue;
|
2008-09-02 01:10:27 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
2008-09-02 01:02:39 +02:00
|
|
|
b_found = true;
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Print name of module */
|
|
|
|
if( strcmp( "main", p_parser->psz_object_name ) )
|
|
|
|
{
|
|
|
|
if( b_color )
|
2008-09-02 00:55:36 +02:00
|
|
|
utf8_fprintf( stdout, "\n " GREEN "%s" GRAY " (%s)\n",
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_parser->psz_longname ),
|
2009-11-09 22:25:09 +01:00
|
|
|
p_parser->psz_object_name );
|
2008-05-31 21:30:46 +02:00
|
|
|
else
|
2010-01-28 18:59:50 +01:00
|
|
|
utf8_fprintf( stdout, "\n %s\n",
|
|
|
|
module_gettext(p_parser, p_parser->psz_longname ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
if( p_parser->psz_help )
|
|
|
|
{
|
|
|
|
if( b_color )
|
2009-11-09 22:25:09 +01:00
|
|
|
utf8_fprintf( stdout, CYAN" %s\n"GRAY,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_parser->psz_help ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
else
|
2010-01-28 18:59:50 +01:00
|
|
|
utf8_fprintf( stdout, " %s\n",
|
|
|
|
module_gettext( p_parser, p_parser->psz_help ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Print module options */
|
|
|
|
for( p_item = p_parser->p_config;
|
|
|
|
p_item < p_end;
|
|
|
|
p_item++ )
|
|
|
|
{
|
|
|
|
char *psz_text, *psz_spaces = psz_spaces_text;
|
|
|
|
const char *psz_bra = NULL, *psz_type = NULL, *psz_ket = NULL;
|
|
|
|
const char *psz_suf = "", *psz_prefix = NULL;
|
|
|
|
signed int i;
|
|
|
|
size_t i_cur_width;
|
|
|
|
|
|
|
|
/* Skip removed options */
|
|
|
|
if( p_item->b_removed )
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
/* Skip advanced options if requested */
|
|
|
|
if( p_item->b_advanced && !b_advanced )
|
|
|
|
{
|
|
|
|
b_has_advanced = true;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch( p_item->i_type )
|
|
|
|
{
|
|
|
|
case CONFIG_HINT_CATEGORY:
|
|
|
|
case CONFIG_HINT_USAGE:
|
|
|
|
if( !strcmp( "main", p_parser->psz_object_name ) )
|
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, GREEN "\n %s\n" GRAY,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_item->psz_text ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
else
|
2009-11-09 22:25:09 +01:00
|
|
|
utf8_fprintf( stdout, "\n %s\n",
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_item->psz_text ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2010-08-19 22:40:56 +02:00
|
|
|
if( b_description && p_item->psz_longtext )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, CYAN " %s\n" GRAY,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_item->psz_longtext ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
else
|
2009-11-09 22:25:09 +01:00
|
|
|
utf8_fprintf( stdout, " %s\n",
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_item->psz_longtext ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_HINT_SUBCATEGORY:
|
|
|
|
if( strcmp( "main", p_parser->psz_object_name ) )
|
2008-07-07 01:07:48 +02:00
|
|
|
break;
|
2008-05-31 21:30:46 +02:00
|
|
|
case CONFIG_SECTION:
|
2008-07-07 01:07:48 +02:00
|
|
|
p_section = p_item;
|
2008-05-31 21:30:46 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case CONFIG_ITEM_STRING:
|
2010-10-14 18:27:33 +02:00
|
|
|
case CONFIG_ITEM_LOADFILE:
|
|
|
|
case CONFIG_ITEM_SAVEFILE:
|
2008-05-31 21:30:46 +02:00
|
|
|
case CONFIG_ITEM_DIRECTORY:
|
2011-02-10 21:46:59 +01:00
|
|
|
case CONFIG_ITEM_KEY:
|
2008-05-31 21:30:46 +02:00
|
|
|
case CONFIG_ITEM_MODULE: /* We could also have "=<" here */
|
|
|
|
case CONFIG_ITEM_MODULE_CAT:
|
|
|
|
case CONFIG_ITEM_MODULE_LIST:
|
|
|
|
case CONFIG_ITEM_MODULE_LIST_CAT:
|
|
|
|
case CONFIG_ITEM_FONT:
|
|
|
|
case CONFIG_ITEM_PASSWORD:
|
2010-01-28 18:59:50 +01:00
|
|
|
print_help_section( p_parser, p_section, b_color,
|
|
|
|
b_description );
|
2008-07-07 01:07:48 +02:00
|
|
|
p_section = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_bra = OPTION_VALUE_SEP "<";
|
|
|
|
psz_type = _("string");
|
|
|
|
psz_ket = ">";
|
|
|
|
|
|
|
|
if( p_item->ppsz_list )
|
|
|
|
{
|
|
|
|
psz_bra = OPTION_VALUE_SEP "{";
|
|
|
|
psz_type = psz_buffer;
|
|
|
|
psz_buffer[0] = '\0';
|
|
|
|
for( i = 0; p_item->ppsz_list[i]; i++ )
|
|
|
|
{
|
|
|
|
if( i ) strcat( psz_buffer, "," );
|
|
|
|
strcat( psz_buffer, p_item->ppsz_list[i] );
|
|
|
|
}
|
|
|
|
psz_ket = "}";
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case CONFIG_ITEM_INTEGER:
|
2010-01-28 18:59:50 +01:00
|
|
|
print_help_section( p_parser, p_section, b_color,
|
|
|
|
b_description );
|
2008-07-07 01:07:48 +02:00
|
|
|
p_section = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_bra = OPTION_VALUE_SEP "<";
|
|
|
|
psz_type = _("integer");
|
|
|
|
psz_ket = ">";
|
|
|
|
|
|
|
|
if( p_item->min.i || p_item->max.i )
|
|
|
|
{
|
2010-07-11 13:42:30 +02:00
|
|
|
sprintf( psz_buffer, "%s [%"PRId64" .. %"PRId64"]",
|
|
|
|
psz_type, p_item->min.i, p_item->max.i );
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_type = psz_buffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( p_item->i_list )
|
|
|
|
{
|
|
|
|
psz_bra = OPTION_VALUE_SEP "{";
|
|
|
|
psz_type = psz_buffer;
|
|
|
|
psz_buffer[0] = '\0';
|
|
|
|
for( i = 0; p_item->ppsz_list_text[i]; i++ )
|
|
|
|
{
|
|
|
|
if( i ) strcat( psz_buffer, ", " );
|
|
|
|
sprintf( psz_buffer + strlen(psz_buffer), "%i (%s)",
|
|
|
|
p_item->pi_list[i],
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_item->ppsz_list_text[i] ) );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
psz_ket = "}";
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case CONFIG_ITEM_FLOAT:
|
2010-01-28 18:59:50 +01:00
|
|
|
print_help_section( p_parser, p_section, b_color,
|
|
|
|
b_description );
|
2008-07-07 01:07:48 +02:00
|
|
|
p_section = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_bra = OPTION_VALUE_SEP "<";
|
|
|
|
psz_type = _("float");
|
|
|
|
psz_ket = ">";
|
|
|
|
if( p_item->min.f || p_item->max.f )
|
|
|
|
{
|
|
|
|
sprintf( psz_buffer, "%s [%f .. %f]", psz_type,
|
|
|
|
p_item->min.f, p_item->max.f );
|
|
|
|
psz_type = psz_buffer;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case CONFIG_ITEM_BOOL:
|
2010-01-28 18:59:50 +01:00
|
|
|
print_help_section( p_parser, p_section, b_color,
|
|
|
|
b_description );
|
2008-07-07 01:07:48 +02:00
|
|
|
p_section = NULL;
|
2008-05-31 21:30:46 +02:00
|
|
|
psz_bra = ""; psz_type = ""; psz_ket = "";
|
|
|
|
if( !b_help_module )
|
|
|
|
{
|
|
|
|
psz_suf = p_item->value.i ? _(" (default enabled)") :
|
|
|
|
_(" (default disabled)");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( !psz_type )
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Add short option if any */
|
|
|
|
if( p_item->i_short )
|
|
|
|
{
|
|
|
|
sprintf( psz_short, "-%c,", p_item->i_short );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strcpy( psz_short, " " );
|
|
|
|
}
|
|
|
|
|
|
|
|
i = PADDING_SPACES - strlen( p_item->psz_name )
|
|
|
|
- strlen( psz_bra ) - strlen( psz_type )
|
|
|
|
- strlen( psz_ket ) - 1;
|
|
|
|
|
|
|
|
if( p_item->i_type == CONFIG_ITEM_BOOL && !b_help_module )
|
|
|
|
{
|
|
|
|
psz_prefix = ", --no-";
|
|
|
|
i -= strlen( p_item->psz_name ) + strlen( psz_prefix );
|
|
|
|
}
|
|
|
|
|
|
|
|
if( i < 0 )
|
|
|
|
{
|
|
|
|
psz_spaces[0] = '\n';
|
|
|
|
i = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
psz_spaces[i] = '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
if( p_item->i_type == CONFIG_ITEM_BOOL && !b_help_module )
|
|
|
|
{
|
2008-09-02 00:12:41 +02:00
|
|
|
utf8_fprintf( stdout, psz_format_bool, psz_short,
|
2008-05-31 21:30:46 +02:00
|
|
|
p_item->psz_name, psz_prefix, p_item->psz_name,
|
|
|
|
psz_bra, psz_type, psz_ket, psz_spaces );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, psz_format, psz_short, p_item->psz_name,
|
|
|
|
"", "", psz_bra, psz_type, psz_ket, psz_spaces );
|
|
|
|
}
|
|
|
|
|
|
|
|
psz_spaces[i] = ' ';
|
|
|
|
|
|
|
|
/* We wrap the rest of the output */
|
2010-01-28 18:59:50 +01:00
|
|
|
sprintf( psz_buffer, "%s%s", module_gettext( p_parser, p_item->psz_text ),
|
2009-11-09 22:25:09 +01:00
|
|
|
psz_suf );
|
2008-05-31 21:30:46 +02:00
|
|
|
b_description_hack = b_description;
|
|
|
|
|
|
|
|
description:
|
|
|
|
psz_text = psz_buffer;
|
|
|
|
i_cur_width = b_description && !b_description_hack
|
|
|
|
? i_width_description
|
|
|
|
: i_width;
|
2011-04-12 21:32:43 +02:00
|
|
|
if( !*psz_text ) strcpy(psz_text, " ");
|
2008-05-31 21:30:46 +02:00
|
|
|
while( *psz_text )
|
|
|
|
{
|
|
|
|
char *psz_parser, *psz_word;
|
|
|
|
size_t i_end = strlen( psz_text );
|
|
|
|
|
|
|
|
/* If the remaining text fits in a line, print it. */
|
|
|
|
if( i_end <= i_cur_width )
|
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
{
|
|
|
|
if( !b_description || b_description_hack )
|
|
|
|
utf8_fprintf( stdout, BLUE"%s\n"GRAY, psz_text );
|
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, "%s\n", psz_text );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "%s\n", psz_text );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Otherwise, eat as many words as possible */
|
|
|
|
psz_parser = psz_text;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
psz_word = psz_parser;
|
|
|
|
psz_parser = strchr( psz_word, ' ' );
|
|
|
|
/* If no space was found, we reached the end of the text
|
|
|
|
* block; otherwise, we skip the space we just found. */
|
|
|
|
psz_parser = psz_parser ? psz_parser + 1
|
|
|
|
: psz_text + i_end;
|
|
|
|
|
|
|
|
} while( (size_t)(psz_parser - psz_text) <= i_cur_width );
|
|
|
|
|
|
|
|
/* We cut a word in one of these cases:
|
|
|
|
* - it's the only word in the line and it's too long.
|
|
|
|
* - we used less than 80% of the width and the word we are
|
|
|
|
* going to wrap is longer than 40% of the width, and even
|
|
|
|
* if the word would have fit in the next line. */
|
|
|
|
if( psz_word == psz_text
|
|
|
|
|| ( (size_t)(psz_word - psz_text) < 80 * i_cur_width / 100
|
|
|
|
&& (size_t)(psz_parser - psz_word) > 40 * i_cur_width / 100 ) )
|
|
|
|
{
|
|
|
|
char c = psz_text[i_cur_width];
|
|
|
|
psz_text[i_cur_width] = '\0';
|
|
|
|
if( b_color )
|
|
|
|
{
|
|
|
|
if( !b_description || b_description_hack )
|
|
|
|
utf8_fprintf( stdout, BLUE"%s\n%s"GRAY,
|
|
|
|
psz_text, psz_spaces );
|
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, "%s\n%s",
|
|
|
|
psz_text, psz_spaces );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "%s\n%s", psz_text, psz_spaces );
|
|
|
|
}
|
|
|
|
psz_text += i_cur_width;
|
|
|
|
psz_text[0] = c;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
psz_word[-1] = '\0';
|
|
|
|
if( b_color )
|
|
|
|
{
|
|
|
|
if( !b_description || b_description_hack )
|
|
|
|
utf8_fprintf( stdout, BLUE"%s\n%s"GRAY,
|
|
|
|
psz_text, psz_spaces );
|
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, "%s\n%s",
|
|
|
|
psz_text, psz_spaces );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "%s\n%s", psz_text, psz_spaces );
|
|
|
|
}
|
|
|
|
psz_text = psz_word;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-08-19 22:40:56 +02:00
|
|
|
if( b_description_hack && p_item->psz_longtext )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2010-01-28 18:59:50 +01:00
|
|
|
sprintf( psz_buffer, "%s%s",
|
|
|
|
module_gettext( p_parser, p_item->psz_longtext ),
|
2009-11-09 22:25:09 +01:00
|
|
|
psz_suf );
|
2008-05-31 21:30:46 +02:00
|
|
|
b_description_hack = false;
|
|
|
|
psz_spaces = psz_spaces_longtext;
|
|
|
|
utf8_fprintf( stdout, "%s", psz_spaces );
|
|
|
|
goto description;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-09-02 00:12:41 +02:00
|
|
|
if( b_has_advanced )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, "\n" WHITE "%s" GRAY " %s\n", _( "Note:" ),
|
|
|
|
_( "add --advanced to your command line to see advanced options."));
|
|
|
|
else
|
2008-09-02 01:02:39 +02:00
|
|
|
utf8_fprintf( stdout, "\n%s %s\n", _( "Note:" ),
|
2008-05-31 21:30:46 +02:00
|
|
|
_( "add --advanced to your command line to see advanced options."));
|
|
|
|
}
|
|
|
|
|
2008-09-02 01:10:27 +02:00
|
|
|
if( i_only_advanced > 0 )
|
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "\n" WHITE "%s" GRAY " ", _( "Note:" ) );
|
|
|
|
utf8_fprintf( stdout, _( "%d module(s) were not displayed because they only have advanced options.\n" ), i_only_advanced );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
utf8_fprintf( stdout, "\n%s ", _( "Note:" ) );
|
|
|
|
utf8_fprintf( stdout, _( "%d module(s) were not displayed because they only have advanced options.\n" ), i_only_advanced );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( !b_found )
|
2008-09-02 01:02:39 +02:00
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, "\n" WHITE "%s" GRAY "\n",
|
2009-06-23 14:22:09 +02:00
|
|
|
_( "No matching module found. Use --list or " \
|
2008-09-02 01:02:39 +02:00
|
|
|
"--list-verbose to list available modules." ) );
|
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, "\n%s\n",
|
2009-06-23 14:22:09 +02:00
|
|
|
_( "No matching module found. Use --list or " \
|
2008-09-02 01:02:39 +02:00
|
|
|
"--list-verbose to list available modules." ) );
|
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/* Release the module list */
|
2008-09-21 12:07:28 +02:00
|
|
|
module_list_free (list);
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* ListModules: list the available modules with their description
|
|
|
|
*****************************************************************************
|
|
|
|
* Print a list of all available modules (builtins and plugins) and a short
|
|
|
|
* description for each one.
|
|
|
|
*****************************************************************************/
|
|
|
|
static void ListModules( libvlc_int_t *p_this, bool b_verbose )
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
{
|
2008-09-21 12:07:28 +02:00
|
|
|
module_t *p_parser;
|
2008-05-31 21:30:46 +02:00
|
|
|
|
2010-01-17 20:51:15 +01:00
|
|
|
bool b_color = var_InheritBool( p_this, "color" );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
#ifdef WIN32
|
|
|
|
ShowConsole( true );
|
2009-12-22 18:34:24 +01:00
|
|
|
b_color = false; // don't put color control codes in a .txt file
|
2009-12-23 20:20:15 +01:00
|
|
|
#else
|
|
|
|
if( !isatty( 1 ) )
|
|
|
|
b_color = false;
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* List all modules */
|
2008-09-21 12:07:28 +02:00
|
|
|
module_t **list = module_list_get (NULL);
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
/* Enumerate each module */
|
2008-09-21 12:07:28 +02:00
|
|
|
for (size_t j = 0; (p_parser = list[j]) != NULL; j++)
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2009-12-23 20:16:57 +01:00
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, GREEN" %-22s "WHITE"%s\n"GRAY,
|
|
|
|
p_parser->psz_object_name,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_parser->psz_longname ) );
|
2009-12-23 20:16:57 +01:00
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, " %-22s %s\n",
|
|
|
|
p_parser->psz_object_name,
|
2010-01-28 18:59:50 +01:00
|
|
|
module_gettext( p_parser, p_parser->psz_longname ) );
|
2009-12-23 17:47:18 +01:00
|
|
|
|
2009-12-23 20:16:57 +01:00
|
|
|
if( b_verbose )
|
|
|
|
{
|
2010-04-22 20:41:10 +02:00
|
|
|
char *const *pp_shortcuts = p_parser->pp_shortcuts;
|
2010-04-24 11:21:50 +02:00
|
|
|
for( unsigned i = 0; i < p_parser->i_shortcuts; i++ )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
2010-04-22 20:41:10 +02:00
|
|
|
if( strcmp( pp_shortcuts[i], p_parser->psz_object_name ) )
|
2008-05-31 21:30:46 +02:00
|
|
|
{
|
|
|
|
if( b_color )
|
2009-12-23 20:16:57 +01:00
|
|
|
utf8_fprintf( stdout, CYAN" s %s\n"GRAY,
|
2010-04-22 20:41:10 +02:00
|
|
|
pp_shortcuts[i] );
|
2008-05-31 21:30:46 +02:00
|
|
|
else
|
2009-12-23 20:16:57 +01:00
|
|
|
utf8_fprintf( stdout, " s %s\n",
|
2010-04-22 20:41:10 +02:00
|
|
|
pp_shortcuts[i] );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
2009-12-23 20:16:57 +01:00
|
|
|
}
|
|
|
|
if( p_parser->psz_capability )
|
|
|
|
{
|
|
|
|
if( b_color )
|
|
|
|
utf8_fprintf( stdout, MAGENTA" c %s (%d)\n"GRAY,
|
|
|
|
p_parser->psz_capability,
|
|
|
|
p_parser->i_score );
|
|
|
|
else
|
|
|
|
utf8_fprintf( stdout, " c %s (%d)\n",
|
|
|
|
p_parser->psz_capability,
|
|
|
|
p_parser->i_score );
|
2008-05-31 21:30:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2008-09-21 12:07:28 +02:00
|
|
|
module_list_free (list);
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
#ifdef WIN32 /* Pause the console because it's destroyed when we exit */
|
|
|
|
PauseConsole();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* Version: print complete program version
|
|
|
|
*****************************************************************************
|
|
|
|
* Print complete program version and build number.
|
|
|
|
*****************************************************************************/
|
|
|
|
static void Version( void )
|
|
|
|
{
|
|
|
|
#ifdef WIN32
|
|
|
|
ShowConsole( true );
|
|
|
|
#endif
|
|
|
|
|
2010-11-06 17:09:44 +01:00
|
|
|
utf8_fprintf( stdout, _("VLC version %s (%s)\n"), VERSION_MESSAGE,
|
2009-06-03 21:21:53 +02:00
|
|
|
psz_vlc_changeset );
|
2010-01-19 22:40:49 +01:00
|
|
|
utf8_fprintf( stdout, _("Compiled by %s on %s (%s)\n"),
|
|
|
|
VLC_CompileBy(), VLC_CompileHost(), __DATE__" "__TIME__ );
|
2008-05-31 21:30:46 +02:00
|
|
|
utf8_fprintf( stdout, _("Compiler: %s\n"), VLC_Compiler() );
|
2009-03-24 22:23:41 +01:00
|
|
|
utf8_fprintf( stdout, "%s", LICENSE_MSG );
|
2008-05-31 21:30:46 +02:00
|
|
|
|
|
|
|
#ifdef WIN32 /* Pause the console because it's destroyed when we exit */
|
|
|
|
PauseConsole();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* ShowConsole: On Win32, create an output console for debug messages
|
|
|
|
*****************************************************************************
|
|
|
|
* This function is useful only on Win32.
|
|
|
|
*****************************************************************************/
|
|
|
|
#ifdef WIN32 /* */
|
|
|
|
static void ShowConsole( bool b_dofile )
|
|
|
|
{
|
|
|
|
# ifndef UNDER_CE
|
|
|
|
FILE *f_help = NULL;
|
|
|
|
|
|
|
|
if( getenv( "PWD" ) && getenv( "PS1" ) ) return; /* cygwin shell */
|
|
|
|
|
|
|
|
AllocConsole();
|
|
|
|
/* Use the ANSI code page (e.g. Windows-1252) as expected by the LibVLC
|
|
|
|
* Unicode/locale subsystem. By default, we have the obsolecent OEM code
|
|
|
|
* page (e.g. CP437 or CP850). */
|
|
|
|
SetConsoleOutputCP (GetACP ());
|
|
|
|
SetConsoleTitle ("VLC media player version "PACKAGE_VERSION);
|
|
|
|
|
|
|
|
freopen( "CONOUT$", "w", stderr );
|
|
|
|
freopen( "CONIN$", "r", stdin );
|
|
|
|
|
|
|
|
if( b_dofile && (f_help = fopen( "vlc-help.txt", "wt" )) )
|
|
|
|
{
|
|
|
|
fclose( f_help );
|
|
|
|
freopen( "vlc-help.txt", "wt", stdout );
|
|
|
|
utf8_fprintf( stderr, _("\nDumped content to vlc-help.txt file.\n") );
|
|
|
|
}
|
|
|
|
else freopen( "CONOUT$", "w", stdout );
|
|
|
|
|
|
|
|
# endif
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* PauseConsole: On Win32, wait for a key press before closing the console
|
|
|
|
*****************************************************************************
|
|
|
|
* This function is useful only on Win32.
|
|
|
|
*****************************************************************************/
|
|
|
|
#ifdef WIN32 /* */
|
|
|
|
static void PauseConsole( void )
|
|
|
|
{
|
|
|
|
# ifndef UNDER_CE
|
|
|
|
|
|
|
|
if( getenv( "PWD" ) && getenv( "PS1" ) ) return; /* cygwin shell */
|
|
|
|
|
|
|
|
utf8_fprintf( stderr, _("\nPress the RETURN key to continue...\n") );
|
|
|
|
getchar();
|
|
|
|
fclose( stdout );
|
|
|
|
|
|
|
|
# endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
}
|
2008-05-31 21:30:46 +02:00
|
|
|
#endif
|
* WARNING: Libvlc API change
- VLC_Set VLC_Get were changed to VLC_VariableGet VLC_VariableSet
- VLC_ClearPlaylist was changed to VLC_PlaylistClear
- Added a lot of new calls:
VLC_PositionGet, VLC_PositionSet, VLC_TimeGet, VLC_TimeSet,
VLC_LengthGet, VLC_SpeedFaster, VLC_SpeedSlower, VLC_PlaylistIndex,
VLC_PlaylistNumberOfItems, VLC_PlaylistNext, VLC_PlaylistPrev,
VLC_VolumeGet, VLC_VolumeSet, VLC_VolumeMute.
- everything doxygenized.
- There are NO mozilla functions of these additions yet. (someone else please?)
2004-06-06 15:02:26 +02:00
|
|
|
|
2002-09-29 20:19:53 +02:00
|
|
|
/*****************************************************************************
|
2008-05-31 21:30:46 +02:00
|
|
|
* ConsoleWidth: Return the console width in characters
|
|
|
|
*****************************************************************************
|
|
|
|
* We use the stty shell command to get the console width; if this fails or
|
|
|
|
* if the width is less than 80, we default to 80.
|
2002-09-29 20:19:53 +02:00
|
|
|
*****************************************************************************/
|
2008-05-31 21:30:46 +02:00
|
|
|
static int ConsoleWidth( void )
|
2002-09-29 20:19:53 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
unsigned i_width = 80;
|
2002-09-29 20:19:53 +02:00
|
|
|
|
2008-05-31 21:30:46 +02:00
|
|
|
#ifndef WIN32
|
|
|
|
FILE *file = popen( "stty size 2>/dev/null", "r" );
|
|
|
|
if (file != NULL)
|
2002-09-29 20:19:53 +02:00
|
|
|
{
|
2008-05-31 21:30:46 +02:00
|
|
|
if (fscanf (file, "%*u %u", &i_width) <= 0)
|
|
|
|
i_width = 80;
|
|
|
|
pclose( file );
|
2002-09-29 20:19:53 +02:00
|
|
|
}
|
2008-09-30 13:28:03 +02:00
|
|
|
#elif !defined (UNDER_CE)
|
2008-05-31 21:30:46 +02:00
|
|
|
CONSOLE_SCREEN_BUFFER_INFO buf;
|
|
|
|
|
|
|
|
if (GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &buf))
|
|
|
|
i_width = buf.dwSize.X;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return i_width;
|
|
|
|
}
|