Currently an API user has no easy way that always works to know
whether an AVFilter supports commands. One can check for whether
the filter has any AVOption with AV_OPT_FLAG_RUNTIME_PARAM set,
but this is a bit of extra work and more importantly it doesn't
work for all filters: anequalizer, ladspa, drawtext, overlay, pp,
concat and (a)movie accept commands, but have no AVOptions of this
type. Tellingly ffprobe/cmdutils.c has to abuse the API and check
for AVFilter.process_command to know whether a filter accepts commands.

This commit fixes this by adding a new AVFilter flag.

Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com>
---
 libavfilter/af_acrusher.c          |  1 +
 libavfilter/af_adenorm.c           |  3 ++-
 libavfilter/af_aemphasis.c         |  3 ++-
 libavfilter/af_aexciter.c          |  3 ++-
 libavfilter/af_afade.c             |  3 ++-
 libavfilter/af_afftdn.c            |  3 ++-
 libavfilter/af_afir.c              |  3 ++-
 libavfilter/af_afreqshift.c        |  6 ++++--
 libavfilter/af_afwtdn.c            |  3 ++-
 libavfilter/af_agate.c             |  6 ++++--
 libavfilter/af_amix.c              |  3 ++-
 libavfilter/af_anequalizer.c       |  3 ++-
 libavfilter/af_anlmdn.c            |  3 ++-
 libavfilter/af_anlms.c             |  3 ++-
 libavfilter/af_apsyclip.c          |  3 ++-
 libavfilter/af_arnndn.c            |  3 ++-
 libavfilter/af_asoftclip.c         |  3 ++-
 libavfilter/af_asubboost.c         |  3 ++-
 libavfilter/af_asupercut.c         | 12 ++++++++----
 libavfilter/af_atempo.c            |  1 +
 libavfilter/af_atilt.c             |  3 ++-
 libavfilter/af_biquads.c           |  4 +++-
 libavfilter/af_crossfeed.c         |  3 ++-
 libavfilter/af_crystalizer.c       |  3 ++-
 libavfilter/af_dynaudnorm.c        |  3 ++-
 libavfilter/af_extrastereo.c       |  3 ++-
 libavfilter/af_firequalizer.c      |  1 +
 libavfilter/af_ladspa.c            |  3 ++-
 libavfilter/af_rubberband.c        |  1 +
 libavfilter/af_sidechaincompress.c |  2 ++
 libavfilter/af_speechnorm.c        |  3 ++-
 libavfilter/af_stereotools.c       |  3 ++-
 libavfilter/af_stereowiden.c       |  3 ++-
 libavfilter/af_volume.c            |  3 ++-
 libavfilter/avf_avectorscope.c     |  3 ++-
 libavfilter/avf_concat.c           |  3 ++-
 libavfilter/avfilter.h             | 11 +++++++++++
 libavfilter/f_streamselect.c       |  6 ++++--
 libavfilter/src_movie.c            |  6 ++++--
 libavfilter/vf_amplify.c           |  3 ++-
 libavfilter/vf_atadenoise.c        |  3 ++-
 libavfilter/vf_avgblur.c           |  3 ++-
 libavfilter/vf_bbox.c              |  3 ++-
 libavfilter/vf_bilateral.c         |  3 ++-
 libavfilter/vf_blend.c             |  6 ++++--
 libavfilter/vf_cas.c               |  3 ++-
 libavfilter/vf_chromakey.c         |  6 ++++--
 libavfilter/vf_chromanr.c          |  3 ++-
 libavfilter/vf_chromashift.c       |  6 ++++--
 libavfilter/vf_colorbalance.c      |  3 ++-
 libavfilter/vf_colorchannelmixer.c |  3 ++-
 libavfilter/vf_colorcontrast.c     |  3 ++-
 libavfilter/vf_colorcorrect.c      |  3 ++-
 libavfilter/vf_colorize.c          |  3 ++-
 libavfilter/vf_colorkey.c          |  6 ++++--
 libavfilter/vf_colorlevels.c       |  3 ++-
 libavfilter/vf_colortemperature.c  |  3 ++-
 libavfilter/vf_convolution.c       | 18 ++++++++++++------
 libavfilter/vf_crop.c              |  1 +
 libavfilter/vf_curves.c            |  3 ++-
 libavfilter/vf_datascope.c         |  9 ++++++---
 libavfilter/vf_dblur.c             |  3 ++-
 libavfilter/vf_deband.c            |  3 ++-
 libavfilter/vf_deblock.c           |  3 ++-
 libavfilter/vf_despill.c           |  3 ++-
 libavfilter/vf_drawbox.c           |  6 ++++--
 libavfilter/vf_drawtext.c          |  3 ++-
 libavfilter/vf_eq.c                |  3 ++-
 libavfilter/vf_estdif.c            |  3 ++-
 libavfilter/vf_exposure.c          |  3 ++-
 libavfilter/vf_fillborders.c       |  3 ++-
 libavfilter/vf_frei0r.c            |  3 ++-
 libavfilter/vf_gblur.c             |  3 ++-
 libavfilter/vf_guided.c            |  3 ++-
 libavfilter/vf_hqdn3d.c            |  3 ++-
 libavfilter/vf_hsvkey.c            |  6 ++++--
 libavfilter/vf_hue.c               |  3 ++-
 libavfilter/vf_il.c                |  3 ++-
 libavfilter/vf_lagfun.c            |  3 ++-
 libavfilter/vf_lenscorrection.c    |  3 ++-
 libavfilter/vf_limiter.c           |  3 ++-
 libavfilter/vf_lumakey.c           |  4 +++-
 libavfilter/vf_lut.c               |  3 ++-
 libavfilter/vf_lut2.c              |  6 ++++--
 libavfilter/vf_lut3d.c             |  9 ++++++---
 libavfilter/vf_maskedclamp.c       |  3 ++-
 libavfilter/vf_maskedmerge.c       |  3 ++-
 libavfilter/vf_maskedminmax.c      |  6 ++++--
 libavfilter/vf_maskedthreshold.c   |  3 ++-
 libavfilter/vf_maskfun.c           |  3 ++-
 libavfilter/vf_median.c            |  3 ++-
 libavfilter/vf_mix.c               |  7 +++++--
 libavfilter/vf_monochrome.c        |  3 ++-
 libavfilter/vf_morpho.c            |  3 ++-
 libavfilter/vf_neighbor.c          |  3 ++-
 libavfilter/vf_nnedi.c             |  3 ++-
 libavfilter/vf_normalize.c         |  3 ++-
 libavfilter/vf_overlay.c           |  3 ++-
 libavfilter/vf_phase.c             |  3 ++-
 libavfilter/vf_pp.c                |  3 ++-
 libavfilter/vf_pseudocolor.c       |  3 ++-
 libavfilter/vf_readeia608.c        |  3 ++-
 libavfilter/vf_rotate.c            |  3 ++-
 libavfilter/vf_scale.c             |  2 ++
 libavfilter/vf_scroll.c            |  3 ++-
 libavfilter/vf_shear.c             |  3 ++-
 libavfilter/vf_spp.c               |  3 ++-
 libavfilter/vf_swaprect.c          |  3 ++-
 libavfilter/vf_threshold.c         |  3 ++-
 libavfilter/vf_v360.c              |  3 ++-
 libavfilter/vf_vibrance.c          |  3 ++-
 libavfilter/vf_w3fdif.c            |  3 ++-
 libavfilter/vf_xmedian.c           |  7 +++++--
 libavfilter/vf_yaepblur.c          |  3 ++-
 libavfilter/vf_zscale.c            |  1 +
 libavfilter/vsrc_testsrc.c         |  1 +
 116 files changed, 290 insertions(+), 132 deletions(-)

