Commit 1b2ed0c3 authored by Paul B Mahol's avatar Paul B Mahol

avfilter/vf_drawbox: implement process_command

parent 027a53dc
...@@ -8847,6 +8847,13 @@ drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red ...@@ -8847,6 +8847,13 @@ drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
@end example @end example
@end itemize @end itemize
@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.
If the specified expression is not valid, it is kept at its current
value.
@section drawgrid @section drawgrid
Draw a grid on the input image. Draw a grid on the input image.
...@@ -8932,6 +8939,13 @@ drawgrid=w=iw/3:h=ih/3:t=2:c=white@@0.5 ...@@ -8932,6 +8939,13 @@ drawgrid=w=iw/3:h=ih/3:t=2:c=white@@0.5
@end example @end example
@end itemize @end itemize
@subsection Commands
This filter supports same commands as options.
The command accepts the same syntax of the corresponding option.
If the specified expression is not valid, it is kept at its current
value.
@anchor{drawtext} @anchor{drawtext}
@section drawtext @section drawtext
......
...@@ -273,6 +273,46 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) ...@@ -273,6 +273,46 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
return ff_filter_frame(inlink->dst->outputs[0], 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 OFFSET(x) offsetof(DrawBoxContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
...@@ -323,6 +363,7 @@ AVFilter ff_vf_drawbox = { ...@@ -323,6 +363,7 @@ AVFilter ff_vf_drawbox = {
.query_formats = query_formats, .query_formats = query_formats,
.inputs = drawbox_inputs, .inputs = drawbox_inputs,
.outputs = drawbox_outputs, .outputs = drawbox_outputs,
.process_command = process_command,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
}; };
#endif /* CONFIG_DRAWBOX_FILTER */ #endif /* CONFIG_DRAWBOX_FILTER */
...@@ -457,6 +498,7 @@ AVFilter ff_vf_drawgrid = { ...@@ -457,6 +498,7 @@ AVFilter ff_vf_drawgrid = {
.inputs = drawgrid_inputs, .inputs = drawgrid_inputs,
.outputs = drawgrid_outputs, .outputs = drawgrid_outputs,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
.process_command = process_command,
}; };
#endif /* CONFIG_DRAWGRID_FILTER */ #endif /* CONFIG_DRAWGRID_FILTER */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment