summaryrefslogtreecommitdiffstats
path: root/player/loadfile.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-09-07 20:44:54 +0200
committerwm4 <wm4@nowhere>2014-09-07 20:44:54 +0200
commitf5af5962378bd40a409716434a6a4d312e50c755 (patch)
tree0d507b7254fbd159a6ca0c29f4c0261c4a4becb4 /player/loadfile.c
parent5546af421f853170ad3142008503bb865a81adef (diff)
downloadmpv-f5af5962378bd40a409716434a6a4d312e50c755.tar.bz2
mpv-f5af5962378bd40a409716434a6a4d312e50c755.tar.xz
player: some more input refactoring
Continues commit 348dfd93. Replace other places where input was manually fetched with common code. demux_was_interrupted() was a weird function; I'm not entirely sure about its original purpose, but now we can just replace it with simpler code as well. One difference is that we always look at the command queue, rather than just when cache initialization failed. Also, instead of discarding all but quit/playlist commands (aka abort command), run all commands. This could possibly lead to unwanted side-effects, like just ignoring commands that have no effect (consider pressing 'f' for fullscreen right on start: since the window is not created yet, it would get discarded). But playlist navigation still works as intended, and some if not all these problems already existed before that in some forms, so it should be ok.
Diffstat (limited to 'player/loadfile.c')
-rw-r--r--player/loadfile.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/player/loadfile.c b/player/loadfile.c
index 33c71462cc..9c6aabdd4e 100644
--- a/player/loadfile.c
+++ b/player/loadfile.c
@@ -985,26 +985,6 @@ static void load_chapters(struct MPContext *mpctx)
}
}
-/* When demux performs a blocking operation (network connection or
- * cache filling) if the operation fails we use this function to check
- * if it was interrupted by the user.
- * The function returns whether it was interrupted. */
-static bool demux_was_interrupted(struct MPContext *mpctx)
-{
- for (;;) {
- if (mpctx->stop_play != KEEP_PLAYING
- && mpctx->stop_play != AT_END_OF_FILE)
- return true;
- mp_cmd_t *cmd = mp_input_get_cmd(mpctx->input, 0, 0);
- if (!cmd)
- break;
- if (mp_input_is_abort_cmd(cmd))
- run_command(mpctx, cmd);
- mp_cmd_free(cmd);
- }
- return false;
-}
-
static void load_per_file_options(m_config_t *conf,
struct playlist_param *params,
int params_count)
@@ -1023,8 +1003,6 @@ static void play_current_file(struct MPContext *mpctx)
void *tmp = talloc_new(NULL);
double playback_start = -1e100;
- mpctx->initialized_flags |= INITIALIZED_PLAYBACK;
-
mp_notify(mpctx, MPV_EVENT_START_FILE, NULL);
mpctx->stop_play = 0;
@@ -1112,7 +1090,7 @@ static void play_current_file(struct MPContext *mpctx)
stream_flags |= mpctx->playlist->current->stream_flags;
mpctx->stream = stream_create(stream_filename, stream_flags, mpctx->global);
if (!mpctx->stream) { // error...
- demux_was_interrupted(mpctx);
+ mp_process_input(mpctx);
goto terminate_playback;
}
mpctx->initialized_flags |= INITIALIZED_STREAM;
@@ -1125,10 +1103,11 @@ static void play_current_file(struct MPContext *mpctx)
// Must be called before enabling cache.
mp_nav_init(mpctx);
- int res = stream_enable_cache(&mpctx->stream, &opts->stream_cache);
- if (res == 0)
- if (demux_was_interrupted(mpctx))
- goto terminate_playback;
+ stream_enable_cache(&mpctx->stream, &opts->stream_cache);
+
+ mp_process_input(mpctx);
+ if (mpctx->stop_play)
+ goto terminate_playback;
stream_set_capture_file(mpctx->stream, opts->stream_capture);
@@ -1297,6 +1276,7 @@ goto_reopen_demuxer: ;
if (mpctx->opts->pause)
pause_player(mpctx);
+ mpctx->initialized_flags |= INITIALIZED_PLAYBACK;
mp_notify(mpctx, MPV_EVENT_FILE_LOADED, NULL);
playback_start = mp_time_sec();