[vlc-devel] commit: Do not decode subtitles too much in advanced. (Laurent Aimar )

git version control git at videolan.org
Mon Jul 27 22:36:37 CEST 2009


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Mon Jul 27 22:07:53 2009 +0200| [34f2541694d7ffeb622012b5719e9ba621861510] | committer: Laurent Aimar 

Do not decode subtitles too much in advanced.

It avoids loosing subtitles with the messages
"main subpicture error: subpicture heap full".

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=34f2541694d7ffeb622012b5719e9ba621861510
---

 include/vlc_config.h                |    8 ++++++++
 src/input/decoder.c                 |    6 ++++++
 src/video_output/vout_subpictures.c |    3 ++-
 3 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/include/vlc_config.h b/include/vlc_config.h
index 3998482..ae6e7a1 100644
--- a/include/vlc_config.h
+++ b/include/vlc_config.h
@@ -132,6 +132,14 @@
 #define AOUT_MAX_RESAMPLING             10
 
 /*****************************************************************************
+ * SPU configuration
+ *****************************************************************************/
+
+/* Buffer must avoid arriving more than SPU_MAX_PREPARE_TIME in advanced to
+ * the SPU */
+#define SPU_MAX_PREPARE_TIME ((mtime_t)(0.5*CLOCK_FREQ))
+
+/*****************************************************************************
  * Video configuration
  *****************************************************************************/
 
diff --git a/src/input/decoder.c b/src/input/decoder.c
index 7069388..1209b53 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -1564,6 +1564,12 @@ static void DecoderPlaySpu( decoder_t *p_dec, subpicture_t *p_subpic,
 
         vlc_mutex_unlock( &p_owner->lock );
 
+        if( p_subpic->i_start <= VLC_TS_INVALID )
+            b_reject = true;
+
+        DecoderWaitDate( p_dec, &b_reject,
+                         p_subpic->i_start - SPU_MAX_PREPARE_TIME );
+
         if( !b_reject )
             spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic );
         else
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 5ee652f..d844ef1 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -45,8 +45,9 @@
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
+
 /* Number of simultaneous subpictures */
-#define VOUT_MAX_SUBPICTURES (VOUT_MAX_PICTURES)
+#define VOUT_MAX_SUBPICTURES (__MAX(VOUT_MAX_PICTURES, SPU_MAX_PREPARE_TIME/5000))
 
 /* */
 typedef struct




More information about the vlc-devel mailing list