X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_scale.c;h=d4c0be26e45e880db6dfe5a46243de4f348d7148;hb=591741b51d4f0fee4680f1ae67247205a1ce56d8;hp=2a3d00808dbb4e421701c8e69478f9d7230a509f;hpb=be0fd074579cd50149a0cff88111bf1b6efb310a;p=ffmpeg diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 2a3d00808db..d4c0be26e45 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, };