Commit acbd88f2 authored by Sam Hocevar's avatar Sam Hocevar

. input fichier en ligne de commande (le reste a du p�ter, c'est pas

   possible autrement)
parent fe175c11
...@@ -20,3 +20,5 @@ ...@@ -20,3 +20,5 @@
Renaud Dartus <reno@via.ecp.fr> Renaud Dartus <reno@via.ecp.fr>
Henri Fallon <henri@via.ecp.fr> Henri Fallon <henri@via.ecp.fr>
Contributors include Aaron Holtzman for his ac3dec decoder, and the
LiViD team for a few lines of code we borrowed here and there.
...@@ -281,14 +281,15 @@ clean: ...@@ -281,14 +281,15 @@ clean:
rm -f $(C_OBJ) $(CPP_OBJ) $(ASM_OBJ) $(PLUGIN_OBJ) rm -f $(C_OBJ) $(CPP_OBJ) $(ASM_OBJ) $(PLUGIN_OBJ)
distclean: clean distclean: clean
rm -f **/*.o **/*.so **/*~ *.log rm -f */*/*.o plugins/*/*.so **/*~ *.log
rm -f Makefile include/defs.h include/config.h rm -f Makefile include/defs.h include/config.h
rm -f config.status config.cache config.log rm -f config.status config.cache config.log
rm -f vlc gmon.out core rm -f vlc gvlc gmon.out core
rm -rf .dep rm -rf .dep
install: install:
$(INSTALL) vlc $(prefix)/bin $(INSTALL) vlc $(prefix)/bin
$(INSTALL) gvlc $(prefix)/bin
mkdir -p $(prefix)/lib/videolan/vlc mkdir -p $(prefix)/lib/videolan/vlc
$(INSTALL) $(PLUGIN_OBJ) $(prefix)/lib/videolan/vlc $(INSTALL) $(PLUGIN_OBJ) $(prefix)/lib/videolan/vlc
$(INSTALL) share/*.psf $(prefix)/share/videolan/vlc $(INSTALL) share/*.psf $(prefix)/share/videolan/vlc
......
...@@ -19,8 +19,9 @@ ...@@ -19,8 +19,9 @@
vlc \- The VideoLAN Client vlc \- The VideoLAN Client
.SH SYNOPSIS .SH SYNOPSIS
.B vlc .B vlc
.RI [ options ] .RI [ OPTIONS ]
.RI [ parameters ] .RI [ PARAMETERS ]
.RI [ FILE ]...
.SH DESCRIPTION .SH DESCRIPTION
This manual page documents briefly the This manual page documents briefly the
.B vlc .B vlc
...@@ -58,6 +59,19 @@ Grayscale output. ...@@ -58,6 +59,19 @@ Grayscale output.
.B \-\-color .B \-\-color
Color output. Color output.
.TP .TP
.B \-a, \-\-dvdaudio [ ac3 | lpcm | mpeg | off ]
Choose the audio channel type. Most DVDs have AC3 audio channels, but
you can also have Linear PCM or MPEG layer 2 sound. Also, one might decide
not to activate the audio channel.
.TP
.B \-c, \-\-dvdchannel [ 0\-15 ]
Select the audio channel. Most DVDs only have one or two audio channels,
but some of them have a great number of available languages. Note that the
audio channel will also depend on the channel type.
.TP
.B \-s, \-\-dvdsubtitle [ 0\-31 ]
Select the subtitle channel, if there is one in the stream.
.TP
.B \-\-novlans .B \-\-novlans
Disable VLANs support. Disable VLANs support.
.TP .TP
...@@ -94,6 +108,11 @@ also accepts a lot of parameters to customize its behaviour. ...@@ -94,6 +108,11 @@ also accepts a lot of parameters to customize its behaviour.
vlc_fb_dev=<filename> framebuffer device path vlc_fb_dev=<filename> framebuffer device path
vlc_grayscale={1|0} grayscale or color output vlc_grayscale={1|0} grayscale or color output
.TP .TP
.B DVD parameters:
vlc_dvd_audio={ac3|lpcm|mpeg|off} audio type
vlc_dvd_channel=[0-15] audio channel
vlc_dvd_subtitle=[0-31] subtitle channel
.TP
.B Input parameters: .B Input parameters:
vlc_server=<hostname> video server vlc_server=<hostname> video server
vlc_server_port=<port> video server port vlc_server_port=<port> video server port
......
...@@ -227,6 +227,10 @@ ...@@ -227,6 +227,10 @@
* mark it to be presented */ * mark it to be presented */
#define INPUT_PTS_DELAY (2*CLOCK_FREQ) #define INPUT_PTS_DELAY (2*CLOCK_FREQ)
#define INPUT_DVD_AUDIO_VAR "vlc_dvd_audio"
#define INPUT_DVD_CHANNEL_VAR "vlc_dvd_channel"
#define INPUT_DVD_SUBTITLE_VAR "vlc_dvd_subtitle"
/***************************************************************************** /*****************************************************************************
* Audio configuration * Audio configuration
*****************************************************************************/ *****************************************************************************/
......
...@@ -328,8 +328,8 @@ typedef struct input_thread_s ...@@ -328,8 +328,8 @@ typedef struct input_thread_s
/* Input method description */ /* Input method description */
int i_method; /* input method */ int i_method; /* input method */
int i_handle; /* file/socket descriptor */ int i_handle; /* file/socket descriptor */
char * psz_source; /* source */ char * p_source; /* source */
int i_port; /* port number */ int i_port; /* port number */
int i_vlan; /* id for vlan method */ int i_vlan; /* id for vlan method */
input_open_t * p_Open; /* opener of the method */ input_open_t * p_Open; /* opener of the method */
input_read_t * p_Read; /* reading function */ input_read_t * p_Read; /* reading function */
...@@ -371,7 +371,7 @@ typedef struct input_thread_s ...@@ -371,7 +371,7 @@ typedef struct input_thread_s
/***************************************************************************** /*****************************************************************************
* Prototypes * Prototypes
*****************************************************************************/ *****************************************************************************/
input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port, input_thread_t *input_CreateThread ( int i_method, void *p_source, int i_port,
int i_vlan, p_vout_thread_t p_vout, int i_vlan, p_vout_thread_t p_vout,
p_aout_thread_t p_aout, int *pi_status ); p_aout_thread_t p_aout, int *pi_status );
void input_DestroyThread ( input_thread_t *p_input, int *pi_status ); void input_DestroyThread ( input_thread_t *p_input, int *pi_status );
......
...@@ -64,6 +64,10 @@ typedef struct intf_thread_s ...@@ -64,6 +64,10 @@ typedef struct intf_thread_s
/* XXX: Channels array - new API */ /* XXX: Channels array - new API */
//p_intf_channel_t * p_channel[INTF_MAX_CHANNELS];/* channel descriptions */ //p_intf_channel_t * p_channel[INTF_MAX_CHANNELS];/* channel descriptions */
/* file list - quick hack */
char **p_playlist;
int i_list_index;
/* Channels array - NULL if not used */ /* Channels array - NULL if not used */
p_intf_channel_t p_channel; /* description of channels */ p_intf_channel_t p_channel; /* description of channels */
......
...@@ -108,7 +108,7 @@ static __inline__ void input_DemuxPSI( input_thread_t *p_input, ...@@ -108,7 +108,7 @@ static __inline__ void input_DemuxPSI( input_thread_t *p_input,
* If pi_status is NULL, then the function will block until the thread is ready. * If pi_status is NULL, then the function will block until the thread is ready.
* If not, it will be updated using one of the THREAD_* constants. * If not, it will be updated using one of the THREAD_* constants.
*****************************************************************************/ *****************************************************************************/
input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port, int i_vlan, input_thread_t *input_CreateThread ( int i_method, void *p_source, int i_port, int i_vlan,
p_vout_thread_t p_vout, p_aout_thread_t p_aout, int *pi_status ) p_vout_thread_t p_vout, p_aout_thread_t p_aout, int *pi_status )
{ {
input_thread_t * p_input; /* thread descriptor */ input_thread_t * p_input; /* thread descriptor */
...@@ -132,7 +132,7 @@ input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port, ...@@ -132,7 +132,7 @@ input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port,
/* Initialize input method description */ /* Initialize input method description */
p_input->i_method = i_method; p_input->i_method = i_method;
p_input->psz_source = psz_source; p_input->p_source = p_source;
p_input->i_port = i_port; p_input->i_port = i_port;
p_input->i_vlan = i_vlan; p_input->i_vlan = i_vlan;
switch( i_method ) switch( i_method )
...@@ -208,7 +208,7 @@ input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port, ...@@ -208,7 +208,7 @@ input_thread_t *input_CreateThread ( int i_method, char *psz_source, int i_port,
} }
intf_DbgMsg("configuration: method=%d, source=%s, port=%d, vlan=%d\n", intf_DbgMsg("configuration: method=%d, source=%s, port=%d, vlan=%d\n",
i_method, psz_source, i_port, i_vlan ); i_method, p_source, i_port, i_vlan );
/* Let the appropriate method open the socket. */ /* Let the appropriate method open the socket. */
if( p_input->p_Open( p_input ) ) if( p_input->p_Open( p_input ) )
......
This diff is collapsed.
...@@ -186,12 +186,12 @@ int input_NetworkOpen( input_thread_t *p_input ) ...@@ -186,12 +186,12 @@ int input_NetworkOpen( input_thread_t *p_input )
*/ */
/* Use default host if not specified */ /* Use default host if not specified */
if( p_input->psz_source == NULL ) if( p_input->p_source == NULL )
{ {
p_input->psz_source = main_GetPszVariable( INPUT_SERVER_VAR, INPUT_SERVER_DEFAULT ); p_input->p_source = main_GetPszVariable( INPUT_SERVER_VAR, INPUT_SERVER_DEFAULT );
} }
if( BuildInetAddr( &sa_in, p_input->psz_source, htons(0) ) == (-1) ) if( BuildInetAddr( &sa_in, p_input->p_source, htons(0) ) == (-1) )
{ {
close( p_input->i_handle ); close( p_input->i_handle );
return( -1 ); return( -1 );
......
...@@ -157,9 +157,13 @@ intf_thread_t* intf_Create( void ) ...@@ -157,9 +157,13 @@ intf_thread_t* intf_Create( void )
*****************************************************************************/ *****************************************************************************/
void intf_Run( intf_thread_t *p_intf ) void intf_Run( intf_thread_t *p_intf )
{ {
if( p_intf->p_playlist )
{
p_intf->p_input = input_CreateThread( INPUT_METHOD_TS_FILE, (void *)p_intf->p_playlist, p_intf->i_list_index, 0, p_main->p_intf->p_vout, p_main->p_aout, NULL );
}
/* Execute the initialization script - if a positive number is returned, /* Execute the initialization script - if a positive number is returned,
* the script could be executed but failed */ * the script could be executed but failed */
if( intf_ExecScript( main_GetPszVariable( INTF_INIT_SCRIPT_VAR, INTF_INIT_SCRIPT_DEFAULT ) ) > 0 ) else if( intf_ExecScript( main_GetPszVariable( INTF_INIT_SCRIPT_VAR, INTF_INIT_SCRIPT_DEFAULT ) ) > 0 )
{ {
intf_ErrMsg("warning: error(s) during startup script\n"); intf_ErrMsg("warning: error(s) during startup script\n");
} }
......
...@@ -459,10 +459,12 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv ) ...@@ -459,10 +459,12 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv )
{ {
int i_arg; int i_arg;
int i_method = 0; /* method parameter */ int i_method = 0; /* method parameter */
char * psz_source = NULL; /* source parameter */ char * p_source = NULL; /* source parameter */
int i_port = 0; /* port parameter */ int i_port = 0; /* port parameter */
int i_vlan = 0; /* vlan parameter */ int i_vlan = 0; /* vlan parameter */
fprintf( stderr, "spawn input\n" );
/* Parse parameters - see command list above */ /* Parse parameters - see command list above */
for ( i_arg = 1; i_arg < i_argc; i_arg++ ) for ( i_arg = 1; i_arg < i_argc; i_arg++ )
{ {
...@@ -474,7 +476,7 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv ) ...@@ -474,7 +476,7 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv )
case 1: /* filename, hostname, ip */ case 1: /* filename, hostname, ip */
case 2: case 2:
case 3: case 3:
psz_source = p_argv[i_arg].psz_str; p_source = p_argv[i_arg].psz_str;
break; break;
case 4: /* port */ case 4: /* port */
i_port = p_argv[i_arg].i_num; i_port = p_argv[i_arg].i_num;
...@@ -491,7 +493,7 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv ) ...@@ -491,7 +493,7 @@ static int SpawnInput( int i_argc, intf_arg_t *p_argv )
input_DestroyThread( p_main->p_intf->p_input, NULL ); input_DestroyThread( p_main->p_intf->p_input, NULL );
} }
p_main->p_intf->p_input = input_CreateThread( i_method, psz_source, i_port, i_vlan, p_main->p_intf->p_input = input_CreateThread( i_method, p_source, i_port, i_vlan,
p_main->p_intf->p_vout, p_main->p_aout, p_main->p_intf->p_vout, p_main->p_aout,
NULL ); NULL );
return( INTF_NO_ERROR ); return( INTF_NO_ERROR );
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "mtime.h" #include "mtime.h"
#include "plugins.h" #include "plugins.h"
#include "input_vlan.h" #include "input_vlan.h"
#include "input_file.h"
#include "intf_msg.h" #include "intf_msg.h"
#include "interface.h" #include "interface.h"
...@@ -106,6 +107,11 @@ static const struct option longopts[] = ...@@ -106,6 +107,11 @@ static const struct option longopts[] =
{ "grayscale", 0, 0, 'g' }, { "grayscale", 0, 0, 'g' },
{ "color", 0, 0, OPT_COLOR }, { "color", 0, 0, OPT_COLOR },
/* DVD options */
{ "dvdaudio", 1, 0, 'a' },
{ "dvdchannel", 1, 0, 'c' },
{ "dvdsubtitle", 1, 0, 's' },
/* Input options */ /* Input options */
{ "novlans", 0, 0, OPT_NOVLANS }, { "novlans", 0, 0, OPT_NOVLANS },
{ "server", 1, 0, OPT_SERVER }, { "server", 1, 0, OPT_SERVER },
...@@ -115,7 +121,7 @@ static const struct option longopts[] = ...@@ -115,7 +121,7 @@ static const struct option longopts[] =
}; };
/* Short options */ /* Short options */
static const char *psz_shortopts = "hHvg"; static const char *psz_shortopts = "hHvga:s:c:";
/***************************************************************************** /*****************************************************************************
* Global variable program_data - this is the one and only, see main.h * Global variable program_data - this is the one and only, see main.h
...@@ -149,6 +155,9 @@ static int TestMMX ( void ); ...@@ -149,6 +155,9 @@ static int TestMMX ( void );
int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
{ {
main_t main_data; /* root of all data - see main.h */ main_t main_data; /* root of all data - see main.h */
char **p_playlist;
int i_list_index;
p_main = &main_data; /* set up the global variable */ p_main = &main_data; /* set up the global variable */
/* /*
...@@ -180,6 +189,29 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -180,6 +189,29 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
intf_MsgDestroy(); intf_MsgDestroy();
return( errno ); return( errno );
} }
/* get command line files */
i_list_index = 0;
if( optind < i_argc )
{
int i_index = 0;
p_playlist = malloc( (i_list_index = i_argc - optind)
* sizeof(int) );
while( i_argc - i_index > optind )
{
p_playlist[ i_index ] = ppsz_argv[ i_argc - i_index - 1];
i_index++;
}
}
else
{
p_playlist = malloc( sizeof(int) );
p_playlist[ 0 ] = "-";
i_list_index = 1;
}
intf_MsgImm( COPYRIGHT_MESSAGE "\n" ); /* print welcome message */ intf_MsgImm( COPYRIGHT_MESSAGE "\n" ); /* print welcome message */
/* /*
...@@ -212,7 +244,11 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -212,7 +244,11 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
main_data.p_intf = intf_Create(); main_data.p_intf = intf_Create();
if( main_data.p_intf != NULL ) if( main_data.p_intf != NULL )
{ {
main_data.p_intf->p_playlist = p_playlist;
main_data.p_intf->i_list_index = i_list_index;
InitSignalHandler(); /* prepare signals for interception */ InitSignalHandler(); /* prepare signals for interception */
intf_Run( main_data.p_intf ); intf_Run( main_data.p_intf );
intf_Destroy( main_data.p_intf ); intf_Destroy( main_data.p_intf );
} }
...@@ -426,6 +462,24 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -426,6 +462,24 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
main_PutIntVariable( VOUT_GRAYSCALE_VAR, 0 ); main_PutIntVariable( VOUT_GRAYSCALE_VAR, 0 );
break; break;
/* DVD options */
case 'a':
if ( ! strcmp(optarg, "mpeg") )
main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_MPEG );
else if ( ! strcmp(optarg, "lpcm") )
main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_LPCM );
else if ( ! strcmp(optarg, "off") )
main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_NOAUDIO );
else
main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_AC3 );
break;
case 'c':
main_PutIntVariable( INPUT_DVD_CHANNEL_VAR, atoi(optarg) );
break;
case 's':
main_PutIntVariable( INPUT_DVD_SUBTITLE_VAR, atoi(optarg) );
break;
/* Input options */ /* Input options */
case OPT_NOVLANS: /* --novlans */ case OPT_NOVLANS: /* --novlans */
p_main->b_vlans = 0; p_main->b_vlans = 0;
...@@ -487,6 +541,10 @@ static void Usage( int i_fashion ) ...@@ -487,6 +541,10 @@ static void Usage( int i_fashion )
" -g, --grayscale \tgrayscale output\n" " -g, --grayscale \tgrayscale output\n"
" --color \tcolor output\n" " --color \tcolor output\n"
"\n" "\n"
" -a, --dvdaudio \tchoose DVD audio type\n"
" -c, --dvdchannel \tchoose DVD audio channel\n"
" -s, --dvdsubtitle \tchoose DVD subtitle channel\n"
"\n"
" --novlans \tdisable vlans\n" " --novlans \tdisable vlans\n"
" --server <host> \tvideo server address\n" " --server <host> \tvideo server address\n"
" --port <port> \tvideo server port\n" " --port <port> \tvideo server port\n"
...@@ -522,6 +580,13 @@ static void Usage( int i_fashion ) ...@@ -522,6 +580,13 @@ static void Usage( int i_fashion )
" " VOUT_FB_DEV_VAR "=<filename> \tframebuffer device path\n" " " VOUT_FB_DEV_VAR "=<filename> \tframebuffer device path\n"
" " VOUT_GRAYSCALE_VAR "={1|0} \tgrayscale or color output\n" ); " " VOUT_GRAYSCALE_VAR "={1|0} \tgrayscale or color output\n" );
/* DVD parameters */
intf_Msg( "\n"
"DVD parameters:\n"
" " INPUT_DVD_AUDIO_VAR "={ac3|lpcm|mpeg|off} \taudio type\n"
" " INPUT_DVD_CHANNEL_VAR "=[0-15] \taudio channel\n"
" " INPUT_DVD_SUBTITLE_VAR "=[0-31] \tsubtitle channel\n" );
/* Input parameters */ /* Input parameters */
intf_Msg( "\n" intf_Msg( "\n"
"Input parameters:\n" "Input parameters:\n"
...@@ -544,7 +609,7 @@ static void Version( void ) ...@@ -544,7 +609,7 @@ static void Version( void )
"You may redistribute it under the terms of the GNU General Public License;\n" "You may redistribute it under the terms of the GNU General Public License;\n"
"see the file named COPYING for details.\n" "see the file named COPYING for details.\n"
"Written by the VideoLAN team at Ecole Centrale, Paris.\n" ); "Written by the VideoLAN team at Ecole Centrale, Paris.\n" );
} }
/***************************************************************************** /*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment