diff options
author | wm4 <wm4@nowhere> | 2018-05-19 12:37:37 +0200 |
---|---|---|
committer | Jan Ekström <jeebjp@gmail.com> | 2018-05-31 01:24:51 +0300 |
commit | 942829463410d0e7ab27b3191205ecfd3c132f2d (patch) | |
tree | 139cb0a012a9a658dd33ea38a259742fd229f147 /player | |
parent | 36099d27f86af23e75c8a08b1b9aa41697dc86b1 (diff) | |
download | mpv-942829463410d0e7ab27b3191205ecfd3c132f2d.tar.bz2 mpv-942829463410d0e7ab27b3191205ecfd3c132f2d.tar.xz |
player: simplify edition switching
The player fully restarts playback when the edition or disk title is
changed. Before this, the player tried to reinitialized playback
partially. For example, it did not print a new "Playing: <file>"
message, and did not send playback end to libmpv users (scripts or
applications).
This playback restart code was a bit messy and could have unforeseen
interactions with various state. There have been bugs before. Since it's
a mostly cosmetic thing for an obscure feature, just change it to a full
restart. This works well, though since it may have consequences for
scripts or client API users, mention it in interface-changes.rst.
Diffstat (limited to 'player')
-rw-r--r-- | player/command.c | 4 | ||||
-rw-r--r-- | player/core.h | 1 | ||||
-rw-r--r-- | player/loadfile.c | 10 |
3 files changed, 2 insertions, 13 deletions
diff --git a/player/command.c b/player/command.c index 60fb7447e1..87cd274d57 100644 --- a/player/command.c +++ b/player/command.c @@ -926,7 +926,7 @@ static int mp_property_disc_title(void *ctx, struct m_property *prop, if (demux_stream_control(d, STREAM_CTRL_SET_CURRENT_TITLE, &title) < 0) return M_PROPERTY_NOT_IMPLEMENTED; if (!mpctx->stop_play) - mpctx->stop_play = PT_RELOAD_FILE; + mpctx->stop_play = PT_CURRENT_ENTRY; return M_PROPERTY_OK; } return M_PROPERTY_NOT_IMPLEMENTED; @@ -1143,7 +1143,7 @@ static int mp_property_edition(void *ctx, struct m_property *prop, if (edition != demuxer->edition) { mpctx->opts->edition_id = edition; if (!mpctx->stop_play) - mpctx->stop_play = PT_RELOAD_FILE; + mpctx->stop_play = PT_CURRENT_ENTRY; mp_wakeup_core(mpctx); break; // make it accessible to the demuxer via option change notify } diff --git a/player/core.h b/player/core.h index 71c39dcaa5..5ccf35fd1a 100644 --- a/player/core.h +++ b/player/core.h @@ -43,7 +43,6 @@ enum stop_play_reason { PT_NEXT_ENTRY, // prepare to play next entry in playlist PT_CURRENT_ENTRY, // prepare to play mpctx->playlist->current PT_STOP, // stop playback, clear playlist - PT_RELOAD_FILE, // restart playback PT_QUIT, // stop playback, quit player PT_ERROR, // play next playlist entry (due to an error) }; diff --git a/player/loadfile.c b/player/loadfile.c index 65d693e264..56aca7d30c 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -1203,10 +1203,6 @@ static void play_current_file(struct MPContext *mpctx) MP_INFO(mpctx, "Playing: %s\n", mpctx->filename); -reopen_file: - - reset_playback_state(mpctx); - assert(mpctx->demuxer == NULL); process_hooks(mpctx, "on_load"); @@ -1398,12 +1394,6 @@ terminate_playback: mpctx->playback_initialized = false; - if (mpctx->stop_play == PT_RELOAD_FILE) { - mpctx->stop_play = KEEP_PLAYING; - mp_cancel_reset(mpctx->playback_abort); - goto reopen_file; - } - m_config_restore_backups(mpctx->mconfig); TA_FREEP(&mpctx->filter_root); |