diff options
-rw-r--r-- | demux/demux.c | 8 | ||||
-rw-r--r-- | player/loadfile.c | 5 |
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; |