[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