]> git.sesse.net Git - vlc/commitdiff
* Added sanity checks for PTS in the future.
authorChristophe Massiot <massiot@videolan.org>
Wed, 26 Feb 2003 18:15:33 +0000 (18:15 +0000)
committerChristophe Massiot <massiot@videolan.org>
Wed, 26 Feb 2003 18:15:33 +0000 (18:15 +0000)
include/vlc_config.h
src/audio_output/dec.c
src/video_output/video_output.c

index 9a4ea7e3b829117f1cdc354afd9713d47b8c8788..5e2395ce90ee992d444babe4b1023d992e410956 100644 (file)
@@ -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
 /* 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)
 
 /* 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)
index 9eb8ba362b585c5ff07bb145a6546e5a3d9ad6e8..b02ffb44fade25235ba746cdda52c293d5d190bf 100644 (file)
@@ -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 <massiot@via.ecp.fr>
  *
@@ -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;
index 0f72dffc3c127e8aa9a2311c334ba7cc5e2c52b6..00238b59f243e5e307ec20fc102957e2f09b3bf8 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *
@@ -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