Browse Source

avfilter/vf_scale: fix input declaration

This filter needs to be marked as having only one input by default, with
AVFILTER_FLAG_DYNAMIC_INPUTS allowing the extra input to be added at
init() time.

Fixes: bb8044581366fe286e16b14515d873979133dbda
Niklas Haas 1 year ago
parent
commit
6a5b021e35
1 changed files with 10 additions and 5 deletions
  1. 10 5
      libavfilter/vf_scale.c

+ 10 - 5
libavfilter/vf_scale.c

@@ -442,8 +442,15 @@ static av_cold int init(AVFilterContext *ctx)
     if (!threads)
         av_opt_set_int(scale->sws_opts, "threads", ff_filter_get_nb_threads(ctx), 0);
 
-    if (ctx->filter != &ff_vf_scale2ref)
-        ctx->nb_inputs = scale->uses_ref ? 2 : 1;
+    if (ctx->filter != &ff_vf_scale2ref && scale->uses_ref) {
+        AVFilterPad pad = {
+            .name = "ref",
+            .type = AVMEDIA_TYPE_VIDEO,
+        };
+        ret = ff_append_inpad(ctx, &pad);
+        if (ret < 0)
+            return ret;
+    }
 
     return 0;
 }
@@ -1234,9 +1241,6 @@ static const AVFilterPad avfilter_vf_scale_inputs[] = {
     {
         .name         = "default",
         .type         = AVMEDIA_TYPE_VIDEO,
-    }, {
-        .name         = "ref",
-        .type         = AVMEDIA_TYPE_VIDEO,
     },
 };
 
@@ -1261,6 +1265,7 @@ const AVFilter ff_vf_scale = {
     FILTER_QUERY_FUNC(query_formats),
     .activate        = activate,
     .process_command = process_command,
+    .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS,
 };
 
 static const AVFilterPad avfilter_vf_scale2ref_inputs[] = {