From 99ad832c7ea96587bde61f10d77e200f3d236da2 Mon Sep 17 00:00:00 2001 From: Bernd Bleßmann Date: Tue, 21 Jul 2015 12:45:43 +0200 Subject: libavfilter/vf_scale: implement process_command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernd Bleßmann Signed-off-by: Michael Niedermayer --- libavfilter/vf_scale.c | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'libavfilter/vf_scale.c') diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 2a3d00808d..d4c0be26e4 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -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, }; -- cgit v1.2.3