diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/loadfile.c | 14 |
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; } |