Commit 2e0eab4c authored by Christophe Massiot's avatar Christophe Massiot

* mad plug-in is now built-in to avoid PIC/non-PIC collision ;

* Updated documentation ;
* New --desync option, to delay the video (in case of lip desynchronization) ;
this is bad, but we have no other option for the moment ;
* Clicking in vout now pauses the stream, patch courtesy of Peter Surda.
parent 6d1e0c51
...@@ -4939,7 +4939,7 @@ fi ...@@ -4939,7 +4939,7 @@ fi
CFLAGS=$save_CFLAGS CFLAGS=$save_CFLAGS
LDFLAGS=$save_LDFLAGS LDFLAGS=$save_LDFLAGS
PLUGINS="${PLUGINS} mad_adec" BUILTINS="${BUILTINS} mad_adec"
fi fi
fi fi
......
...@@ -778,7 +778,7 @@ AC_ARG_WITH(libmad, ...@@ -778,7 +778,7 @@ AC_ARG_WITH(libmad,
]) ])
CFLAGS=$save_CFLAGS CFLAGS=$save_CFLAGS
LDFLAGS=$save_LDFLAGS LDFLAGS=$save_LDFLAGS
PLUGINS="${PLUGINS} mad_adec" BUILTINS="${BUILTINS} mad_adec"
fi ]) fi ])
dnl special case for BeOS dnl special case for BeOS
......
...@@ -40,7 +40,7 @@ must have been prepared beforehands. ...@@ -40,7 +40,7 @@ must have been prepared beforehands.
.B vcd:<device> .B vcd:<device>
VCD device (for instance dvd:/dev/cdrom). VCD device (for instance dvd:/dev/cdrom).
.TP .TP
.B udpstream:[<server>:[<server port>]][@[<bind address>][:<bind port>]] .B udpstream:[<server>[:<server port>]][@[<bind address>][:<bind port>]]
UDP stream, such as one sent by VideoLAN Server or VideoLAN miniserver. UDP stream, such as one sent by VideoLAN Server or VideoLAN miniserver.
Usually "udpstream:" is enough. Usually "udpstream:" is enough.
.TP .TP
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* Declaration and extern access to global program object. * Declaration and extern access to global program object.
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: main.h,v 1.23 2001/12/03 16:18:37 sam Exp $ * $Id: main.h,v 1.24 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* *
...@@ -49,6 +49,7 @@ typedef struct main_s ...@@ -49,6 +49,7 @@ typedef struct main_s
boolean_t b_audio; /* is audio output allowed ? */ boolean_t b_audio; /* is audio output allowed ? */
boolean_t b_video; /* is video output allowed ? */ boolean_t b_video; /* is video output allowed ? */
boolean_t b_ac3; boolean_t b_ac3;
int i_desync; /* relative desync of the audio ouput */
/* memcpy plugin used */ /* memcpy plugin used */
struct module_s * p_memcpy_module; struct module_s * p_memcpy_module;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_xvideo.c: Xvideo video output display method * vout_xvideo.c: Xvideo video output display method
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: vout_xvideo.c,v 1.34 2001/12/03 16:18:37 sam Exp $ * $Id: vout_xvideo.c,v 1.35 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Shane Harper <shanegh@optusnet.com.au> * Authors: Shane Harper <shanegh@optusnet.com.au>
* Vincent Seguin <seguin@via.ecp.fr> * Vincent Seguin <seguin@via.ecp.fr>
...@@ -531,8 +531,11 @@ static int vout_Manage( vout_thread_t *p_vout ) ...@@ -531,8 +531,11 @@ static int vout_Manage( vout_thread_t *p_vout )
switch( ((XButtonEvent *)&xevent)->button ) switch( ((XButtonEvent *)&xevent)->button )
{ {
case Button1: case Button1:
/* in this part we will eventually manage /* In this part we will eventually manage
* clicks for DVD navigation for instance */ * clicks for DVD navigation for instance. For the
* moment just pause the stream. */
input_SetStatus( p_main->p_intf->p_input,
INPUT_STATUS_PAUSE );
break; break;
} }
} }
......
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#include "audio_output.h" #include "audio_output.h"
#include "aout_common.h" #include "aout_common.h"
#include "main.h"
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
...@@ -90,7 +92,8 @@ void aout_S16StereoThread( aout_thread_t * p_aout ) ...@@ -90,7 +92,8 @@ void aout_S16StereoThread( aout_thread_t * p_aout )
/* sizeof(s16) << (p_aout->b_stereo) == 4 */ /* sizeof(s16) << (p_aout->b_stereo) == 4 */
p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 4)) * 1000000) p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 4)) * 1000000)
/ ((mtime_t)p_aout->l_rate)); / ((mtime_t)p_aout->l_rate))
+ p_main->i_desync;
p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer,
l_buffer_limit * sizeof(s16) ); l_buffer_limit * sizeof(s16) );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* aout_u8.c: 8 bit unsigned audio output functions * aout_u8.c: 8 bit unsigned audio output functions
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: aout_u8.c,v 1.7 2001/11/28 15:08:06 massiot Exp $ * $Id: aout_u8.c,v 1.8 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Michel Kaempf <maxx@via.ecp.fr> * Authors: Michel Kaempf <maxx@via.ecp.fr>
* *
...@@ -39,6 +39,8 @@ ...@@ -39,6 +39,8 @@
#include "audio_output.h" #include "audio_output.h"
#include "aout_common.h" #include "aout_common.h"
#include "main.h"
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
...@@ -84,7 +86,8 @@ void aout_U8MonoThread( aout_thread_t * p_aout ) ...@@ -84,7 +86,8 @@ void aout_U8MonoThread( aout_thread_t * p_aout )
l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit ); l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
/* sizeof(u8) << (p_aout->b_stereo) == 1 */ /* sizeof(u8) << (p_aout->b_stereo) == 1 */
p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 1)) * 1000000) p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 1)) * 1000000)
/ ((mtime_t)p_aout->l_rate)); / ((mtime_t)p_aout->l_rate))
+ p_main->i_desync;
p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) ); p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) );
if ( l_bytes > (l_buffer_limit * sizeof(u8) * 2) ) /* There are 2 channels (left & right) */ if ( l_bytes > (l_buffer_limit * sizeof(u8) * 2) ) /* There are 2 channels (left & right) */
...@@ -138,7 +141,8 @@ void aout_U8StereoThread( aout_thread_t * p_aout ) ...@@ -138,7 +141,8 @@ void aout_U8StereoThread( aout_thread_t * p_aout )
l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit ); l_bytes = p_aout->pf_getbufinfo( p_aout, l_buffer_limit );
/* sizeof(u8) << (p_aout->b_stereo) == 2 */ /* sizeof(u8) << (p_aout->b_stereo) == 2 */
p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 2)) * 1000000) p_aout->date = mdate() + ((((mtime_t)((l_bytes + 4 * p_aout->i_latency) / 2)) * 1000000)
/ ((mtime_t)p_aout->l_rate)); / ((mtime_t)p_aout->l_rate))
+ p_main->i_desync;
p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) ); p_aout->pf_play( p_aout, (byte_t *)p_aout->buffer, l_buffer_limit * sizeof(u8) );
if ( l_bytes > (l_buffer_limit * sizeof(u8)) ) if ( l_bytes > (l_buffer_limit * sizeof(u8)) )
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* audio_output.c : audio output thread * audio_output.c : audio output thread
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: audio_output.c,v 1.66 2001/11/28 15:08:06 massiot Exp $ * $Id: audio_output.c,v 1.67 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Michel Kaempf <maxx@via.ecp.fr> * Authors: Michel Kaempf <maxx@via.ecp.fr>
* *
...@@ -312,7 +312,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout ) ...@@ -312,7 +312,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
} }
/* Rough estimate of the playing date */ /* Rough estimate of the playing date */
p_aout->date = mdate(); p_aout->date = mdate() + p_main->i_desync;
/* Launch the thread */ /* Launch the thread */
if ( vlc_thread_create( &p_aout->thread_id, "audio output", if ( vlc_thread_create( &p_aout->thread_id, "audio output",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_clock.c: Clock/System date convertions, stream management * input_clock.c: Clock/System date convertions, stream management
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: input_clock.c,v 1.25 2001/12/05 03:31:04 jobi Exp $ * $Id: input_clock.c,v 1.26 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
#include "input_ext-dec.h" #include "input_ext-dec.h"
#include "input_ext-plugins.h" #include "input_ext-plugins.h"
#include "main.h"
/* /*
* DISCUSSION : SYNCHRONIZATION METHOD * DISCUSSION : SYNCHRONIZATION METHOD
* *
...@@ -312,7 +314,8 @@ mtime_t input_ClockGetTS( input_thread_t * p_input, ...@@ -312,7 +314,8 @@ mtime_t input_ClockGetTS( input_thread_t * p_input,
if( p_pgrm->i_synchro_state == SYNCHRO_OK ) if( p_pgrm->i_synchro_state == SYNCHRO_OK )
{ {
return( ClockToSysdate( p_input, p_pgrm, i_ts + p_pgrm->delta_cr ) return( ClockToSysdate( p_input, p_pgrm, i_ts + p_pgrm->delta_cr )
+ DEFAULT_PTS_DELAY ); + DEFAULT_PTS_DELAY
+ (p_main->i_desync > 0 ? p_main->i_desync : 0) );
} }
else else
{ {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* and spawn threads. * and spawn threads.
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: main.c,v 1.130 2001/12/05 10:30:25 massiot Exp $ * $Id: main.c,v 1.131 2001/12/06 10:53:42 massiot Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -112,6 +112,7 @@ ...@@ -112,6 +112,7 @@
#define OPT_MONO 152 #define OPT_MONO 152
#define OPT_SPDIF 153 #define OPT_SPDIF 153
#define OPT_VOLUME 154 #define OPT_VOLUME 154
#define OPT_DESYNC 155
#define OPT_NOVIDEO 160 #define OPT_NOVIDEO 160
#define OPT_DISPLAY 161 #define OPT_DISPLAY 161
...@@ -187,6 +188,7 @@ static const struct option longopts[] = ...@@ -187,6 +188,7 @@ static const struct option longopts[] =
{ "downmix", 1, 0, OPT_DOWNMIX }, { "downmix", 1, 0, OPT_DOWNMIX },
{ "imdct", 1, 0, OPT_IMDCT }, { "imdct", 1, 0, OPT_IMDCT },
{ "volume", 1, 0, OPT_VOLUME }, { "volume", 1, 0, OPT_VOLUME },
{ "desync", 1, 0, OPT_DESYNC },
/* Video options */ /* Video options */
{ "novideo", 0, 0, OPT_NOVIDEO }, { "novideo", 0, 0, OPT_NOVIDEO },
...@@ -596,6 +598,7 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -596,6 +598,7 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] )
p_main->i_warning_level = 0; p_main->i_warning_level = 0;
p_main->b_stats = 0; p_main->b_stats = 0;
p_main->i_desync = 0; /* No desynchronization by default */
p_main->p_channel = NULL; p_main->p_channel = NULL;
...@@ -732,6 +735,9 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -732,6 +735,9 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] )
case OPT_VOLUME: /* --volume */ case OPT_VOLUME: /* --volume */
main_PutIntVariable( AOUT_VOLUME_VAR, atoi(optarg) ); main_PutIntVariable( AOUT_VOLUME_VAR, atoi(optarg) );
break; break;
case OPT_DESYNC: /* --desync */
p_main->i_desync = atoi(optarg);
break;
/* Video options */ /* Video options */
case OPT_NOVIDEO: /* --novideo */ case OPT_NOVIDEO: /* --novideo */
...@@ -915,6 +921,7 @@ static void Usage( int i_fashion ) ...@@ -915,6 +921,7 @@ static void Usage( int i_fashion )
"\n --downmix <module> \tAC3 downmix method" "\n --downmix <module> \tAC3 downmix method"
"\n --imdct <module> \tAC3 IMDCT method" "\n --imdct <module> \tAC3 IMDCT method"
"\n --volume [0..1024] \tVLC output volume" "\n --volume [0..1024] \tVLC output volume"
"\n --desync <time in ms> \tCompensate desynchronization of the audio"
"\n" "\n"
"\n --novideo \tdisable video" "\n --novideo \tdisable video"
"\n -V, --vout <module> \tvideo output method" "\n -V, --vout <module> \tvideo output method"
...@@ -948,7 +955,16 @@ static void Usage( int i_fashion ) ...@@ -948,7 +955,16 @@ static void Usage( int i_fashion )
"\n" "\n"
"\n -h, --help \tprint help and exit" "\n -h, --help \tprint help and exit"
"\n -H, --longhelp \tprint long help and exit" "\n -H, --longhelp \tprint long help and exit"
"\n --version \toutput version information and exit" ); "\n --version \toutput version information and exit"
"\n\nPlaylist items :"
"\n *.mpg, *.vob \tPlain MPEG-1/2 files"
"\n dvd:<device>[@<raw device>] \tDVD device"
"\n vcd:<device> \tVCD device"
"\n udpstream:[<server>[:<server port>]][@[<bind address>][:<bind port>]]"
"\n \tUDP stream sent by VLS"
"\n vlc:loop \tLoop execution of the playlist"
"\n vlc:pause \tPause execution of playlist items"
"\n vlc:quit \tQuit VLC");
if( i_fashion == SHORT_HELP ) if( i_fashion == SHORT_HELP )
return; return;
...@@ -970,7 +986,7 @@ static void Usage( int i_fashion ) ...@@ -970,7 +986,7 @@ static void Usage( int i_fashion )
"\n " DOWNMIX_METHOD_VAR "=<method name> \tAC3 downmix method" "\n " DOWNMIX_METHOD_VAR "=<method name> \tAC3 downmix method"
"\n " IMDCT_METHOD_VAR "=<method name> \tAC3 IMDCT method" "\n " IMDCT_METHOD_VAR "=<method name> \tAC3 IMDCT method"
"\n " AOUT_VOLUME_VAR "=[0..1024] \tVLC output volume" "\n " AOUT_VOLUME_VAR "=[0..1024] \tVLC output volume"
"\n " AOUT_RATE_VAR "=<rate> \toutput rate" ); "\n " AOUT_RATE_VAR "=<rate> \toutput rate" );
/* Video parameters */ /* Video parameters */
intf_MsgImm( "\nVideo parameters:" intf_MsgImm( "\nVideo parameters:"
...@@ -1289,7 +1305,7 @@ static int CPUCapabilities( void ) ...@@ -1289,7 +1305,7 @@ static int CPUCapabilities( void )
if( setjmp( env ) == 0 ) if( setjmp( env ) == 0 )
{ {
asm volatile ("mtspr 256, %0\n\t" asm volatile ("mtspr 256, %0\n\t"
"vand %v0, %v0, %v0" "vand %%v0, %%v0, %%v0"
: :
: "r" (-1)); : "r" (-1));
} }
......
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