Browse Source

libavfilter/vf_scale: implement process_command

Signed-off-by: Bernd Bleßmann <bb@it-entwicklung.de>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tags/n2.8
Bernd Bleßmann Michael Niedermayer 10 years ago
parent
commit
99ad832c7e
2 changed files with 47 additions and 9 deletions
  1. +13
    -0
      doc/filters.texi
  2. +34
    -9
      libavfilter/vf_scale.c

+ 13
- 0
doc/filters.texi View File

@@ -8906,6 +8906,19 @@ scale=w='min(500\, iw*3/2):h=-1'
@end example
@end itemize

@subsection Commands

This filter supports the following commands:
@table @option
@item width, w
@item height, h
Set the output video dimension expression.
The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current
value.
@end table

@section separatefields

The @code{separatefields} takes a frame-based video input and splits


+ 34
- 9
libavfilter/vf_scale.c View File

@@ -544,6 +544,30 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
return ff_filter_frame(outlink, out);
}

static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
char *res, int res_len, int flags)
{
ScaleContext *scale = ctx->priv;
int ret;

if ( !strcmp(cmd, "width") || !strcmp(cmd, "w")
|| !strcmp(cmd, "height") || !strcmp(cmd, "h")) {

int old_w = scale->w;
int old_h = scale->h;
AVFilterLink *outlink = ctx->outputs[0];

av_opt_set(scale, cmd, args, 0);
if ((ret = config_props(outlink)) < 0) {
scale->w = old_w;
scale->h = old_h;
}
} else
ret = AVERROR(ENOSYS);

return ret;
}

static const AVClass *child_class_next(const AVClass *prev)
{
return prev ? NULL : sws_get_class();
@@ -610,13 +634,14 @@ static const AVFilterPad avfilter_vf_scale_outputs[] = {
};

AVFilter ff_vf_scale = {
.name = "scale",
.description = NULL_IF_CONFIG_SMALL("Scale the input video size and/or convert the image format."),
.init_dict = init_dict,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ScaleContext),
.priv_class = &scale_class,
.inputs = avfilter_vf_scale_inputs,
.outputs = avfilter_vf_scale_outputs,
.name = "scale",
.description = NULL_IF_CONFIG_SMALL("Scale the input video size and/or convert the image format."),
.init_dict = init_dict,
.uninit = uninit,
.query_formats = query_formats,
.priv_size = sizeof(ScaleContext),
.priv_class = &scale_class,
.inputs = avfilter_vf_scale_inputs,
.outputs = avfilter_vf_scale_outputs,
.process_command = process_command,
};

Loading…
Cancel
Save