diff --git a/libavfilter/af_acrusher.c b/libavfilter/af_acrusher.c
index 14d66e88ea..59382b8c76 100644
--- a/libavfilter/af_acrusher.c
+++ b/libavfilter/af_acrusher.c
@@ -335,6 +335,7 @@ static const AVFilterPad avfilter_af_acrusher_outputs[] = {
 const AVFilter ff_af_acrusher = {
     .name          = "acrusher",
     .description   = NULL_IF_CONFIG_SMALL("Reduce audio bit resolution."),
+    .flags         = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size     = sizeof(ACrusherContext),
     .priv_class    = &acrusher_class,
     .uninit        = uninit,
diff --git a/libavfilter/af_adenorm.c b/libavfilter/af_adenorm.c
index 3ad1e7f594..aa433d009e 100644
--- a/libavfilter/af_adenorm.c
+++ b/libavfilter/af_adenorm.c
@@ -297,5 +297,6 @@ const AVFilter ff_af_adenorm = {
     .priv_class      = &adenorm_class,
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_aemphasis.c b/libavfilter/af_aemphasis.c
index 1adfcdb63b..4352de42fa 100644
--- a/libavfilter/af_aemphasis.c
+++ b/libavfilter/af_aemphasis.c
@@ -379,5 +379,6 @@ const AVFilter ff_af_aemphasis = {
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_aexciter.c b/libavfilter/af_aexciter.c
index 5d76f290a0..aee2bf453c 100644
--- a/libavfilter/af_aexciter.c
+++ b/libavfilter/af_aexciter.c
@@ -281,5 +281,6 @@ const AVFilter ff_af_aexciter = {
     FILTER_OUTPUTS(avfilter_af_aexciter_outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .process_command = process_command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_afade.c b/libavfilter/af_afade.c
index c57709050e..80fe383b62 100644
--- a/libavfilter/af_afade.c
+++ b/libavfilter/af_afade.c
@@ -348,7 +348,8 @@ const AVFilter ff_af_afade = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .priv_class    = &afade_class,
     .process_command = process_command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 #endif /* CONFIG_AFADE_FILTER */
diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c
index d1dbbc667b..4bf7e2c5ce 100644
--- a/libavfilter/af_afftdn.c
+++ b/libavfilter/af_afftdn.c
@@ -1404,5 +1404,6 @@ const AVFilter ff_af_afftdn = {
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_afir.c b/libavfilter/af_afir.c
index ace5087e90..1305dbc6f9 100644
--- a/libavfilter/af_afir.c
+++ b/libavfilter/af_afir.c
@@ -949,5 +949,6 @@ const AVFilter ff_af_afir = {
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS  |
                      AVFILTER_FLAG_DYNAMIC_OUTPUTS |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_afreqshift.c b/libavfilter/af_afreqshift.c
index 731e97afef..5fd8151912 100644
--- a/libavfilter/af_afreqshift.c
+++ b/libavfilter/af_afreqshift.c
@@ -382,7 +382,8 @@ const AVFilter ff_af_afreqshift = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = ff_filter_process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 static const AVOption aphaseshift_options[] = {
@@ -405,5 +406,6 @@ const AVFilter ff_af_aphaseshift = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = ff_filter_process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_afwtdn.c b/libavfilter/af_afwtdn.c
index 09b504d634..f653642980 100644
--- a/libavfilter/af_afwtdn.c
+++ b/libavfilter/af_afwtdn.c
@@ -1317,5 +1317,6 @@ const AVFilter ff_af_afwtdn = {
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_agate.c b/libavfilter/af_agate.c
index 682f17c7dd..b00dfb3adf 100644
--- a/libavfilter/af_agate.c
+++ b/libavfilter/af_agate.c
@@ -242,7 +242,8 @@ const AVFilter ff_af_agate = {
     FILTER_OUTPUTS(outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .process_command = ff_filter_process_command,
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 #endif /* CONFIG_AGATE_FILTER */
@@ -392,6 +393,7 @@ const AVFilter ff_af_sidechaingate = {
     FILTER_OUTPUTS(sidechaingate_outputs),
     FILTER_QUERY_FUNC(scquery_formats),
     .process_command = ff_filter_process_command,
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 #endif  /* CONFIG_SIDECHAINGATE_FILTER */
diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c
index 3f51d43acd..68129bb67d 100644
--- a/libavfilter/af_amix.c
+++ b/libavfilter/af_amix.c
@@ -628,5 +628,6 @@ const AVFilter ff_af_amix = {
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
                       AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
-    .flags          = AVFILTER_FLAG_DYNAMIC_INPUTS,
+    .flags          = AVFILTER_FLAG_DYNAMIC_INPUTS |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
index 57a9b7634b..fafde760e8 100644
--- a/libavfilter/af_anequalizer.c
+++ b/libavfilter/af_anequalizer.c
@@ -776,5 +776,6 @@ const AVFilter ff_af_anequalizer = {
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_DYNAMIC_OUTPUTS |
                      AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_anlmdn.c b/libavfilter/af_anlmdn.c
index 141e5f398e..0482f9a6ab 100644
--- a/libavfilter/af_anlmdn.c
+++ b/libavfilter/af_anlmdn.c
@@ -393,5 +393,6 @@ const AVFilter ff_af_anlmdn = {
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_anlms.c b/libavfilter/af_anlms.c
index f1f82b491d..5af5f0a97e 100644
--- a/libavfilter/af_anlms.c
+++ b/libavfilter/af_anlms.c
@@ -309,6 +309,7 @@ const AVFilter ff_af_anlms = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags          = AVFILTER_FLAG_SLICE_THREADS,
+    .flags          = AVFILTER_FLAG_SLICE_THREADS |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/af_apsyclip.c b/libavfilter/af_apsyclip.c
index dc3a8e97e4..a09d0eb620 100644
--- a/libavfilter/af_apsyclip.c
+++ b/libavfilter/af_apsyclip.c
@@ -654,7 +654,8 @@ const AVFilter ff_af_apsyclip = {
     FILTER_OUTPUTS(outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .activate        = activate,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/af_arnndn.c b/libavfilter/af_arnndn.c
index 3115c4ae0c..48314d6871 100644
--- a/libavfilter/af_arnndn.c
+++ b/libavfilter/af_arnndn.c
@@ -1617,6 +1617,7 @@ const AVFilter ff_af_arnndn = {
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/af_asoftclip.c b/libavfilter/af_asoftclip.c
index 6ffde4431a..9e1de2a123 100644
--- a/libavfilter/af_asoftclip.c
+++ b/libavfilter/af_asoftclip.c
@@ -491,5 +491,6 @@ const AVFilter ff_af_asoftclip = {
     .uninit         = uninit,
     .process_command = ff_filter_process_command,
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                      AVFILTER_FLAG_SLICE_THREADS,
+                      AVFILTER_FLAG_SLICE_THREADS |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_asubboost.c b/libavfilter/af_asubboost.c
index da3e68e841..8e0efecaa9 100644
--- a/libavfilter/af_asubboost.c
+++ b/libavfilter/af_asubboost.c
@@ -224,5 +224,6 @@ const AVFilter ff_af_asubboost = {
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_asupercut.c b/libavfilter/af_asupercut.c
index a4c2d15154..3d7bf95467 100644
--- a/libavfilter/af_asupercut.c
+++ b/libavfilter/af_asupercut.c
@@ -351,7 +351,8 @@ const AVFilter ff_af_asupercut = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 static const AVOption asubcut_options[] = {
@@ -374,7 +375,8 @@ const AVFilter ff_af_asubcut = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 static const AVOption asuperpass_asuperstop_options[] = {
@@ -399,7 +401,8 @@ const AVFilter ff_af_asuperpass = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 const AVFilter ff_af_asuperstop = {
@@ -413,5 +416,6 @@ const AVFilter ff_af_asuperstop = {
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c
index e9a6da7970..0ae2fb4d33 100644
--- a/libavfilter/af_atempo.c
+++ b/libavfilter/af_atempo.c
@@ -1174,6 +1174,7 @@ static const AVFilterPad atempo_outputs[] = {
 const AVFilter ff_af_atempo = {
     .name            = "atempo",
     .description     = NULL_IF_CONFIG_SMALL("Adjust audio tempo."),
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .init            = init,
     .uninit          = uninit,
     .process_command = process_command,
diff --git a/libavfilter/af_atilt.c b/libavfilter/af_atilt.c
index a1ce030feb..80edafd819 100644
--- a/libavfilter/af_atilt.c
+++ b/libavfilter/af_atilt.c
@@ -264,5 +264,6 @@ const AVFilter ff_af_atilt = {
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
-                       AVFILTER_FLAG_SLICE_THREADS,
+                       AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c
index adbae5892d..f78d38ed45 100644
--- a/libavfilter/af_biquads.c
+++ b/libavfilter/af_biquads.c
@@ -865,6 +865,9 @@ const AVFilter ff_af_##name_ = {                            
   \
     .name          = #name_,                             \
     .description   = NULL_IF_CONFIG_SMALL(description_), \
     .priv_class    = &priv_class_##_class,               \
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |       \
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | \
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,     \
     .priv_size     = sizeof(BiquadsContext),             \
     .init          = name_##_init,                       \
     .uninit        = uninit,                             \
@@ -872,7 +875,6 @@ const AVFilter ff_af_##name_ = {                            
   \
     FILTER_OUTPUTS(outputs),                             \
     FILTER_QUERY_FUNC(query_formats),                    \
     .process_command = process_command,                  \
-    .flags         = AVFILTER_FLAG_SLICE_THREADS | 
AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL, \
 }
 
 #define DEFINE_BIQUAD_FILTER(name, description)                         \
diff --git a/libavfilter/af_crossfeed.c b/libavfilter/af_crossfeed.c
index ecfbb978d4..1111f5dfec 100644
--- a/libavfilter/af_crossfeed.c
+++ b/libavfilter/af_crossfeed.c
@@ -176,11 +176,12 @@ static const AVFilterPad outputs[] = {
 const AVFilter ff_af_crossfeed = {
     .name           = "crossfeed",
     .description    = NULL_IF_CONFIG_SMALL("Apply headphone crossfeed 
filter."),
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size      = sizeof(CrossfeedContext),
     .priv_class     = &crossfeed_class,
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = process_command,
 };
diff --git a/libavfilter/af_crystalizer.c b/libavfilter/af_crystalizer.c
index 8d967fd629..4613369435 100644
--- a/libavfilter/af_crystalizer.c
+++ b/libavfilter/af_crystalizer.c
@@ -370,5 +370,6 @@ const AVFilter ff_af_crystalizer = {
                       AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                      AVFILTER_FLAG_SLICE_THREADS,
+                      AVFILTER_FLAG_SLICE_THREADS |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_dynaudnorm.c b/libavfilter/af_dynaudnorm.c
index 783266f8c1..d6df527b0d 100644
--- a/libavfilter/af_dynaudnorm.c
+++ b/libavfilter/af_dynaudnorm.c
@@ -857,6 +857,8 @@ static const AVFilterPad avfilter_af_dynaudnorm_outputs[] = 
{
 const AVFilter ff_af_dynaudnorm = {
     .name          = "dynaudnorm",
     .description   = NULL_IF_CONFIG_SMALL("Dynamic Audio Normalizer."),
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size     = sizeof(DynamicAudioNormalizerContext),
     .init          = init,
     .uninit        = uninit,
@@ -865,6 +867,5 @@ const AVFilter ff_af_dynaudnorm = {
     FILTER_OUTPUTS(avfilter_af_dynaudnorm_outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .priv_class    = &dynaudnorm_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = process_command,
 };
diff --git a/libavfilter/af_extrastereo.c b/libavfilter/af_extrastereo.c
index 1645ccb944..f02d9666b3 100644
--- a/libavfilter/af_extrastereo.c
+++ b/libavfilter/af_extrastereo.c
@@ -125,6 +125,7 @@ const AVFilter ff_af_extrastereo = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/af_firequalizer.c b/libavfilter/af_firequalizer.c
index 568b78117a..738f921160 100644
--- a/libavfilter/af_firequalizer.c
+++ b/libavfilter/af_firequalizer.c
@@ -940,6 +940,7 @@ static const AVFilterPad firequalizer_outputs[] = {
 const AVFilter ff_af_firequalizer = {
     .name               = "firequalizer",
     .description        = NULL_IF_CONFIG_SMALL("Finite Impulse Response 
Equalizer."),
+    .flags              = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .uninit             = uninit,
     .process_command    = process_command,
     .priv_size          = sizeof(FIREqualizerContext),
diff --git a/libavfilter/af_ladspa.c b/libavfilter/af_ladspa.c
index ff16388a56..0aaf5036e1 100644
--- a/libavfilter/af_ladspa.c
+++ b/libavfilter/af_ladspa.c
@@ -782,5 +782,6 @@ const AVFilter ff_af_ladspa = {
     .inputs        = 0,
     FILTER_OUTPUTS(ladspa_outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS,
+    .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/af_rubberband.c b/libavfilter/af_rubberband.c
index 4a42aa8a1f..52051f0998 100644
--- a/libavfilter/af_rubberband.c
+++ b/libavfilter/af_rubberband.c
@@ -205,6 +205,7 @@ static const AVFilterPad rubberband_outputs[] = {
 const AVFilter ff_af_rubberband = {
     .name          = "rubberband",
     .description   = NULL_IF_CONFIG_SMALL("Apply time-stretching and 
pitch-shifting."),
+    .flags         = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size     = sizeof(RubberBandContext),
     .priv_class    = &rubberband_class,
     .uninit        = uninit,
diff --git a/libavfilter/af_sidechaincompress.c 
b/libavfilter/af_sidechaincompress.c
index c0ce82066b..f7e3b2305a 100644
--- a/libavfilter/af_sidechaincompress.c
+++ b/libavfilter/af_sidechaincompress.c
@@ -365,6 +365,7 @@ const AVFilter ff_af_sidechaincompress = {
     .name           = "sidechaincompress",
     .description    = NULL_IF_CONFIG_SMALL("Sidechain compressor."),
     .priv_class     = &sidechaincompress_acompressor_class,
+    .flags          = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size      = sizeof(SidechainCompressContext),
     .activate       = activate,
     .uninit         = uninit,
@@ -426,6 +427,7 @@ const AVFilter ff_af_acompressor = {
     .name           = "acompressor",
     .description    = NULL_IF_CONFIG_SMALL("Audio compressor."),
     .priv_class     = &sidechaincompress_acompressor_class,
+    .flags          = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size      = sizeof(SidechainCompressContext),
     FILTER_INPUTS(acompressor_inputs),
     FILTER_OUTPUTS(acompressor_outputs),
diff --git a/libavfilter/af_speechnorm.c b/libavfilter/af_speechnorm.c
index 212a926f36..13e5328c2a 100644
--- a/libavfilter/af_speechnorm.c
+++ b/libavfilter/af_speechnorm.c
@@ -564,6 +564,7 @@ const AVFilter ff_af_speechnorm = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/af_stereotools.c b/libavfilter/af_stereotools.c
index 27ec4a2e4a..53d2466f0f 100644
--- a/libavfilter/af_stereotools.c
+++ b/libavfilter/af_stereotools.c
@@ -375,6 +375,8 @@ static const AVFilterPad outputs[] = {
 const AVFilter ff_af_stereotools = {
     .name           = "stereotools",
     .description    = NULL_IF_CONFIG_SMALL("Apply various stereo tools."),
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size      = sizeof(StereoToolsContext),
     .priv_class     = &stereotools_class,
     .uninit         = uninit,
@@ -382,5 +384,4 @@ const AVFilter ff_af_stereotools = {
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = process_command,
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
 };
diff --git a/libavfilter/af_stereowiden.c b/libavfilter/af_stereowiden.c
index 7cce1a8f28..ebd5658b80 100644
--- a/libavfilter/af_stereowiden.c
+++ b/libavfilter/af_stereowiden.c
@@ -162,6 +162,7 @@ const AVFilter ff_af_stereowiden = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/af_volume.c b/libavfilter/af_volume.c
index 76ccddc316..ba7c53543e 100644
--- a/libavfilter/af_volume.c
+++ b/libavfilter/af_volume.c
@@ -465,6 +465,8 @@ static const AVFilterPad avfilter_af_volume_outputs[] = {
 const AVFilter ff_af_volume = {
     .name           = "volume",
     .description    = NULL_IF_CONFIG_SMALL("Change input volume."),
+    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                      AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size      = sizeof(VolumeContext),
     .priv_class     = &volume_class,
     .init           = init,
@@ -472,6 +474,5 @@ const AVFilter ff_af_volume = {
     FILTER_INPUTS(avfilter_af_volume_inputs),
     FILTER_OUTPUTS(avfilter_af_volume_outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = process_command,
 };
diff --git a/libavfilter/avf_avectorscope.c b/libavfilter/avf_avectorscope.c
index ba392153f3..b73a36786d 100644
--- a/libavfilter/avf_avectorscope.c
+++ b/libavfilter/avf_avectorscope.c
@@ -444,6 +444,8 @@ static const AVFilterPad audiovectorscope_outputs[] = {
 const AVFilter ff_avf_avectorscope = {
     .name          = "avectorscope",
     .description   = NULL_IF_CONFIG_SMALL("Convert input audio to vectorscope 
video output."),
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .uninit        = uninit,
     .priv_size     = sizeof(AudioVectorScopeContext),
     .activate      = activate,
@@ -451,6 +453,5 @@ const AVFilter ff_avf_avectorscope = {
     FILTER_OUTPUTS(audiovectorscope_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &avectorscope_class,
-    .flags         = AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c
index 84c2a52094..82c19fa3aa 100644
--- a/libavfilter/avf_concat.c
+++ b/libavfilter/avf_concat.c
@@ -454,7 +454,8 @@ const AVFilter ff_avf_concat = {
     .inputs        = NULL,
     .outputs       = NULL,
     .priv_class    = &concat_class,
-    .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS,
+    .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     FILTER_QUERY_FUNC(query_formats),
     .process_command = process_command,
 };
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index f7208754a7..f5db6fa966 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -119,6 +119,17 @@ enum AVMediaType avfilter_pad_get_type(const AVFilterPad 
*pads, int pad_idx);
  * and processing them concurrently.
  */
 #define AVFILTER_FLAG_SLICE_THREADS         (1 << 2)
+/**
+ * The filter accepts filter-specific commands via avfilter_process_command(),
+ * avfilter_graph_send_command() and avfilter_graph_queue_command();
+ * support for generic commands like enable-expressions is independent of
+ * this flag.
+ *
+ * Most of these commands are AVOptions with the AV_OPT_FLAG_RUNTIME_PARAM 
flag.
+ * Some commands are different and cannot be queried via the API. They are
+ * documented alongside the rest of the filter.
+ */
+#define AVFILTER_FLAG_SUPPORT_COMMANDS      (1 << 3)
 /**
  * Some filters support a generic "enable" expression option that can be used
  * to enable or disable a filter in the timeline. Filters supporting this
diff --git a/libavfilter/f_streamselect.c b/libavfilter/f_streamselect.c
index 3708d2b256..a345870999 100644
--- a/libavfilter/f_streamselect.c
+++ b/libavfilter/f_streamselect.c
@@ -324,7 +324,8 @@ const AVFilter ff_vf_streamselect = {
     .activate        = activate,
     .priv_size       = sizeof(StreamSelectContext),
     .priv_class      = &streamselect_class,
-    .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS,
+    .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 const AVFilter ff_af_astreamselect = {
@@ -337,5 +338,6 @@ const AVFilter ff_af_astreamselect = {
     .uninit          = uninit,
     .activate        = activate,
     .priv_size       = sizeof(StreamSelectContext),
-    .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS,
+    .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_DYNAMIC_OUTPUTS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c
index 573f363705..718ff36cf4 100644
--- a/libavfilter/src_movie.c
+++ b/libavfilter/src_movie.c
@@ -645,7 +645,8 @@ const AVFilter ff_avsrc_movie = {
 
     .inputs    = NULL,
     .outputs   = NULL,
-    .flags     = AVFILTER_FLAG_DYNAMIC_OUTPUTS,
+    .flags     = AVFILTER_FLAG_DYNAMIC_OUTPUTS |
+                 AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command
 };
 
@@ -664,7 +665,8 @@ const AVFilter ff_avsrc_amovie = {
 
     .inputs     = NULL,
     .outputs    = NULL,
-    .flags      = AVFILTER_FLAG_DYNAMIC_OUTPUTS,
+    .flags      = AVFILTER_FLAG_DYNAMIC_OUTPUTS |
+                  AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_amplify.c b/libavfilter/vf_amplify.c
index 10f153be49..19f61c6170 100644
--- a/libavfilter/vf_amplify.c
+++ b/libavfilter/vf_amplify.c
@@ -315,6 +315,7 @@ const AVFilter ff_vf_amplify = {
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .init          = init,
     .uninit        = uninit,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_atadenoise.c b/libavfilter/vf_atadenoise.c
index 196d354654..3262d575a0 100644
--- a/libavfilter/vf_atadenoise.c
+++ b/libavfilter/vf_atadenoise.c
@@ -573,6 +573,7 @@ const AVFilter ff_vf_atadenoise = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_avgblur.c b/libavfilter/vf_avgblur.c
index e44b9f63c8..05772bdaee 100644
--- a/libavfilter/vf_avgblur.c
+++ b/libavfilter/vf_avgblur.c
@@ -348,6 +348,7 @@ const AVFilter ff_vf_avgblur = {
     FILTER_INPUTS(avgblur_inputs),
     FILTER_OUTPUTS(avgblur_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_bbox.c b/libavfilter/vf_bbox.c
index 559ca505bf..d37a9ec243 100644
--- a/libavfilter/vf_bbox.c
+++ b/libavfilter/vf_bbox.c
@@ -151,6 +151,7 @@ const AVFilter ff_vf_bbox = {
     FILTER_INPUTS(bbox_inputs),
     FILTER_OUTPUTS(bbox_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_bilateral.c b/libavfilter/vf_bilateral.c
index 2a4a3df6cc..fed4aea057 100644
--- a/libavfilter/vf_bilateral.c
+++ b/libavfilter/vf_bilateral.c
@@ -381,6 +381,7 @@ const AVFilter ff_vf_bilateral = {
     FILTER_INPUTS(bilateral_inputs),
     FILTER_OUTPUTS(bilateral_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c
index b6f3c4fed3..a4ffb07e86 100644
--- a/libavfilter/vf_blend.c
+++ b/libavfilter/vf_blend.c
@@ -584,7 +584,8 @@ const AVFilter ff_vf_blend = {
     FILTER_OUTPUTS(blend_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &blend_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -641,7 +642,8 @@ const AVFilter ff_vf_tblend = {
     FILTER_INPUTS(tblend_inputs),
     FILTER_OUTPUTS(tblend_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_cas.c b/libavfilter/vf_cas.c
index 305aec9bd1..215fdc8f14 100644
--- a/libavfilter/vf_cas.c
+++ b/libavfilter/vf_cas.c
@@ -281,6 +281,7 @@ const AVFilter ff_vf_cas = {
     FILTER_INPUTS(cas_inputs),
     FILTER_OUTPUTS(cas_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_chromakey.c b/libavfilter/vf_chromakey.c
index 3bfacda7e4..f56f622380 100644
--- a/libavfilter/vf_chromakey.c
+++ b/libavfilter/vf_chromakey.c
@@ -375,7 +375,8 @@ const AVFilter ff_vf_chromakey = {
     FILTER_INPUTS(chromakey_inputs),
     FILTER_OUTPUTS(chromakey_outputs),
     FILTER_PIXFMTS_ARRAY(chromakey_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -434,6 +435,7 @@ const AVFilter ff_vf_chromahold = {
     FILTER_INPUTS(chromahold_inputs),
     FILTER_OUTPUTS(chromahold_outputs),
     FILTER_PIXFMTS_ARRAY(hold_pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_chromanr.c b/libavfilter/vf_chromanr.c
index 9c36e02c00..583347718d 100644
--- a/libavfilter/vf_chromanr.c
+++ b/libavfilter/vf_chromanr.c
@@ -278,6 +278,7 @@ const AVFilter ff_vf_chromanr = {
     FILTER_OUTPUTS(outputs),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_chromashift.c b/libavfilter/vf_chromashift.c
index 0d197b1344..f65852cc80 100644
--- a/libavfilter/vf_chromashift.c
+++ b/libavfilter/vf_chromashift.c
@@ -430,7 +430,8 @@ const AVFilter ff_vf_chromashift = {
     FILTER_OUTPUTS(outputs),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(yuv_pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -467,6 +468,7 @@ const AVFilter ff_vf_rgbashift = {
     FILTER_OUTPUTS(outputs),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(rgb_pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_colorbalance.c b/libavfilter/vf_colorbalance.c
index 0e626681b6..d9c9ac93af 100644
--- a/libavfilter/vf_colorbalance.c
+++ b/libavfilter/vf_colorbalance.c
@@ -439,6 +439,7 @@ const AVFilter ff_vf_colorbalance = {
     FILTER_INPUTS(colorbalance_inputs),
     FILTER_OUTPUTS(colorbalance_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_colorchannelmixer.c 
b/libavfilter/vf_colorchannelmixer.c
index dfbc082b3f..9ffd9c425f 100644
--- a/libavfilter/vf_colorchannelmixer.c
+++ b/libavfilter/vf_colorchannelmixer.c
@@ -778,6 +778,7 @@ const AVFilter ff_vf_colorchannelmixer = {
     FILTER_INPUTS(colorchannelmixer_inputs),
     FILTER_OUTPUTS(colorchannelmixer_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_colorcontrast.c b/libavfilter/vf_colorcontrast.c
index 7561d21259..fe80a12564 100644
--- a/libavfilter/vf_colorcontrast.c
+++ b/libavfilter/vf_colorcontrast.c
@@ -390,6 +390,7 @@ const AVFilter ff_vf_colorcontrast = {
     FILTER_INPUTS(colorcontrast_inputs),
     FILTER_OUTPUTS(colorcontrast_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_colorcorrect.c b/libavfilter/vf_colorcorrect.c
index ee97b62b0e..ffe43af9dd 100644
--- a/libavfilter/vf_colorcorrect.c
+++ b/libavfilter/vf_colorcorrect.c
@@ -545,6 +545,7 @@ const AVFilter ff_vf_colorcorrect = {
     FILTER_INPUTS(colorcorrect_inputs),
     FILTER_OUTPUTS(colorcorrect_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_colorize.c b/libavfilter/vf_colorize.c
index ba7b80dae7..27221a74f7 100644
--- a/libavfilter/vf_colorize.c
+++ b/libavfilter/vf_colorize.c
@@ -288,6 +288,7 @@ const AVFilter ff_vf_colorize = {
     FILTER_INPUTS(colorize_inputs),
     FILTER_OUTPUTS(colorize_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_colorkey.c b/libavfilter/vf_colorkey.c
index ed43722c03..41fdd67c7b 100644
--- a/libavfilter/vf_colorkey.c
+++ b/libavfilter/vf_colorkey.c
@@ -207,7 +207,8 @@ const AVFilter ff_vf_colorkey = {
     FILTER_INPUTS(colorkey_inputs),
     FILTER_OUTPUTS(colorkey_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
 
@@ -232,7 +233,8 @@ const AVFilter ff_vf_colorhold = {
     FILTER_INPUTS(colorkey_inputs),
     FILTER_OUTPUTS(colorkey_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
 
diff --git a/libavfilter/vf_colorlevels.c b/libavfilter/vf_colorlevels.c
index c089740b0a..4b882f1599 100644
--- a/libavfilter/vf_colorlevels.c
+++ b/libavfilter/vf_colorlevels.c
@@ -379,6 +379,7 @@ const AVFilter ff_vf_colorlevels = {
                    AV_PIX_FMT_RGB48,  AV_PIX_FMT_BGR48,
                    AV_PIX_FMT_RGBA64, AV_PIX_FMT_BGRA64,
                    AV_PIX_FMT_RGBA,   AV_PIX_FMT_BGRA),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_colortemperature.c 
b/libavfilter/vf_colortemperature.c
index e6ac5f95c7..d9e7fdd2b5 100644
--- a/libavfilter/vf_colortemperature.c
+++ b/libavfilter/vf_colortemperature.c
@@ -352,6 +352,7 @@ const AVFilter ff_vf_colortemperature = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
index cc9ba2399e..bda89e67a5 100644
--- a/libavfilter/vf_convolution.c
+++ b/libavfilter/vf_convolution.c
@@ -963,7 +963,8 @@ const AVFilter ff_vf_convolution = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -990,7 +991,8 @@ const AVFilter ff_vf_prewitt = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -1007,7 +1009,8 @@ const AVFilter ff_vf_sobel = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -1024,7 +1027,8 @@ const AVFilter ff_vf_roberts = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -1041,7 +1045,8 @@ const AVFilter ff_vf_kirsch = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -1058,7 +1063,8 @@ const AVFilter ff_vf_scharr = {
     FILTER_INPUTS(convolution_inputs),
     FILTER_OUTPUTS(convolution_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_crop.c b/libavfilter/vf_crop.c
index c7cbfa51ef..2ada190e61 100644
--- a/libavfilter/vf_crop.c
+++ b/libavfilter/vf_crop.c
@@ -389,6 +389,7 @@ static const AVFilterPad avfilter_vf_crop_outputs[] = {
 const AVFilter ff_vf_crop = {
     .name            = "crop",
     .description     = NULL_IF_CONFIG_SMALL("Crop the input video."),
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size       = sizeof(CropContext),
     .priv_class      = &crop_class,
     .uninit          = uninit,
diff --git a/libavfilter/vf_curves.c b/libavfilter/vf_curves.c
index 22a1f8aa70..4a75f74942 100644
--- a/libavfilter/vf_curves.c
+++ b/libavfilter/vf_curves.c
@@ -810,6 +810,7 @@ const AVFilter ff_vf_curves = {
                    AV_PIX_FMT_GBRP14,
                    AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRAP16),
     .priv_class    = &curves_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_datascope.c b/libavfilter/vf_datascope.c
index 0a605985f1..640243ef77 100644
--- a/libavfilter/vf_datascope.c
+++ b/libavfilter/vf_datascope.c
@@ -456,7 +456,8 @@ const AVFilter ff_vf_datascope = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -743,7 +744,8 @@ const AVFilter ff_vf_pixscope = {
     FILTER_INPUTS(pixscope_inputs),
     FILTER_OUTPUTS(pixscope_outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = pixscope_process_command,
 };
 
@@ -1148,6 +1150,7 @@ const AVFilter ff_vf_oscilloscope = {
     FILTER_INPUTS(oscilloscope_inputs),
     FILTER_OUTPUTS(oscilloscope_outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = oscilloscope_process_command,
 };
diff --git a/libavfilter/vf_dblur.c b/libavfilter/vf_dblur.c
index 8ea1229629..51414d9929 100644
--- a/libavfilter/vf_dblur.c
+++ b/libavfilter/vf_dblur.c
@@ -294,6 +294,7 @@ const AVFilter ff_vf_dblur = {
     FILTER_INPUTS(dblur_inputs),
     FILTER_OUTPUTS(dblur_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_deband.c b/libavfilter/vf_deband.c
index ec91cb1548..5a4832d747 100644
--- a/libavfilter/vf_deband.c
+++ b/libavfilter/vf_deband.c
@@ -474,6 +474,7 @@ const AVFilter ff_vf_deband = {
     FILTER_INPUTS(avfilter_vf_deband_inputs),
     FILTER_OUTPUTS(avfilter_vf_deband_outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_deblock.c b/libavfilter/vf_deblock.c
index b7c6a03d4a..dab7b2162e 100644
--- a/libavfilter/vf_deblock.c
+++ b/libavfilter/vf_deblock.c
@@ -414,6 +414,7 @@ const AVFilter ff_vf_deblock = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_despill.c b/libavfilter/vf_despill.c
index 483d9c8560..d59103458e 100644
--- a/libavfilter/vf_despill.c
+++ b/libavfilter/vf_despill.c
@@ -167,5 +167,6 @@ const AVFilter ff_vf_despill = {
     FILTER_OUTPUTS(despill_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .process_command = ff_filter_process_command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c
index 919652e50f..68e41e124d 100644
--- a/libavfilter/vf_drawbox.c
+++ b/libavfilter/vf_drawbox.c
@@ -403,7 +403,8 @@ const AVFilter ff_vf_drawbox = {
     FILTER_OUTPUTS(drawbox_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = process_command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 #endif /* CONFIG_DRAWBOX_FILTER */
 
@@ -484,7 +485,8 @@ const AVFilter ff_vf_drawgrid = {
     FILTER_INPUTS(drawgrid_inputs),
     FILTER_OUTPUTS(drawgrid_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index 2a88692cbd..b8eb9ccd4a 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -1639,5 +1639,6 @@ const AVFilter ff_vf_drawtext = {
     FILTER_OUTPUTS(avfilter_vf_drawtext_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c
index 4a0d85e8e5..dc9c5bdd35 100644
--- a/libavfilter/vf_eq.c
+++ b/libavfilter/vf_eq.c
@@ -379,5 +379,6 @@ const AVFilter ff_vf_eq = {
     .process_command = process_command,
     .init            = initialize,
     .uninit          = uninit,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_estdif.c b/libavfilter/vf_estdif.c
index a8ef93826c..91cf57442d 100644
--- a/libavfilter/vf_estdif.c
+++ b/libavfilter/vf_estdif.c
@@ -574,6 +574,7 @@ const AVFilter ff_vf_estdif = {
     FILTER_INPUTS(estdif_inputs),
     FILTER_OUTPUTS(estdif_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_exposure.c b/libavfilter/vf_exposure.c
index 108fba7930..6391aeb772 100644
--- a/libavfilter/vf_exposure.c
+++ b/libavfilter/vf_exposure.c
@@ -121,6 +121,7 @@ const AVFilter ff_vf_exposure = {
     FILTER_INPUTS(exposure_inputs),
     FILTER_OUTPUTS(exposure_outputs),
     FILTER_PIXFMTS(AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_fillborders.c b/libavfilter/vf_fillborders.c
index 83f206aeb1..ced8b9970e 100644
--- a/libavfilter/vf_fillborders.c
+++ b/libavfilter/vf_fillborders.c
@@ -722,6 +722,7 @@ const AVFilter ff_vf_fillborders = {
     FILTER_INPUTS(fillborders_inputs),
     FILTER_OUTPUTS(fillborders_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c
index 9cd0098e73..a70cd54fe1 100644
--- a/libavfilter/vf_frei0r.c
+++ b/libavfilter/vf_frei0r.c
@@ -422,7 +422,8 @@ const AVFilter ff_vf_frei0r = {
     FILTER_OUTPUTS(avfilter_vf_frei0r_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = process_command,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
 
 static av_cold int source_init(AVFilterContext *ctx)
diff --git a/libavfilter/vf_gblur.c b/libavfilter/vf_gblur.c
index 9a74686fba..6d46a201db 100644
--- a/libavfilter/vf_gblur.c
+++ b/libavfilter/vf_gblur.c
@@ -413,6 +413,7 @@ const AVFilter ff_vf_gblur = {
     FILTER_INPUTS(gblur_inputs),
     FILTER_OUTPUTS(gblur_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_guided.c b/libavfilter/vf_guided.c
index 7636cd2cdc..e8f84f8c93 100644
--- a/libavfilter/vf_guided.c
+++ b/libavfilter/vf_guided.c
@@ -490,6 +490,7 @@ const AVFilter ff_vf_guided = {
     FILTER_OUTPUTS(guided_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags           = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_SLICE_THREADS |
-                       AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+                       AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index 6078bb260f..8e4ccef074 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -399,6 +399,7 @@ const AVFilter ff_vf_hqdn3d = {
     FILTER_INPUTS(avfilter_vf_hqdn3d_inputs),
     FILTER_OUTPUTS(avfilter_vf_hqdn3d_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_hsvkey.c b/libavfilter/vf_hsvkey.c
index 8963bcf1f8..f7d93be293 100644
--- a/libavfilter/vf_hsvkey.c
+++ b/libavfilter/vf_hsvkey.c
@@ -307,7 +307,8 @@ const AVFilter ff_vf_hsvkey = {
     FILTER_INPUTS(hsvkey_inputs),
     FILTER_OUTPUTS(hsvkey_outputs),
     FILTER_PIXFMTS_ARRAY(key_pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
 
@@ -367,6 +368,7 @@ const AVFilter ff_vf_hsvhold = {
     FILTER_INPUTS(hsvhold_inputs),
     FILTER_OUTPUTS(hsvhold_outputs),
     FILTER_PIXFMTS_ARRAY(hold_pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c
index 644c99b1b1..994c5d1d7a 100644
--- a/libavfilter/vf_hue.c
+++ b/libavfilter/vf_hue.c
@@ -518,5 +518,6 @@ const AVFilter ff_vf_hue = {
     FILTER_OUTPUTS(hue_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &hue_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_il.c b/libavfilter/vf_il.c
index e1c380a2cf..6b41e34443 100644
--- a/libavfilter/vf_il.c
+++ b/libavfilter/vf_il.c
@@ -198,6 +198,7 @@ const AVFilter ff_vf_il = {
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &il_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_lagfun.c b/libavfilter/vf_lagfun.c
index c2e0f7383d..92d629565e 100644
--- a/libavfilter/vf_lagfun.c
+++ b/libavfilter/vf_lagfun.c
@@ -220,6 +220,7 @@ const AVFilter ff_vf_lagfun = {
     FILTER_OUTPUTS(outputs),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SLICE_THREADS | 
AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags         = AVFILTER_FLAG_SLICE_THREADS | 
AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_lenscorrection.c b/libavfilter/vf_lenscorrection.c
index 413eabefba..6ad0ea218f 100644
--- a/libavfilter/vf_lenscorrection.c
+++ b/libavfilter/vf_lenscorrection.c
@@ -358,6 +358,7 @@ const AVFilter ff_vf_lenscorrection = {
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &lenscorrection_class,
     .uninit        = uninit,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_limiter.c b/libavfilter/vf_limiter.c
index 488c8865dd..f63a609fe4 100644
--- a/libavfilter/vf_limiter.c
+++ b/libavfilter/vf_limiter.c
@@ -259,6 +259,7 @@ const AVFilter ff_vf_limiter = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_lumakey.c b/libavfilter/vf_lumakey.c
index af1d85ec54..6ea56dfa4a 100644
--- a/libavfilter/vf_lumakey.c
+++ b/libavfilter/vf_lumakey.c
@@ -195,11 +195,13 @@ AVFILTER_DEFINE_CLASS(lumakey);
 const AVFilter ff_vf_lumakey = {
     .name          = "lumakey",
     .description   = NULL_IF_CONFIG_SMALL("Turns a certain luma into 
transparency."),
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS |
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .priv_size     = sizeof(LumakeyContext),
     .priv_class    = &lumakey_class,
     FILTER_INPUTS(lumakey_inputs),
     FILTER_OUTPUTS(lumakey_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c
index 64668039d1..645a5cf3ed 100644
--- a/libavfilter/vf_lut.c
+++ b/libavfilter/vf_lut.c
@@ -599,7 +599,8 @@ static const AVFilterPad outputs[] = {
         FILTER_OUTPUTS(outputs),                                        \
         FILTER_QUERY_FUNC(query_formats),                               \
         .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |       \
-                         AVFILTER_FLAG_SLICE_THREADS,                   \
+                         AVFILTER_FLAG_SLICE_THREADS |                  \
+                         AVFILTER_FLAG_SUPPORT_COMMANDS,                \
         .process_command = process_command,                             \
     }
 
diff --git a/libavfilter/vf_lut2.c b/libavfilter/vf_lut2.c
index 868c0496fa..0dee5aae86 100644
--- a/libavfilter/vf_lut2.c
+++ b/libavfilter/vf_lut2.c
@@ -571,7 +571,8 @@ const AVFilter ff_vf_lut2 = {
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -661,7 +662,8 @@ const AVFilter ff_vf_tlut2 = {
     FILTER_OUTPUTS(tlut2_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_lut3d.c b/libavfilter/vf_lut3d.c
index 8ec07f8ab0..5062602f8a 100644
--- a/libavfilter/vf_lut3d.c
+++ b/libavfilter/vf_lut3d.c
@@ -1364,7 +1364,8 @@ const AVFilter ff_vf_lut3d = {
     FILTER_OUTPUTS(lut3d_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &lut3d_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 #endif
@@ -1628,7 +1629,8 @@ const AVFilter ff_vf_haldclut = {
     FILTER_OUTPUTS(haldclut_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &haldclut_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 #endif
@@ -2291,7 +2293,8 @@ const AVFilter ff_vf_lut1d = {
     FILTER_OUTPUTS(lut1d_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &lut1d_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = lut1d_process_command,
 };
 #endif
diff --git a/libavfilter/vf_maskedclamp.c b/libavfilter/vf_maskedclamp.c
index de97669877..fbb950175c 100644
--- a/libavfilter/vf_maskedclamp.c
+++ b/libavfilter/vf_maskedclamp.c
@@ -314,6 +314,7 @@ const AVFilter ff_vf_maskedclamp = {
     FILTER_OUTPUTS(maskedclamp_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &maskedclamp_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_maskedmerge.c b/libavfilter/vf_maskedmerge.c
index f86bf0c748..0a994d6b4a 100644
--- a/libavfilter/vf_maskedmerge.c
+++ b/libavfilter/vf_maskedmerge.c
@@ -315,6 +315,7 @@ const AVFilter ff_vf_maskedmerge = {
     FILTER_OUTPUTS(maskedmerge_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &maskedmerge_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_maskedminmax.c b/libavfilter/vf_maskedminmax.c
index 5b70c8437f..e567d394ec 100644
--- a/libavfilter/vf_maskedminmax.c
+++ b/libavfilter/vf_maskedminmax.c
@@ -326,7 +326,8 @@ const AVFilter ff_vf_maskedmin = {
     FILTER_INPUTS(maskedminmax_inputs),
     FILTER_OUTPUTS(maskedminmax_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
 
@@ -340,6 +341,7 @@ const AVFilter ff_vf_maskedmax = {
     FILTER_INPUTS(maskedminmax_inputs),
     FILTER_OUTPUTS(maskedminmax_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_maskedthreshold.c b/libavfilter/vf_maskedthreshold.c
index 4d3745232e..1835159e2b 100644
--- a/libavfilter/vf_maskedthreshold.c
+++ b/libavfilter/vf_maskedthreshold.c
@@ -283,6 +283,7 @@ const AVFilter ff_vf_maskedthreshold = {
     FILTER_INPUTS(maskedthreshold_inputs),
     FILTER_OUTPUTS(maskedthreshold_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_maskfun.c b/libavfilter/vf_maskfun.c
index ff4acacc76..aab06f45fd 100644
--- a/libavfilter/vf_maskfun.c
+++ b/libavfilter/vf_maskfun.c
@@ -311,6 +311,7 @@ const AVFilter ff_vf_maskfun = {
     FILTER_OUTPUTS(maskfun_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &maskfun_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_median.c b/libavfilter/vf_median.c
index 11eccf608c..d1727453f7 100644
--- a/libavfilter/vf_median.c
+++ b/libavfilter/vf_median.c
@@ -286,6 +286,7 @@ const AVFilter ff_vf_median = {
     FILTER_INPUTS(median_inputs),
     FILTER_OUTPUTS(median_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_mix.c b/libavfilter/vf_mix.c
index 27455657f2..f69824505b 100644
--- a/libavfilter/vf_mix.c
+++ b/libavfilter/vf_mix.c
@@ -359,7 +359,8 @@ const AVFilter ff_vf_mix = {
     .uninit        = uninit,
     .activate      = activate,
     .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_SLICE_THREADS |
-                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -428,6 +429,9 @@ AVFILTER_DEFINE_CLASS(tmix);
 const AVFilter ff_vf_tmix = {
     .name          = "tmix",
     .description   = NULL_IF_CONFIG_SMALL("Mix successive video frames."),
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS |
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .priv_size     = sizeof(MixContext),
     .priv_class    = &tmix_class,
     FILTER_OUTPUTS(outputs),
@@ -435,7 +439,6 @@ const AVFilter ff_vf_tmix = {
     FILTER_QUERY_FUNC(query_formats),
     .init          = init,
     .uninit        = uninit,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_monochrome.c b/libavfilter/vf_monochrome.c
index 1afc21560d..f6f63f1cea 100644
--- a/libavfilter/vf_monochrome.c
+++ b/libavfilter/vf_monochrome.c
@@ -296,6 +296,7 @@ const AVFilter ff_vf_monochrome = {
     FILTER_INPUTS(monochrome_inputs),
     FILTER_OUTPUTS(monochrome_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_morpho.c b/libavfilter/vf_morpho.c
index f91957ab81..52e7580093 100644
--- a/libavfilter/vf_morpho.c
+++ b/libavfilter/vf_morpho.c
@@ -1022,6 +1022,7 @@ const AVFilter ff_vf_morpho = {
     FILTER_INPUTS(morpho_inputs),
     FILTER_OUTPUTS(morpho_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_neighbor.c b/libavfilter/vf_neighbor.c
index f48fb306b2..f7a3247756 100644
--- a/libavfilter/vf_neighbor.c
+++ b/libavfilter/vf_neighbor.c
@@ -359,7 +359,8 @@ const AVFilter ff_vf_##name_ = {                            
       \
     FILTER_OUTPUTS(neighbor_outputs),                        \
     FILTER_PIXFMTS_ARRAY(pix_fmts),                          \
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC| \
-                     AVFILTER_FLAG_SLICE_THREADS,            \
+                     AVFILTER_FLAG_SLICE_THREADS |           \
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,         \
     .process_command = ff_filter_process_command,            \
 }
 
diff --git a/libavfilter/vf_nnedi.c b/libavfilter/vf_nnedi.c
index cbe2110577..25c37b1ae1 100644
--- a/libavfilter/vf_nnedi.c
+++ b/libavfilter/vf_nnedi.c
@@ -1157,6 +1157,7 @@ const AVFilter ff_vf_nnedi = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_normalize.c b/libavfilter/vf_normalize.c
index 43ed3c67b3..7b6c6d85f7 100644
--- a/libavfilter/vf_normalize.c
+++ b/libavfilter/vf_normalize.c
@@ -527,6 +527,7 @@ const AVFilter ff_vf_normalize = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index 2966cef09c..29f8752f8e 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -1118,5 +1118,6 @@ const AVFilter ff_vf_overlay = {
     FILTER_OUTPUTS(avfilter_vf_overlay_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
-                     AVFILTER_FLAG_SLICE_THREADS,
+                     AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_phase.c b/libavfilter/vf_phase.c
index 1cb71e0e43..fef30c14ee 100644
--- a/libavfilter/vf_phase.c
+++ b/libavfilter/vf_phase.c
@@ -234,6 +234,7 @@ const AVFilter ff_vf_phase = {
     FILTER_INPUTS(phase_inputs),
     FILTER_OUTPUTS(phase_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_pp.c b/libavfilter/vf_pp.c
index 13a013a12d..c053d4b010 100644
--- a/libavfilter/vf_pp.c
+++ b/libavfilter/vf_pp.c
@@ -192,5 +192,6 @@ const AVFilter ff_vf_pp = {
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = pp_process_command,
     .priv_class      = &pp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_pseudocolor.c b/libavfilter/vf_pseudocolor.c
index cb9c9c84cf..738660c459 100644
--- a/libavfilter/vf_pseudocolor.c
+++ b/libavfilter/vf_pseudocolor.c
@@ -920,6 +920,7 @@ const AVFilter ff_vf_pseudocolor = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_readeia608.c b/libavfilter/vf_readeia608.c
index b9dc46e10e..82ca49657b 100644
--- a/libavfilter/vf_readeia608.c
+++ b/libavfilter/vf_readeia608.c
@@ -555,6 +555,7 @@ const AVFilter ff_vf_readeia608 = {
     FILTER_OUTPUTS(readeia608_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .uninit        = uninit,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_rotate.c b/libavfilter/vf_rotate.c
index 4429e3d543..39366fd4b5 100644
--- a/libavfilter/vf_rotate.c
+++ b/libavfilter/vf_rotate.c
@@ -601,5 +601,6 @@ const AVFilter ff_vf_rotate = {
     FILTER_OUTPUTS(rotate_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &rotate_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index 5411289894..9ef2d00d96 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -994,6 +994,7 @@ static const AVFilterPad avfilter_vf_scale_outputs[] = {
 const AVFilter ff_vf_scale = {
     .name            = "scale",
     .description     = NULL_IF_CONFIG_SMALL("Scale the input video size and/or 
convert the image format."),
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .init_dict       = init_dict,
     .uninit          = uninit,
     .priv_size       = sizeof(ScaleContext),
@@ -1035,6 +1036,7 @@ static const AVFilterPad avfilter_vf_scale2ref_outputs[] 
= {
 const AVFilter ff_vf_scale2ref = {
     .name            = "scale2ref",
     .description     = NULL_IF_CONFIG_SMALL("Scale the input video size and/or 
convert the image format to the given reference."),
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .init_dict       = init_dict,
     .uninit          = uninit,
     .priv_size       = sizeof(ScaleContext),
diff --git a/libavfilter/vf_scroll.c b/libavfilter/vf_scroll.c
index 107686cb02..2a0bd573ef 100644
--- a/libavfilter/vf_scroll.c
+++ b/libavfilter/vf_scroll.c
@@ -209,6 +209,7 @@ const AVFilter ff_vf_scroll = {
     FILTER_INPUTS(scroll_inputs),
     FILTER_OUTPUTS(scroll_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_shear.c b/libavfilter/vf_shear.c
index 760caa5011..457109439d 100644
--- a/libavfilter/vf_shear.c
+++ b/libavfilter/vf_shear.c
@@ -316,6 +316,7 @@ const AVFilter ff_vf_shear = {
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &shear_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
index 0192676909..3763820bf3 100644
--- a/libavfilter/vf_spp.c
+++ b/libavfilter/vf_spp.c
@@ -501,5 +501,6 @@ const AVFilter ff_vf_spp = {
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = process_command,
     .priv_class      = &spp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
 };
diff --git a/libavfilter/vf_swaprect.c b/libavfilter/vf_swaprect.c
index b76e3bb99d..ce7692efcc 100644
--- a/libavfilter/vf_swaprect.c
+++ b/libavfilter/vf_swaprect.c
@@ -241,6 +241,7 @@ const AVFilter ff_vf_swaprect = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_threshold.c b/libavfilter/vf_threshold.c
index 2a0add4a8f..b5b10fa5ab 100644
--- a/libavfilter/vf_threshold.c
+++ b/libavfilter/vf_threshold.c
@@ -351,6 +351,7 @@ const AVFilter ff_vf_threshold = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index f7c45286e2..9e4cbdf386 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -5018,6 +5018,7 @@ const AVFilter ff_vf_v360 = {
     FILTER_OUTPUTS(outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &v360_class,
-    .flags         = AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
diff --git a/libavfilter/vf_vibrance.c b/libavfilter/vf_vibrance.c
index 81ae63902c..f416022a34 100644
--- a/libavfilter/vf_vibrance.c
+++ b/libavfilter/vf_vibrance.c
@@ -373,6 +373,7 @@ const AVFilter ff_vf_vibrance = {
     FILTER_INPUTS(vibrance_inputs),
     FILTER_OUTPUTS(vibrance_outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_w3fdif.c b/libavfilter/vf_w3fdif.c
index c2ea76dfa3..bdd426314f 100644
--- a/libavfilter/vf_w3fdif.c
+++ b/libavfilter/vf_w3fdif.c
@@ -614,6 +614,7 @@ const AVFilter ff_vf_w3fdif = {
     FILTER_INPUTS(w3fdif_inputs),
     FILTER_OUTPUTS(w3fdif_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_xmedian.c b/libavfilter/vf_xmedian.c
index f9dc0f7ecf..b98a18caed 100644
--- a/libavfilter/vf_xmedian.c
+++ b/libavfilter/vf_xmedian.c
@@ -398,7 +398,8 @@ const AVFilter ff_vf_xmedian = {
     .uninit        = uninit,
     .activate      = activate,
     .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS | 
AVFILTER_FLAG_SLICE_THREADS |
-                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = process_command,
 };
 
@@ -472,6 +473,9 @@ AVFILTER_DEFINE_CLASS(tmedian);
 const AVFilter ff_vf_tmedian = {
     .name          = "tmedian",
     .description   = NULL_IF_CONFIG_SMALL("Pick median pixels from successive 
frames."),
+    .flags         = AVFILTER_FLAG_SLICE_THREADS |
+                     AVFILTER_FLAG_SUPPORT_COMMANDS |
+                     AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .priv_size     = sizeof(XMedianContext),
     .priv_class    = &tmedian_class,
     FILTER_INPUTS(tmedian_inputs),
@@ -479,7 +483,6 @@ const AVFilter ff_vf_tmedian = {
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .init          = init,
     .uninit        = uninit,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | 
AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
 };
 
diff --git a/libavfilter/vf_yaepblur.c b/libavfilter/vf_yaepblur.c
index 28a74a85a0..1c7a784bbc 100644
--- a/libavfilter/vf_yaepblur.c
+++ b/libavfilter/vf_yaepblur.c
@@ -340,6 +340,7 @@ const AVFilter ff_vf_yaepblur = {
     FILTER_INPUTS(yaep_inputs),
     FILTER_OUTPUTS(yaep_outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS,
+    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | 
AVFILTER_FLAG_SLICE_THREADS |
+                       AVFILTER_FLAG_SUPPORT_COMMANDS,
     .process_command = ff_filter_process_command,
 };
diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c
index 3f7dba489a..69f0f000c5 100644
--- a/libavfilter/vf_zscale.c
+++ b/libavfilter/vf_zscale.c
@@ -938,6 +938,7 @@ static const AVFilterPad avfilter_vf_zscale_outputs[] = {
 const AVFilter ff_vf_zscale = {
     .name            = "zscale",
     .description     = NULL_IF_CONFIG_SMALL("Apply resizing, colorspace and 
bit depth conversion."),
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .init            = init,
     .priv_size       = sizeof(ZScaleContext),
     .priv_class      = &zscale_class,
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index c99cc63be8..47aa0820bb 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -269,6 +269,7 @@ const AVFilter ff_vsrc_color = {
     .name            = "color",
     .description     = NULL_IF_CONFIG_SMALL("Provide an uniformly colored 
input."),
     .priv_class      = &color_class,
+    .flags           = AVFILTER_FLAG_SUPPORT_COMMANDS,
     .priv_size       = sizeof(TestSourceContext),
     .init            = color_init,
     .uninit          = uninit,
-- 
2.30.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to