summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-29 14:54:51 +0200
committerwm4 <wm4@nowhere>2013-05-29 14:57:05 +0200
commit6bfbca9912c2d86d6b28dc5000bb878fb5fbe849 (patch)
treee8b174024f482dd34d365f1f83fe455498f5c324 /demux/demux.c
parentfa75ae96e1b2bc0d689a957d4c522002965c4eb2 (diff)
downloadmpv-6bfbca9912c2d86d6b28dc5000bb878fb5fbe849.tar.bz2
mpv-6bfbca9912c2d86d6b28dc5000bb878fb5fbe849.tar.xz
core: avoid deselecting and reselecting stream needlessly
The core deselected all streams on initialization, and then selected the streams it actually wanted. This was no problem for demux_mkv/demux_lavf, but old demuxers (like demux_asf) could lose some packets. The problem is that these demuxers can buffer some data on initialization, which then is flushed on track switching. Fix this by explicitly avoiding deselecting a wanted stream.
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 856951f905..3e27b43f93 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1214,6 +1214,10 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
{
assert(!stream || stream->type == type);
+ // don't flush buffers if stream is already selected
+ if (stream && demuxer_stream_is_selected(demuxer, stream))
+ return;
+
int old_id = demuxer->ds[type]->id;
// legacy