summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/command.c18
-rw-r--r--player/command.h2
-rw-r--r--player/screenshot.c65
3 files changed, 39 insertions, 46 deletions
diff --git a/player/command.c b/player/command.c
index c4d492cdf9..2472aab5e9 100644
--- a/player/command.c
+++ b/player/command.c
@@ -4575,6 +4575,24 @@ void run_command(struct MPContext *mpctx, struct mp_cmd *cmd,
}
}
+// When a command shows a message. status is the level (e.g. MSGL_INFO), and
+// msg+vararg is as in printf (don't include a trailing "\n").
+void mp_cmd_msg(struct mp_cmd_ctx *cmd, int status, const char *msg, ...)
+{
+ va_list ap;
+ char *s;
+
+ va_start(ap, msg);
+ s = talloc_vasprintf(NULL, msg, ap);
+ va_end(ap);
+
+ MP_MSG(cmd->mpctx, status, "%s\n", s);
+ if (cmd->msg_osd && status <= MSGL_INFO)
+ set_osd_msg(cmd->mpctx, 1, cmd->mpctx->opts->osd_duration, "%s", s);
+
+ talloc_free(s);
+}
+
static void cmd_seek(void *p)
{
struct mp_cmd_ctx *cmd = p;
diff --git a/player/command.h b/player/command.h
index ae3af82886..4cc774c6e8 100644
--- a/player/command.h
+++ b/player/command.h
@@ -70,6 +70,8 @@ void run_command(struct MPContext *mpctx, struct mp_cmd *cmd,
void (*on_completion)(struct mp_cmd_ctx *cmd),
void *on_completion_priv);
void mp_cmd_ctx_complete(struct mp_cmd_ctx *cmd);
+PRINTF_ATTRIBUTE(3, 4)
+void mp_cmd_msg(struct mp_cmd_ctx *cmd, int status, const char *msg, ...);
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 MPContext *mpctx);
diff --git a/player/screenshot.c b/player/screenshot.c
index df8da9697c..af06701bbb 100644
--- a/player/screenshot.c
+++ b/player/screenshot.c
@@ -49,8 +49,6 @@
typedef struct screenshot_ctx {
struct MPContext *mpctx;
- bool osd;
-
// Command to repeat in each-frame mode.
struct mp_cmd *each_frame;
@@ -66,26 +64,6 @@ void screenshot_init(struct MPContext *mpctx)
};
}
-static void screenshot_msg(screenshot_ctx *ctx, int status, const char *msg,
- ...) PRINTF_ATTRIBUTE(3,4);
-
-static void screenshot_msg(screenshot_ctx *ctx, int status, const char *msg,
- ...)
-{
- va_list ap;
- char *s;
-
- va_start(ap, msg);
- s = talloc_vasprintf(NULL, msg, ap);
- va_end(ap);
-
- MP_MSG(ctx->mpctx, status, "%s\n", s);
- if (ctx->osd && status <= MSGL_INFO)
- set_osd_msg(ctx->mpctx, 1, ctx->mpctx->opts->osd_duration, "%s", s);
-
- talloc_free(s);
-}
-
static char *stripext(void *talloc_ctx, const char *s)
{
const char *end = strrchr(s, '.');
@@ -94,14 +72,14 @@ static char *stripext(void *talloc_ctx, const char *s)
return talloc_asprintf(talloc_ctx, "%.*s", (int)(end - s), s);
}
-static bool write_screenshot(struct MPContext *mpctx, struct mp_image *img,
+static bool write_screenshot(struct mp_cmd_ctx *cmd, struct mp_image *img,
const char *filename, struct image_writer_opts *opts)
{
- screenshot_ctx *ctx = mpctx->screenshot_ctx;
+ struct MPContext *mpctx = cmd->mpctx;
struct image_writer_opts *gopts = mpctx->opts->screenshot_image_opts;
struct image_writer_opts opts_copy = opts ? *opts : *gopts;
- screenshot_msg(ctx, MSGL_V, "Starting screenshot: '%s'", filename);
+ mp_cmd_msg(cmd, MSGL_V, "Starting screenshot: '%s'", filename);
mp_core_unlock(mpctx);
@@ -110,9 +88,9 @@ static bool write_screenshot(struct MPContext *mpctx, struct mp_image *img,
mp_core_lock(mpctx);
if (ok) {
- screenshot_msg(ctx, MSGL_INFO, "Screenshot: '%s'", filename);
+ mp_cmd_msg(cmd, MSGL_INFO, "Screenshot: '%s'", filename);
} else {
- screenshot_msg(ctx, MSGL_ERR, "Error writing screenshot!");
+ mp_cmd_msg(cmd, MSGL_ERR, "Error writing screenshot!");
}
return ok;
}
@@ -290,8 +268,11 @@ error_exit:
return NULL;
}
-static char *gen_fname(screenshot_ctx *ctx, const char *file_ext)
+static char *gen_fname(struct mp_cmd_ctx *cmd, const char *file_ext)
{
+ struct MPContext *mpctx = cmd->mpctx;
+ screenshot_ctx *ctx = mpctx->screenshot_ctx;
+
int sequence = 0;
for (;;) {
int prev_sequence = sequence;
@@ -302,9 +283,9 @@ static char *gen_fname(screenshot_ctx *ctx, const char *file_ext)
&ctx->frameno);
if (!fname) {
- screenshot_msg(ctx, MSGL_ERR, "Invalid screenshot filename "
- "template! Fix or remove the --screenshot-template "
- "option.");
+ mp_cmd_msg(cmd, MSGL_ERR, "Invalid screenshot filename "
+ "template! Fix or remove the --screenshot-template "
+ "option.");
return NULL;
}
@@ -328,8 +309,8 @@ static char *gen_fname(screenshot_ctx *ctx, const char *file_ext)
return fname;
if (sequence == prev_sequence) {
- screenshot_msg(ctx, MSGL_ERR, "Can't save screenshot, file '%s' "
- "already exists!", fname);
+ mp_cmd_msg(cmd, MSGL_ERR, "Can't save screenshot, file '%s' "
+ "already exists!", fname);
talloc_free(fname);
return NULL;
}
@@ -441,11 +422,7 @@ void cmd_screenshot_to_file(void *p)
struct MPContext *mpctx = cmd->mpctx;
const char *filename = cmd->args[0].v.s;
int mode = cmd->args[1].v.i;
- bool osd = cmd->msg_osd;
- screenshot_ctx *ctx = mpctx->screenshot_ctx;
struct image_writer_opts opts = *mpctx->opts->screenshot_image_opts;
- bool old_osd = ctx->osd;
- ctx->osd = osd;
char *ext = mp_splitext(filename, NULL);
int format = image_writer_format_from_ext(ext);
@@ -453,13 +430,12 @@ void cmd_screenshot_to_file(void *p)
opts.format = format;
bool high_depth = image_writer_high_depth(&opts);
struct mp_image *image = screenshot_get(mpctx, mode, high_depth);
- ctx->osd = old_osd;
if (!image) {
- screenshot_msg(ctx, MSGL_ERR, "Taking screenshot failed.");
+ mp_cmd_msg(cmd, MSGL_ERR, "Taking screenshot failed.");
cmd->success = false;
return;
}
- cmd->success = write_screenshot(mpctx, image, filename, &opts);
+ cmd->success = write_screenshot(cmd, image, filename, &opts);
talloc_free(image);
}
@@ -470,7 +446,6 @@ void cmd_screenshot(void *p)
int mode = cmd->args[0].v.i & 3;
bool each_frame_toggle = (cmd->args[0].v.i | cmd->args[1].v.i) & 8;
bool each_frame_mode = cmd->args[0].v.i & 16;
- bool osd = cmd->msg_osd;
screenshot_ctx *ctx = mpctx->screenshot_ctx;
@@ -492,20 +467,18 @@ void cmd_screenshot(void *p)
cmd->success = false;
- ctx->osd = osd;
-
struct image_writer_opts *opts = mpctx->opts->screenshot_image_opts;
bool high_depth = image_writer_high_depth(opts);
struct mp_image *image = screenshot_get(mpctx, mode, high_depth);
if (image) {
- char *filename = gen_fname(ctx, image_writer_file_ext(opts));
+ char *filename = gen_fname(cmd, image_writer_file_ext(opts));
if (filename)
- cmd->success = write_screenshot(mpctx, image, filename, NULL);
+ cmd->success = write_screenshot(cmd, image, filename, NULL);
talloc_free(filename);
} else {
- screenshot_msg(ctx, MSGL_ERR, "Taking screenshot failed.");
+ mp_cmd_msg(cmd, MSGL_ERR, "Taking screenshot failed.");
}
talloc_free(image);