screenshot: add subs even with vf_screenshot

Until now, screenshots with the video filter didn't add subs (unclear
whether that was an oversight or feature). Fix this and make behavior
when taking screenshots with vf_screenshot more consistent with VO
screenshots.

The change in vf_screenshot is needed, because add_subs() checks this
flag to decide whether it's allowed to mutate the image.

This commit has another user visible side effect. When taking a
screenshot each frame (using the "each-frame" mode of the screenshot
command), a normal screenshot command will stop the each-frame mode.
This commit is contained in:
wm4 2012-11-21 19:56:25 +01:00
parent 4b91861b67
commit 10a1ae7b72
2 changed files with 12 additions and 5 deletions

View File

@ -290,9 +290,11 @@ static void vf_screenshot_callback(void *pctx, struct mp_image *image)
{ {
struct MPContext *mpctx = (struct MPContext *)pctx; struct MPContext *mpctx = (struct MPContext *)pctx;
screenshot_ctx *ctx = mpctx->screenshot_ctx; screenshot_ctx *ctx = mpctx->screenshot_ctx;
screenshot_save(mpctx, image, ctx->mode); screenshot_save(mpctx, image, ctx->mode == MODE_SUBTITLES);
if (ctx->each_frame) if (ctx->each_frame) {
screenshot_request(mpctx, ctx->mode, false); ctx->each_frame = false;
screenshot_request(mpctx, ctx->mode, true);
}
} }
static bool force_vf(struct MPContext *mpctx) static bool force_vf(struct MPContext *mpctx)
@ -320,11 +322,14 @@ void screenshot_request(struct MPContext *mpctx, int mode, bool each_frame)
if (each_frame) { if (each_frame) {
ctx->each_frame = !ctx->each_frame; ctx->each_frame = !ctx->each_frame;
ctx->mode = mode;
if (!ctx->each_frame) if (!ctx->each_frame)
return; return;
} else {
ctx->each_frame = false;
} }
ctx->mode = mode;
struct voctrl_screenshot_args args = struct voctrl_screenshot_args args =
{ .full_window = (mode == MODE_FULL_WINDOW) }; { .full_window = (mode == MODE_FULL_WINDOW) };
if (!force_vf(mpctx) if (!force_vf(mpctx)
@ -365,5 +370,6 @@ void screenshot_flip(struct MPContext *mpctx)
if (ctx->using_vf_screenshot) if (ctx->using_vf_screenshot)
return; return;
screenshot_request(mpctx, ctx->mode, false); ctx->each_frame = false;
screenshot_request(mpctx, ctx->mode, true);
} }

View File

@ -139,6 +139,7 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
image = *dmpi; image = *dmpi;
else else
image = *vf->priv->image; image = *vf->priv->image;
image.flags &= ~MP_IMGFLAG_ALLOCATED;
image.w = vf->priv->image->w; image.w = vf->priv->image->w;
image.h = vf->priv->image->h; image.h = vf->priv->image->h;
vf_clone_mpi_attributes(&image, mpi); vf_clone_mpi_attributes(&image, mpi);