From 6ebac1f794623e2b62d599f944fb91d42a7b1c3d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 19 Nov 2020 15:12:04 +0100 Subject: player: allow vo to be switched at runtime --- player/loadfile.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'player/loadfile.c') diff --git a/player/loadfile.c b/player/loadfile.c index 0adc8e351d..058be92c83 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -362,7 +362,9 @@ void update_demuxer_properties(struct MPContext *mpctx) // Enables or disables the stream for the given track, according to // track->selected. -void reselect_demux_stream(struct MPContext *mpctx, struct track *track) +// With refresh_only=true, refreshes the stream if it's enabled. +void reselect_demux_stream(struct MPContext *mpctx, struct track *track, + bool refresh_only) { if (!track->stream) return; @@ -372,7 +374,10 @@ void reselect_demux_stream(struct MPContext *mpctx, struct track *track) if (track->type == STREAM_SUB) pts -= 10.0; } - demuxer_select_track(track->demuxer, track->stream, pts, track->selected); + if (refresh_only) + demuxer_refresh_track(track->demuxer, track->stream, pts); + else + demuxer_select_track(track->demuxer, track->stream, pts, track->selected); } static void enable_demux_thread(struct MPContext *mpctx, struct demuxer *demux) @@ -658,14 +663,14 @@ void mp_switch_track_n(struct MPContext *mpctx, int order, enum stream_type type if (current->remux_sink) close_recorder_and_error(mpctx); current->selected = false; - reselect_demux_stream(mpctx, current); + reselect_demux_stream(mpctx, current, false); } mpctx->current_track[order][type] = track; if (track) { track->selected = true; - reselect_demux_stream(mpctx, track); + reselect_demux_stream(mpctx, track, false); } if (type == STREAM_VIDEO && order == 0) { @@ -1341,7 +1346,7 @@ done: if (mpctx->playback_initialized) { for (int n = 0; n < mpctx->num_tracks; n++) - reselect_demux_stream(mpctx, mpctx->tracks[n]); + reselect_demux_stream(mpctx, mpctx->tracks[n], false); } mp_notify(mpctx, MPV_EVENT_TRACKS_CHANGED, NULL); @@ -1583,7 +1588,7 @@ static void play_current_file(struct MPContext *mpctx) } for (int n = 0; n < mpctx->num_tracks; n++) - reselect_demux_stream(mpctx, mpctx->tracks[n]); + reselect_demux_stream(mpctx, mpctx->tracks[n], false); update_demuxer_properties(mpctx); -- cgit v1.2.3