diff options
author | wm4 <wm4@nowhere> | 2018-05-06 18:27:18 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2018-05-24 19:56:34 +0200 |
commit | b440f6dfb3d29651d8dcb7abfeb8ed18e3f2b995 (patch) | |
tree | dfca603aba1521d0a867d152291616f7b7b87126 /player/core.h | |
parent | a1ed1f8be09c927994b58399e77e99336ec7f436 (diff) | |
download | mpv-b440f6dfb3d29651d8dcb7abfeb8ed18e3f2b995.tar.bz2 mpv-b440f6dfb3d29651d8dcb7abfeb8ed18e3f2b995.tar.xz |
command: add infrastructure for async commands
This enables two types of command behavior:
1. Plain async behavior, like "loadfile" not completing until the file
is fully loaded.
2. Running parts of the command on worker threads, e.g. for I/O, such as
"sub-add" doing network accesses on a thread while the core
continues.
Both have no implementation yet, and most new code is actually inactive.
The plan is to implement a number of useful cases in the following
commits.
The most tricky part is handling internal keybindings (input.conf) and
the multi-command feature (concatenating commands with ";"). It requires
a bunch of roundabout code to make it do the expected thing in
combination with async commands.
There is the question how commands should be handled that come in at a
higher rate than what can be handled by the core. Currently, it will
simply queue up input.conf commands as long as memory lasts. The client
API is limited by the size of the reply queue per client. For commands
which require a worker thread, the thread pool is limited to 30 threads,
and then will queue up work in memory. The number is completely
arbitrary.
Diffstat (limited to 'player/core.h')
-rw-r--r-- | player/core.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/player/core.h b/player/core.h index 71c39dcaa5..0840a7836d 100644 --- a/player/core.h +++ b/player/core.h @@ -243,6 +243,8 @@ typedef struct MPContext { // mp_dispatch_lock must be called to change it. int64_t outstanding_async; + struct mp_thread_pool *thread_pool; // for coarse I/O, often during loading + struct mp_log *statusline; struct osd_state *osd; char *term_osd_text; @@ -551,6 +553,8 @@ void mp_wait_events(struct MPContext *mpctx); void mp_set_timeout(struct MPContext *mpctx, double sleeptime); void mp_wakeup_core(struct MPContext *mpctx); void mp_wakeup_core_cb(void *ctx); +void mp_core_lock(struct MPContext *mpctx); +void mp_core_unlock(struct MPContext *mpctx); void mp_process_input(struct MPContext *mpctx); double get_relative_time(struct MPContext *mpctx); void reset_playback_state(struct MPContext *mpctx); |