summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/loadfile.c34
-rw-r--r--player/main.c2
-rw-r--r--player/misc.c8
-rw-r--r--player/playloop.c30
4 files changed, 18 insertions, 56 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();
diff --git a/player/main.c b/player/main.c
index 97ccb0e639..6f9a0fcca8 100644
--- a/player/main.c
+++ b/player/main.c
@@ -111,7 +111,7 @@ static void shutdown_clients(struct MPContext *mpctx)
while (mpctx->clients && mp_clients_num(mpctx)) {
mp_client_broadcast_event(mpctx, MPV_EVENT_SHUTDOWN, NULL);
mp_dispatch_queue_process(mpctx->dispatch, 0);
- mp_input_get_cmd(mpctx->input, 100, 1);
+ mp_wait_events(mpctx, 10000);
}
mp_clients_destroy(mpctx);
}
diff --git a/player/misc.c b/player/misc.c
index bc3a1980c9..51f3e0f863 100644
--- a/player/misc.c
+++ b/player/misc.c
@@ -188,13 +188,7 @@ void stream_dump(struct MPContext *mpctx)
(long long int)pos, (long long int)size);
}
stream_fill_buffer(stream);
- for (;;) {
- mp_cmd_t *cmd = mp_input_get_cmd(mpctx->input, 0, false);
- if (!cmd)
- break;
- run_command(mpctx, cmd);
- talloc_free(cmd);
- }
+ mp_process_input(mpctx);
}
}
diff --git a/player/playloop.c b/player/playloop.c
index 06c0f02bf6..d476137c12 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -56,27 +56,22 @@
// mp_wait_events() was called. (But see mp_process_input().)
void mp_wait_events(struct MPContext *mpctx, double sleeptime)
{
- if (sleeptime > 0) {
- MP_STATS(mpctx, "start sleep");
- mp_input_get_cmd(mpctx->input, sleeptime * 1000, true);
- MP_STATS(mpctx, "end sleep");
- }
+ mp_input_wait(mpctx->input, sleeptime);
}
// Process any queued input, whether it's user input, or requests from client
// API threads. This also resets the "wakeup" flag used with mp_wait_events().
void mp_process_input(struct MPContext *mpctx)
{
- mp_cmd_t *cmd;
- while ((cmd = mp_input_get_cmd(mpctx->input, 0, 1)) != NULL) {
- mp_dispatch_queue_process(mpctx->dispatch, 0);
- cmd = mp_input_get_cmd(mpctx->input, 0, 0);
+ mp_dispatch_queue_process(mpctx->dispatch, 0);
+ for (;;) {
+ mp_cmd_t *cmd = mp_input_read_cmd(mpctx->input);
+ if (!cmd)
+ break;
run_command(mpctx, cmd);
mp_cmd_free(cmd);
- if (mpctx->stop_play)
- break;
+ mp_dispatch_queue_process(mpctx->dispatch, 0);
}
- mp_dispatch_queue_process(mpctx->dispatch, 0);
}
void pause_player(struct MPContext *mpctx)
@@ -976,8 +971,6 @@ void idle_loop(struct MPContext *mpctx)
while (mpctx->opts->player_idle_mode && !mpctx->playlist->current
&& mpctx->stop_play != PT_QUIT)
{
- mpctx->video_status = STATUS_EOF;
- mpctx->audio_status = STATUS_EOF;
if (need_reinit) {
mp_notify(mpctx, MPV_EVENT_IDLE, NULL);
handle_force_window(mpctx, true);
@@ -988,16 +981,11 @@ void idle_loop(struct MPContext *mpctx)
if (!mpctx->opts->force_vo)
uninit |= INITIALIZED_VO;
uninit_player(mpctx, uninit);
- handle_force_window(mpctx, false);
update_osd_msg(mpctx);
handle_osd_redraw(mpctx);
- mp_cmd_t *cmd = mp_input_get_cmd(mpctx->input, mpctx->sleeptime * 1000,
- false);
+ mp_process_input(mpctx);
+ mp_wait_events(mpctx, mpctx->sleeptime);
mpctx->sleeptime = 100.0;
- if (cmd)
- run_command(mpctx, cmd);
- mp_cmd_free(cmd);
- mp_dispatch_queue_process(mpctx->dispatch, 0);
if (mpctx->opts->use_terminal)
getch2_poll();
}