avfilter/vf_drawbox: implement process_command
This commit is contained in:
parent
027a53dc49
commit
1b2ed0c392
@ -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
|
|||||||
@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)
|
|||||||
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 = {
|
|||||||
.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 = {
|
|||||||
.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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user