summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c8
-rw-r--r--player/loadfile.c5
2 files changed, 12 insertions, 1 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 1991ad216b..e286bf0e32 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -558,11 +558,18 @@ static void execute_trackswitch(struct demux_internal *in)
{
in->tracks_switched = false;
+ bool any_selected = false;
+ for (int n = 0; n < in->num_streams; n++)
+ any_selected |= in->streams[n]->ds->selected;
+
pthread_mutex_unlock(&in->lock);
if (in->d_thread->desc->control)
in->d_thread->desc->control(in->d_thread, DEMUXER_CTRL_SWITCHED_TRACKS, 0);
+ stream_control(in->d_thread->stream, STREAM_CTRL_SET_READAHEAD,
+ &(int){any_selected});
+
pthread_mutex_lock(&in->lock);
if (in->start_refresh_seek)
@@ -1077,6 +1084,7 @@ static struct demuxer *open_given_type(struct mpv_global *global,
demux_init_cache(demuxer);
demux_changed(in->d_thread, DEMUX_EVENT_ALL);
demux_update(demuxer);
+ stream_control(demuxer->stream, STREAM_CTRL_SET_READAHEAD, &(int){false});
return demuxer;
}
diff --git a/player/loadfile.c b/player/loadfile.c
index 7a33fd7478..7d5a5f847d 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -312,7 +312,10 @@ bool timeline_switch_to_time(struct MPContext *mpctx, double pts)
if (mpctx->demuxer) {
demux_stop_thread(mpctx->demuxer);
- demux_flush(mpctx->demuxer);
+ for (int i = 0; i < demux_get_num_stream(mpctx->demuxer); i++) {
+ struct sh_stream *sh = demux_get_stream(mpctx->demuxer, i);
+ demuxer_select_track(mpctx->demuxer, sh, false);
+ }
}
mpctx->demuxer = n->source;