diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2004-10-30 12:45:26 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2004-10-30 12:45:26 +0000 |
commit | 5afc2278c2e23353a411ae0b0dd8e2856eb94e86 (patch) | |
tree | 1fb131aea9f1009db855656a5cde1fe1d144a0af /src/xine-engine/demux.c | |
parent | 5468d24b087638db637487e08fded11460175d06 (diff) | |
download | xine-lib-5afc2278c2e23353a411ae0b0dd8e2856eb94e86.tar.gz xine-lib-5afc2278c2e23353a411ae0b0dd8e2856eb94e86.tar.bz2 |
fixed seeking unresponsiveness when using external subtitles
do not flush slave subtitle streams. since the output ports are
the same for both streams, they will get flushed twice causing frames
to be discarded. (possible improvement: check if slave output port is
the same as master's)
CVS patchset: 7089
CVS date: 2004/10/30 12:45:26
Diffstat (limited to 'src/xine-engine/demux.c')
-rw-r--r-- | src/xine-engine/demux.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/xine-engine/demux.c b/src/xine-engine/demux.c index 0e0a4ee8e..4b4049464 100644 --- a/src/xine-engine/demux.c +++ b/src/xine-engine/demux.c @@ -20,7 +20,7 @@ * Demuxer helper functions * hide some xine engine details from demuxers and reduce code duplication * - * $Id: demux.c,v 1.52 2004/10/27 16:41:34 miguelfreitas Exp $ + * $Id: demux.c,v 1.53 2004/10/30 12:45:27 miguelfreitas Exp $ */ @@ -69,13 +69,16 @@ void _x_demux_flush_engine (xine_stream_t *stream) { stream->xine->port_ticket->acquire(stream->xine->port_ticket, 1); - if (stream->video_out) { - stream->video_out->set_property(stream->video_out, VO_PROP_DISCARD_FRAMES, 1); - } - if (stream->audio_out) { - stream->audio_out->set_property(stream->audio_out, AO_PROP_DISCARD_BUFFERS, 1); + /* only flush/discard output ports on master streams */ + if( stream->master == stream ) { + if (stream->video_out) { + stream->video_out->set_property(stream->video_out, VO_PROP_DISCARD_FRAMES, 1); + } + if (stream->audio_out) { + stream->audio_out->set_property(stream->audio_out, AO_PROP_DISCARD_BUFFERS, 1); + } } - + stream->video_fifo->clear(stream->video_fifo); stream->audio_fifo->clear(stream->audio_fifo); @@ -97,16 +100,19 @@ void _x_demux_flush_engine (xine_stream_t *stream) { ovl->flush_events(ovl); } - if (stream->video_out) { - stream->video_out->flush(stream->video_out); - stream->video_out->set_property(stream->video_out, VO_PROP_DISCARD_FRAMES, 0); - } + /* only flush/discard output ports on master streams */ + if( stream->master == stream ) { + if (stream->video_out) { + stream->video_out->flush(stream->video_out); + stream->video_out->set_property(stream->video_out, VO_PROP_DISCARD_FRAMES, 0); + } - if (stream->audio_out) { - stream->audio_out->flush(stream->audio_out); - stream->audio_out->set_property(stream->audio_out, AO_PROP_DISCARD_BUFFERS, 0); + if (stream->audio_out) { + stream->audio_out->flush(stream->audio_out); + stream->audio_out->set_property(stream->audio_out, AO_PROP_DISCARD_BUFFERS, 0); + } } - + stream->xine->port_ticket->release(stream->xine->port_ticket, 1); } |