Commit fb3612d9 authored by Christophe Massiot's avatar Christophe Massiot

* Added sanity checks for PTS in the future.

parent 9fba7a4b
...@@ -144,6 +144,10 @@ ...@@ -144,6 +144,10 @@
/* Max number of inputs */ /* Max number of inputs */
#define AOUT_MAX_INPUTS 5 #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 /* Buffers which arrive in advance of more than AOUT_MAX_PREPARE_TIME
* will cause the calling thread to sleep */ * will cause the calling thread to sleep */
#define AOUT_MAX_PREPARE_TIME (mtime_t)(.5*CLOCK_FREQ) #define AOUT_MAX_PREPARE_TIME (mtime_t)(.5*CLOCK_FREQ)
...@@ -222,7 +226,7 @@ ...@@ -222,7 +226,7 @@
/* Pictures which are VOUT_BOGUS_DELAY or more in advance probably have /* Pictures which are VOUT_BOGUS_DELAY or more in advance probably have
* a bogus PTS and won't be displayed */ * 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 */ /* Delay (in microseconds) before an idle screen is displayed */
#define VOUT_IDLE_DELAY (5*CLOCK_FREQ) #define VOUT_IDLE_DELAY (5*CLOCK_FREQ)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* dec.c : audio output API towards decoders * dec.c : audio output API towards decoders
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * 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 <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -285,6 +285,14 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input, ...@@ -285,6 +285,14 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input,
return -1; 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 p_buffer->end_date = p_buffer->start_date
+ (mtime_t)(p_buffer->i_nb_samples * 1000000) + (mtime_t)(p_buffer->i_nb_samples * 1000000)
/ p_input->input.i_rate; / p_input->input.i_rate;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* thread, and destroy a previously oppened video output thread. * thread, and destroy a previously oppened video output thread.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000-2001 VideoLAN * 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 <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* *
...@@ -698,8 +698,7 @@ static void RunThread( vout_thread_t *p_vout) ...@@ -698,8 +698,7 @@ static void RunThread( vout_thread_t *p_vout)
continue; continue;
} }
#if 0
/* Removed because it causes problems for some people --Meuuh */
if( display_date > current_date + VOUT_BOGUS_DELAY ) if( display_date > current_date + VOUT_BOGUS_DELAY )
{ {
/* Picture is waaay too early: it will be destroyed */ /* Picture is waaay too early: it will be destroyed */
...@@ -716,13 +715,13 @@ static void RunThread( vout_thread_t *p_vout) ...@@ -716,13 +715,13 @@ static void RunThread( vout_thread_t *p_vout)
p_picture->i_status = DESTROYED_PICTURE; p_picture->i_status = DESTROYED_PICTURE;
p_vout->i_heap_size--; p_vout->i_heap_size--;
} }
intf_WarnMsg( 1, "vout warning: early picture skipped " msg_Warn( p_vout, "vout warning: early picture skipped "
"("I64Fd")", display_date - current_date ); "("I64Fd")", display_date - current_date );
vlc_mutex_unlock( &p_vout->picture_lock ); vlc_mutex_unlock( &p_vout->picture_lock );
continue; continue;
} }
#endif
if( display_date > current_date + VOUT_DISPLAY_DELAY ) if( display_date > current_date + VOUT_DISPLAY_DELAY )
{ {
/* A picture is ready to be rendered, but its rendering date /* A picture is ready to be rendered, but its rendering date
......
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