summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-04-20 23:00:12 +0200
committerwm4 <wm4@nowhere>2015-04-20 23:00:12 +0200
commitf13266014f328fed9eda41047f0a1700348ba923 (patch)
treec96231ccdc0f363933a2ed47d8a0a8bdca70eb83 /player
parentdebf57bb0d5896fc68e6acc293112eaaf0d3f2d4 (diff)
downloadmpv-f13266014f328fed9eda41047f0a1700348ba923.tar.bz2
mpv-f13266014f328fed9eda41047f0a1700348ba923.tar.xz
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.
Diffstat (limited to 'player')
-rw-r--r--player/client.c15
-rw-r--r--player/command.c4
-rw-r--r--player/command.h3
-rw-r--r--player/playloop.c2
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);
}