From f13266014f328fed9eda41047f0a1700348ba923 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 20 Apr 2015 23:00:12 +0200 Subject: client API: add glue for making full use of mpv_command_node() Until now, the return value was always MPV_FORMAT_NONE. Now a command can actually set it. This will be used in one of the following commits. --- player/client.c | 15 +++++++++------ player/command.c | 4 ++-- player/command.h | 3 ++- player/playloop.c | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/player/client.c b/player/client.c index 614d64205f..43c7c07c60 100644 --- a/player/client.c +++ b/player/client.c @@ -954,6 +954,7 @@ static int run_async(mpv_handle *ctx, void (*fn)(void *fn_data), void *fn_data) struct cmd_request { struct MPContext *mpctx; struct mp_cmd *cmd; + struct mpv_node *res; int status; struct mpv_handle *reply_ctx; uint64_t userdata; @@ -962,7 +963,7 @@ struct cmd_request { static void cmd_fn(void *data) { struct cmd_request *req = data; - int r = run_command(req->mpctx, req->cmd); + int r = run_command(req->mpctx, req->cmd, req->res); req->status = r >= 0 ? 0 : MPV_ERROR_COMMAND; talloc_free(req->cmd); if (req->reply_ctx) { @@ -971,7 +972,7 @@ static void cmd_fn(void *data) } } -static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd) +static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd, mpv_node *res) { if (!ctx->mpctx->initialized) return MPV_ERROR_UNINITIALIZED; @@ -986,6 +987,7 @@ static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd) struct cmd_request req = { .mpctx = ctx->mpctx, .cmd = cmd, + .res = res, }; run_locked(ctx, cmd_fn, &req); return req.status; @@ -993,21 +995,22 @@ static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd) int mpv_command(mpv_handle *ctx, const char **args) { - return run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args)); + return run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args), NULL); } int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result) { - int r = run_client_command(ctx, mp_input_parse_cmd_node(ctx->log, args)); + struct mpv_node rn = {.format = MPV_FORMAT_NONE}; + int r = run_client_command(ctx, mp_input_parse_cmd_node(ctx->log, args), &rn); if (result && r >= 0) - *result = (mpv_node){.format = MPV_FORMAT_NONE}; + *result = rn; return r; } int mpv_command_string(mpv_handle *ctx, const char *args) { return run_client_command(ctx, - mp_input_parse_cmd(ctx->mpctx->input, bstr0((char*)args), ctx->name)); + mp_input_parse_cmd(ctx->mpctx->input, bstr0((char*)args), ctx->name), NULL); } static int run_cmd_async(mpv_handle *ctx, uint64_t ud, struct mp_cmd *cmd) diff --git a/player/command.c b/player/command.c index f5621ceb01..376f2b6bed 100644 --- a/player/command.c +++ b/player/command.c @@ -4040,7 +4040,7 @@ static bool check_property_autorepeat(char *property, struct MPContext *mpctx) return true; } -int run_command(MPContext *mpctx, mp_cmd_t *cmd) +int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *res) { struct command_ctx *cmdctx = mpctx->command_ctx; struct MPOpts *opts = mpctx->opts; @@ -4692,7 +4692,7 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd) case MP_CMD_COMMAND_LIST: { for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next) - run_command(mpctx, sub); + run_command(mpctx, sub, NULL); break; } diff --git a/player/command.h b/player/command.h index 1a36c79570..447e01c011 100644 --- a/player/command.h +++ b/player/command.h @@ -21,11 +21,12 @@ struct MPContext; struct mp_cmd; struct mp_log; +struct mpv_node; void command_init(struct MPContext *mpctx); void command_uninit(struct MPContext *mpctx); -int run_command(struct MPContext *mpctx, struct mp_cmd *cmd); +int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *res); char *mp_property_expand_string(struct MPContext *mpctx, const char *str); char *mp_property_expand_escaped_string(struct MPContext *mpctx, const char *str); void property_print_help(struct mp_log *log); diff --git a/player/playloop.c b/player/playloop.c index 1f480cf3ba..1c10c3e962 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -67,7 +67,7 @@ void mp_process_input(struct MPContext *mpctx) mp_cmd_t *cmd = mp_input_read_cmd(mpctx->input); if (!cmd) break; - run_command(mpctx, cmd); + run_command(mpctx, cmd, NULL); mp_cmd_free(cmd); mp_dispatch_queue_process(mpctx->dispatch, 0); } -- cgit v1.2.3