]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_scale.c
avfilter: add areverse filter
[ffmpeg] / libavfilter / vf_scale.c
index 2a3d00808dbb4e421701c8e69478f9d7230a509f..d4c0be26e45e880db6dfe5a46243de4f348d7148 100644 (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,
 };