From fb3612d9ecd723953ee70609d2bfb230abc8c787 Mon Sep 17 00:00:00 2001 From: Christophe Massiot Date: Wed, 26 Feb 2003 18:15:33 +0000 Subject: [PATCH] * Added sanity checks for PTS in the future. --- include/vlc_config.h | 8 ++++++-- src/audio_output/dec.c | 10 +++++++++- src/video_output/video_output.c | 13 ++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/include/vlc_config.h b/include/vlc_config.h index 9a4ea7e3b8..5e2395ce90 100644 --- a/include/vlc_config.h +++ b/include/vlc_config.h @@ -51,7 +51,7 @@ #ifdef SYS_BEOS # define CONFIG_DIR "config/settings/VideoLAN Client" #elif SYS_DARWIN -# define CONFIG_DIR "Library/Preferences/VLC" +# define CONFIG_DIR "Library/Preferences/VLC" #elif defined( WIN32 ) || defined( UNDER_CE ) # define CONFIG_DIR "vlc" #else @@ -144,6 +144,10 @@ /* Max number of inputs */ #define AOUT_MAX_INPUTS 5 +/* Buffers which arrive in advance of more than AOUT_MAX_ADVANCE_TIME + * will be considered as bogus and be trashed */ +#define AOUT_MAX_ADVANCE_TIME (mtime_t)(DEFAULT_PTS_DELAY * 3) + /* Buffers which arrive in advance of more than AOUT_MAX_PREPARE_TIME * will cause the calling thread to sleep */ #define AOUT_MAX_PREPARE_TIME (mtime_t)(.5*CLOCK_FREQ) @@ -222,7 +226,7 @@ /* Pictures which are VOUT_BOGUS_DELAY or more in advance probably have * a bogus PTS and won't be displayed */ -#define VOUT_BOGUS_DELAY ((int)(0.800*CLOCK_FREQ)) +#define VOUT_BOGUS_DELAY ((mtime_t)(DEFAULT_PTS_DELAY * 3)) /* Delay (in microseconds) before an idle screen is displayed */ #define VOUT_IDLE_DELAY (5*CLOCK_FREQ) diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c index 9eb8ba362b..b02ffb44fa 100644 --- a/src/audio_output/dec.c +++ b/src/audio_output/dec.c @@ -2,7 +2,7 @@ * dec.c : audio output API towards decoders ***************************************************************************** * Copyright (C) 2002 VideoLAN - * $Id: dec.c,v 1.7 2003/02/23 01:25:26 massiot Exp $ + * $Id: dec.c,v 1.8 2003/02/26 18:15:33 massiot Exp $ * * Authors: Christophe Massiot * @@ -285,6 +285,14 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input, return -1; } + if ( p_buffer->start_date > mdate() + AOUT_MAX_ADVANCE_TIME ) + { + msg_Warn( p_aout, "received buffer in the future ("I64Fd")", + p_buffer->start_date - mdate()); + aout_BufferFree( p_buffer ); + return -1; + } + p_buffer->end_date = p_buffer->start_date + (mtime_t)(p_buffer->i_nb_samples * 1000000) / p_input->input.i_rate; diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 0f72dffc3c..00238b59f2 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -5,7 +5,7 @@ * thread, and destroy a previously oppened video output thread. ***************************************************************************** * Copyright (C) 2000-2001 VideoLAN - * $Id: video_output.c,v 1.212 2003/02/09 23:42:06 sigmunau Exp $ + * $Id: video_output.c,v 1.213 2003/02/26 18:15:33 massiot Exp $ * * Authors: Vincent Seguin * @@ -651,7 +651,7 @@ static void RunThread( vout_thread_t *p_vout) } } } - + /* If we found better than the last picture, destroy it */ if( p_last_picture && p_picture != p_last_picture ) { @@ -698,8 +698,7 @@ static void RunThread( vout_thread_t *p_vout) continue; } -#if 0 - /* Removed because it causes problems for some people --Meuuh */ + if( display_date > current_date + VOUT_BOGUS_DELAY ) { /* Picture is waaay too early: it will be destroyed */ @@ -716,13 +715,13 @@ static void RunThread( vout_thread_t *p_vout) p_picture->i_status = DESTROYED_PICTURE; p_vout->i_heap_size--; } - intf_WarnMsg( 1, "vout warning: early picture skipped " - "("I64Fd")", display_date - current_date ); + msg_Warn( p_vout, "vout warning: early picture skipped " + "("I64Fd")", display_date - current_date ); vlc_mutex_unlock( &p_vout->picture_lock ); continue; } -#endif + if( display_date > current_date + VOUT_DISPLAY_DELAY ) { /* A picture is ready to be rendered, but its rendering date -- 2.39.5