avfilter/vf_drawbox: implement process_command

This commit is contained in:
Paul B Mahol
2019-10-01 20:17:50 +02:00
parent 027a53dc49
commit 1b2ed0c392
2 changed files with 56 additions and 0 deletions

View File

@@ -273,6 +273,46 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
return ff_filter_frame(inlink->dst->outputs[0], frame);
}
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
{
DrawBoxContext *s = ctx->priv;
int ret;
if ( !strcmp(cmd, "w") || !strcmp(cmd, "width")
|| !strcmp(cmd, "h") || !strcmp(cmd, "height")
|| !strcmp(cmd, "x") || !strcmp(cmd, "y")
|| !strcmp(cmd, "t") || !strcmp(cmd, "thickness")
|| !strcmp(cmd, "c") || !strcmp(cmd, "color")
|| !strcmp(cmd, "replace")) {
int old_x = s->x;
int old_y = s->y;
int old_w = s->w;
int old_h = s->h;
int old_t = s->thickness;
int old_r = s->replace;
AVFilterLink *inlink = ctx->inputs[0];
av_opt_set(s, cmd, args, 0);
init(ctx);
if ((ret = config_input(inlink)) < 0) {
s->x = old_x;
s->y = old_y;
s->w = old_w;
s->h = old_h;
s->thickness = old_t;
s->replace = old_r;
return ret;
}
} else {
ret = AVERROR(ENOSYS);
}
return ret;
}
#define OFFSET(x) offsetof(DrawBoxContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
@@ -323,6 +363,7 @@ AVFilter ff_vf_drawbox = {
.query_formats = query_formats,
.inputs = drawbox_inputs,
.outputs = drawbox_outputs,
.process_command = process_command,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
};
#endif /* CONFIG_DRAWBOX_FILTER */
@@ -457,6 +498,7 @@ AVFilter ff_vf_drawgrid = {
.inputs = drawgrid_inputs,
.outputs = drawgrid_outputs,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
.process_command = process_command,
};
#endif /* CONFIG_DRAWGRID_FILTER */