Commit 34f25416 authored by Laurent Aimar's avatar Laurent Aimar

Do not decode subtitles too much in advanced.

It avoids loosing subtitles with the messages
"main subpicture error: subpicture heap full".
parent 87129938
...@@ -131,6 +131,14 @@ ...@@ -131,6 +131,14 @@
/* Max acceptable resampling (in %) */ /* Max acceptable resampling (in %) */
#define AOUT_MAX_RESAMPLING 10 #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 * Video configuration
*****************************************************************************/ *****************************************************************************/
......
...@@ -1564,6 +1564,12 @@ static void DecoderPlaySpu( decoder_t *p_dec, subpicture_t *p_subpic, ...@@ -1564,6 +1564,12 @@ static void DecoderPlaySpu( decoder_t *p_dec, subpicture_t *p_subpic,
vlc_mutex_unlock( &p_owner->lock ); 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 ) if( !b_reject )
spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic ); spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic );
else else
......
...@@ -45,8 +45,9 @@ ...@@ -45,8 +45,9 @@
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
/* Number of simultaneous subpictures */ /* 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 typedef struct
......
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