diff options
author | wm4 <wm4@nowhere> | 2013-05-29 14:54:51 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-05-29 14:57:05 +0200 |
commit | 6bfbca9912c2d86d6b28dc5000bb878fb5fbe849 (patch) | |
tree | e8b174024f482dd34d365f1f83fe455498f5c324 /demux/demux.c | |
parent | fa75ae96e1b2bc0d689a957d4c522002965c4eb2 (diff) | |
download | mpv-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.c | 4 |
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 |