From ec26cd494fdddf25a9534bfd68e23e4fc794733c Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 11 Oct 2026 00:01:16 +0200 Subject: [PATCH] avfilter: declare filters that handle changed frame sizes These filters process each frame with its own size. Found during review of the fix for the security report RqgTntCAW2qN. --- libavfilter/f_drawgraph.c | 1 + libavfilter/f_interleave.c | 1 + libavfilter/f_streamselect.c | 1 + libavfilter/vf_colordetect.c | 1 + libavfilter/vf_copy.c | 1 + libavfilter/vf_drawbox.c | 2 ++ libavfilter/vf_iccdetect.c | 1 + libavfilter/vf_iccgen.c | 1 + libavfilter/vf_ocr.c | 1 + libavfilter/vf_shuffleplanes.c | 1 + libavfilter/vf_zscale.c | 1 + 11 files changed, 12 insertions(+) diff --git a/libavfilter/f_drawgraph.c b/libavfilter/f_drawgraph.c index c9ac6c0ca9..4f6ad8ef23 100644 --- a/libavfilter/f_drawgraph.c +++ b/libavfilter/f_drawgraph.c @@ -484,6 +484,7 @@ const FFFilter ff_vf_drawgraph = { FILTER_INPUTS(drawgraph_inputs), FILTER_OUTPUTS(drawgraph_outputs), FILTER_QUERY_FUNC2(query_formats), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS, }; #endif // CONFIG_DRAWGRAPH_FILTER diff --git a/libavfilter/f_interleave.c b/libavfilter/f_interleave.c index 31e903e6b0..baa502ba56 100644 --- a/libavfilter/f_interleave.c +++ b/libavfilter/f_interleave.c @@ -239,6 +239,7 @@ const FFFilter ff_vf_interleave = { .init = init, .activate = activate, FILTER_OUTPUTS(interleave_outputs), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS, }; #endif diff --git a/libavfilter/f_streamselect.c b/libavfilter/f_streamselect.c index 7378c9c2fe..cce74b6dde 100644 --- a/libavfilter/f_streamselect.c +++ b/libavfilter/f_streamselect.c @@ -306,6 +306,7 @@ const FFFilter ff_vf_streamselect = { .uninit = uninit, .activate = activate, .priv_size = sizeof(StreamSelectContext), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS, }; const FFFilter ff_af_astreamselect = { diff --git a/libavfilter/vf_colordetect.c b/libavfilter/vf_colordetect.c index d1a7ba6f49..5d5c27cc4a 100644 --- a/libavfilter/vf_colordetect.c +++ b/libavfilter/vf_colordetect.c @@ -308,4 +308,5 @@ const FFFilter ff_vf_colordetect = { FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_QUERY_FUNC2(query_format), .activate = activate, + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; diff --git a/libavfilter/vf_copy.c b/libavfilter/vf_copy.c index c6d5191901..92070d6f66 100644 --- a/libavfilter/vf_copy.c +++ b/libavfilter/vf_copy.c @@ -76,4 +76,5 @@ const FFFilter ff_vf_copy = { FILTER_INPUTS(avfilter_vf_copy_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_QUERY_FUNC2(query_formats), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c index 571988416c..ec409603d3 100644 --- a/libavfilter/vf_drawbox.c +++ b/libavfilter/vf_drawbox.c @@ -482,6 +482,7 @@ const FFFilter ff_vf_drawbox = { FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_PIXFMTS_ARRAY(pix_fmts), .process_command = process_command, + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; #endif /* CONFIG_DRAWBOX_FILTER */ @@ -557,6 +558,7 @@ const FFFilter ff_vf_drawgrid = { FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_PIXFMTS_ARRAY(pix_fmts), .process_command = process_command, + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; #endif /* CONFIG_DRAWGRID_FILTER */ diff --git a/libavfilter/vf_iccdetect.c b/libavfilter/vf_iccdetect.c index 6af7132c5c..722c645b24 100644 --- a/libavfilter/vf_iccdetect.c +++ b/libavfilter/vf_iccdetect.c @@ -136,4 +136,5 @@ const FFFilter ff_vf_iccdetect = { .uninit = &iccdetect_uninit, FILTER_INPUTS(iccdetect_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS, }; diff --git a/libavfilter/vf_iccgen.c b/libavfilter/vf_iccgen.c index 06c5b4ebdc..fdc4107df5 100644 --- a/libavfilter/vf_iccgen.c +++ b/libavfilter/vf_iccgen.c @@ -172,4 +172,5 @@ const FFFilter ff_vf_iccgen = { .uninit = &iccgen_uninit, FILTER_INPUTS(iccgen_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_PARAMS, }; diff --git a/libavfilter/vf_ocr.c b/libavfilter/vf_ocr.c index 16266373bf..e6fd925f6c 100644 --- a/libavfilter/vf_ocr.c +++ b/libavfilter/vf_ocr.c @@ -139,4 +139,5 @@ const FFFilter ff_vf_ocr = { FILTER_INPUTS(ocr_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_PIXFMTS_ARRAY(pix_fmts), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; diff --git a/libavfilter/vf_shuffleplanes.c b/libavfilter/vf_shuffleplanes.c index 41888cd401..dfafe36ec6 100644 --- a/libavfilter/vf_shuffleplanes.c +++ b/libavfilter/vf_shuffleplanes.c @@ -165,4 +165,5 @@ const FFFilter ff_vf_shuffleplanes = { FILTER_INPUTS(shuffleplanes_inputs), FILTER_OUTPUTS(ff_video_default_filterpad), FILTER_QUERY_FUNC2(query_formats), + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, }; diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c index a2d77be1dd..8f600cbf03 100644 --- a/libavfilter/vf_zscale.c +++ b/libavfilter/vf_zscale.c @@ -1109,4 +1109,5 @@ const FFFilter ff_vf_zscale = { FILTER_OUTPUTS(avfilter_vf_zscale_outputs), FILTER_QUERY_FUNC2(query_formats), .process_command = process_command, + .flags_internal = FF_FILTER_FLAG_DYNAMIC_FRAME_SIZE, };