]> git.sesse.net Git - vlc/commitdiff
Fixed subtitle flush to not flush on pause.
authorLaurent Aimar <fenrir@videolan.org>
Thu, 18 Sep 2008 19:24:14 +0000 (21:24 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Thu, 18 Sep 2008 19:48:26 +0000 (21:48 +0200)
src/input/decoder.c
src/input/input_internal.h

index cdf7a4265f284e46f1929099e830f4c9d9e12736..8270f310d12425020828253d8d9e6104410850cd 100644 (file)
@@ -326,6 +326,8 @@ void input_DecoderDiscontinuity( decoder_t * p_dec, bool b_flush )
     /* Send a special block */
     p_null = block_New( p_dec, 128 );
     p_null->i_flags |= BLOCK_FLAG_DISCONTINUITY;
+    if( b_flush && p_dec->fmt_in.i_cat == SPU_ES )
+        p_null->i_flags |= BLOCK_FLAG_CORE_FLUSH;
     /* FIXME check for p_packetizer or b_packitized from es_format_t of input ? */
     if( p_dec->p_owner->p_packetizer && b_flush )
         p_null->i_flags |= BLOCK_FLAG_CORRUPTED;
@@ -1047,12 +1049,16 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
         input_thread_t *p_input = p_dec->p_owner->p_input;
         vout_thread_t *p_vout;
         subpicture_t *p_spu;
-        bool b_flush = p_dec->p_owner->i_preroll_end == INT64_MAX;
+        bool b_flushing = p_dec->p_owner->i_preroll_end == INT64_MAX;
+        bool b_flush = false;
 
         if( p_block )
+        {
             DecoderUpdatePreroll( &p_dec->p_owner->i_preroll_end, p_block );
+            b_flush = (p_block->i_flags & BLOCK_FLAG_CORE_FLUSH) != 0;
+        }
 
-        if( !b_flush && p_dec->p_owner->i_preroll_end == INT64_MAX && p_sys->p_spu_vout )
+        if( !b_flushing && b_flush && p_sys->p_spu_vout )
         {
             p_vout = vlc_object_find( p_dec, VLC_OBJECT_VOUT, FIND_ANYWHERE );
 
index c12b0b9c703b6db36568aa693cf35ecf90f68538..cb6642bc938a2fdf07c60d6528e9ec7dd4db7809 100644 (file)
@@ -336,6 +336,7 @@ void stream_AccessReset( stream_t *s );
 void stream_AccessUpdate( stream_t *s );
 
 /* decoder.c */
+#define BLOCK_FLAG_CORE_FLUSH (1 <<BLOCK_FLAG_CORE_PRIVATE_SHIFT)
 void       input_DecoderDiscontinuity( decoder_t * p_dec, bool b_flush );
 bool input_DecoderEmpty( decoder_t * p_dec );
 int        input_DecoderSetCcState( decoder_t *, bool b_decode, int i_channel );