summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/loadfile.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/player/loadfile.c b/player/loadfile.c
index 389a205dc8..2ebea2bd32 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -274,13 +274,23 @@ void reselect_demux_streams(struct MPContext *mpctx)
}
// External demuxers might need a seek to the current playback position.
-// Also return the stream for convenience.
-struct sh_stream *init_demux_stream(struct MPContext *mpctx, struct track *track)
+static void external_track_seek(struct MPContext *mpctx, struct track *track)
{
if (track && track->demuxer && track->selected && track->is_external) {
+ for (int t = 0; t < mpctx->num_tracks; t++) {
+ struct track *other = mpctx->tracks[t];
+ if (other->demuxer == track->demuxer &&
+ demuxer_stream_is_selected(other->demuxer, other->stream))
+ return;
+ }
double pts = get_main_demux_pts(mpctx);
demux_seek(track->demuxer, pts, SEEK_ABSOLUTE);
}
+}
+
+struct sh_stream *init_demux_stream(struct MPContext *mpctx, struct track *track)
+{
+ external_track_seek(mpctx, track);
return track ? track->stream : NULL;
}