diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/loadfile.c | 34 | ||||
-rw-r--r-- | player/main.c | 2 | ||||
-rw-r--r-- | player/misc.c | 8 | ||||
-rw-r--r-- | player/playloop.c | 30 |
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(); } |