diff options
-rw-r--r-- | libmpv/client.h | 16 | ||||
-rw-r--r-- | libmpv/mpv.def | 1 | ||||
-rw-r--r-- | player/client.c | 9 |
3 files changed, 26 insertions, 0 deletions
diff --git a/libmpv/client.h b/libmpv/client.h index eeaa687318..2fea40de13 100644 --- a/libmpv/client.h +++ b/libmpv/client.h @@ -970,6 +970,22 @@ int mpv_command(mpv_handle *ctx, const char **args); int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result); /** + * This is essentially identical to mpv_command() but it also returns a result. + * + * Does not use OSD and string expansion by default. + * + * @param[in] args NULL-terminated list of strings. Usually, the first item + * is the command, and the following items are arguments. + * @param[out] result Optional, pass NULL if unused. If not NULL, and if the + * function succeeds, this is set to command-specific return + * data. You must call mpv_free_node_contents() to free it + * (again, only if the command actually succeeds). + * Not many commands actually use this at all. + * @return error code (the result parameter is not set on error) + */ +int mpv_command_ret(mpv_handle *ctx, const char **args, mpv_node *result); + +/** * Same as mpv_command, but use input.conf parsing for splitting arguments. * This is slightly simpler, but also more error prone, since arguments may * need quoting/escaping. diff --git a/libmpv/mpv.def b/libmpv/mpv.def index 5b1c2423ff..a2c6fd1ac9 100644 --- a/libmpv/mpv.def +++ b/libmpv/mpv.def @@ -5,6 +5,7 @@ mpv_command mpv_command_async mpv_command_node mpv_command_node_async +mpv_command_ret mpv_command_string mpv_create mpv_create_client diff --git a/player/client.c b/player/client.c index 8a22a2cb32..6a45ec7fb6 100644 --- a/player/client.c +++ b/player/client.c @@ -1087,6 +1087,15 @@ int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result) return r; } +int mpv_command_ret(mpv_handle *ctx, const char **args, mpv_node *result) +{ + struct mpv_node rn = {.format = MPV_FORMAT_NONE}; + int r = run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args), &rn); + if (result && r >= 0) + *result = rn; + return r; +} + int mpv_command_string(mpv_handle *ctx, const char *args) { return run_client_command(ctx, |