Commit 58892c922e for ffmpeg

commit 58892c922e348b3010803d2dcaac74f79565633e
Author: Michael Niedermayer <michael@niedermayer.cc>
Date:   Tue Sep 29 04:41:06 2026 +0200

    avfilter: declare the filters that carry no frame parameter state as handling changes

    These filters never access pixel data based on the size or format of
    their input link, so frames that change size or
    format after the graph was configured pass through them unharmed.
    Marking them keeps the common -reinit_filter 0 chains working.

    Found during triage of the security report RqgTntCAW2qN.

diff --git a/libavfilter/f_bench.c b/libavfilter/f_bench.c
index 2546adc281..0312a107fb 100644
--- a/libavfilter/f_bench.c
+++ b/libavfilter/f_bench.c
@@ -110,6 +110,7 @@ const FFFilter ff_vf_bench = {
     .init          = init,
     FILTER_INPUTS(bench_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_BENCH_FILTER */

diff --git a/libavfilter/f_cue.c b/libavfilter/f_cue.c
index 63027c7c2e..f7badb0ec0 100644
--- a/libavfilter/f_cue.c
+++ b/libavfilter/f_cue.c
@@ -108,6 +108,7 @@ const FFFilter ff_vf_cue = {
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     .activate    = activate,
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_CUE_FILTER */

diff --git a/libavfilter/f_latency.c b/libavfilter/f_latency.c
index 00b55ddb4b..80d379219d 100644
--- a/libavfilter/f_latency.c
+++ b/libavfilter/f_latency.c
@@ -111,6 +111,7 @@ const FFFilter ff_vf_latency = {
     .activate      = activate,
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #endif // CONFIG_LATENCY_FILTER
diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c
index 1984fad70d..bfa4590ac2 100644
--- a/libavfilter/f_loop.c
+++ b/libavfilter/f_loop.c
@@ -466,5 +466,6 @@ const FFFilter ff_vf_loop = {
     .activate    = activate,
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_LOOP_FILTER */
diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c
index c2e0a50e13..218ba5282c 100644
--- a/libavfilter/f_metadata.c
+++ b/libavfilter/f_metadata.c
@@ -410,5 +410,6 @@ const FFFilter ff_vf_metadata = {
     .uninit      = uninit,
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_METADATA_FILTER */
diff --git a/libavfilter/f_perms.c b/libavfilter/f_perms.c
index 28d32e6b94..7c35ceb770 100644
--- a/libavfilter/f_perms.c
+++ b/libavfilter/f_perms.c
@@ -160,5 +160,6 @@ const FFFilter ff_vf_perms = {
     FILTER_INPUTS(perms_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     .process_command = ff_filter_process_command,
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_PERMS_FILTER */
diff --git a/libavfilter/f_realtime.c b/libavfilter/f_realtime.c
index e142e0ca57..3076c99580 100644
--- a/libavfilter/f_realtime.c
+++ b/libavfilter/f_realtime.c
@@ -96,6 +96,7 @@ const FFFilter ff_vf_realtime = {
     FILTER_INPUTS(avfilter_vf_realtime_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     .process_command = ff_filter_process_command,
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_REALTIME_FILTER */

diff --git a/libavfilter/f_reverse.c b/libavfilter/f_reverse.c
index 4bd963288f..50b08dc06e 100644
--- a/libavfilter/f_reverse.c
+++ b/libavfilter/f_reverse.c
@@ -155,6 +155,7 @@ const FFFilter ff_vf_reverse = {
     .uninit      = uninit,
     FILTER_INPUTS(reverse_inputs),
     FILTER_OUTPUTS(reverse_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #endif /* CONFIG_REVERSE_FILTER */
diff --git a/libavfilter/f_segment.c b/libavfilter/f_segment.c
index ece53ae56d..0b67afbb83 100644
--- a/libavfilter/f_segment.c
+++ b/libavfilter/f_segment.c
@@ -299,6 +299,7 @@ const FFFilter ff_vf_segment = {
     .priv_size   = sizeof(SegmentContext),
     .activate    = activate,
     FILTER_INPUTS(segment_inputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif // CONFIG_SEGMENT_FILTER

diff --git a/libavfilter/f_sendcmd.c b/libavfilter/f_sendcmd.c
index 304658ae3d..27029a0e44 100644
--- a/libavfilter/f_sendcmd.c
+++ b/libavfilter/f_sendcmd.c
@@ -610,6 +610,7 @@ const FFFilter ff_vf_sendcmd = {
     .priv_size   = sizeof(SendCmdContext),
     FILTER_INPUTS(sendcmd_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #endif
diff --git a/libavfilter/f_sidedata.c b/libavfilter/f_sidedata.c
index eb0301c5ce..97f646b344 100644
--- a/libavfilter/f_sidedata.c
+++ b/libavfilter/f_sidedata.c
@@ -220,5 +220,6 @@ const FFFilter ff_vf_sidedata = {
     .init        = init,
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_SIDEDATA_FILTER */
diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
index 12ace0d43b..5648a9ffae 100644
--- a/libavfilter/setpts.c
+++ b/libavfilter/setpts.c
@@ -350,6 +350,7 @@ const FFFilter ff_vf_setpts = {

     FILTER_INPUTS(avfilter_vf_setpts_inputs),
     FILTER_OUTPUTS(outputs_video),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_SETPTS_FILTER */

diff --git a/libavfilter/settb.c b/libavfilter/settb.c
index 6000c9c5a6..c693239d19 100644
--- a/libavfilter/settb.c
+++ b/libavfilter/settb.c
@@ -181,6 +181,7 @@ const FFFilter ff_vf_settb = {
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(avfilter_vf_settb_outputs),
     .activate    = activate,
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_SETTB_FILTER */

diff --git a/libavfilter/split.c b/libavfilter/split.c
index d0bd0c3b2a..733f1fa298 100644
--- a/libavfilter/split.c
+++ b/libavfilter/split.c
@@ -133,6 +133,7 @@ const FFFilter ff_vf_split = {
     .init        = split_init,
     .activate    = activate,
     FILTER_INPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 const FFFilter ff_af_asplit = {
diff --git a/libavfilter/trim.c b/libavfilter/trim.c
index 6d1016ac81..1077ff3d1a 100644
--- a/libavfilter/trim.c
+++ b/libavfilter/trim.c
@@ -358,6 +358,7 @@ const FFFilter ff_vf_trim = {
     .priv_size   = sizeof(TrimContext),
     FILTER_INPUTS(trim_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif // CONFIG_TRIM_FILTER

diff --git a/libavfilter/vf_aspect.c b/libavfilter/vf_aspect.c
index 7ec1035336..b35592e946 100644
--- a/libavfilter/vf_aspect.c
+++ b/libavfilter/vf_aspect.c
@@ -195,6 +195,7 @@ const FFFilter ff_vf_setdar = {
     .priv_size   = sizeof(AspectContext),
     FILTER_INPUTS(aspect_inputs),
     FILTER_OUTPUTS(avfilter_vf_setdar_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #endif /* CONFIG_SETDAR_FILTER */
@@ -250,6 +251,7 @@ const FFFilter ff_vf_setsar = {
     .priv_size   = sizeof(AspectContext),
     FILTER_INPUTS(aspect_inputs),
     FILTER_OUTPUTS(avfilter_vf_setsar_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #endif /* CONFIG_SETSAR_FILTER */
diff --git a/libavfilter/vf_ccrepack.c b/libavfilter/vf_ccrepack.c
index f3f0c69676..032c655230 100644
--- a/libavfilter/vf_ccrepack.c
+++ b/libavfilter/vf_ccrepack.c
@@ -95,4 +95,5 @@ const FFFilter ff_vf_ccrepack = {
     .priv_size   = sizeof(CCRepackContext),
     FILTER_INPUTS(avfilter_vf_ccrepack_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_dejudder.c b/libavfilter/vf_dejudder.c
index 9d0c4717d2..adb4367846 100644
--- a/libavfilter/vf_dejudder.c
+++ b/libavfilter/vf_dejudder.c
@@ -183,4 +183,5 @@ const FFFilter ff_vf_dejudder = {
     FILTER_OUTPUTS(dejudder_outputs),
     .init        = dejudder_init,
     .uninit      = dejudder_uninit,
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
index e81d7b1668..8ceccd8507 100644
--- a/libavfilter/vf_fps.c
+++ b/libavfilter/vf_fps.c
@@ -416,4 +416,5 @@ const FFFilter ff_vf_fps = {
     .activate    = activate,
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(avfilter_vf_fps_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_framestep.c b/libavfilter/vf_framestep.c
index 02beda6cf3..2d9efd5e7b 100644
--- a/libavfilter/vf_framestep.c
+++ b/libavfilter/vf_framestep.c
@@ -98,4 +98,5 @@ const FFFilter ff_vf_framestep = {
     .priv_size   = sizeof(FrameStepContext),
     FILTER_INPUTS(framestep_inputs),
     FILTER_OUTPUTS(framestep_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_fsync.c b/libavfilter/vf_fsync.c
index 02f10a9bd8..3fb65e13c3 100644
--- a/libavfilter/vf_fsync.c
+++ b/libavfilter/vf_fsync.c
@@ -300,4 +300,5 @@ const FFFilter ff_vf_fsync = {
     .formats_state = FF_FILTER_FORMATS_PASSTHROUGH,
     FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(fsync_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_random.c b/libavfilter/vf_random.c
index ca95ca2c10..42775abb78 100644
--- a/libavfilter/vf_random.c
+++ b/libavfilter/vf_random.c
@@ -150,4 +150,5 @@ const FFFilter ff_vf_random = {
     .uninit      = uninit,
     FILTER_INPUTS(random_inputs),
     FILTER_OUTPUTS(random_outputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_setparams.c b/libavfilter/vf_setparams.c
index a518857fe5..62e7a43fed 100644
--- a/libavfilter/vf_setparams.c
+++ b/libavfilter/vf_setparams.c
@@ -234,6 +234,7 @@ const FFFilter ff_vf_setparams = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC2(query_formats),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };

 #if CONFIG_SETRANGE_FILTER
@@ -277,6 +278,7 @@ const FFFilter ff_vf_setrange = {
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC2(query_formats),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_SETRANGE_FILTER */

@@ -314,5 +316,6 @@ const FFFilter ff_vf_setfield = {
     .init        = init_setfield,
     FILTER_INPUTS(inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
 #endif /* CONFIG_SETFIELD_FILTER */
diff --git a/libavfilter/vf_shuffleframes.c b/libavfilter/vf_shuffleframes.c
index 7d16fcc497..c7f29517ca 100644
--- a/libavfilter/vf_shuffleframes.c
+++ b/libavfilter/vf_shuffleframes.c
@@ -157,4 +157,5 @@ const FFFilter ff_vf_shuffleframes = {
     .uninit        = uninit,
     FILTER_INPUTS(shuffleframes_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_tpad.c b/libavfilter/vf_tpad.c
index 7580fbaa5b..a1c9aecd35 100644
--- a/libavfilter/vf_tpad.c
+++ b/libavfilter/vf_tpad.c
@@ -250,4 +250,5 @@ const FFFilter ff_vf_tpad = {
     FILTER_INPUTS(tpad_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC2(query_formats),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vf_vfrdet.c b/libavfilter/vf_vfrdet.c
index f99bc71de7..ebd8b6e100 100644
--- a/libavfilter/vf_vfrdet.c
+++ b/libavfilter/vf_vfrdet.c
@@ -106,4 +106,5 @@ const FFFilter ff_vf_vfrdet = {
     .uninit      = uninit,
     FILTER_INPUTS(vfrdet_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };
diff --git a/libavfilter/vsink_nullsink.c b/libavfilter/vsink_nullsink.c
index 2a671e1402..ddbd67a9a3 100644
--- a/libavfilter/vsink_nullsink.c
+++ b/libavfilter/vsink_nullsink.c
@@ -40,4 +40,5 @@ const FFFilter ff_vsink_nullsink = {
     .p.outputs   = NULL,
     .priv_size   = 0,
     FILTER_INPUTS(avfilter_vsink_nullsink_inputs),
+    .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS,
 };