Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs
@ 2023-08-03 14:27 Andreas Rheinhardt
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 2/4] avfilter/internal: Don't include video.h Andreas Rheinhardt
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-03 14:27 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Lots of audio filters use very simple inputs or outputs:
An array with a single AVFilterPad whose name is "default"
and whose type is AVMEDIA_TYPE_AUDIO; everything else is unset.

Given that we never use pointer equality for inputs or outputs*,
we can simply use a single AVFilterPad instead of dozens; this
even saves .data.rel.ro (4784B here) as well as relocations.

*: In fact, several filters (like the filters in af_biquads.c)
already use the same inputs; furthermore, ff_filter_alloc()
duplicates the input and output pads so that we do not even
work with the pads directly.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavfilter/af_acontrast.c         |  9 +--------
 libavfilter/af_acopy.c             |  9 +--------
 libavfilter/af_acrusher.c          |  9 +--------
 libavfilter/af_adeclick.c          | 11 ++---------
 libavfilter/af_adecorrelate.c      |  9 +--------
 libavfilter/af_adelay.c            |  9 +--------
 libavfilter/af_aderivative.c       | 11 ++---------
 libavfilter/af_adrc.c              |  9 +--------
 libavfilter/af_adynamicequalizer.c |  9 +--------
 libavfilter/af_adynamicsmooth.c    |  9 +--------
 libavfilter/af_aecho.c             |  9 +--------
 libavfilter/af_aemphasis.c         |  9 +--------
 libavfilter/af_aexciter.c          |  9 +--------
 libavfilter/af_afftdn.c            |  9 +--------
 libavfilter/af_afftfilt.c          |  9 +--------
 libavfilter/af_aformat.c           | 18 ++----------------
 libavfilter/af_afreqshift.c        | 11 ++---------
 libavfilter/af_afwtdn.c            |  9 +--------
 libavfilter/af_agate.c             |  9 +--------
 libavfilter/af_anlmdn.c            |  9 +--------
 libavfilter/af_anull.c             | 18 ++----------------
 libavfilter/af_apad.c              |  9 +--------
 libavfilter/af_apsyclip.c          |  9 +--------
 libavfilter/af_apulsator.c         |  9 +--------
 libavfilter/af_aresample.c         |  9 +--------
 libavfilter/af_arnndn.c            |  9 +--------
 libavfilter/af_asetnsamples.c      | 18 ++----------------
 libavfilter/af_ashowinfo.c         |  9 +--------
 libavfilter/af_asoftclip.c         |  9 +--------
 libavfilter/af_aspectralstats.c    |  9 +--------
 libavfilter/af_asr.c               |  9 +--------
 libavfilter/af_asubboost.c         |  9 +--------
 libavfilter/af_asupercut.c         | 15 ++++-----------
 libavfilter/af_atilt.c             |  9 +--------
 libavfilter/af_biquads.c           |  9 +--------
 libavfilter/af_channelmap.c        |  9 +--------
 libavfilter/af_channelsplit.c      |  9 +--------
 libavfilter/af_compensationdelay.c |  9 +--------
 libavfilter/af_crossfeed.c         |  9 +--------
 libavfilter/af_crystalizer.c       |  9 +--------
 libavfilter/af_dcshift.c           |  9 +--------
 libavfilter/af_deesser.c           |  9 +--------
 libavfilter/af_dialoguenhance.c    |  9 +--------
 libavfilter/af_dynaudnorm.c        |  9 +--------
 libavfilter/af_earwax.c            |  9 +--------
 libavfilter/af_extrastereo.c       |  9 +--------
 libavfilter/af_flanger.c           |  9 +--------
 libavfilter/af_haas.c              |  9 +--------
 libavfilter/af_hdcd.c              |  9 +--------
 libavfilter/af_loudnorm.c          |  9 +--------
 libavfilter/af_pan.c               |  9 +--------
 libavfilter/af_rubberband.c        |  9 +--------
 libavfilter/af_silencedetect.c     |  9 +--------
 libavfilter/af_sofalizer.c         |  9 +--------
 libavfilter/af_speechnorm.c        |  9 +--------
 libavfilter/af_stereotools.c       |  9 +--------
 libavfilter/af_stereowiden.c       |  9 +--------
 libavfilter/af_tremolo.c           |  9 +--------
 libavfilter/af_vibrato.c           |  9 +--------
 libavfilter/af_virtualbass.c       |  9 +--------
 libavfilter/af_volumedetect.c      |  9 +--------
 libavfilter/audio.c                |  7 +++++++
 libavfilter/audio.h                |  4 ++++
 libavfilter/avf_showcqt.c          | 10 ++--------
 libavfilter/avf_showcwt.c          |  9 +--------
 libavfilter/avf_showfreqs.c        |  9 +--------
 libavfilter/avf_showspatial.c      |  9 +--------
 libavfilter/avf_showspectrum.c     |  9 +--------
 libavfilter/avf_showwaves.c        |  9 +--------
 libavfilter/buffersink.c           |  9 +--------
 libavfilter/f_bench.c              | 10 ++--------
 libavfilter/f_cue.c                | 19 +++----------------
 libavfilter/f_graphmonitor.c       | 10 ++--------
 libavfilter/f_latency.c            | 19 +++----------------
 libavfilter/f_loop.c               |  9 +--------
 libavfilter/f_metadata.c           |  9 +--------
 libavfilter/f_perms.c              |  9 +--------
 libavfilter/f_realtime.c           | 10 ++--------
 libavfilter/f_sendcmd.c            |  9 +--------
 libavfilter/f_sidedata.c           | 10 ++--------
 libavfilter/f_zmq.c                |  9 +--------
 libavfilter/setpts.c               |  9 +--------
 libavfilter/settb.c                |  9 +--------
 libavfilter/split.c                |  9 +--------
 libavfilter/trim.c                 |  9 +--------
 85 files changed, 112 insertions(+), 710 deletions(-)

diff --git a/libavfilter/af_acontrast.c b/libavfilter/af_acontrast.c
index a4ed29e30a..91887e5689 100644
--- a/libavfilter/af_acontrast.c
+++ b/libavfilter/af_acontrast.c
@@ -169,20 +169,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_acontrast = {
     .name           = "acontrast",
     .description    = NULL_IF_CONFIG_SMALL("Simple audio dynamic range compression/expansion filter."),
     .priv_size      = sizeof(AudioContrastContext),
     .priv_class     = &acontrast_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
                       AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBLP),
 };
diff --git a/libavfilter/af_acopy.c b/libavfilter/af_acopy.c
index 1591ec9639..f65f04d461 100644
--- a/libavfilter/af_acopy.c
+++ b/libavfilter/af_acopy.c
@@ -53,17 +53,10 @@ static const AVFilterPad acopy_inputs[] = {
     },
 };
 
-static const AVFilterPad acopy_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_acopy = {
     .name          = "acopy",
     .description   = NULL_IF_CONFIG_SMALL("Copy the input audio unchanged to the output."),
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(acopy_inputs),
-    FILTER_OUTPUTS(acopy_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
diff --git a/libavfilter/af_acrusher.c b/libavfilter/af_acrusher.c
index 5c9f36529c..f29524c960 100644
--- a/libavfilter/af_acrusher.c
+++ b/libavfilter/af_acrusher.c
@@ -325,13 +325,6 @@ static const AVFilterPad avfilter_af_acrusher_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_acrusher_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_acrusher = {
     .name          = "acrusher",
     .description   = NULL_IF_CONFIG_SMALL("Reduce audio bit resolution."),
@@ -339,7 +332,7 @@ const AVFilter ff_af_acrusher = {
     .priv_class    = &acrusher_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_acrusher_inputs),
-    FILTER_OUTPUTS(avfilter_af_acrusher_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/af_adeclick.c b/libavfilter/af_adeclick.c
index 2db9a29fd3..5c9c4283ff 100644
--- a/libavfilter/af_adeclick.c
+++ b/libavfilter/af_adeclick.c
@@ -724,13 +724,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adeclick = {
     .name          = "adeclick",
     .description   = NULL_IF_CONFIG_SMALL("Remove impulsive noise from input audio."),
@@ -740,7 +733,7 @@ const AVFilter ff_af_adeclick = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SLICE_THREADS | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
 };
@@ -776,7 +769,7 @@ const AVFilter ff_af_adeclip = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SLICE_THREADS | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
 };
diff --git a/libavfilter/af_adecorrelate.c b/libavfilter/af_adecorrelate.c
index cadc62c1f7..8d7bced634 100644
--- a/libavfilter/af_adecorrelate.c
+++ b/libavfilter/af_adecorrelate.c
@@ -230,13 +230,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adecorrelate = {
     .name            = "adecorrelate",
     .description     = NULL_IF_CONFIG_SMALL("Apply decorrelation to input audio."),
@@ -244,7 +237,7 @@ const AVFilter ff_af_adecorrelate = {
     .priv_class      = &adecorrelate_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                        AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_adelay.c b/libavfilter/af_adelay.c
index 03a4e39842..87a86170a8 100644
--- a/libavfilter/af_adelay.c
+++ b/libavfilter/af_adelay.c
@@ -466,13 +466,6 @@ static const AVFilterPad adelay_inputs[] = {
     },
 };
 
-static const AVFilterPad adelay_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adelay = {
     .name          = "adelay",
     .description   = NULL_IF_CONFIG_SMALL("Delay one or more audio channels."),
@@ -481,7 +474,7 @@ const AVFilter ff_af_adelay = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(adelay_inputs),
-    FILTER_OUTPUTS(adelay_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_U8P, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32P,
                       AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/af_aderivative.c b/libavfilter/af_aderivative.c
index 853c0f3412..eeaa23ff88 100644
--- a/libavfilter/af_aderivative.c
+++ b/libavfilter/af_aderivative.c
@@ -153,13 +153,6 @@ static const AVFilterPad aderivative_inputs[] = {
     },
 };
 
-static const AVFilterPad aderivative_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVOption aderivative_options[] = {
     { NULL }
 };
@@ -173,7 +166,7 @@ const AVFilter ff_af_aderivative = {
     .priv_class    = &aderivative_class,
     .uninit        = uninit,
     FILTER_INPUTS(aderivative_inputs),
-    FILTER_OUTPUTS(aderivative_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_FLTP,
                       AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
@@ -186,7 +179,7 @@ const AVFilter ff_af_aintegral = {
     .priv_class    = &aderivative_class,
     .uninit        = uninit,
     FILTER_INPUTS(aderivative_inputs),
-    FILTER_OUTPUTS(aderivative_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
 };
diff --git a/libavfilter/af_adrc.c b/libavfilter/af_adrc.c
index 54997c383e..34e5433a6b 100644
--- a/libavfilter/af_adrc.c
+++ b/libavfilter/af_adrc.c
@@ -485,13 +485,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adrc = {
     .name            = "adrc",
     .description     = NULL_IF_CONFIG_SMALL("Audio Spectral Dynamic Range Controller."),
@@ -499,7 +492,7 @@ const AVFilter ff_af_adrc = {
     .priv_class      = &adrc_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                        AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_adynamicequalizer.c b/libavfilter/af_adynamicequalizer.c
index 2a76827ada..2c674cbd7c 100644
--- a/libavfilter/af_adynamicequalizer.c
+++ b/libavfilter/af_adynamicequalizer.c
@@ -204,13 +204,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adynamicequalizer = {
     .name            = "adynamicequalizer",
     .description     = NULL_IF_CONFIG_SMALL("Apply Dynamic Equalization of input audio."),
@@ -218,7 +211,7 @@ const AVFilter ff_af_adynamicequalizer = {
     .priv_class      = &adynamicequalizer_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                        AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_adynamicsmooth.c b/libavfilter/af_adynamicsmooth.c
index 3f98d09f5d..72e7120bd7 100644
--- a/libavfilter/af_adynamicsmooth.c
+++ b/libavfilter/af_adynamicsmooth.c
@@ -121,13 +121,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_adynamicsmooth = {
     .name            = "adynamicsmooth",
     .description     = NULL_IF_CONFIG_SMALL("Apply Dynamic Smoothing of input audio."),
@@ -135,7 +128,7 @@ const AVFilter ff_af_adynamicsmooth = {
     .priv_class      = &adynamicsmooth_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_aecho.c b/libavfilter/af_aecho.c
index e610c30d59..0b57c0e587 100644
--- a/libavfilter/af_aecho.c
+++ b/libavfilter/af_aecho.c
@@ -328,13 +328,6 @@ static int activate(AVFilterContext *ctx)
     return request_frame(outlink);
 }
 
-static const AVFilterPad aecho_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad aecho_outputs[] = {
     {
         .name          = "default",
@@ -351,7 +344,7 @@ const AVFilter ff_af_aecho = {
     .init          = init,
     .activate      = activate,
     .uninit        = uninit,
-    FILTER_INPUTS(aecho_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(aecho_outputs),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32P,
                       AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
diff --git a/libavfilter/af_aemphasis.c b/libavfilter/af_aemphasis.c
index 91878987d3..4f05b26993 100644
--- a/libavfilter/af_aemphasis.c
+++ b/libavfilter/af_aemphasis.c
@@ -361,13 +361,6 @@ static const AVFilterPad avfilter_af_aemphasis_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_aemphasis_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_aemphasis = {
     .name          = "aemphasis",
     .description   = NULL_IF_CONFIG_SMALL("Audio emphasis."),
@@ -375,7 +368,7 @@ const AVFilter ff_af_aemphasis = {
     .priv_class    = &aemphasis_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_aemphasis_inputs),
-    FILTER_OUTPUTS(avfilter_af_aemphasis_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
diff --git a/libavfilter/af_aexciter.c b/libavfilter/af_aexciter.c
index 8e829f992b..400d6707b5 100644
--- a/libavfilter/af_aexciter.c
+++ b/libavfilter/af_aexciter.c
@@ -264,13 +264,6 @@ static const AVFilterPad avfilter_af_aexciter_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_aexciter_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_aexciter = {
     .name          = "aexciter",
     .description   = NULL_IF_CONFIG_SMALL("Enhance high frequency part of audio."),
@@ -278,7 +271,7 @@ const AVFilter ff_af_aexciter = {
     .priv_class    = &aexciter_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_aexciter_inputs),
-    FILTER_OUTPUTS(avfilter_af_aexciter_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c
index de17dc1b2c..6aa51184f5 100644
--- a/libavfilter/af_afftdn.c
+++ b/libavfilter/af_afftdn.c
@@ -1357,13 +1357,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_afftdn = {
     .name            = "afftdn",
     .description     = NULL_IF_CONFIG_SMALL("Denoise audio samples using FFT."),
@@ -1372,7 +1365,7 @@ const AVFilter ff_af_afftdn = {
     .activate        = activate,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
diff --git a/libavfilter/af_afftfilt.c b/libavfilter/af_afftfilt.c
index 9b09dcaa39..2b2a70b0b6 100644
--- a/libavfilter/af_afftfilt.c
+++ b/libavfilter/af_afftfilt.c
@@ -439,20 +439,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_afftfilt = {
     .name            = "afftfilt",
     .description     = NULL_IF_CONFIG_SMALL("Apply arbitrary expressions to samples in frequency domain."),
     .priv_size       = sizeof(AFFTFiltContext),
     .priv_class      = &afftfilt_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .activate        = activate,
     .uninit          = uninit,
diff --git a/libavfilter/af_aformat.c b/libavfilter/af_aformat.c
index a14e4c1240..367a02df33 100644
--- a/libavfilter/af_aformat.c
+++ b/libavfilter/af_aformat.c
@@ -176,20 +176,6 @@ static int query_formats(AVFilterContext *ctx)
     return ret;
 }
 
-static const AVFilterPad avfilter_af_aformat_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
-static const AVFilterPad avfilter_af_aformat_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO
-    },
-};
-
 const AVFilter ff_af_aformat = {
     .name          = "aformat",
     .description   = NULL_IF_CONFIG_SMALL("Convert the input audio to one of the specified formats."),
@@ -198,7 +184,7 @@ const AVFilter ff_af_aformat = {
     .priv_size     = sizeof(AFormatContext),
     .priv_class    = &aformat_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(avfilter_af_aformat_inputs),
-    FILTER_OUTPUTS(avfilter_af_aformat_outputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_afreqshift.c b/libavfilter/af_afreqshift.c
index 4df92a499a..ff2ba9f6c5 100644
--- a/libavfilter/af_afreqshift.c
+++ b/libavfilter/af_afreqshift.c
@@ -366,13 +366,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_afreqshift = {
     .name            = "afreqshift",
     .description     = NULL_IF_CONFIG_SMALL("Apply frequency shifting to input audio."),
@@ -380,7 +373,7 @@ const AVFilter ff_af_afreqshift = {
     .priv_class      = &afreqshift_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = ff_filter_process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
@@ -403,7 +396,7 @@ const AVFilter ff_af_aphaseshift = {
     .priv_class      = &aphaseshift_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = ff_filter_process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
diff --git a/libavfilter/af_afwtdn.c b/libavfilter/af_afwtdn.c
index cf41b6f4bc..d0c3cbbe83 100644
--- a/libavfilter/af_afwtdn.c
+++ b/libavfilter/af_afwtdn.c
@@ -1290,13 +1290,6 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
     return 0;
 }
 
-static const AVFilterPad inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad outputs[] = {
     {
         .name          = "default",
@@ -1312,7 +1305,7 @@ const AVFilter ff_af_afwtdn = {
     .priv_class      = &afwtdn_class,
     .activate        = activate,
     .uninit          = uninit,
-    FILTER_INPUTS(inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
diff --git a/libavfilter/af_agate.c b/libavfilter/af_agate.c
index 51bc8c04d4..8205045ba5 100644
--- a/libavfilter/af_agate.c
+++ b/libavfilter/af_agate.c
@@ -228,20 +228,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_agate = {
     .name           = "agate",
     .description    = NULL_IF_CONFIG_SMALL("Audio gate."),
     .priv_class     = &agate_sidechaingate_class,
     .priv_size      = sizeof(AudioGateContext),
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .process_command = ff_filter_process_command,
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/af_anlmdn.c b/libavfilter/af_anlmdn.c
index 8f01c5f8a2..af21a52a12 100644
--- a/libavfilter/af_anlmdn.c
+++ b/libavfilter/af_anlmdn.c
@@ -343,13 +343,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->window);
 }
 
-static const AVFilterPad inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad outputs[] = {
     {
         .name          = "default",
@@ -365,7 +358,7 @@ const AVFilter ff_af_anlmdn = {
     .priv_class    = &anlmdn_class,
     .activate      = activate,
     .uninit        = uninit,
-    FILTER_INPUTS(inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .process_command = process_command,
diff --git a/libavfilter/af_anull.c b/libavfilter/af_anull.c
index 78c5faeb23..257dba1a41 100644
--- a/libavfilter/af_anull.c
+++ b/libavfilter/af_anull.c
@@ -27,24 +27,10 @@
 #include "internal.h"
 #include "libavutil/internal.h"
 
-static const AVFilterPad avfilter_af_anull_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
-static const AVFilterPad avfilter_af_anull_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_anull = {
     .name          = "anull",
     .description   = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."),
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(avfilter_af_anull_inputs),
-    FILTER_OUTPUTS(avfilter_af_anull_outputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
diff --git a/libavfilter/af_apad.c b/libavfilter/af_apad.c
index 45693a2bd5..1e0ecd201e 100644
--- a/libavfilter/af_apad.c
+++ b/libavfilter/af_apad.c
@@ -187,13 +187,6 @@ static int config_output(AVFilterLink *outlink)
     return 0;
 }
 
-static const AVFilterPad apad_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad apad_outputs[] = {
     {
         .name          = "default",
@@ -208,7 +201,7 @@ const AVFilter ff_af_apad = {
     .init          = init,
     .activate      = activate,
     .priv_size     = sizeof(APadContext),
-    FILTER_INPUTS(apad_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(apad_outputs),
     .priv_class    = &apad_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/af_apsyclip.c b/libavfilter/af_apsyclip.c
index 0b5859068b..6a0c23d6eb 100644
--- a/libavfilter/af_apsyclip.c
+++ b/libavfilter/af_apsyclip.c
@@ -637,13 +637,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_apsyclip = {
     .name            = "apsyclip",
     .description     = NULL_IF_CONFIG_SMALL("Audio Psychoacoustic Clipper."),
@@ -651,7 +644,7 @@ const AVFilter ff_af_apsyclip = {
     .priv_class      = &apsyclip_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                        AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_apulsator.c b/libavfilter/af_apulsator.c
index d4d3c59c38..51b4344a39 100644
--- a/libavfilter/af_apulsator.c
+++ b/libavfilter/af_apulsator.c
@@ -237,19 +237,12 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_apulsator = {
     .name          = "apulsator",
     .description   = NULL_IF_CONFIG_SMALL("Audio pulsator."),
     .priv_size     = sizeof(AudioPulsatorContext),
     .priv_class    = &apulsator_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_aresample.c b/libavfilter/af_aresample.c
index 9cc50d4b38..ead85dd46d 100644
--- a/libavfilter/af_aresample.c
+++ b/libavfilter/af_aresample.c
@@ -357,13 +357,6 @@ static const AVClass aresample_class = {
     .child_next       = resample_child_next,
 };
 
-static const AVFilterPad aresample_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad aresample_outputs[] = {
     {
         .name          = "default",
@@ -380,7 +373,7 @@ const AVFilter ff_af_aresample = {
     .uninit        = uninit,
     .priv_size     = sizeof(AResampleContext),
     .priv_class    = &aresample_class,
-    FILTER_INPUTS(aresample_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(aresample_outputs),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_arnndn.c b/libavfilter/af_arnndn.c
index 634f3b972f..ee005eb34c 100644
--- a/libavfilter/af_arnndn.c
+++ b/libavfilter/af_arnndn.c
@@ -1585,13 +1585,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 #define OFFSET(x) offsetof(AudioRNNContext, x)
 #define AF AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -1613,7 +1606,7 @@ const AVFilter ff_af_arnndn = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                      AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c
index 20cc70ce4a..e220444c3c 100644
--- a/libavfilter/af_asetnsamples.c
+++ b/libavfilter/af_asetnsamples.c
@@ -104,27 +104,13 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad asetnsamples_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
-static const AVFilterPad asetnsamples_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asetnsamples = {
     .name        = "asetnsamples",
     .description = NULL_IF_CONFIG_SMALL("Set the number of samples for each output audio frames."),
     .priv_size   = sizeof(ASNSContext),
     .priv_class  = &asetnsamples_class,
-    FILTER_INPUTS(asetnsamples_inputs),
-    FILTER_OUTPUTS(asetnsamples_outputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .activate    = activate,
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_ashowinfo.c b/libavfilter/af_ashowinfo.c
index 20900369d0..17a0a90542 100644
--- a/libavfilter/af_ashowinfo.c
+++ b/libavfilter/af_ashowinfo.c
@@ -253,13 +253,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_ashowinfo = {
     .name        = "ashowinfo",
     .description = NULL_IF_CONFIG_SMALL("Show textual information for each audio frame."),
@@ -267,5 +260,5 @@ const AVFilter ff_af_ashowinfo = {
     .uninit      = uninit,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
diff --git a/libavfilter/af_asoftclip.c b/libavfilter/af_asoftclip.c
index 6212e1d6fe..6fea6e56ab 100644
--- a/libavfilter/af_asoftclip.c
+++ b/libavfilter/af_asoftclip.c
@@ -473,20 +473,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asoftclip = {
     .name           = "asoftclip",
     .description    = NULL_IF_CONFIG_SMALL("Audio Soft Clipper."),
     .priv_size      = sizeof(ASoftClipContext),
     .priv_class     = &asoftclip_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .uninit         = uninit,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_aspectralstats.c b/libavfilter/af_aspectralstats.c
index b9db6bcfa5..a0fd4aabc9 100644
--- a/libavfilter/af_aspectralstats.c
+++ b/libavfilter/af_aspectralstats.c
@@ -600,13 +600,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->window);
 }
 
-static const AVFilterPad aspectralstats_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad aspectralstats_outputs[] = {
     {
         .name         = "default",
@@ -622,7 +615,7 @@ const AVFilter ff_af_aspectralstats = {
     .priv_class    = &aspectralstats_class,
     .uninit        = uninit,
     .activate      = activate,
-    FILTER_INPUTS(aspectralstats_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(aspectralstats_outputs),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .flags         = AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/af_asr.c b/libavfilter/af_asr.c
index b402f5ff26..a9dd047cb3 100644
--- a/libavfilter/af_asr.c
+++ b/libavfilter/af_asr.c
@@ -158,13 +158,6 @@ static const AVFilterPad asr_inputs[] = {
     },
 };
 
-static const AVFilterPad asr_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asr = {
     .name          = "asr",
     .description   = NULL_IF_CONFIG_SMALL("Automatic Speech Recognition."),
@@ -174,6 +167,6 @@ const AVFilter ff_af_asr = {
     .uninit        = asr_uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(asr_inputs),
-    FILTER_OUTPUTS(asr_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_asubboost.c b/libavfilter/af_asubboost.c
index 29a1f66ce6..e132158da6 100644
--- a/libavfilter/af_asubboost.c
+++ b/libavfilter/af_asubboost.c
@@ -237,13 +237,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asubboost = {
     .name           = "asubboost",
     .description    = NULL_IF_CONFIG_SMALL("Boost subwoofer frequencies."),
@@ -251,7 +244,7 @@ const AVFilter ff_af_asubboost = {
     .priv_class     = &asubboost_class,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
diff --git a/libavfilter/af_asupercut.c b/libavfilter/af_asupercut.c
index 5c06d559ed..6764bee25d 100644
--- a/libavfilter/af_asupercut.c
+++ b/libavfilter/af_asupercut.c
@@ -333,13 +333,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asupercut = {
     .name            = "asupercut",
     .description     = NULL_IF_CONFIG_SMALL("Cut super frequencies."),
@@ -347,7 +340,7 @@ const AVFilter ff_af_asupercut = {
     .priv_class      = &asupercut_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
@@ -370,7 +363,7 @@ const AVFilter ff_af_asubcut = {
     .priv_class      = &asubcut_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
@@ -395,7 +388,7 @@ const AVFilter ff_af_asuperpass = {
     .priv_size       = sizeof(ASuperCutContext),
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
@@ -409,7 +402,7 @@ const AVFilter ff_af_asuperstop = {
     .priv_size       = sizeof(ASuperCutContext),
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS_ARRAY(sample_fmts),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
diff --git a/libavfilter/af_atilt.c b/libavfilter/af_atilt.c
index 9ece531ea4..2211a214d1 100644
--- a/libavfilter/af_atilt.c
+++ b/libavfilter/af_atilt.c
@@ -246,13 +246,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_atilt = {
     .name            = "atilt",
     .description     = NULL_IF_CONFIG_SMALL("Apply spectral tilt to audio."),
@@ -260,7 +253,7 @@ const AVFilter ff_af_atilt = {
     .priv_class      = &atilt_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c
index 3b12aee3c0..1453f51a16 100644
--- a/libavfilter/af_biquads.c
+++ b/libavfilter/af_biquads.c
@@ -1431,13 +1431,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_channel_layout_uninit(&s->ch_layout);
 }
 
-static const AVFilterPad inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad outputs[] = {
     {
         .name         = "default",
@@ -1467,7 +1460,7 @@ const AVFilter ff_af_##name_ = {                         \
     .init          = name_##_init,                       \
     .activate      = activate,                           \
     .uninit        = uninit,                             \
-    FILTER_INPUTS(inputs),                               \
+    FILTER_INPUTS(ff_audio_default_filterpad),           \
     FILTER_OUTPUTS(outputs),                             \
     FILTER_QUERY_FUNC(query_formats),                    \
     .process_command = process_command,                  \
diff --git a/libavfilter/af_channelmap.c b/libavfilter/af_channelmap.c
index eb173d20c4..09bc4cfbe1 100644
--- a/libavfilter/af_channelmap.c
+++ b/libavfilter/af_channelmap.c
@@ -409,13 +409,6 @@ static const AVFilterPad avfilter_af_channelmap_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_channelmap_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO
-    },
-};
-
 const AVFilter ff_af_channelmap = {
     .name          = "channelmap",
     .description   = NULL_IF_CONFIG_SMALL("Remap audio channels."),
@@ -423,6 +416,6 @@ const AVFilter ff_af_channelmap = {
     .priv_size     = sizeof(ChannelMapContext),
     .priv_class    = &channelmap_class,
     FILTER_INPUTS(avfilter_af_channelmap_inputs),
-    FILTER_OUTPUTS(avfilter_af_channelmap_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(channelmap_query_formats),
 };
diff --git a/libavfilter/af_channelsplit.c b/libavfilter/af_channelsplit.c
index b537e1380f..bd4afff122 100644
--- a/libavfilter/af_channelsplit.c
+++ b/libavfilter/af_channelsplit.c
@@ -232,13 +232,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad avfilter_af_channelsplit_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_channelsplit = {
     .name           = "channelsplit",
     .description    = NULL_IF_CONFIG_SMALL("Split audio into per-channel streams."),
@@ -247,7 +240,7 @@ const AVFilter ff_af_channelsplit = {
     .init           = init,
     .activate       = activate,
     .uninit         = uninit,
-    FILTER_INPUTS(avfilter_af_channelsplit_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     .outputs        = NULL,
     FILTER_QUERY_FUNC(query_formats),
     .flags          = AVFILTER_FLAG_DYNAMIC_OUTPUTS,
diff --git a/libavfilter/af_compensationdelay.c b/libavfilter/af_compensationdelay.c
index 754e02e3ee..924ccefe94 100644
--- a/libavfilter/af_compensationdelay.c
+++ b/libavfilter/af_compensationdelay.c
@@ -166,13 +166,6 @@ static const AVFilterPad compensationdelay_inputs[] = {
     },
 };
 
-static const AVFilterPad compensationdelay_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_compensationdelay = {
     .name          = "compensationdelay",
     .description   = NULL_IF_CONFIG_SMALL("Audio Compensation Delay Line."),
@@ -180,7 +173,7 @@ const AVFilter ff_af_compensationdelay = {
     .priv_class    = &compensationdelay_class,
     .uninit        = uninit,
     FILTER_INPUTS(compensationdelay_inputs),
-    FILTER_OUTPUTS(compensationdelay_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/af_crossfeed.c b/libavfilter/af_crossfeed.c
index 9a518e5258..ee6540a9fc 100644
--- a/libavfilter/af_crossfeed.c
+++ b/libavfilter/af_crossfeed.c
@@ -362,13 +362,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_crossfeed = {
     .name           = "crossfeed",
     .description    = NULL_IF_CONFIG_SMALL("Apply headphone crossfeed filter."),
@@ -377,7 +370,7 @@ const AVFilter ff_af_crossfeed = {
     .activate       = activate,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     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 449f24a082..08931fce43 100644
--- a/libavfilter/af_crystalizer.c
+++ b/libavfilter/af_crystalizer.c
@@ -233,13 +233,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_crystalizer = {
     .name           = "crystalizer",
     .description    = NULL_IF_CONFIG_SMALL("Simple audio noise sharpening filter."),
@@ -247,7 +240,7 @@ const AVFilter ff_af_crystalizer = {
     .priv_class     = &crystalizer_class,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
                       AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBLP),
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_dcshift.c b/libavfilter/af_dcshift.c
index 480f01f4a3..3e9ba7e528 100644
--- a/libavfilter/af_dcshift.c
+++ b/libavfilter/af_dcshift.c
@@ -122,13 +122,6 @@ static const AVFilterPad dcshift_inputs[] = {
     },
 };
 
-static const AVFilterPad dcshift_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_dcshift = {
     .name           = "dcshift",
     .description    = NULL_IF_CONFIG_SMALL("Apply a DC shift to the audio."),
@@ -136,7 +129,7 @@ const AVFilter ff_af_dcshift = {
     .priv_class     = &dcshift_class,
     .init           = init,
     FILTER_INPUTS(dcshift_inputs),
-    FILTER_OUTPUTS(dcshift_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_S32P),
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/af_deesser.c b/libavfilter/af_deesser.c
index cdef837155..40abf844ee 100644
--- a/libavfilter/af_deesser.c
+++ b/libavfilter/af_deesser.c
@@ -193,13 +193,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_deesser = {
     .name          = "deesser",
     .description   = NULL_IF_CONFIG_SMALL("Apply de-essing to the audio."),
@@ -207,7 +200,7 @@ const AVFilter ff_af_deesser = {
     .priv_class    = &deesser_class,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
 };
diff --git a/libavfilter/af_dialoguenhance.c b/libavfilter/af_dialoguenhance.c
index b613733faf..1af2d17153 100644
--- a/libavfilter/af_dialoguenhance.c
+++ b/libavfilter/af_dialoguenhance.c
@@ -385,13 +385,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_dialoguenhance = {
     .name            = "dialoguenhance",
     .description     = NULL_IF_CONFIG_SMALL("Audio Dialogue Enhancement."),
@@ -399,7 +392,7 @@ const AVFilter ff_af_dialoguenhance = {
     .priv_class      = &dialoguenhance_class,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .activate        = activate,
diff --git a/libavfilter/af_dynaudnorm.c b/libavfilter/af_dynaudnorm.c
index e9d8ad8ec8..fb0581b6e4 100644
--- a/libavfilter/af_dynaudnorm.c
+++ b/libavfilter/af_dynaudnorm.c
@@ -1019,13 +1019,6 @@ static const AVFilterPad avfilter_af_dynaudnorm_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_dynaudnorm_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_dynaudnorm = {
     .name          = "dynaudnorm",
     .description   = NULL_IF_CONFIG_SMALL("Dynamic Audio Normalizer."),
@@ -1034,7 +1027,7 @@ const AVFilter ff_af_dynaudnorm = {
     .uninit        = uninit,
     .activate      = activate,
     FILTER_INPUTS(avfilter_af_dynaudnorm_inputs),
-    FILTER_OUTPUTS(avfilter_af_dynaudnorm_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .priv_class    = &dynaudnorm_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
diff --git a/libavfilter/af_earwax.c b/libavfilter/af_earwax.c
index f420a5ac55..38ff9c1f3f 100644
--- a/libavfilter/af_earwax.c
+++ b/libavfilter/af_earwax.c
@@ -222,19 +222,12 @@ static const AVFilterPad earwax_inputs[] = {
     },
 };
 
-static const AVFilterPad earwax_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_earwax = {
     .name           = "earwax",
     .description    = NULL_IF_CONFIG_SMALL("Widen the stereo image."),
     .priv_size      = sizeof(EarwaxContext),
     .uninit         = uninit,
     FILTER_INPUTS(earwax_inputs),
-    FILTER_OUTPUTS(earwax_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_extrastereo.c b/libavfilter/af_extrastereo.c
index 6f1d691d8e..2b1b09f9c2 100644
--- a/libavfilter/af_extrastereo.c
+++ b/libavfilter/af_extrastereo.c
@@ -110,20 +110,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_extrastereo = {
     .name           = "extrastereo",
     .description    = NULL_IF_CONFIG_SMALL("Increase difference between stereo audio channels."),
     .priv_size      = sizeof(ExtraStereoContext),
     .priv_class     = &extrastereo_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_flanger.c b/libavfilter/af_flanger.c
index 452436a4b6..2b9da2db89 100644
--- a/libavfilter/af_flanger.c
+++ b/libavfilter/af_flanger.c
@@ -195,13 +195,6 @@ static const AVFilterPad flanger_inputs[] = {
     },
 };
 
-static const AVFilterPad flanger_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_flanger = {
     .name          = "flanger",
     .description   = NULL_IF_CONFIG_SMALL("Apply a flanging effect to the audio."),
@@ -210,6 +203,6 @@ const AVFilter ff_af_flanger = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(flanger_inputs),
-    FILTER_OUTPUTS(flanger_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
 };
diff --git a/libavfilter/af_haas.c b/libavfilter/af_haas.c
index d283da7261..c6d8aa79d8 100644
--- a/libavfilter/af_haas.c
+++ b/libavfilter/af_haas.c
@@ -206,13 +206,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_haas = {
     .name           = "haas",
     .description    = NULL_IF_CONFIG_SMALL("Apply Haas Stereo Enhancer."),
@@ -220,6 +213,6 @@ const AVFilter ff_af_haas = {
     .priv_class     = &haas_class,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index 49bfa1bfa8..d2cd71a0f3 100644
--- a/libavfilter/af_hdcd.c
+++ b/libavfilter/af_hdcd.c
@@ -1763,13 +1763,6 @@ static const AVFilterPad avfilter_af_hdcd_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_hdcd_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_hdcd = {
     .name          = "hdcd",
     .description   = NULL_IF_CONFIG_SMALL("Apply High Definition Compatible Digital (HDCD) decoding."),
@@ -1778,6 +1771,6 @@ const AVFilter ff_af_hdcd = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_hdcd_inputs),
-    FILTER_OUTPUTS(avfilter_af_hdcd_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c
index c99d2f11e6..4888fa9b43 100644
--- a/libavfilter/af_loudnorm.c
+++ b/libavfilter/af_loudnorm.c
@@ -926,13 +926,6 @@ static const AVFilterPad avfilter_af_loudnorm_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_loudnorm_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_loudnorm = {
     .name          = "loudnorm",
     .description   = NULL_IF_CONFIG_SMALL("EBU R128 loudness normalization"),
@@ -942,6 +935,6 @@ const AVFilter ff_af_loudnorm = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_loudnorm_inputs),
-    FILTER_OUTPUTS(avfilter_af_loudnorm_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c
index 167d7166af..cfed9f146a 100644
--- a/libavfilter/af_pan.c
+++ b/libavfilter/af_pan.c
@@ -419,13 +419,6 @@ static const AVFilterPad pan_inputs[] = {
     },
 };
 
-static const AVFilterPad pan_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_pan = {
     .name          = "pan",
     .description   = NULL_IF_CONFIG_SMALL("Remix channels with coefficients (panning)."),
@@ -434,6 +427,6 @@ const AVFilter ff_af_pan = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(pan_inputs),
-    FILTER_OUTPUTS(pan_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/af_rubberband.c b/libavfilter/af_rubberband.c
index 9f543051b9..50808f12df 100644
--- a/libavfilter/af_rubberband.c
+++ b/libavfilter/af_rubberband.c
@@ -207,13 +207,6 @@ static const AVFilterPad rubberband_inputs[] = {
     },
 };
 
-static const AVFilterPad rubberband_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_rubberband = {
     .name          = "rubberband",
     .description   = NULL_IF_CONFIG_SMALL("Apply time-stretching and pitch-shifting."),
@@ -222,7 +215,7 @@ const AVFilter ff_af_rubberband = {
     .uninit        = uninit,
     .activate      = activate,
     FILTER_INPUTS(rubberband_inputs),
-    FILTER_OUTPUTS(rubberband_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_FLTP),
     .process_command = process_command,
 };
diff --git a/libavfilter/af_silencedetect.c b/libavfilter/af_silencedetect.c
index 6518283d9f..aec5f97237 100644
--- a/libavfilter/af_silencedetect.c
+++ b/libavfilter/af_silencedetect.c
@@ -253,20 +253,13 @@ static const AVFilterPad silencedetect_inputs[] = {
     },
 };
 
-static const AVFilterPad silencedetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_silencedetect = {
     .name          = "silencedetect",
     .description   = NULL_IF_CONFIG_SMALL("Detect silence."),
     .priv_size     = sizeof(SilenceDetectContext),
     .uninit        = uninit,
     FILTER_INPUTS(silencedetect_inputs),
-    FILTER_OUTPUTS(silencedetect_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBLP,
                       AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
                       AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32P,
diff --git a/libavfilter/af_sofalizer.c b/libavfilter/af_sofalizer.c
index be947314f3..acfd4323a5 100644
--- a/libavfilter/af_sofalizer.c
+++ b/libavfilter/af_sofalizer.c
@@ -1086,13 +1086,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_sofalizer = {
     .name          = "sofalizer",
     .description   = NULL_IF_CONFIG_SMALL("SOFAlizer (Spatially Oriented Format for Acoustics)."),
@@ -1102,7 +1095,7 @@ const AVFilter ff_af_sofalizer = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SLICE_THREADS,
 };
diff --git a/libavfilter/af_speechnorm.c b/libavfilter/af_speechnorm.c
index 4f56ad9a8f..a8bed2cb8f 100644
--- a/libavfilter/af_speechnorm.c
+++ b/libavfilter/af_speechnorm.c
@@ -590,13 +590,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_speechnorm = {
     .name            = "speechnorm",
     .description     = NULL_IF_CONFIG_SMALL("Speech Normalizer."),
@@ -605,7 +598,7 @@ const AVFilter ff_af_speechnorm = {
     .activate        = activate,
     .uninit          = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = process_command,
diff --git a/libavfilter/af_stereotools.c b/libavfilter/af_stereotools.c
index eedc7c68bd..4bcd696cf9 100644
--- a/libavfilter/af_stereotools.c
+++ b/libavfilter/af_stereotools.c
@@ -365,13 +365,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_stereotools = {
     .name           = "stereotools",
     .description    = NULL_IF_CONFIG_SMALL("Apply various stereo tools."),
@@ -379,7 +372,7 @@ const AVFilter ff_af_stereotools = {
     .priv_class     = &stereotools_class,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     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 a91ea03957..af4b23e8a5 100644
--- a/libavfilter/af_stereowiden.c
+++ b/libavfilter/af_stereowiden.c
@@ -146,13 +146,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_stereowiden = {
     .name           = "stereowiden",
     .description    = NULL_IF_CONFIG_SMALL("Apply stereo widening effect."),
@@ -160,7 +153,7 @@ const AVFilter ff_af_stereowiden = {
     .priv_class     = &stereowiden_class,
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_tremolo.c b/libavfilter/af_tremolo.c
index 3e3e2be6f8..024c402b79 100644
--- a/libavfilter/af_tremolo.c
+++ b/libavfilter/af_tremolo.c
@@ -121,13 +121,6 @@ static const AVFilterPad avfilter_af_tremolo_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_tremolo_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_tremolo = {
     .name          = "tremolo",
     .description   = NULL_IF_CONFIG_SMALL("Apply tremolo effect."),
@@ -135,7 +128,7 @@ const AVFilter ff_af_tremolo = {
     .priv_class    = &tremolo_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_tremolo_inputs),
-    FILTER_OUTPUTS(avfilter_af_tremolo_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBL),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/af_vibrato.c b/libavfilter/af_vibrato.c
index 807d2b5996..98ef564397 100644
--- a/libavfilter/af_vibrato.c
+++ b/libavfilter/af_vibrato.c
@@ -158,13 +158,6 @@ static const AVFilterPad avfilter_af_vibrato_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_af_vibrato_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_vibrato = {
     .name          = "vibrato",
     .description   = NULL_IF_CONFIG_SMALL("Apply vibrato effect."),
@@ -172,7 +165,7 @@ const AVFilter ff_af_vibrato = {
     .priv_class    = &vibrato_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_af_vibrato_inputs),
-    FILTER_OUTPUTS(avfilter_af_vibrato_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SINGLE_SAMPLEFMT(AV_SAMPLE_FMT_DBLP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/af_virtualbass.c b/libavfilter/af_virtualbass.c
index 76b3f42030..fb7189d364 100644
--- a/libavfilter/af_virtualbass.c
+++ b/libavfilter/af_virtualbass.c
@@ -163,20 +163,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_virtualbass = {
     .name            = "virtualbass",
     .description     = NULL_IF_CONFIG_SMALL("Audio Virtual Bass."),
     .priv_size       = sizeof(AudioVirtualBassContext),
     .priv_class      = &virtualbass_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/af_volumedetect.c b/libavfilter/af_volumedetect.c
index ebfad6914f..8b001d1cf2 100644
--- a/libavfilter/af_volumedetect.c
+++ b/libavfilter/af_volumedetect.c
@@ -122,13 +122,6 @@ static const AVFilterPad volumedetect_inputs[] = {
     },
 };
 
-static const AVFilterPad volumedetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_volumedetect = {
     .name          = "volumedetect",
     .description   = NULL_IF_CONFIG_SMALL("Detect audio volume."),
@@ -136,6 +129,6 @@ const AVFilter ff_af_volumedetect = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(volumedetect_inputs),
-    FILTER_OUTPUTS(volumedetect_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     FILTER_SAMPLEFMTS(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P),
 };
diff --git a/libavfilter/audio.c b/libavfilter/audio.c
index 36d5caa7e4..35270c14d2 100644
--- a/libavfilter/audio.c
+++ b/libavfilter/audio.c
@@ -29,6 +29,13 @@
 #include "framepool.h"
 #include "internal.h"
 
+const AVFilterPad ff_audio_default_filterpad[1] = {
+    {
+        .name = "default",
+        .type = AVMEDIA_TYPE_AUDIO,
+    }
+};
+
 AVFrame *ff_null_get_audio_buffer(AVFilterLink *link, int nb_samples)
 {
     return ff_get_audio_buffer(link->dst->outputs[0], nb_samples);
diff --git a/libavfilter/audio.h b/libavfilter/audio.h
index 90709a0ad0..624b0332e3 100644
--- a/libavfilter/audio.h
+++ b/libavfilter/audio.h
@@ -25,6 +25,10 @@
 #include "avfilter.h"
 #include "internal.h"
 
+/* An AVFilterPad array whose only entry has name "default"
+ * and is of type audio. */
+extern const AVFilterPad ff_audio_default_filterpad[1];
+
 /** default handler for get_audio_buffer() for audio inputs */
 AVFrame *ff_default_get_audio_buffer(AVFilterLink *link, int nb_samples);
 
diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c
index fa3cdaf22b..21948db339 100644
--- a/libavfilter/avf_showcqt.c
+++ b/libavfilter/avf_showcqt.c
@@ -26,6 +26,7 @@
 #include "libavutil/eval.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/time.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
@@ -1591,13 +1592,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad showcqt_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showcqt_outputs[] = {
     {
         .name          = "default",
@@ -1613,7 +1607,7 @@ const AVFilter ff_avf_showcqt = {
     .activate      = activate,
     .uninit        = uninit,
     .priv_size     = sizeof(ShowCQTContext),
-    FILTER_INPUTS(showcqt_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(showcqt_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &showcqt_class,
diff --git a/libavfilter/avf_showcwt.c b/libavfilter/avf_showcwt.c
index 8bf64cfe66..02b86345bb 100644
--- a/libavfilter/avf_showcwt.c
+++ b/libavfilter/avf_showcwt.c
@@ -1272,13 +1272,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad showcwt_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showcwt_outputs[] = {
     {
         .name         = "default",
@@ -1292,7 +1285,7 @@ const AVFilter ff_avf_showcwt = {
     .description   = NULL_IF_CONFIG_SMALL("Convert input audio to a CWT (Continuous Wavelet Transform) spectrum video output."),
     .uninit        = uninit,
     .priv_size     = sizeof(ShowCWTContext),
-    FILTER_INPUTS(showcwt_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(showcwt_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .activate      = activate,
diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c
index cf99b4331e..b8cff608eb 100644
--- a/libavfilter/avf_showfreqs.c
+++ b/libavfilter/avf_showfreqs.c
@@ -547,13 +547,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->window);
 }
 
-static const AVFilterPad showfreqs_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showfreqs_outputs[] = {
     {
         .name          = "default",
@@ -568,7 +561,7 @@ const AVFilter ff_avf_showfreqs = {
     .uninit        = uninit,
     .priv_size     = sizeof(ShowFreqsContext),
     .activate      = activate,
-    FILTER_INPUTS(showfreqs_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(showfreqs_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &showfreqs_class,
diff --git a/libavfilter/avf_showspatial.c b/libavfilter/avf_showspatial.c
index 54d7962ec4..7b525aba8d 100644
--- a/libavfilter/avf_showspatial.c
+++ b/libavfilter/avf_showspatial.c
@@ -315,13 +315,6 @@ static int spatial_activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad showspatial_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showspatial_outputs[] = {
     {
         .name          = "default",
@@ -335,7 +328,7 @@ const AVFilter ff_avf_showspatial = {
     .description   = NULL_IF_CONFIG_SMALL("Convert input audio to a spatial video output."),
     .uninit        = uninit,
     .priv_size     = sizeof(ShowSpatialContext),
-    FILTER_INPUTS(showspatial_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(showspatial_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .activate      = spatial_activate,
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index 23269dbb4c..b8e03d07a0 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -1679,13 +1679,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad showspectrum_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showspectrum_outputs[] = {
     {
         .name          = "default",
@@ -1699,7 +1692,7 @@ const AVFilter ff_avf_showspectrum = {
     .description   = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."),
     .uninit        = uninit,
     .priv_size     = sizeof(ShowSpectrumContext),
-    FILTER_INPUTS(showspectrum_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(showspectrum_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .activate      = activate,
diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
index 7597ee2723..329753c8c8 100644
--- a/libavfilter/avf_showwaves.c
+++ b/libavfilter/avf_showwaves.c
@@ -794,13 +794,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad showwaves_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad showwaves_outputs[] = {
     {
         .name          = "default",
@@ -815,7 +808,7 @@ const AVFilter ff_avf_showwaves = {
     .init          = init,
     .uninit        = uninit,
     .priv_size     = sizeof(ShowWavesContext),
-    FILTER_INPUTS(showwaves_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     .activate      = activate,
     FILTER_OUTPUTS(showwaves_outputs),
     FILTER_QUERY_FUNC(query_formats),
diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index 306c283f77..af9a638e4c 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -396,13 +396,6 @@ const AVFilter ff_vsink_buffer = {
     FILTER_QUERY_FUNC(vsink_query_formats),
 };
 
-static const AVFilterPad avfilter_asink_abuffer_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_asink_abuffer = {
     .name          = "abuffersink",
     .description   = NULL_IF_CONFIG_SMALL("Buffer audio frames, and make them available to the end of the filter graph."),
@@ -410,7 +403,7 @@ const AVFilter ff_asink_abuffer = {
     .priv_size     = sizeof(BufferSinkContext),
     .init          = common_init,
     .activate      = activate,
-    FILTER_INPUTS(avfilter_asink_abuffer_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     .outputs       = NULL,
     FILTER_QUERY_FUNC(asink_query_formats),
 };
diff --git a/libavfilter/f_bench.c b/libavfilter/f_bench.c
index 9b55194dbc..7938583d0e 100644
--- a/libavfilter/f_bench.c
+++ b/libavfilter/f_bench.c
@@ -20,6 +20,7 @@
 
 #include "libavutil/opt.h"
 #include "libavutil/time.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
@@ -131,20 +132,13 @@ static const AVFilterPad abench_inputs[] = {
     },
 };
 
-static const AVFilterPad abench_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_abench = {
     .name          = "abench",
     .description   = NULL_IF_CONFIG_SMALL("Benchmark part of a filtergraph."),
     .priv_size     = sizeof(BenchContext),
     .init          = init,
     FILTER_INPUTS(abench_inputs),
-    FILTER_OUTPUTS(abench_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .priv_class    = &abench_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_cue.c b/libavfilter/f_cue.c
index 9a1b7c03b8..290a828d99 100644
--- a/libavfilter/f_cue.c
+++ b/libavfilter/f_cue.c
@@ -22,6 +22,7 @@
 
 #include "libavutil/opt.h"
 #include "libavutil/time.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
@@ -125,28 +126,14 @@ const AVFilter ff_vf_cue = {
 #endif /* CONFIG_CUE_FILTER */
 
 #if CONFIG_ACUE_FILTER
-static const AVFilterPad acue_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
-static const AVFilterPad acue_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_acue = {
     .name        = "acue",
     .description = NULL_IF_CONFIG_SMALL("Delay filtering to match a cue."),
     .priv_class  = &cue_acue_class,
     .priv_size   = sizeof(CueContext),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(acue_inputs),
-    FILTER_OUTPUTS(acue_outputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .activate    = activate,
 };
 #endif /* CONFIG_ACUE_FILTER */
diff --git a/libavfilter/f_graphmonitor.c b/libavfilter/f_graphmonitor.c
index 3a2760ed8c..e75cc52fbe 100644
--- a/libavfilter/f_graphmonitor.c
+++ b/libavfilter/f_graphmonitor.c
@@ -28,6 +28,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/timestamp.h"
 #include "libavutil/xga_font_data.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
 #include "formats.h"
@@ -602,13 +603,6 @@ const AVFilter ff_vf_graphmonitor = {
 
 #if CONFIG_AGRAPHMONITOR_FILTER
 
-static const AVFilterPad agraphmonitor_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad agraphmonitor_outputs[] = {
     {
         .name         = "default",
@@ -625,7 +619,7 @@ const AVFilter ff_avf_agraphmonitor = {
     .init          = init,
     .uninit        = uninit,
     .activate      = activate,
-    FILTER_INPUTS(agraphmonitor_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(agraphmonitor_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/f_latency.c b/libavfilter/f_latency.c
index f04fd726f2..a497e0c71a 100644
--- a/libavfilter/f_latency.c
+++ b/libavfilter/f_latency.c
@@ -21,6 +21,7 @@
 #include "config_components.h"
 
 #include "libavutil/opt.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
 #include "formats.h"
@@ -130,20 +131,6 @@ const AVFilter ff_vf_latency = {
 
 #if CONFIG_ALATENCY_FILTER
 
-static const AVFilterPad alatency_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
-static const AVFilterPad alatency_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_alatency = {
     .name          = "alatency",
     .description   = NULL_IF_CONFIG_SMALL("Report audio filtering latency."),
@@ -152,7 +139,7 @@ const AVFilter ff_af_alatency = {
     .uninit        = uninit,
     .activate      = activate,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-    FILTER_INPUTS(alatency_inputs),
-    FILTER_OUTPUTS(alatency_outputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 #endif // CONFIG_ALATENCY_FILTER
diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c
index 33b66fa534..6a654c2109 100644
--- a/libavfilter/f_loop.c
+++ b/libavfilter/f_loop.c
@@ -300,13 +300,6 @@ static const AVFilterPad ainputs[] = {
     },
 };
 
-static const AVFilterPad aoutputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_aloop = {
     .name          = "aloop",
     .description   = NULL_IF_CONFIG_SMALL("Loop audio samples."),
@@ -315,7 +308,7 @@ const AVFilter ff_af_aloop = {
     .activate      = aactivate,
     .uninit        = auninit,
     FILTER_INPUTS(ainputs),
-    FILTER_OUTPUTS(aoutputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 #endif /* CONFIG_ALOOP_FILTER */
 
diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c
index 4b7cfb0cb7..5679dfb203 100644
--- a/libavfilter/f_metadata.c
+++ b/libavfilter/f_metadata.c
@@ -377,13 +377,6 @@ static const AVFilterPad ainputs[] = {
     },
 };
 
-static const AVFilterPad aoutputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_ametadata = {
     .name          = "ametadata",
     .description   = NULL_IF_CONFIG_SMALL("Manipulate audio frame metadata."),
@@ -392,7 +385,7 @@ const AVFilter ff_af_ametadata = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(ainputs),
-    FILTER_OUTPUTS(aoutputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                      AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_perms.c b/libavfilter/f_perms.c
index 021652cfe8..1c8cc5f68b 100644
--- a/libavfilter/f_perms.c
+++ b/libavfilter/f_perms.c
@@ -125,13 +125,6 @@ static const AVFilterPad aperms_inputs[] = {
     },
 };
 
-static const AVFilterPad aperms_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_aperms = {
     .name        = "aperms",
     .description = NULL_IF_CONFIG_SMALL("Set permissions for the output audio frame."),
@@ -139,7 +132,7 @@ const AVFilter ff_af_aperms = {
     .init        = init,
     .priv_size   = sizeof(PermsContext),
     FILTER_INPUTS(aperms_inputs),
-    FILTER_OUTPUTS(aperms_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                    AVFILTER_FLAG_METADATA_ONLY,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/f_realtime.c b/libavfilter/f_realtime.c
index ef713474ea..278ee18f36 100644
--- a/libavfilter/f_realtime.c
+++ b/libavfilter/f_realtime.c
@@ -22,6 +22,7 @@
 
 #include "libavutil/opt.h"
 #include "libavutil/time.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "internal.h"
 #include <float.h>
@@ -114,13 +115,6 @@ static const AVFilterPad arealtime_inputs[] = {
     },
 };
 
-static const AVFilterPad arealtime_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_arealtime = {
     .name        = "arealtime",
     .description = NULL_IF_CONFIG_SMALL("Slow down filtering to match realtime."),
@@ -128,7 +122,7 @@ const AVFilter ff_af_arealtime = {
     .priv_size   = sizeof(RealtimeContext),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(arealtime_inputs),
-    FILTER_OUTPUTS(arealtime_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .process_command = ff_filter_process_command,
 };
 #endif /* CONFIG_AREALTIME_FILTER */
diff --git a/libavfilter/f_sendcmd.c b/libavfilter/f_sendcmd.c
index eb49f8baba..9f27fbde14 100644
--- a/libavfilter/f_sendcmd.c
+++ b/libavfilter/f_sendcmd.c
@@ -631,13 +631,6 @@ static const AVFilterPad asendcmd_inputs[] = {
     },
 };
 
-static const AVFilterPad asendcmd_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asendcmd = {
     .name        = "asendcmd",
     .description = NULL_IF_CONFIG_SMALL("Send commands to filters."),
@@ -647,7 +640,7 @@ const AVFilter ff_af_asendcmd = {
     .priv_size   = sizeof(SendCmdContext),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(asendcmd_inputs),
-    FILTER_OUTPUTS(asendcmd_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 
 #endif
diff --git a/libavfilter/f_sidedata.c b/libavfilter/f_sidedata.c
index 82bbaa0e7e..23e95d0b8a 100644
--- a/libavfilter/f_sidedata.c
+++ b/libavfilter/f_sidedata.c
@@ -27,6 +27,7 @@
 #include "libavutil/internal.h"
 #include "libavutil/frame.h"
 #include "libavutil/opt.h"
+#include "audio.h"
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
@@ -134,13 +135,6 @@ static const AVFilterPad ainputs[] = {
     },
 };
 
-static const AVFilterPad aoutputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asidedata = {
     .name          = "asidedata",
     .description   = NULL_IF_CONFIG_SMALL("Manipulate audio frame side data."),
@@ -148,7 +142,7 @@ const AVFilter ff_af_asidedata = {
     .priv_class    = &asidedata_class,
     .init          = init,
     FILTER_INPUTS(ainputs),
-    FILTER_OUTPUTS(aoutputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                      AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_zmq.c b/libavfilter/f_zmq.c
index 156670dad4..d368482a68 100644
--- a/libavfilter/f_zmq.c
+++ b/libavfilter/f_zmq.c
@@ -247,13 +247,6 @@ static const AVFilterPad azmq_inputs[] = {
     },
 };
 
-static const AVFilterPad azmq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_azmq = {
     .name        = "azmq",
     .description = NULL_IF_CONFIG_SMALL("Receive commands through ZMQ and broker them to filters."),
@@ -262,7 +255,7 @@ const AVFilter ff_af_azmq = {
     .uninit      = uninit,
     .priv_size   = sizeof(ZMQContext),
     FILTER_INPUTS(azmq_inputs),
-    FILTER_OUTPUTS(azmq_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 
 #endif
diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
index 6dade06e6a..e5150b7e03 100644
--- a/libavfilter/setpts.c
+++ b/libavfilter/setpts.c
@@ -366,13 +366,6 @@ static const AVFilterPad asetpts_inputs[] = {
     },
 };
 
-static const AVFilterPad asetpts_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asetpts = {
     .name            = "asetpts",
     .description     = NULL_IF_CONFIG_SMALL("Set PTS for the output audio frame."),
@@ -384,6 +377,6 @@ const AVFilter ff_af_asetpts = {
     .priv_class      = &asetpts_class,
     .flags           = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(asetpts_inputs),
-    FILTER_OUTPUTS(asetpts_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 #endif /* CONFIG_ASETPTS_FILTER */
diff --git a/libavfilter/settb.c b/libavfilter/settb.c
index 23cb02689b..c7523436d3 100644
--- a/libavfilter/settb.c
+++ b/libavfilter/settb.c
@@ -197,13 +197,6 @@ const AVFilter ff_vf_settb = {
 DEFINE_OPTIONS(asettb, AUDIO);
 AVFILTER_DEFINE_CLASS(asettb);
 
-static const AVFilterPad avfilter_af_asettb_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 static const AVFilterPad avfilter_af_asettb_outputs[] = {
     {
         .name         = "default",
@@ -216,7 +209,7 @@ const AVFilter ff_af_asettb = {
     .name        = "asettb",
     .description = NULL_IF_CONFIG_SMALL("Set timebase for the audio output link."),
     .priv_size   = sizeof(SetTBContext),
-    FILTER_INPUTS(avfilter_af_asettb_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     FILTER_OUTPUTS(avfilter_af_asettb_outputs),
     .priv_class  = &asettb_class,
     .activate    = activate,
diff --git a/libavfilter/split.c b/libavfilter/split.c
index 2a511668e2..6f24af3f02 100644
--- a/libavfilter/split.c
+++ b/libavfilter/split.c
@@ -153,13 +153,6 @@ const AVFilter ff_vf_split = {
     .flags       = AVFILTER_FLAG_DYNAMIC_OUTPUTS | AVFILTER_FLAG_METADATA_ONLY,
 };
 
-static const AVFilterPad avfilter_af_asplit_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_asplit = {
     .name        = "asplit",
     .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."),
@@ -167,7 +160,7 @@ const AVFilter ff_af_asplit = {
     .priv_size   = sizeof(SplitContext),
     .init        = split_init,
     .activate    = activate,
-    FILTER_INPUTS(avfilter_af_asplit_inputs),
+    FILTER_INPUTS(ff_audio_default_filterpad),
     .outputs     = NULL,
     .flags       = AVFILTER_FLAG_DYNAMIC_OUTPUTS | AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/trim.c b/libavfilter/trim.c
index 6bb567879d..91a68716c9 100644
--- a/libavfilter/trim.c
+++ b/libavfilter/trim.c
@@ -398,13 +398,6 @@ static const AVFilterPad atrim_inputs[] = {
     },
 };
 
-static const AVFilterPad atrim_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_AUDIO,
-    },
-};
-
 const AVFilter ff_af_atrim = {
     .name        = "atrim",
     .description = NULL_IF_CONFIG_SMALL("Pick one continuous section from the input, drop the rest."),
@@ -414,6 +407,6 @@ const AVFilter ff_af_atrim = {
     .priv_class  = &atrim_class,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(atrim_inputs),
-    FILTER_OUTPUTS(atrim_outputs),
+    FILTER_OUTPUTS(ff_audio_default_filterpad),
 };
 #endif // CONFIG_ATRIM_FILTER
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 2/4] avfilter/internal: Don't include video.h
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
@ 2023-08-03 14:33 ` Andreas Rheinhardt
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs Andreas Rheinhardt
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-03 14:33 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

internal.h does not depend on video.h (and should not depend on it)
and therefore should not include video.h at all; instead all users
of video.h should include it directly.

Doing so also avoids unnecessary video.h inclusions in files that
don't need it, like most audio filters.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
This patch is actually preparatory for 3/4: Otherwise, I couldn't
include internal.h from video.h, because if a user included internal.h
first (as almost all of them do), video.h would be included in
internal.h above the definition of AVFilterPad, so that the declaration
of ff_video_default_filterpad would error out.

 libavfilter/af_afir.c             | 1 +
 libavfilter/af_aiir.c             | 1 +
 libavfilter/af_anequalizer.c      | 1 +
 libavfilter/avf_showcqt.c         | 1 +
 libavfilter/avfilter.c            | 1 +
 libavfilter/f_ebur128.c           | 1 +
 libavfilter/internal.h            | 1 -
 libavfilter/vf_avgblur_vulkan.c   | 1 +
 libavfilter/vf_blend_vulkan.c     | 1 +
 libavfilter/vf_chromaber_vulkan.c | 1 +
 libavfilter/vf_dctdnoiz.c         | 1 +
 libavfilter/vf_derain.c           | 1 +
 libavfilter/vf_dnn_processing.c   | 1 +
 libavfilter/vf_epx.c              | 1 +
 libavfilter/vf_eq.c               | 3 ++-
 libavfilter/vf_extractplanes.c    | 1 +
 libavfilter/vf_fftdnoiz.c         | 1 +
 libavfilter/vf_fftfilt.c          | 3 ++-
 libavfilter/vf_fieldmatch.c       | 1 +
 libavfilter/vf_flip_vulkan.c      | 1 +
 libavfilter/vf_fspp.c             | 1 +
 libavfilter/vf_gblur_vulkan.c     | 1 +
 libavfilter/vf_geq.c              | 1 +
 libavfilter/vf_hqx.c              | 1 +
 libavfilter/vf_il.c               | 1 +
 libavfilter/vf_kerndeint.c        | 1 +
 libavfilter/vf_libplacebo.c       | 1 +
 libavfilter/vf_mcdeint.c          | 1 +
 libavfilter/vf_mergeplanes.c      | 1 +
 libavfilter/vf_misc_vaapi.c       | 1 +
 libavfilter/vf_nlmeans_vulkan.c   | 1 +
 libavfilter/vf_overlay_vaapi.c    | 1 +
 libavfilter/vf_overlay_vulkan.c   | 1 +
 libavfilter/vf_owdenoise.c        | 1 +
 libavfilter/vf_palettegen.c       | 1 +
 libavfilter/vf_paletteuse.c       | 1 +
 libavfilter/vf_pp.c               | 1 +
 libavfilter/vf_pp7.c              | 1 +
 libavfilter/vf_procamp_vaapi.c    | 1 +
 libavfilter/vf_sab.c              | 1 +
 libavfilter/vf_scale_vt.c         | 1 +
 libavfilter/vf_scale_vulkan.c     | 1 +
 libavfilter/vf_scroll.c           | 1 +
 libavfilter/vf_smartblur.c        | 1 +
 libavfilter/vf_spp.c              | 1 +
 libavfilter/vf_sr.c               | 1 +
 libavfilter/vf_tinterlace.c       | 1 +
 libavfilter/vf_tonemap_vaapi.c    | 1 +
 libavfilter/vf_tpad.c             | 1 +
 libavfilter/vf_transpose_vaapi.c  | 1 +
 libavfilter/vf_transpose_vt.c     | 1 +
 libavfilter/vf_transpose_vulkan.c | 1 +
 libavfilter/vf_uspp.c             | 1 +
 libavfilter/vf_vidstabtransform.c | 1 +
 libavfilter/vf_weave.c            | 1 +
 libavfilter/vf_xbr.c              | 1 +
 libavfilter/vf_xfade_vulkan.c     | 1 +
 libavfilter/vf_yaepblur.c         | 1 +
 libavfilter/vsrc_testsrc_vulkan.c | 1 +
 libavfilter/yadif_common.c        | 1 +
 60 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/libavfilter/af_afir.c b/libavfilter/af_afir.c
index e00d14d084..5d3f4070a7 100644
--- a/libavfilter/af_afir.c
+++ b/libavfilter/af_afir.c
@@ -45,6 +45,7 @@
 #include "internal.h"
 #include "af_afir.h"
 #include "af_afirdsp.h"
+#include "video.h"
 
 static void drawtext(AVFrame *pic, int x, int y, const char *txt, uint32_t color)
 {
diff --git a/libavfilter/af_aiir.c b/libavfilter/af_aiir.c
index 3e7ec78b63..28f452f4a1 100644
--- a/libavfilter/af_aiir.c
+++ b/libavfilter/af_aiir.c
@@ -27,6 +27,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct ThreadData {
     AVFrame *in, *out;
diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
index c7b9a83d99..c9b74aa344 100644
--- a/libavfilter/af_anequalizer.c
+++ b/libavfilter/af_anequalizer.c
@@ -27,6 +27,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "audio.h"
+#include "video.h"
 
 #define FILTER_ORDER 4
 
diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c
index 21948db339..4d1937d139 100644
--- a/libavfilter/avf_showcqt.c
+++ b/libavfilter/avf_showcqt.c
@@ -32,6 +32,7 @@
 #include "internal.h"
 #include "lavfutils.h"
 #include "lswsutils.h"
+#include "video.h"
 
 #if CONFIG_LIBFREETYPE
 #include <ft2build.h>
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 04887b6ee5..1ebfbce909 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -43,6 +43,7 @@
 #include "formats.h"
 #include "framepool.h"
 #include "internal.h"
+#include "video.h"
 
 static void tlog_ref(void *ctx, AVFrame *ref, int end)
 {
diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c
index 49f68c0e84..ca47a58334 100644
--- a/libavfilter/f_ebur128.c
+++ b/libavfilter/f_ebur128.c
@@ -43,6 +43,7 @@
 #include "filters.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 #define ABS_THRES    -70            ///< silence gate: we discard anything below this absolute (LUFS) threshold
 #define ABS_UP_THRES  10            ///< upper loud limit to consider (ABS_THRES being the minimum)
diff --git a/libavfilter/internal.h b/libavfilter/internal.h
index 8b232a8d8f..6bcabd012d 100644
--- a/libavfilter/internal.h
+++ b/libavfilter/internal.h
@@ -28,7 +28,6 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "framequeue.h"
-#include "video.h"
 
 typedef struct AVFilterCommand {
     double time;                ///< time expressed in seconds
diff --git a/libavfilter/vf_avgblur_vulkan.c b/libavfilter/vf_avgblur_vulkan.c
index 44c4854b35..ae32cd7324 100644
--- a/libavfilter/vf_avgblur_vulkan.c
+++ b/libavfilter/vf_avgblur_vulkan.c
@@ -23,6 +23,7 @@
 #include "vulkan_filter.h"
 #include "vulkan_spirv.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct AvgBlurVulkanContext {
     FFVulkanContext vkctx;
diff --git a/libavfilter/vf_blend_vulkan.c b/libavfilter/vf_blend_vulkan.c
index 717efcee41..9db4e0a2f3 100644
--- a/libavfilter/vf_blend_vulkan.c
+++ b/libavfilter/vf_blend_vulkan.c
@@ -28,6 +28,7 @@
 #include "internal.h"
 #include "framesync.h"
 #include "blend.h"
+#include "video.h"
 
 #define IN_TOP    0
 #define IN_BOTTOM 1
diff --git a/libavfilter/vf_chromaber_vulkan.c b/libavfilter/vf_chromaber_vulkan.c
index 259232ab4d..8b196f149e 100644
--- a/libavfilter/vf_chromaber_vulkan.c
+++ b/libavfilter/vf_chromaber_vulkan.c
@@ -23,6 +23,7 @@
 #include "vulkan_filter.h"
 #include "vulkan_spirv.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct ChromaticAberrationVulkanContext {
     FFVulkanContext vkctx;
diff --git a/libavfilter/vf_dctdnoiz.c b/libavfilter/vf_dctdnoiz.c
index f1cad94ff1..95f71bc731 100644
--- a/libavfilter/vf_dctdnoiz.c
+++ b/libavfilter/vf_dctdnoiz.c
@@ -33,6 +33,7 @@
 #include "libavutil/mem_internal.h"
 #include "libavutil/opt.h"
 #include "internal.h"
+#include "video.h"
 
 static const char *const var_names[] = { "c", NULL };
 enum { VAR_C, VAR_VARS_NB };
diff --git a/libavfilter/vf_derain.c b/libavfilter/vf_derain.c
index 35e1ae736a..3cb4364def 100644
--- a/libavfilter/vf_derain.c
+++ b/libavfilter/vf_derain.c
@@ -30,6 +30,7 @@
 #include "dnn_filter_common.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct DRContext {
     const AVClass *class;
diff --git a/libavfilter/vf_dnn_processing.c b/libavfilter/vf_dnn_processing.c
index 95c3e0b99b..1ab2f25bda 100644
--- a/libavfilter/vf_dnn_processing.c
+++ b/libavfilter/vf_dnn_processing.c
@@ -32,6 +32,7 @@
 #include "dnn_filter_common.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 #include "libswscale/swscale.h"
 #include "libavutil/time.h"
 
diff --git a/libavfilter/vf_epx.c b/libavfilter/vf_epx.c
index d706229ab8..bae1b898bc 100644
--- a/libavfilter/vf_epx.c
+++ b/libavfilter/vf_epx.c
@@ -19,6 +19,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct EPXContext {
     const AVClass *class;
diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c
index 7955bf717e..3c686abe24 100644
--- a/libavfilter/vf_eq.c
+++ b/libavfilter/vf_eq.c
@@ -27,12 +27,13 @@
  * very simple video equalizer
  */
 
-#include "libavfilter/internal.h"
 #include "libavutil/common.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
+#include "internal.h"
 #include "vf_eq.h"
+#include "video.h"
 
 static void create_lut(EQParameters *param)
 {
diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c
index 08737d6415..62c6002203 100644
--- a/libavfilter/vf_extractplanes.c
+++ b/libavfilter/vf_extractplanes.c
@@ -29,6 +29,7 @@
 #include "drawutils.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 #define PLANE_R 0x01
 #define PLANE_G 0x02
diff --git a/libavfilter/vf_fftdnoiz.c b/libavfilter/vf_fftdnoiz.c
index 17dd4f1e77..1489f3282b 100644
--- a/libavfilter/vf_fftdnoiz.c
+++ b/libavfilter/vf_fftdnoiz.c
@@ -24,6 +24,7 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/tx.h"
 #include "internal.h"
+#include "video.h"
 #include "window_func.h"
 
 #define MAX_BLOCK 256
diff --git a/libavfilter/vf_fftfilt.c b/libavfilter/vf_fftfilt.c
index d2a6db24c8..2b2408f15c 100644
--- a/libavfilter/vf_fftfilt.c
+++ b/libavfilter/vf_fftfilt.c
@@ -24,7 +24,8 @@
  * FFT domain filtering.
  */
 
-#include "libavfilter/internal.h"
+#include "internal.h"
+#include "video.h"
 #include "libavutil/common.h"
 #include "libavutil/cpu.h"
 #include "libavutil/imgutils.h"
diff --git a/libavfilter/vf_fieldmatch.c b/libavfilter/vf_fieldmatch.c
index 71bef7b30f..b65e75534e 100644
--- a/libavfilter/vf_fieldmatch.c
+++ b/libavfilter/vf_fieldmatch.c
@@ -39,6 +39,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 #define INPUT_MAIN     0
 #define INPUT_CLEANSRC 1
diff --git a/libavfilter/vf_flip_vulkan.c b/libavfilter/vf_flip_vulkan.c
index d7790c3308..ecd2567ebc 100644
--- a/libavfilter/vf_flip_vulkan.c
+++ b/libavfilter/vf_flip_vulkan.c
@@ -24,6 +24,7 @@
 #include "vulkan_filter.h"
 #include "vulkan_spirv.h"
 #include "internal.h"
+#include "video.h"
 
 enum FlipType {
     FLIP_VERTICAL,
diff --git a/libavfilter/vf_fspp.c b/libavfilter/vf_fspp.c
index 3e04fd01b9..b110c5a7d2 100644
--- a/libavfilter/vf_fspp.c
+++ b/libavfilter/vf_fspp.c
@@ -42,6 +42,7 @@
 #include "internal.h"
 #include "qp_table.h"
 #include "vf_fspp.h"
+#include "video.h"
 
 #define OFFSET(x) offsetof(FSPPContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
diff --git a/libavfilter/vf_gblur_vulkan.c b/libavfilter/vf_gblur_vulkan.c
index 6f7532c1d4..bac05b87b8 100644
--- a/libavfilter/vf_gblur_vulkan.c
+++ b/libavfilter/vf_gblur_vulkan.c
@@ -24,6 +24,7 @@
 #include "vulkan_filter.h"
 #include "vulkan_spirv.h"
 #include "internal.h"
+#include "video.h"
 
 #define CGS 32
 #define GBLUR_MAX_KERNEL_SIZE 127
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c
index 2b53980278..e90b49366f 100644
--- a/libavfilter/vf_geq.c
+++ b/libavfilter/vf_geq.c
@@ -32,6 +32,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "internal.h"
+#include "video.h"
 
 #define MAX_NB_THREADS 32
 #define NB_PLANES 4
diff --git a/libavfilter/vf_hqx.c b/libavfilter/vf_hqx.c
index bc70d984e9..4a8ed184f4 100644
--- a/libavfilter/vf_hqx.c
+++ b/libavfilter/vf_hqx.c
@@ -31,6 +31,7 @@
 #include "libavutil/avassert.h"
 #include "libavutil/pixdesc.h"
 #include "internal.h"
+#include "video.h"
 
 typedef int (*hqxfunc_t)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
 
diff --git a/libavfilter/vf_il.c b/libavfilter/vf_il.c
index e1c380a2cf..210ce8e821 100644
--- a/libavfilter/vf_il.c
+++ b/libavfilter/vf_il.c
@@ -29,6 +29,7 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 enum FilterMode {
     MODE_NONE,
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c
index 8aec5afe98..260a99bcc4 100644
--- a/libavfilter/vf_kerndeint.c
+++ b/libavfilter/vf_kerndeint.c
@@ -34,6 +34,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct KerndeintContext {
     const AVClass *class;
diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 0733211d0b..254e286530 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -24,6 +24,7 @@
 #include "libavutil/parseutils.h"
 #include "internal.h"
 #include "filters.h"
+#include "video.h"
 #include "vulkan_filter.h"
 #include "scale_eval.h"
 
diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c
index a2c3e79b9e..a33f6feebf 100644
--- a/libavfilter/vf_mcdeint.c
+++ b/libavfilter/vf_mcdeint.c
@@ -55,6 +55,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 enum MCDeintMode {
     MODE_FAST = 0,
diff --git a/libavfilter/vf_mergeplanes.c b/libavfilter/vf_mergeplanes.c
index ae55d819b8..9bff5bbe63 100644
--- a/libavfilter/vf_mergeplanes.c
+++ b/libavfilter/vf_mergeplanes.c
@@ -26,6 +26,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "framesync.h"
+#include "video.h"
 
 typedef struct Mapping {
     int input;
diff --git a/libavfilter/vf_misc_vaapi.c b/libavfilter/vf_misc_vaapi.c
index 71bc5e3c34..1cbed9bcf0 100644
--- a/libavfilter/vf_misc_vaapi.c
+++ b/libavfilter/vf_misc_vaapi.c
@@ -24,6 +24,7 @@
 #include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
+#include "video.h"
 
 // Denoise min/max/default Values
 #define DENOISE_MIN            0
diff --git a/libavfilter/vf_nlmeans_vulkan.c b/libavfilter/vf_nlmeans_vulkan.c
index 97d894c9bb..7da31b73f5 100644
--- a/libavfilter/vf_nlmeans_vulkan.c
+++ b/libavfilter/vf_nlmeans_vulkan.c
@@ -23,6 +23,7 @@
 #include "vulkan_filter.h"
 #include "vulkan_spirv.h"
 #include "internal.h"
+#include "video.h"
 
 #define TYPE_NAME  "vec4"
 #define TYPE_ELEMS 4
diff --git a/libavfilter/vf_overlay_vaapi.c b/libavfilter/vf_overlay_vaapi.c
index 92227ead7f..c13db4e0d9 100644
--- a/libavfilter/vf_overlay_vaapi.c
+++ b/libavfilter/vf_overlay_vaapi.c
@@ -27,6 +27,7 @@
 #include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
+#include "video.h"
 #include "libavutil/eval.h"
 
 enum var_name {
diff --git a/libavfilter/vf_overlay_vulkan.c b/libavfilter/vf_overlay_vulkan.c
index ef8e9fd59b..c09de24142 100644
--- a/libavfilter/vf_overlay_vulkan.c
+++ b/libavfilter/vf_overlay_vulkan.c
@@ -24,6 +24,7 @@
 #include "vulkan_spirv.h"
 #include "internal.h"
 #include "framesync.h"
+#include "video.h"
 
 typedef struct OverlayVulkanContext {
     FFVulkanContext vkctx;
diff --git a/libavfilter/vf_owdenoise.c b/libavfilter/vf_owdenoise.c
index bb99e8f33c..a728d2ba75 100644
--- a/libavfilter/vf_owdenoise.c
+++ b/libavfilter/vf_owdenoise.c
@@ -39,6 +39,7 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct OWDenoiseContext {
     const AVClass *class;
diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c
index 4b69d3c63b..1c0836bee1 100644
--- a/libavfilter/vf_palettegen.c
+++ b/libavfilter/vf_palettegen.c
@@ -31,6 +31,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "palette.h"
+#include "video.h"
 
 /* Reference a color and how much it's used */
 struct color_ref {
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 5fa7a605ce..463a2a6783 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -34,6 +34,7 @@
 #include "framesync.h"
 #include "internal.h"
 #include "palette.h"
+#include "video.h"
 
 enum dithering_mode {
     DITHERING_NONE,
diff --git a/libavfilter/vf_pp.c b/libavfilter/vf_pp.c
index 13a013a12d..2d563f7d8a 100644
--- a/libavfilter/vf_pp.c
+++ b/libavfilter/vf_pp.c
@@ -29,6 +29,7 @@
 
 #include "internal.h"
 #include "qp_table.h"
+#include "video.h"
 
 #include "libpostproc/postprocess.h"
 
diff --git a/libavfilter/vf_pp7.c b/libavfilter/vf_pp7.c
index b7c7cf9dde..4f0e60c2e2 100644
--- a/libavfilter/vf_pp7.c
+++ b/libavfilter/vf_pp7.c
@@ -34,6 +34,7 @@
 #include "internal.h"
 #include "qp_table.h"
 #include "vf_pp7.h"
+#include "video.h"
 
 enum mode {
     MODE_HARD,
diff --git a/libavfilter/vf_procamp_vaapi.c b/libavfilter/vf_procamp_vaapi.c
index acfc72947c..f13f752e43 100644
--- a/libavfilter/vf_procamp_vaapi.c
+++ b/libavfilter/vf_procamp_vaapi.c
@@ -24,6 +24,7 @@
 #include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
+#include "video.h"
 
 // ProcAmp Min/Max/Default Values
 #define BRIGHTNESS_MIN     -100.0F
diff --git a/libavfilter/vf_sab.c b/libavfilter/vf_sab.c
index a70d309633..ee6edd5a48 100644
--- a/libavfilter/vf_sab.c
+++ b/libavfilter/vf_sab.c
@@ -30,6 +30,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct FilterParam {
     float radius;
diff --git a/libavfilter/vf_scale_vt.c b/libavfilter/vf_scale_vt.c
index a7f72c8de9..d5b4f12291 100644
--- a/libavfilter/vf_scale_vt.c
+++ b/libavfilter/vf_scale_vt.c
@@ -26,6 +26,7 @@
 #include "libavutil/pixdesc.h"
 #include "internal.h"
 #include "scale_eval.h"
+#include "video.h"
 
 typedef struct ScaleVtContext {
     AVClass *class;
diff --git a/libavfilter/vf_scale_vulkan.c b/libavfilter/vf_scale_vulkan.c
index 3029cf2b42..6699bab934 100644
--- a/libavfilter/vf_scale_vulkan.c
+++ b/libavfilter/vf_scale_vulkan.c
@@ -25,6 +25,7 @@
 #include "scale_eval.h"
 #include "internal.h"
 #include "colorspace.h"
+#include "video.h"
 
 enum ScalerFunc {
     F_BILINEAR = 0,
diff --git a/libavfilter/vf_scroll.c b/libavfilter/vf_scroll.c
index 107686cb02..5b7d0ad11c 100644
--- a/libavfilter/vf_scroll.c
+++ b/libavfilter/vf_scroll.c
@@ -24,6 +24,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct ScrollContext {
     const AVClass *class;
diff --git a/libavfilter/vf_smartblur.c b/libavfilter/vf_smartblur.c
index 48c28d2760..6c4719eab5 100644
--- a/libavfilter/vf_smartblur.c
+++ b/libavfilter/vf_smartblur.c
@@ -32,6 +32,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 #define RADIUS_MIN 0.1
 #define RADIUS_MAX 5.0
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
index 8442bcc597..efabe4dbae 100644
--- a/libavfilter/vf_spp.c
+++ b/libavfilter/vf_spp.c
@@ -38,6 +38,7 @@
 #include "internal.h"
 #include "qp_table.h"
 #include "vf_spp.h"
+#include "video.h"
 
 enum mode {
     MODE_HARD,
diff --git a/libavfilter/vf_sr.c b/libavfilter/vf_sr.c
index e06ae91d7c..b02b68ebe7 100644
--- a/libavfilter/vf_sr.c
+++ b/libavfilter/vf_sr.c
@@ -28,6 +28,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavformat/avio.h"
diff --git a/libavfilter/vf_tinterlace.c b/libavfilter/vf_tinterlace.c
index 63f1fc72f2..e221a6f941 100644
--- a/libavfilter/vf_tinterlace.c
+++ b/libavfilter/vf_tinterlace.c
@@ -32,6 +32,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "tinterlace.h"
+#include "video.h"
 
 #define OFFSET(x) offsetof(TInterlaceContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
diff --git a/libavfilter/vf_tonemap_vaapi.c b/libavfilter/vf_tonemap_vaapi.c
index 52303a8b86..7c4729a381 100644
--- a/libavfilter/vf_tonemap_vaapi.c
+++ b/libavfilter/vf_tonemap_vaapi.c
@@ -25,6 +25,7 @@
 #include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
+#include "video.h"
 
 typedef struct HDRVAAPIContext {
     VAAPIVPPContext vpp_ctx; // must be the first field
diff --git a/libavfilter/vf_tpad.c b/libavfilter/vf_tpad.c
index c2e266cb1a..19c4f9b0b5 100644
--- a/libavfilter/vf_tpad.c
+++ b/libavfilter/vf_tpad.c
@@ -26,6 +26,7 @@
 #include "internal.h"
 #include "formats.h"
 #include "drawutils.h"
+#include "video.h"
 
 enum PadMode {
     MODE_ADD = 0,
diff --git a/libavfilter/vf_transpose_vaapi.c b/libavfilter/vf_transpose_vaapi.c
index 5f1829dd05..d698b0d3d0 100644
--- a/libavfilter/vf_transpose_vaapi.c
+++ b/libavfilter/vf_transpose_vaapi.c
@@ -25,6 +25,7 @@
 #include "internal.h"
 #include "transpose.h"
 #include "vaapi_vpp.h"
+#include "video.h"
 
 typedef struct TransposeVAAPIContext {
     VAAPIVPPContext vpp_ctx; // must be the first field
diff --git a/libavfilter/vf_transpose_vt.c b/libavfilter/vf_transpose_vt.c
index 197ea5707c..b5b07e9ef1 100644
--- a/libavfilter/vf_transpose_vt.c
+++ b/libavfilter/vf_transpose_vt.c
@@ -26,6 +26,7 @@
 #include "libavutil/pixdesc.h"
 #include "internal.h"
 #include "transpose.h"
+#include "video.h"
 
 typedef struct TransposeVtContext {
     AVClass *class;
diff --git a/libavfilter/vf_transpose_vulkan.c b/libavfilter/vf_transpose_vulkan.c
index a8184cb6a4..3abe93be0b 100644
--- a/libavfilter/vf_transpose_vulkan.c
+++ b/libavfilter/vf_transpose_vulkan.c
@@ -25,6 +25,7 @@
 #include "vulkan_spirv.h"
 #include "internal.h"
 #include "transpose.h"
+#include "video.h"
 
 typedef struct TransposeVulkanContext {
     FFVulkanContext vkctx;
diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c
index ffdaa907b2..5f410b98a5 100644
--- a/libavfilter/vf_uspp.c
+++ b/libavfilter/vf_uspp.c
@@ -37,6 +37,7 @@
 #include "internal.h"
 #include "qp_table.h"
 #include "avfilter.h"
+#include "video.h"
 
 #define MAX_LEVEL 8 /* quality levels */
 #define BLOCK 16
diff --git a/libavfilter/vf_vidstabtransform.c b/libavfilter/vf_vidstabtransform.c
index 1914d7b348..9efc8ef5a0 100644
--- a/libavfilter/vf_vidstabtransform.c
+++ b/libavfilter/vf_vidstabtransform.c
@@ -28,6 +28,7 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 #include "vidstabutils.h"
 
diff --git a/libavfilter/vf_weave.c b/libavfilter/vf_weave.c
index 2e64d81f27..6be4587089 100644
--- a/libavfilter/vf_weave.c
+++ b/libavfilter/vf_weave.c
@@ -23,6 +23,7 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct WeaveContext {
     const AVClass *class;
diff --git a/libavfilter/vf_xbr.c b/libavfilter/vf_xbr.c
index 6ae5310c9f..1750da043e 100644
--- a/libavfilter/vf_xbr.c
+++ b/libavfilter/vf_xbr.c
@@ -31,6 +31,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "internal.h"
+#include "video.h"
 
 #define LB_MASK       0x00FEFEFE
 #define RED_BLUE_MASK 0x00FF00FF
diff --git a/libavfilter/vf_xfade_vulkan.c b/libavfilter/vf_xfade_vulkan.c
index 8825717890..f393dde202 100644
--- a/libavfilter/vf_xfade_vulkan.c
+++ b/libavfilter/vf_xfade_vulkan.c
@@ -23,6 +23,7 @@
 #include "vulkan_spirv.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 #define IN_A  0
 #define IN_B  1
diff --git a/libavfilter/vf_yaepblur.c b/libavfilter/vf_yaepblur.c
index 28a74a85a0..473a444498 100644
--- a/libavfilter/vf_yaepblur.c
+++ b/libavfilter/vf_yaepblur.c
@@ -31,6 +31,7 @@
 #include "libavutil/imgutils.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct YAEPContext {
     const AVClass *class;
diff --git a/libavfilter/vsrc_testsrc_vulkan.c b/libavfilter/vsrc_testsrc_vulkan.c
index 7eacb57c80..8485fa498d 100644
--- a/libavfilter/vsrc_testsrc_vulkan.c
+++ b/libavfilter/vsrc_testsrc_vulkan.c
@@ -26,6 +26,7 @@
 #include "internal.h"
 #include "filters.h"
 #include "colorspace.h"
+#include "video.h"
 
 enum TestSrcVulkanMode {
     TESTSRC_COLOR,
diff --git a/libavfilter/yadif_common.c b/libavfilter/yadif_common.c
index 05474a5ba9..561659e346 100644
--- a/libavfilter/yadif_common.c
+++ b/libavfilter/yadif_common.c
@@ -22,6 +22,7 @@
 #include "libavutil/avassert.h"
 #include "libavutil/imgutils.h"
 #include "internal.h"
+#include "video.h"
 #include "yadif.h"
 
 static int return_frame(AVFilterContext *ctx, int is_second)
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 2/4] avfilter/internal: Don't include video.h Andreas Rheinhardt
@ 2023-08-03 14:33 ` Andreas Rheinhardt
  2023-08-03 16:44   ` Marvin Scholz
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 4/4] avfilter/vf_colorconstancy: Remove redundant CONFIG check Andreas Rheinhardt
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-03 14:33 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Lots of video filters use a very simple input or output:
An array with a single AVFilterPad whose name is "default"
and whose type is AVMEDIA_TYPE_VIDEO; everything else is unset.

Given that we never use pointer equality for inputs or outputs*,
we can simply use a single AVFilterPad instead of dozens; this
even saves .data.rel.ro (8312B here) as well as relocations.

*: In fact, several filters (like the filters in vf_lut.c)
already use the same outputs; furthermore, ff_filter_alloc()
duplicates the input and output pads so that we do not even
work with the pads directly.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavfilter/buffersink.c          | 10 ++--------
 libavfilter/f_bench.c             | 10 ++--------
 libavfilter/f_cue.c               | 19 +++----------------
 libavfilter/f_graphmonitor.c      |  9 +--------
 libavfilter/f_latency.c           | 19 +++----------------
 libavfilter/f_loop.c              | 18 ++----------------
 libavfilter/f_metadata.c          |  9 +--------
 libavfilter/f_perms.c             |  9 +--------
 libavfilter/f_realtime.c          | 10 ++--------
 libavfilter/f_sendcmd.c           |  9 +--------
 libavfilter/f_sidedata.c          | 10 ++--------
 libavfilter/f_zmq.c               |  9 +--------
 libavfilter/setpts.c              |  9 +--------
 libavfilter/settb.c               |  9 +--------
 libavfilter/split.c               |  9 +--------
 libavfilter/trim.c                | 10 ++--------
 libavfilter/vf_addroi.c           | 10 ++--------
 libavfilter/vf_avgblur.c          |  9 +--------
 libavfilter/vf_bilateral.c        |  9 +--------
 libavfilter/vf_bitplanenoise.c    |  9 +--------
 libavfilter/vf_blackdetect.c      | 10 ++--------
 libavfilter/vf_blackframe.c       |  9 +--------
 libavfilter/vf_blockdetect.c      | 10 ++--------
 libavfilter/vf_blurdetect.c       | 10 ++--------
 libavfilter/vf_boxblur.c          |  9 +--------
 libavfilter/vf_cas.c              |  9 +--------
 libavfilter/vf_ccrepack.c         | 10 ++--------
 libavfilter/vf_chromanr.c         |  9 +--------
 libavfilter/vf_chromashift.c      | 11 ++---------
 libavfilter/vf_codecview.c        | 10 ++--------
 libavfilter/vf_colorconstancy.c   |  9 +--------
 libavfilter/vf_colorcontrast.c    |  9 +--------
 libavfilter/vf_colorcorrect.c     |  9 +--------
 libavfilter/vf_colorize.c         |  9 +--------
 libavfilter/vf_colorlevels.c      |  9 +--------
 libavfilter/vf_colormatrix.c      |  9 +--------
 libavfilter/vf_colortemperature.c |  9 +--------
 libavfilter/vf_convolution.c      | 19 ++++++-------------
 libavfilter/vf_copy.c             |  9 +--------
 libavfilter/vf_cover_rect.c       | 10 ++--------
 libavfilter/vf_cropdetect.c       |  9 +--------
 libavfilter/vf_curves.c           |  9 +--------
 libavfilter/vf_datascope.c        | 18 ++----------------
 libavfilter/vf_dblur.c            |  9 +--------
 libavfilter/vf_dctdnoiz.c         |  9 +--------
 libavfilter/vf_deband.c           |  9 +--------
 libavfilter/vf_dedot.c            |  9 +--------
 libavfilter/vf_delogo.c           |  9 +--------
 libavfilter/vf_derain.c           |  9 +--------
 libavfilter/vf_deshake.c          |  9 +--------
 libavfilter/vf_dnn_classify.c     | 19 +++----------------
 libavfilter/vf_dnn_detect.c       | 19 +++----------------
 libavfilter/vf_drawbox.c          | 18 ++----------------
 libavfilter/vf_edgedetect.c       |  9 +--------
 libavfilter/vf_elbg.c             |  9 +--------
 libavfilter/vf_entropy.c          |  9 +--------
 libavfilter/vf_eq.c               |  9 +--------
 libavfilter/vf_exposure.c         |  9 +--------
 libavfilter/vf_fade.c             |  9 +--------
 libavfilter/vf_fftfilt.c          |  9 +--------
 libavfilter/vf_fieldorder.c       |  9 +--------
 libavfilter/vf_fillborders.c      |  9 +--------
 libavfilter/vf_find_rect.c        | 10 ++--------
 libavfilter/vf_floodfill.c        |  9 +--------
 libavfilter/vf_format.c           | 18 ++----------------
 libavfilter/vf_fps.c              | 10 ++--------
 libavfilter/vf_freezedetect.c     | 10 ++--------
 libavfilter/vf_frei0r.c           |  9 +--------
 libavfilter/vf_fspp.c             |  9 +--------
 libavfilter/vf_gblur.c            |  9 +--------
 libavfilter/vf_geq.c              |  9 +--------
 libavfilter/vf_gradfun.c          |  9 +--------
 libavfilter/vf_grayworld.c        |  9 +--------
 libavfilter/vf_hflip.c            |  9 +--------
 libavfilter/vf_histeq.c           |  9 +--------
 libavfilter/vf_hqdn3d.c           |  9 +--------
 libavfilter/vf_hue.c              |  9 +--------
 libavfilter/vf_huesaturation.c    |  9 +--------
 libavfilter/vf_iccdetect.c        | 10 ++--------
 libavfilter/vf_iccgen.c           | 10 ++--------
 libavfilter/vf_il.c               |  9 +--------
 libavfilter/vf_kerndeint.c        |  9 +--------
 libavfilter/vf_limiter.c          |  9 +--------
 libavfilter/vf_lumakey.c          |  9 +--------
 libavfilter/vf_lut.c              |  7 +------
 libavfilter/vf_lut3d.c            | 18 ++----------------
 libavfilter/vf_maskfun.c          |  9 +--------
 libavfilter/vf_mcdeint.c          |  9 +--------
 libavfilter/vf_median.c           |  9 +--------
 libavfilter/vf_mestimate.c        |  9 +--------
 libavfilter/vf_monochrome.c       |  9 +--------
 libavfilter/vf_mpdecimate.c       |  9 +--------
 libavfilter/vf_negate.c           |  9 +--------
 libavfilter/vf_neighbor.c         |  9 +--------
 libavfilter/vf_nlmeans.c          |  9 +--------
 libavfilter/vf_noise.c            |  9 +--------
 libavfilter/vf_normalize.c        |  9 +--------
 libavfilter/vf_null.c             | 18 ++----------------
 libavfilter/vf_ocr.c              |  9 +--------
 libavfilter/vf_owdenoise.c        |  9 +--------
 libavfilter/vf_perspective.c      |  9 +--------
 libavfilter/vf_phase.c            |  9 +--------
 libavfilter/vf_photosensitivity.c |  9 +--------
 libavfilter/vf_pixdesctest.c      |  9 +--------
 libavfilter/vf_pp.c               |  9 +--------
 libavfilter/vf_pp7.c              |  9 +--------
 libavfilter/vf_pseudocolor.c      |  9 +--------
 libavfilter/vf_pullup.c           |  9 +--------
 libavfilter/vf_qp.c               |  9 +--------
 libavfilter/vf_readeia608.c       |  9 +--------
 libavfilter/vf_readvitc.c         | 10 ++--------
 libavfilter/vf_removegrain.c      |  9 +--------
 libavfilter/vf_removelogo.c       |  9 +--------
 libavfilter/vf_repeatfields.c     | 10 ++--------
 libavfilter/vf_sab.c              |  9 +--------
 libavfilter/vf_scdet.c            | 10 ++--------
 libavfilter/vf_scroll.c           |  9 +--------
 libavfilter/vf_selectivecolor.c   |  9 +--------
 libavfilter/vf_separatefields.c   | 10 ++--------
 libavfilter/vf_setparams.c        | 13 +++----------
 libavfilter/vf_shuffleframes.c    |  9 +--------
 libavfilter/vf_shuffleplanes.c    |  9 +--------
 libavfilter/vf_siti.c             |  9 +--------
 libavfilter/vf_smartblur.c        |  9 +--------
 libavfilter/vf_spp.c              |  9 +--------
 libavfilter/vf_subtitles.c        | 11 ++---------
 libavfilter/vf_swaprect.c         |  9 +--------
 libavfilter/vf_swapuv.c           |  9 +--------
 libavfilter/vf_tonemap.c          |  9 +--------
 libavfilter/vf_tpad.c             |  9 +--------
 libavfilter/vf_unsharp.c          |  9 +--------
 libavfilter/vf_untile.c           | 10 ++--------
 libavfilter/vf_uspp.c             |  9 +--------
 libavfilter/vf_vaguedenoiser.c    |  9 +--------
 libavfilter/vf_vflip.c            |  9 +--------
 libavfilter/vf_vfrdet.c           | 10 ++--------
 libavfilter/vf_vibrance.c         |  9 +--------
 libavfilter/vf_vidstabdetect.c    | 10 ++--------
 libavfilter/vf_vidstabtransform.c |  9 +--------
 libavfilter/vf_vignette.c         |  9 +--------
 libavfilter/vf_vmafmotion.c       | 10 ++--------
 libavfilter/vf_yaepblur.c         |  9 +--------
 libavfilter/vf_zoompan.c          |  9 +--------
 libavfilter/video.c               |  7 +++++++
 libavfilter/video.h               |  5 +++++
 145 files changed, 203 insertions(+), 1231 deletions(-)

diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index af9a638e4c..6d83a9310c 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -38,6 +38,7 @@
 #include "buffersink.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct BufferSinkContext {
     const AVClass *class;
@@ -377,13 +378,6 @@ static const AVOption abuffersink_options[] = {
 AVFILTER_DEFINE_CLASS(buffersink);
 AVFILTER_DEFINE_CLASS(abuffersink);
 
-static const AVFilterPad avfilter_vsink_buffer_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vsink_buffer = {
     .name          = "buffersink",
     .description   = NULL_IF_CONFIG_SMALL("Buffer video frames, and make them available to the end of the filter graph."),
@@ -391,7 +385,7 @@ const AVFilter ff_vsink_buffer = {
     .priv_class    = &buffersink_class,
     .init          = common_init,
     .activate      = activate,
-    FILTER_INPUTS(avfilter_vsink_buffer_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     .outputs       = NULL,
     FILTER_QUERY_FUNC(vsink_query_formats),
 };
diff --git a/libavfilter/f_bench.c b/libavfilter/f_bench.c
index 7938583d0e..8b840b4b41 100644
--- a/libavfilter/f_bench.c
+++ b/libavfilter/f_bench.c
@@ -24,6 +24,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 enum BenchAction {
     ACTION_START,
@@ -101,20 +102,13 @@ static const AVFilterPad bench_inputs[] = {
     },
 };
 
-static const AVFilterPad bench_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_bench = {
     .name          = "bench",
     .description   = NULL_IF_CONFIG_SMALL("Benchmark part of a filtergraph."),
     .priv_size     = sizeof(BenchContext),
     .init          = init,
     FILTER_INPUTS(bench_inputs),
-    FILTER_OUTPUTS(bench_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class    = &bench_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_cue.c b/libavfilter/f_cue.c
index 290a828d99..7748e8f1fd 100644
--- a/libavfilter/f_cue.c
+++ b/libavfilter/f_cue.c
@@ -26,6 +26,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct CueContext {
     const AVClass *class;
@@ -100,27 +101,13 @@ static const AVOption options[] = {
 AVFILTER_DEFINE_CLASS_EXT(cue_acue, "(a)cue", options);
 
 #if CONFIG_CUE_FILTER
-static const AVFilterPad cue_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad cue_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_cue = {
     .name        = "cue",
     .description = NULL_IF_CONFIG_SMALL("Delay filtering to match a cue."),
     .priv_class  = &cue_acue_class,
     .priv_size   = sizeof(CueContext),
-    FILTER_INPUTS(cue_inputs),
-    FILTER_OUTPUTS(cue_outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .activate    = activate,
 };
 #endif /* CONFIG_CUE_FILTER */
diff --git a/libavfilter/f_graphmonitor.c b/libavfilter/f_graphmonitor.c
index e75cc52fbe..ce4153fc79 100644
--- a/libavfilter/f_graphmonitor.c
+++ b/libavfilter/f_graphmonitor.c
@@ -570,13 +570,6 @@ AVFILTER_DEFINE_CLASS_EXT(graphmonitor, "(a)graphmonitor", graphmonitor_options)
 
 #if CONFIG_GRAPHMONITOR_FILTER
 
-static const AVFilterPad graphmonitor_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad graphmonitor_outputs[] = {
     {
         .name         = "default",
@@ -593,7 +586,7 @@ const AVFilter ff_vf_graphmonitor = {
     .init          = init,
     .uninit        = uninit,
     .activate      = activate,
-    FILTER_INPUTS(graphmonitor_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(graphmonitor_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/f_latency.c b/libavfilter/f_latency.c
index a497e0c71a..7c97363853 100644
--- a/libavfilter/f_latency.c
+++ b/libavfilter/f_latency.c
@@ -26,6 +26,7 @@
 #include "filters.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct LatencyContext {
     int64_t min_latency;
@@ -100,20 +101,6 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 #if CONFIG_LATENCY_FILTER
 
-static const AVFilterPad latency_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad latency_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_latency = {
     .name          = "latency",
     .description   = NULL_IF_CONFIG_SMALL("Report video filtering latency."),
@@ -123,8 +110,8 @@ const AVFilter ff_vf_latency = {
     .activate      = activate,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                      AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(latency_inputs),
-    FILTER_OUTPUTS(latency_outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 
 #endif // CONFIG_LATENCY_FILTER
diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c
index 6a654c2109..23bdfba57e 100644
--- a/libavfilter/f_loop.c
+++ b/libavfilter/f_loop.c
@@ -470,20 +470,6 @@ static const AVOption loop_options[] = {
 
 AVFILTER_DEFINE_CLASS(loop);
 
-static const AVFilterPad inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_loop = {
     .name        = "loop",
     .description = NULL_IF_CONFIG_SMALL("Loop video frames."),
@@ -492,7 +478,7 @@ const AVFilter ff_vf_loop = {
     .init        = init,
     .uninit      = uninit,
     .activate    = activate,
-    FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 #endif /* CONFIG_LOOP_FILTER */
diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c
index 5679dfb203..86500cd353 100644
--- a/libavfilter/f_metadata.c
+++ b/libavfilter/f_metadata.c
@@ -404,13 +404,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_metadata = {
     .name        = "metadata",
     .description = NULL_IF_CONFIG_SMALL("Manipulate video frame metadata."),
@@ -419,7 +412,7 @@ const AVFilter ff_vf_metadata = {
     .init        = init,
     .uninit      = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                    AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_perms.c b/libavfilter/f_perms.c
index 1c8cc5f68b..16b8e5c12f 100644
--- a/libavfilter/f_perms.c
+++ b/libavfilter/f_perms.c
@@ -149,20 +149,13 @@ static const AVFilterPad perms_inputs[] = {
     },
 };
 
-static const AVFilterPad perms_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_perms = {
     .name        = "perms",
     .description = NULL_IF_CONFIG_SMALL("Set permissions for the output video frame."),
     .init        = init,
     .priv_size   = sizeof(PermsContext),
     FILTER_INPUTS(perms_inputs),
-    FILTER_OUTPUTS(perms_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class  = &perms_class,
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                    AVFILTER_FLAG_METADATA_ONLY,
diff --git a/libavfilter/f_realtime.c b/libavfilter/f_realtime.c
index 278ee18f36..83793bbe15 100644
--- a/libavfilter/f_realtime.c
+++ b/libavfilter/f_realtime.c
@@ -25,6 +25,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 #include <float.h>
 
 typedef struct RealtimeContext {
@@ -86,13 +87,6 @@ static const AVFilterPad avfilter_vf_realtime_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_realtime_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_realtime = {
     .name        = "realtime",
     .description = NULL_IF_CONFIG_SMALL("Slow down filtering to match realtime."),
@@ -100,7 +94,7 @@ const AVFilter ff_vf_realtime = {
     .priv_class  = &realtime_class,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(avfilter_vf_realtime_inputs),
-    FILTER_OUTPUTS(avfilter_vf_realtime_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .process_command = ff_filter_process_command,
 };
 #endif /* CONFIG_REALTIME_FILTER */
diff --git a/libavfilter/f_sendcmd.c b/libavfilter/f_sendcmd.c
index 9f27fbde14..922ce78287 100644
--- a/libavfilter/f_sendcmd.c
+++ b/libavfilter/f_sendcmd.c
@@ -600,13 +600,6 @@ static const AVFilterPad sendcmd_inputs[] = {
     },
 };
 
-static const AVFilterPad sendcmd_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_sendcmd = {
     .name        = "sendcmd",
     .description = NULL_IF_CONFIG_SMALL("Send commands to filters."),
@@ -615,7 +608,7 @@ const AVFilter ff_vf_sendcmd = {
     .priv_size   = sizeof(SendCmdContext),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(sendcmd_inputs),
-    FILTER_OUTPUTS(sendcmd_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class  = &sendcmd_class,
 };
 
diff --git a/libavfilter/f_sidedata.c b/libavfilter/f_sidedata.c
index 23e95d0b8a..208b457804 100644
--- a/libavfilter/f_sidedata.c
+++ b/libavfilter/f_sidedata.c
@@ -31,6 +31,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 enum SideDataMode {
     SIDEDATA_SELECT,
@@ -161,13 +162,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_sidedata = {
     .name        = "sidedata",
     .description = NULL_IF_CONFIG_SMALL("Manipulate video frame side data."),
@@ -175,7 +169,7 @@ const AVFilter ff_vf_sidedata = {
     .priv_class  = &sidedata_class,
     .init        = init,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                    AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/f_zmq.c b/libavfilter/f_zmq.c
index d368482a68..3829b55224 100644
--- a/libavfilter/f_zmq.c
+++ b/libavfilter/f_zmq.c
@@ -217,13 +217,6 @@ static const AVFilterPad zmq_inputs[] = {
     },
 };
 
-static const AVFilterPad zmq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_zmq = {
     .name        = "zmq",
     .description = NULL_IF_CONFIG_SMALL("Receive commands through ZMQ and broker them to filters."),
@@ -231,7 +224,7 @@ const AVFilter ff_vf_zmq = {
     .uninit      = uninit,
     .priv_size   = sizeof(ZMQContext),
     FILTER_INPUTS(zmq_inputs),
-    FILTER_OUTPUTS(zmq_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class  = &zmq_class,
 };
 
diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
index e5150b7e03..d057fc91c4 100644
--- a/libavfilter/setpts.c
+++ b/libavfilter/setpts.c
@@ -326,13 +326,6 @@ static const AVFilterPad avfilter_vf_setpts_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_setpts_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_setpts = {
     .name            = "setpts",
     .description     = NULL_IF_CONFIG_SMALL("Set PTS for the output video frame."),
@@ -346,7 +339,7 @@ const AVFilter ff_vf_setpts = {
     .priv_class = &setpts_class,
 
     FILTER_INPUTS(avfilter_vf_setpts_inputs),
-    FILTER_OUTPUTS(avfilter_vf_setpts_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 #endif /* CONFIG_SETPTS_FILTER */
 
diff --git a/libavfilter/settb.c b/libavfilter/settb.c
index c7523436d3..ba58abd9e9 100644
--- a/libavfilter/settb.c
+++ b/libavfilter/settb.c
@@ -165,13 +165,6 @@ static int activate(AVFilterContext *ctx)
 DEFINE_OPTIONS(settb, VIDEO);
 AVFILTER_DEFINE_CLASS(settb);
 
-static const AVFilterPad avfilter_vf_settb_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad avfilter_vf_settb_outputs[] = {
     {
         .name         = "default",
@@ -185,7 +178,7 @@ const AVFilter ff_vf_settb = {
     .description = NULL_IF_CONFIG_SMALL("Set timebase for the video output link."),
     .priv_size   = sizeof(SetTBContext),
     .priv_class  = &settb_class,
-    FILTER_INPUTS(avfilter_vf_settb_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(avfilter_vf_settb_outputs),
     .activate    = activate,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
diff --git a/libavfilter/split.c b/libavfilter/split.c
index 6f24af3f02..290537aba5 100644
--- a/libavfilter/split.c
+++ b/libavfilter/split.c
@@ -134,13 +134,6 @@ static const AVOption options[] = {
 
 AVFILTER_DEFINE_CLASS_EXT(split, "(a)split", options);
 
-static const AVFilterPad avfilter_vf_split_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_split = {
     .name        = "split",
     .description = NULL_IF_CONFIG_SMALL("Pass on the input to N video outputs."),
@@ -148,7 +141,7 @@ const AVFilter ff_vf_split = {
     .priv_class  = &split_class,
     .init        = split_init,
     .activate    = activate,
-    FILTER_INPUTS(avfilter_vf_split_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     .outputs     = NULL,
     .flags       = AVFILTER_FLAG_DYNAMIC_OUTPUTS | AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/trim.c b/libavfilter/trim.c
index 91a68716c9..4c1a2b4f48 100644
--- a/libavfilter/trim.c
+++ b/libavfilter/trim.c
@@ -32,6 +32,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "filters.h"
+#include "video.h"
 
 typedef struct TrimContext {
     const AVClass *class;
@@ -356,13 +357,6 @@ static const AVFilterPad trim_inputs[] = {
     },
 };
 
-static const AVFilterPad trim_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_trim = {
     .name        = "trim",
     .description = NULL_IF_CONFIG_SMALL("Pick one continuous section from the input, drop the rest."),
@@ -371,7 +365,7 @@ const AVFilter ff_vf_trim = {
     .priv_size   = sizeof(TrimContext),
     .priv_class  = &trim_class,
     FILTER_INPUTS(trim_inputs),
-    FILTER_OUTPUTS(trim_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 #endif // CONFIG_TRIM_FILTER
 
diff --git a/libavfilter/vf_addroi.c b/libavfilter/vf_addroi.c
index dd3daeda81..e7ad916214 100644
--- a/libavfilter/vf_addroi.c
+++ b/libavfilter/vf_addroi.c
@@ -21,6 +21,7 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 enum {
     X, Y, W, H,
@@ -246,13 +247,6 @@ static const AVFilterPad addroi_inputs[] = {
     },
 };
 
-static const AVFilterPad addroi_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_addroi = {
     .name        = "addroi",
     .description = NULL_IF_CONFIG_SMALL("Add region of interest to frame."),
@@ -265,5 +259,5 @@ const AVFilter ff_vf_addroi = {
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
 
     FILTER_INPUTS(addroi_inputs),
-    FILTER_OUTPUTS(addroi_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_avgblur.c b/libavfilter/vf_avgblur.c
index bd4471cb8e..bbb85bab17 100644
--- a/libavfilter/vf_avgblur.c
+++ b/libavfilter/vf_avgblur.c
@@ -334,13 +334,6 @@ static const AVFilterPad avgblur_inputs[] = {
     },
 };
 
-static const AVFilterPad avgblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_avgblur = {
     .name          = "avgblur",
     .description   = NULL_IF_CONFIG_SMALL("Apply Average Blur filter."),
@@ -348,7 +341,7 @@ const AVFilter ff_vf_avgblur = {
     .priv_class    = &avgblur_class,
     .uninit        = uninit,
     FILTER_INPUTS(avgblur_inputs),
-    FILTER_OUTPUTS(avgblur_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = process_command,
diff --git a/libavfilter/vf_bilateral.c b/libavfilter/vf_bilateral.c
index 41dc38d6f2..4d3dfa3511 100644
--- a/libavfilter/vf_bilateral.c
+++ b/libavfilter/vf_bilateral.c
@@ -498,13 +498,6 @@ static const AVFilterPad bilateral_inputs[] = {
     },
 };
 
-static const AVFilterPad bilateral_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_bilateral = {
     .name          = "bilateral",
     .description   = NULL_IF_CONFIG_SMALL("Apply Bilateral filter."),
@@ -512,7 +505,7 @@ const AVFilter ff_vf_bilateral = {
     .priv_class    = &bilateral_class,
     .uninit        = uninit,
     FILTER_INPUTS(bilateral_inputs),
-    FILTER_OUTPUTS(bilateral_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
                      AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_bitplanenoise.c b/libavfilter/vf_bitplanenoise.c
index 5b5c429369..ebd8c4deaf 100644
--- a/libavfilter/vf_bitplanenoise.c
+++ b/libavfilter/vf_bitplanenoise.c
@@ -197,19 +197,12 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_bitplanenoise = {
     .name           = "bitplanenoise",
     .description    = NULL_IF_CONFIG_SMALL("Measure bit plane noise."),
     .priv_size      = sizeof(BPNContext),
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixfmts),
     .priv_class     = &bitplanenoise_class,
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_blackdetect.c b/libavfilter/vf_blackdetect.c
index c937248169..55033ba5ea 100644
--- a/libavfilter/vf_blackdetect.c
+++ b/libavfilter/vf_blackdetect.c
@@ -30,6 +30,7 @@
 #include "libavutil/timestamp.h"
 #include "avfilter.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct BlackDetectContext {
     const AVClass *class;
@@ -241,19 +242,12 @@ static const AVFilterPad blackdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad blackdetect_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_blackdetect = {
     .name          = "blackdetect",
     .description   = NULL_IF_CONFIG_SMALL("Detect video intervals that are (almost) black."),
     .priv_size     = sizeof(BlackDetectContext),
     FILTER_INPUTS(blackdetect_inputs),
-    FILTER_OUTPUTS(blackdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .uninit        = uninit,
     .priv_class    = &blackdetect_class,
diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c
index 4bcec86688..27198b318c 100644
--- a/libavfilter/vf_blackframe.c
+++ b/libavfilter/vf_blackframe.c
@@ -115,13 +115,6 @@ static const AVFilterPad avfilter_vf_blackframe_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_blackframe_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_blackframe = {
     .name          = "blackframe",
     .description   = NULL_IF_CONFIG_SMALL("Detect frames that are (almost) black."),
@@ -129,6 +122,6 @@ const AVFilter ff_vf_blackframe = {
     .priv_class    = &blackframe_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(avfilter_vf_blackframe_inputs),
-    FILTER_OUTPUTS(avfilter_vf_blackframe_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_blockdetect.c b/libavfilter/vf_blockdetect.c
index 27283590be..d787aff5e4 100644
--- a/libavfilter/vf_blockdetect.c
+++ b/libavfilter/vf_blockdetect.c
@@ -32,6 +32,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct BLKContext {
     const AVClass *class;
@@ -272,13 +273,6 @@ static const AVFilterPad blockdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad blockdetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_blockdetect = {
     .name          = "blockdetect",
     .description   = NULL_IF_CONFIG_SMALL("Blockdetect filter."),
@@ -286,7 +280,7 @@ const AVFilter ff_vf_blockdetect = {
     .uninit        = blockdetect_uninit,
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     FILTER_INPUTS(blockdetect_inputs),
-    FILTER_OUTPUTS(blockdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class    = &blockdetect_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/vf_blurdetect.c b/libavfilter/vf_blurdetect.c
index db06efcce7..354a6b6100 100644
--- a/libavfilter/vf_blurdetect.c
+++ b/libavfilter/vf_blurdetect.c
@@ -35,6 +35,7 @@
 #include "libavutil/qsort.h"
 #include "internal.h"
 #include "edge_common.h"
+#include "video.h"
 
 static int comp(const float *a,const float *b)
 {
@@ -356,13 +357,6 @@ static const AVFilterPad blurdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad blurdetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_blurdetect = {
     .name          = "blurdetect",
     .description   = NULL_IF_CONFIG_SMALL("Blurdetect filter."),
@@ -371,7 +365,7 @@ const AVFilter ff_vf_blurdetect = {
     .uninit        = blurdetect_uninit,
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     FILTER_INPUTS(blurdetect_inputs),
-    FILTER_OUTPUTS(blurdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class    = &blurdetect_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 };
diff --git a/libavfilter/vf_boxblur.c b/libavfilter/vf_boxblur.c
index e13c2472b3..60375463a6 100644
--- a/libavfilter/vf_boxblur.c
+++ b/libavfilter/vf_boxblur.c
@@ -295,13 +295,6 @@ static const AVFilterPad avfilter_vf_boxblur_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_boxblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_boxblur = {
     .name          = "boxblur",
     .description   = NULL_IF_CONFIG_SMALL("Blur the input."),
@@ -309,7 +302,7 @@ const AVFilter ff_vf_boxblur = {
     .priv_class    = &boxblur_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_boxblur_inputs),
-    FILTER_OUTPUTS(avfilter_vf_boxblur_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_cas.c b/libavfilter/vf_cas.c
index c45529cef7..545a0dd70a 100644
--- a/libavfilter/vf_cas.c
+++ b/libavfilter/vf_cas.c
@@ -255,13 +255,6 @@ static const AVFilterPad cas_inputs[] = {
     },
 };
 
-static const AVFilterPad cas_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(CASContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -279,7 +272,7 @@ const AVFilter ff_vf_cas = {
     .priv_size     = sizeof(CASContext),
     .priv_class    = &cas_class,
     FILTER_INPUTS(cas_inputs),
-    FILTER_OUTPUTS(cas_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_ccrepack.c b/libavfilter/vf_ccrepack.c
index 950bb7b528..5213eab82b 100644
--- a/libavfilter/vf_ccrepack.c
+++ b/libavfilter/vf_ccrepack.c
@@ -32,6 +32,7 @@
 #include "avfilter.h"
 #include "internal.h"
 #include "ccfifo.h"
+#include "video.h"
 #include "libavutil/opt.h"
 
 typedef struct CCRepackContext
@@ -85,13 +86,6 @@ static const AVFilterPad avfilter_vf_ccrepack_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_ccrepack_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_ccrepack = {
     .name        = "ccrepack",
     .description = NULL_IF_CONFIG_SMALL("Repack CEA-708 closed caption metadata"),
@@ -99,5 +93,5 @@ const AVFilter ff_vf_ccrepack = {
     .priv_size   = sizeof(CCRepackContext),
     .priv_class  = &ccrepack_class,
     FILTER_INPUTS(avfilter_vf_ccrepack_inputs),
-    FILTER_OUTPUTS(avfilter_vf_ccrepack_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_chromanr.c b/libavfilter/vf_chromanr.c
index 36c29ed8cf..8a16460c06 100644
--- a/libavfilter/vf_chromanr.c
+++ b/libavfilter/vf_chromanr.c
@@ -289,13 +289,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 AVFILTER_DEFINE_CLASS(chromanr);
 
 const AVFilter ff_vf_chromanr = {
@@ -303,7 +296,7 @@ const AVFilter ff_vf_chromanr = {
     .description   = NULL_IF_CONFIG_SMALL("Reduce chrominance noise."),
     .priv_size     = sizeof(ChromaNRContext),
     .priv_class    = &chromanr_class,
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_chromashift.c b/libavfilter/vf_chromashift.c
index 2ddfa61726..92869113a9 100644
--- a/libavfilter/vf_chromashift.c
+++ b/libavfilter/vf_chromashift.c
@@ -382,13 +382,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const enum AVPixelFormat yuv_pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P,AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
@@ -411,7 +404,7 @@ const AVFilter ff_vf_chromashift = {
     .description   = NULL_IF_CONFIG_SMALL("Shift chroma."),
     .priv_size     = sizeof(ChromaShiftContext),
     .priv_class    = &chromashift_class,
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(yuv_pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
@@ -448,7 +441,7 @@ const AVFilter ff_vf_rgbashift = {
     .description   = NULL_IF_CONFIG_SMALL("Shift RGBA."),
     .priv_size     = sizeof(ChromaShiftContext),
     .priv_class    = &rgbashift_class,
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_INPUTS(inputs),
     FILTER_PIXFMTS_ARRAY(rgb_pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_codecview.c b/libavfilter/vf_codecview.c
index cddb3e5368..0c1ef21e28 100644
--- a/libavfilter/vf_codecview.c
+++ b/libavfilter/vf_codecview.c
@@ -36,6 +36,7 @@
 #include "avfilter.h"
 #include "qp_table.h"
 #include "internal.h"
+#include "video.h"
 
 #define MV_P_FOR  (1<<0)
 #define MV_B_FOR  (1<<1)
@@ -334,19 +335,12 @@ static const AVFilterPad codecview_inputs[] = {
     },
 };
 
-static const AVFilterPad codecview_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_codecview = {
     .name          = "codecview",
     .description   = NULL_IF_CONFIG_SMALL("Visualize information about some codecs."),
     .priv_size     = sizeof(CodecViewContext),
     FILTER_INPUTS(codecview_inputs),
-    FILTER_OUTPUTS(codecview_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     // TODO: we can probably add way more pixel formats without any other
     // changes; anything with 8-bit luma in first plane should be working
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_YUV420P),
diff --git a/libavfilter/vf_colorconstancy.c b/libavfilter/vf_colorconstancy.c
index db7e20df53..af0356767f 100644
--- a/libavfilter/vf_colorconstancy.c
+++ b/libavfilter/vf_colorconstancy.c
@@ -719,13 +719,6 @@ static const AVFilterPad colorconstancy_inputs[] = {
     },
 };
 
-static const AVFilterPad colorconstancy_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #if CONFIG_GREYEDGE_FILTER
 
 static const AVOption greyedge_options[] = {
@@ -744,7 +737,7 @@ const AVFilter ff_vf_greyedge = {
     .priv_class    = &greyedge_class,
     .uninit        = uninit,
     FILTER_INPUTS(colorconstancy_inputs),
-    FILTER_OUTPUTS(colorconstancy_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     // TODO: support more formats
     // FIXME: error when saving to .jpg
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_GBRP),
diff --git a/libavfilter/vf_colorcontrast.c b/libavfilter/vf_colorcontrast.c
index 7561d21259..2cb46cc35a 100644
--- a/libavfilter/vf_colorcontrast.c
+++ b/libavfilter/vf_colorcontrast.c
@@ -359,13 +359,6 @@ static const AVFilterPad colorcontrast_inputs[] = {
     },
 };
 
-static const AVFilterPad colorcontrast_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(ColorContrastContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -388,7 +381,7 @@ const AVFilter ff_vf_colorcontrast = {
     .priv_size     = sizeof(ColorContrastContext),
     .priv_class    = &colorcontrast_class,
     FILTER_INPUTS(colorcontrast_inputs),
-    FILTER_OUTPUTS(colorcontrast_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_colorcorrect.c b/libavfilter/vf_colorcorrect.c
index ee97b62b0e..55df67404a 100644
--- a/libavfilter/vf_colorcorrect.c
+++ b/libavfilter/vf_colorcorrect.c
@@ -510,13 +510,6 @@ static const AVFilterPad colorcorrect_inputs[] = {
     },
 };
 
-static const AVFilterPad colorcorrect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(ColorCorrectContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -543,7 +536,7 @@ const AVFilter ff_vf_colorcorrect = {
     .priv_class    = &colorcorrect_class,
     .uninit        = uninit,
     FILTER_INPUTS(colorcorrect_inputs),
-    FILTER_OUTPUTS(colorcorrect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_colorize.c b/libavfilter/vf_colorize.c
index ba7b80dae7..03681a788f 100644
--- a/libavfilter/vf_colorize.c
+++ b/libavfilter/vf_colorize.c
@@ -260,13 +260,6 @@ static const AVFilterPad colorize_inputs[] = {
     },
 };
 
-static const AVFilterPad colorize_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(ColorizeContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -286,7 +279,7 @@ const AVFilter ff_vf_colorize = {
     .priv_size     = sizeof(ColorizeContext),
     .priv_class    = &colorize_class,
     FILTER_INPUTS(colorize_inputs),
-    FILTER_OUTPUTS(colorize_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_colorlevels.c b/libavfilter/vf_colorlevels.c
index 44ae6cffbf..b89f465d67 100644
--- a/libavfilter/vf_colorlevels.c
+++ b/libavfilter/vf_colorlevels.c
@@ -559,20 +559,13 @@ static const AVFilterPad colorlevels_inputs[] = {
     },
 };
 
-static const AVFilterPad colorlevels_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_colorlevels = {
     .name          = "colorlevels",
     .description   = NULL_IF_CONFIG_SMALL("Adjust the color levels."),
     .priv_size     = sizeof(ColorLevelsContext),
     .priv_class    = &colorlevels_class,
     FILTER_INPUTS(colorlevels_inputs),
-    FILTER_OUTPUTS(colorlevels_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_0RGB,   AV_PIX_FMT_0BGR,
                    AV_PIX_FMT_ARGB,   AV_PIX_FMT_ABGR,
                    AV_PIX_FMT_RGB0,   AV_PIX_FMT_BGR0,
diff --git a/libavfilter/vf_colormatrix.c b/libavfilter/vf_colormatrix.c
index bee80c69cc..aa00295250 100644
--- a/libavfilter/vf_colormatrix.c
+++ b/libavfilter/vf_colormatrix.c
@@ -483,20 +483,13 @@ static const AVFilterPad colormatrix_inputs[] = {
     },
 };
 
-static const AVFilterPad colormatrix_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_colormatrix = {
     .name          = "colormatrix",
     .description   = NULL_IF_CONFIG_SMALL("Convert color matrix."),
     .priv_size     = sizeof(ColorMatrixContext),
     .init          = init,
     FILTER_INPUTS(colormatrix_inputs),
-    FILTER_OUTPUTS(colormatrix_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_YUV444P,
                    AV_PIX_FMT_YUV422P,
                    AV_PIX_FMT_YUV420P,
diff --git a/libavfilter/vf_colortemperature.c b/libavfilter/vf_colortemperature.c
index e6ac5f95c7..e3f3005171 100644
--- a/libavfilter/vf_colortemperature.c
+++ b/libavfilter/vf_colortemperature.c
@@ -325,13 +325,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(ColorTemperatureContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -350,7 +343,7 @@ const AVFilter ff_vf_colortemperature = {
     .priv_size     = sizeof(ColorTemperatureContext),
     .priv_class    = &colortemperature_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
index 7762fa2a05..814203aeee 100644
--- a/libavfilter/vf_convolution.c
+++ b/libavfilter/vf_convolution.c
@@ -873,13 +873,6 @@ static const AVFilterPad convolution_inputs[] = {
     },
 };
 
-static const AVFilterPad convolution_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #if CONFIG_CONVOLUTION_FILTER
 
 const AVFilter ff_vf_convolution = {
@@ -888,7 +881,7 @@ const AVFilter ff_vf_convolution = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &convolution_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
@@ -914,7 +907,7 @@ const AVFilter ff_vf_prewitt = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &common_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
@@ -930,7 +923,7 @@ const AVFilter ff_vf_sobel = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &common_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
@@ -946,7 +939,7 @@ const AVFilter ff_vf_roberts = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &common_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
@@ -962,7 +955,7 @@ const AVFilter ff_vf_kirsch = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &common_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
@@ -978,7 +971,7 @@ const AVFilter ff_vf_scharr = {
     .priv_size     = sizeof(ConvolutionContext),
     .priv_class    = &common_class,
     FILTER_INPUTS(convolution_inputs),
-    FILTER_OUTPUTS(convolution_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_copy.c b/libavfilter/vf_copy.c
index 2fbced354f..057b851b4c 100644
--- a/libavfilter/vf_copy.c
+++ b/libavfilter/vf_copy.c
@@ -65,18 +65,11 @@ static const AVFilterPad avfilter_vf_copy_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_copy_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_copy = {
     .name        = "copy",
     .description = NULL_IF_CONFIG_SMALL("Copy the input video unchanged to the output."),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(avfilter_vf_copy_inputs),
-    FILTER_OUTPUTS(avfilter_vf_copy_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/vf_cover_rect.c b/libavfilter/vf_cover_rect.c
index 642747a351..7f34311589 100644
--- a/libavfilter/vf_cover_rect.c
+++ b/libavfilter/vf_cover_rect.c
@@ -26,6 +26,7 @@
 #include "libavutil/opt.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 #include "lavfutils.h"
 
@@ -232,13 +233,6 @@ static const AVFilterPad cover_rect_inputs[] = {
     },
 };
 
-static const AVFilterPad cover_rect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_cover_rect = {
     .name            = "cover_rect",
     .description     = NULL_IF_CONFIG_SMALL("Find and cover a user specified object."),
@@ -246,7 +240,7 @@ const AVFilter ff_vf_cover_rect = {
     .init            = init,
     .uninit          = uninit,
     FILTER_INPUTS(cover_rect_inputs),
-    FILTER_OUTPUTS(cover_rect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P),
     .priv_class      = &cover_rect_class,
 };
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index 588a38fed8..ff9bcc79f3 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -495,13 +495,6 @@ static const AVFilterPad avfilter_vf_cropdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_cropdetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_cropdetect = {
     .name          = "cropdetect",
     .description   = NULL_IF_CONFIG_SMALL("Auto-detect crop size."),
@@ -510,7 +503,7 @@ const AVFilter ff_vf_cropdetect = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_cropdetect_inputs),
-    FILTER_OUTPUTS(avfilter_vf_cropdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_METADATA_ONLY,
     .process_command = process_command,
diff --git a/libavfilter/vf_curves.c b/libavfilter/vf_curves.c
index 838942d745..f77fae7eae 100644
--- a/libavfilter/vf_curves.c
+++ b/libavfilter/vf_curves.c
@@ -1005,13 +1005,6 @@ static const AVFilterPad curves_inputs[] = {
     },
 };
 
-static const AVFilterPad curves_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_curves = {
     .name          = "curves",
     .description   = NULL_IF_CONFIG_SMALL("Adjust components curves."),
@@ -1019,7 +1012,7 @@ const AVFilter ff_vf_curves = {
     .init          = curves_init,
     .uninit        = curves_uninit,
     FILTER_INPUTS(curves_inputs),
-    FILTER_OUTPUTS(curves_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_RGB24,  AV_PIX_FMT_BGR24,
                    AV_PIX_FMT_RGBA,   AV_PIX_FMT_BGRA,
                    AV_PIX_FMT_ARGB,   AV_PIX_FMT_ABGR,
diff --git a/libavfilter/vf_datascope.c b/libavfilter/vf_datascope.c
index d4f441c0ab..89b59f2510 100644
--- a/libavfilter/vf_datascope.c
+++ b/libavfilter/vf_datascope.c
@@ -728,20 +728,13 @@ static const AVFilterPad pixscope_inputs[] = {
     },
 };
 
-static const AVFilterPad pixscope_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_pixscope = {
     .name          = "pixscope",
     .description   = NULL_IF_CONFIG_SMALL("Pixel data analysis."),
     .priv_size     = sizeof(PixscopeContext),
     .priv_class    = &pixscope_class,
     FILTER_INPUTS(pixscope_inputs),
-    FILTER_OUTPUTS(pixscope_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = pixscope_process_command,
@@ -1132,13 +1125,6 @@ static const AVFilterPad oscilloscope_inputs[] = {
     },
 };
 
-static const AVFilterPad oscilloscope_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_oscilloscope = {
     .name          = "oscilloscope",
     .description   = NULL_IF_CONFIG_SMALL("2D Video Oscilloscope."),
@@ -1146,7 +1132,7 @@ const AVFilter ff_vf_oscilloscope = {
     .priv_class    = &oscilloscope_class,
     .uninit        = oscilloscope_uninit,
     FILTER_INPUTS(oscilloscope_inputs),
-    FILTER_OUTPUTS(oscilloscope_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = oscilloscope_process_command,
diff --git a/libavfilter/vf_dblur.c b/libavfilter/vf_dblur.c
index 7dcb873ba8..43100805c4 100644
--- a/libavfilter/vf_dblur.c
+++ b/libavfilter/vf_dblur.c
@@ -299,13 +299,6 @@ static const AVFilterPad dblur_inputs[] = {
     },
 };
 
-static const AVFilterPad dblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_dblur = {
     .name          = "dblur",
     .description   = NULL_IF_CONFIG_SMALL("Apply Directional Blur filter."),
@@ -313,7 +306,7 @@ const AVFilter ff_vf_dblur = {
     .priv_class    = &dblur_class,
     .uninit        = uninit,
     FILTER_INPUTS(dblur_inputs),
-    FILTER_OUTPUTS(dblur_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_dctdnoiz.c b/libavfilter/vf_dctdnoiz.c
index 95f71bc731..ab96dbe15e 100644
--- a/libavfilter/vf_dctdnoiz.c
+++ b/libavfilter/vf_dctdnoiz.c
@@ -810,13 +810,6 @@ static const AVFilterPad dctdnoiz_inputs[] = {
     },
 };
 
-static const AVFilterPad dctdnoiz_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_dctdnoiz = {
     .name          = "dctdnoiz",
     .description   = NULL_IF_CONFIG_SMALL("Denoise frames using 2D DCT."),
@@ -824,7 +817,7 @@ const AVFilter ff_vf_dctdnoiz = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(dctdnoiz_inputs),
-    FILTER_OUTPUTS(dctdnoiz_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &dctdnoiz_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_deband.c b/libavfilter/vf_deband.c
index ec91cb1548..b3c36de8c3 100644
--- a/libavfilter/vf_deband.c
+++ b/libavfilter/vf_deband.c
@@ -458,13 +458,6 @@ static const AVFilterPad avfilter_vf_deband_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_deband_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_deband = {
     .name          = "deband",
     .description   = NULL_IF_CONFIG_SMALL("Debands video."),
@@ -472,7 +465,7 @@ const AVFilter ff_vf_deband = {
     .priv_class    = &deband_class,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_deband_inputs),
-    FILTER_OUTPUTS(avfilter_vf_deband_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_dedot.c b/libavfilter/vf_dedot.c
index 6ca47c262a..fb62c183d7 100644
--- a/libavfilter/vf_dedot.c
+++ b/libavfilter/vf_dedot.c
@@ -375,13 +375,6 @@ static const AVOption dedot_options[] = {
     { NULL },
 };
 
-static const AVFilterPad inputs[] = {
-    {
-        .name           = "default",
-        .type           = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad outputs[] = {
     {
         .name          = "default",
@@ -399,7 +392,7 @@ const AVFilter ff_vf_dedot = {
     .priv_class    = &dedot_class,
     .activate      = activate,
     .uninit        = uninit,
-    FILTER_INPUTS(inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c
index cc71f25c59..4b835b65f1 100644
--- a/libavfilter/vf_delogo.c
+++ b/libavfilter/vf_delogo.c
@@ -381,13 +381,6 @@ static const AVFilterPad avfilter_vf_delogo_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_delogo_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_delogo = {
     .name          = "delogo",
     .description   = NULL_IF_CONFIG_SMALL("Remove logo from input video."),
@@ -396,7 +389,7 @@ const AVFilter ff_vf_delogo = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_delogo_inputs),
-    FILTER_OUTPUTS(avfilter_vf_delogo_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_derain.c b/libavfilter/vf_derain.c
index 3cb4364def..2a57035c83 100644
--- a/libavfilter/vf_derain.c
+++ b/libavfilter/vf_derain.c
@@ -111,13 +111,6 @@ static const AVFilterPad derain_inputs[] = {
     },
 };
 
-static const AVFilterPad derain_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_derain = {
     .name          = "derain",
     .description   = NULL_IF_CONFIG_SMALL("Apply derain filter to the input."),
@@ -125,7 +118,7 @@ const AVFilter ff_vf_derain = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(derain_inputs),
-    FILTER_OUTPUTS(derain_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_RGB24),
     .priv_class    = &derain_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_deshake.c b/libavfilter/vf_deshake.c
index 142f88541d..a10d59ad80 100644
--- a/libavfilter/vf_deshake.c
+++ b/libavfilter/vf_deshake.c
@@ -535,13 +535,6 @@ static const AVFilterPad deshake_inputs[] = {
     },
 };
 
-static const AVFilterPad deshake_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_deshake = {
     .name          = "deshake",
     .description   = NULL_IF_CONFIG_SMALL("Stabilize shaky video."),
@@ -549,7 +542,7 @@ const AVFilter ff_vf_deshake = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(deshake_inputs),
-    FILTER_OUTPUTS(deshake_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &deshake_class,
 };
diff --git a/libavfilter/vf_dnn_classify.c b/libavfilter/vf_dnn_classify.c
index c3f2762cf9..e88e59d09c 100644
--- a/libavfilter/vf_dnn_classify.c
+++ b/libavfilter/vf_dnn_classify.c
@@ -26,6 +26,7 @@
 #include "filters.h"
 #include "dnn_filter_common.h"
 #include "internal.h"
+#include "video.h"
 #include "libavutil/time.h"
 #include "libavutil/avstring.h"
 #include "libavutil/detection_bbox.h"
@@ -293,28 +294,14 @@ static av_cold void dnn_classify_uninit(AVFilterContext *context)
     free_classify_labels(ctx);
 }
 
-static const AVFilterPad dnn_classify_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad dnn_classify_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_dnn_classify = {
     .name          = "dnn_classify",
     .description   = NULL_IF_CONFIG_SMALL("Apply DNN classify filter to the input."),
     .priv_size     = sizeof(DnnClassifyContext),
     .init          = dnn_classify_init,
     .uninit        = dnn_classify_uninit,
-    FILTER_INPUTS(dnn_classify_inputs),
-    FILTER_OUTPUTS(dnn_classify_outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &dnn_classify_class,
     .activate      = dnn_classify_activate,
diff --git a/libavfilter/vf_dnn_detect.c b/libavfilter/vf_dnn_detect.c
index 6ef04e0958..b5dae42c65 100644
--- a/libavfilter/vf_dnn_detect.c
+++ b/libavfilter/vf_dnn_detect.c
@@ -26,6 +26,7 @@
 #include "filters.h"
 #include "dnn_filter_common.h"
 #include "internal.h"
+#include "video.h"
 #include "libavutil/time.h"
 #include "libavutil/avstring.h"
 #include "libavutil/detection_bbox.h"
@@ -435,28 +436,14 @@ static av_cold void dnn_detect_uninit(AVFilterContext *context)
     free_detect_labels(ctx);
 }
 
-static const AVFilterPad dnn_detect_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad dnn_detect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_dnn_detect = {
     .name          = "dnn_detect",
     .description   = NULL_IF_CONFIG_SMALL("Apply DNN detect filter to the input."),
     .priv_size     = sizeof(DnnDetectContext),
     .init          = dnn_detect_init,
     .uninit        = dnn_detect_uninit,
-    FILTER_INPUTS(dnn_detect_inputs),
-    FILTER_OUTPUTS(dnn_detect_outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &dnn_detect_class,
     .activate      = dnn_detect_activate,
diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c
index 64eeeece12..82266481ca 100644
--- a/libavfilter/vf_drawbox.c
+++ b/libavfilter/vf_drawbox.c
@@ -471,13 +471,6 @@ static const AVFilterPad drawbox_inputs[] = {
     },
 };
 
-static const AVFilterPad drawbox_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_drawbox = {
     .name          = "drawbox",
     .description   = NULL_IF_CONFIG_SMALL("Draw a colored box on the input video."),
@@ -485,7 +478,7 @@ const AVFilter ff_vf_drawbox = {
     .priv_class    = &drawbox_class,
     .init          = init,
     FILTER_INPUTS(drawbox_inputs),
-    FILTER_OUTPUTS(drawbox_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
@@ -553,13 +546,6 @@ static const AVFilterPad drawgrid_inputs[] = {
     },
 };
 
-static const AVFilterPad drawgrid_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_drawgrid = {
     .name          = "drawgrid",
     .description   = NULL_IF_CONFIG_SMALL("Draw a colored grid on the input video."),
@@ -567,7 +553,7 @@ const AVFilter ff_vf_drawgrid = {
     .priv_class    = &drawgrid_class,
     .init          = init,
     FILTER_INPUTS(drawgrid_inputs),
-    FILTER_OUTPUTS(drawgrid_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = process_command,
diff --git a/libavfilter/vf_edgedetect.c b/libavfilter/vf_edgedetect.c
index 603f06f141..1362f4f677 100644
--- a/libavfilter/vf_edgedetect.c
+++ b/libavfilter/vf_edgedetect.c
@@ -249,13 +249,6 @@ static const AVFilterPad edgedetect_inputs[] = {
     },
 };
 
-static const AVFilterPad edgedetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_edgedetect = {
     .name          = "edgedetect",
     .description   = NULL_IF_CONFIG_SMALL("Detect and draw edge."),
@@ -263,7 +256,7 @@ const AVFilter ff_vf_edgedetect = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(edgedetect_inputs),
-    FILTER_OUTPUTS(edgedetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &edgedetect_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_elbg.c b/libavfilter/vf_elbg.c
index d1166714fc..cc49b8e240 100644
--- a/libavfilter/vf_elbg.c
+++ b/libavfilter/vf_elbg.c
@@ -253,13 +253,6 @@ static const AVFilterPad elbg_inputs[] = {
     },
 };
 
-static const AVFilterPad elbg_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_elbg = {
     .name          = "elbg",
     .description   = NULL_IF_CONFIG_SMALL("Apply posterize effect, using the ELBG algorithm."),
@@ -268,6 +261,6 @@ const AVFilter ff_vf_elbg = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(elbg_inputs),
-    FILTER_OUTPUTS(elbg_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/vf_entropy.c b/libavfilter/vf_entropy.c
index 893d07d8e6..c96cbaaecd 100644
--- a/libavfilter/vf_entropy.c
+++ b/libavfilter/vf_entropy.c
@@ -176,20 +176,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_entropy = {
     .name           = "entropy",
     .description    = NULL_IF_CONFIG_SMALL("Measure video frames entropy."),
     .priv_size      = sizeof(EntropyContext),
     .uninit         = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixfmts),
     .priv_class     = &entropy_class,
     .flags          = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_METADATA_ONLY,
diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c
index 3c686abe24..00fd840dec 100644
--- a/libavfilter/vf_eq.c
+++ b/libavfilter/vf_eq.c
@@ -314,13 +314,6 @@ static const AVFilterPad eq_inputs[] = {
     },
 };
 
-static const AVFilterPad eq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(EQContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 #define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
@@ -355,7 +348,7 @@ const AVFilter ff_vf_eq = {
     .priv_size       = sizeof(EQContext),
     .priv_class      = &eq_class,
     FILTER_INPUTS(eq_inputs),
-    FILTER_OUTPUTS(eq_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts_eq),
     .process_command = process_command,
     .init            = initialize,
diff --git a/libavfilter/vf_exposure.c b/libavfilter/vf_exposure.c
index ff2f156534..12434cdd9d 100644
--- a/libavfilter/vf_exposure.c
+++ b/libavfilter/vf_exposure.c
@@ -133,13 +133,6 @@ static const AVFilterPad exposure_inputs[] = {
     },
 };
 
-static const AVFilterPad exposure_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(ExposureContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -157,7 +150,7 @@ const AVFilter ff_vf_exposure = {
     .priv_size     = sizeof(ExposureContext),
     .priv_class    = &exposure_class,
     FILTER_INPUTS(exposure_inputs),
-    FILTER_OUTPUTS(exposure_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c
index 868e7cc16a..f903db0415 100644
--- a/libavfilter/vf_fade.c
+++ b/libavfilter/vf_fade.c
@@ -557,13 +557,6 @@ static const AVFilterPad avfilter_vf_fade_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_fade_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_fade = {
     .name          = "fade",
     .description   = NULL_IF_CONFIG_SMALL("Fade in/out input video."),
@@ -571,7 +564,7 @@ const AVFilter ff_vf_fade = {
     .priv_size     = sizeof(FadeContext),
     .priv_class    = &fade_class,
     FILTER_INPUTS(avfilter_vf_fade_inputs),
-    FILTER_OUTPUTS(avfilter_vf_fade_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SLICE_THREADS |
                      AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_fftfilt.c b/libavfilter/vf_fftfilt.c
index 2b2408f15c..aea83dc19c 100644
--- a/libavfilter/vf_fftfilt.c
+++ b/libavfilter/vf_fftfilt.c
@@ -593,20 +593,13 @@ static const AVFilterPad fftfilt_inputs[] = {
     },
 };
 
-static const AVFilterPad fftfilt_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_fftfilt = {
     .name            = "fftfilt",
     .description     = NULL_IF_CONFIG_SMALL("Apply arbitrary expressions to pixels in frequency domain."),
     .priv_size       = sizeof(FFTFILTContext),
     .priv_class      = &fftfilt_class,
     FILTER_INPUTS(fftfilt_inputs),
-    FILTER_OUTPUTS(fftfilt_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts_fftfilt),
     .init            = initialize,
     .uninit          = uninit,
diff --git a/libavfilter/vf_fieldorder.c b/libavfilter/vf_fieldorder.c
index cf6efa6e54..165b359024 100644
--- a/libavfilter/vf_fieldorder.c
+++ b/libavfilter/vf_fieldorder.c
@@ -176,20 +176,13 @@ static const AVFilterPad avfilter_vf_fieldorder_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_fieldorder_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_fieldorder = {
     .name          = "fieldorder",
     .description   = NULL_IF_CONFIG_SMALL("Set the field order."),
     .priv_size     = sizeof(FieldOrderContext),
     .priv_class    = &fieldorder_class,
     FILTER_INPUTS(avfilter_vf_fieldorder_inputs),
-    FILTER_OUTPUTS(avfilter_vf_fieldorder_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_fillborders.c b/libavfilter/vf_fillborders.c
index 83f206aeb1..e4aa7cd5ca 100644
--- a/libavfilter/vf_fillborders.c
+++ b/libavfilter/vf_fillborders.c
@@ -707,20 +707,13 @@ static const AVFilterPad fillborders_inputs[] = {
     },
 };
 
-static const AVFilterPad fillborders_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_fillborders = {
     .name          = "fillborders",
     .description   = NULL_IF_CONFIG_SMALL("Fill borders of the input video."),
     .priv_size     = sizeof(FillBordersContext),
     .priv_class    = &fillborders_class,
     FILTER_INPUTS(fillborders_inputs),
-    FILTER_OUTPUTS(fillborders_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = process_command,
diff --git a/libavfilter/vf_find_rect.c b/libavfilter/vf_find_rect.c
index a536d669d1..9f4ee1e32f 100644
--- a/libavfilter/vf_find_rect.c
+++ b/libavfilter/vf_find_rect.c
@@ -25,6 +25,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "internal.h"
+#include "video.h"
 
 #include "lavfutils.h"
 
@@ -281,13 +282,6 @@ static const AVFilterPad foc_inputs[] = {
     },
 };
 
-static const AVFilterPad foc_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_find_rect = {
     .name            = "find_rect",
     .description     = NULL_IF_CONFIG_SMALL("Find a user specified object."),
@@ -296,7 +290,7 @@ const AVFilter ff_vf_find_rect = {
     .uninit          = uninit,
     .flags           = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(foc_inputs),
-    FILTER_OUTPUTS(foc_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P),
     .priv_class      = &find_rect_class,
 };
diff --git a/libavfilter/vf_floodfill.c b/libavfilter/vf_floodfill.c
index 212255a784..675e0f084f 100644
--- a/libavfilter/vf_floodfill.c
+++ b/libavfilter/vf_floodfill.c
@@ -385,13 +385,6 @@ static const AVFilterPad floodfill_inputs[] = {
     },
 };
 
-static const AVFilterPad floodfill_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(FloodfillContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 
@@ -418,7 +411,7 @@ const AVFilter ff_vf_floodfill = {
     .priv_class    = &floodfill_class,
     .uninit        = uninit,
     FILTER_INPUTS(floodfill_inputs),
-    FILTER_OUTPUTS(floodfill_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
index 24b1c9ca61..04c265f59f 100644
--- a/libavfilter/vf_format.c
+++ b/libavfilter/vf_format.c
@@ -154,13 +154,6 @@ static const AVFilterPad avfilter_vf_format_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_format_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_format = {
     .name          = "format",
     .description   = NULL_IF_CONFIG_SMALL("Convert the input video to one of the specified pixel formats."),
@@ -174,7 +167,7 @@ const AVFilter ff_vf_format = {
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 
     FILTER_INPUTS(avfilter_vf_format_inputs),
-    FILTER_OUTPUTS(avfilter_vf_format_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 
     FILTER_QUERY_FUNC(query_formats),
 };
@@ -190,13 +183,6 @@ static const AVFilterPad avfilter_vf_noformat_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_noformat_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_noformat = {
     .name          = "noformat",
     .description   = NULL_IF_CONFIG_SMALL("Force libavfilter not to use any of the specified pixel formats for the input to the next filter."),
@@ -210,7 +196,7 @@ const AVFilter ff_vf_noformat = {
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
 
     FILTER_INPUTS(avfilter_vf_noformat_inputs),
-    FILTER_OUTPUTS(avfilter_vf_noformat_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
index 2bfb6d29e7..089f7f2021 100644
--- a/libavfilter/vf_fps.c
+++ b/libavfilter/vf_fps.c
@@ -37,6 +37,7 @@
 #include "ccfifo.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 enum EOFAction {
     EOF_ACTION_ROUND,
@@ -376,13 +377,6 @@ static int activate(AVFilterContext *ctx)
     return FFERROR_NOT_READY;
 }
 
-static const AVFilterPad avfilter_vf_fps_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad avfilter_vf_fps_outputs[] = {
     {
         .name          = "default",
@@ -400,6 +394,6 @@ const AVFilter ff_vf_fps = {
     .priv_class  = &fps_class,
     .activate    = activate,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(avfilter_vf_fps_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(avfilter_vf_fps_outputs),
 };
diff --git a/libavfilter/vf_freezedetect.c b/libavfilter/vf_freezedetect.c
index 31a80a6dc0..fb4e59b127 100644
--- a/libavfilter/vf_freezedetect.c
+++ b/libavfilter/vf_freezedetect.c
@@ -29,6 +29,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "scene_sad.h"
+#include "video.h"
 
 typedef struct FreezeDetectContext {
     const AVClass *class;
@@ -204,13 +205,6 @@ static const AVFilterPad freezedetect_inputs[] = {
     },
 };
 
-static const AVFilterPad freezedetect_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_freezedetect = {
     .name          = "freezedetect",
     .description   = NULL_IF_CONFIG_SMALL("Detects frozen video input."),
@@ -219,7 +213,7 @@ const AVFilter ff_vf_freezedetect = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(freezedetect_inputs),
-    FILTER_OUTPUTS(freezedetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .activate      = activate,
 };
diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c
index 59873dc502..7dccd5946f 100644
--- a/libavfilter/vf_frei0r.c
+++ b/libavfilter/vf_frei0r.c
@@ -423,13 +423,6 @@ static const AVFilterPad avfilter_vf_frei0r_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_frei0r_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_frei0r = {
     .name          = "frei0r",
     .description   = NULL_IF_CONFIG_SMALL("Apply a frei0r effect."),
@@ -438,7 +431,7 @@ const AVFilter ff_vf_frei0r = {
     .priv_size     = sizeof(Frei0rContext),
     .priv_class    = &frei0r_class,
     FILTER_INPUTS(avfilter_vf_frei0r_inputs),
-    FILTER_OUTPUTS(avfilter_vf_frei0r_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .process_command = process_command,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_fspp.c b/libavfilter/vf_fspp.c
index b110c5a7d2..88e887897e 100644
--- a/libavfilter/vf_fspp.c
+++ b/libavfilter/vf_fspp.c
@@ -652,20 +652,13 @@ static const AVFilterPad fspp_inputs[] = {
     },
 };
 
-static const AVFilterPad fspp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_fspp = {
     .name            = "fspp",
     .description     = NULL_IF_CONFIG_SMALL("Apply Fast Simple Post-processing filter."),
     .priv_size       = sizeof(FSPPContext),
     .uninit          = uninit,
     FILTER_INPUTS(fspp_inputs),
-    FILTER_OUTPUTS(fspp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &fspp_class,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/vf_gblur.c b/libavfilter/vf_gblur.c
index ca1dcb3dab..509ae3dece 100644
--- a/libavfilter/vf_gblur.c
+++ b/libavfilter/vf_gblur.c
@@ -315,13 +315,6 @@ static const AVFilterPad gblur_inputs[] = {
     },
 };
 
-static const AVFilterPad gblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_gblur = {
     .name          = "gblur",
     .description   = NULL_IF_CONFIG_SMALL("Apply Gaussian Blur filter."),
@@ -329,7 +322,7 @@ const AVFilter ff_vf_gblur = {
     .priv_class    = &gblur_class,
     .uninit        = uninit,
     FILTER_INPUTS(gblur_inputs),
-    FILTER_OUTPUTS(gblur_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c
index e90b49366f..092124669f 100644
--- a/libavfilter/vf_geq.c
+++ b/libavfilter/vf_geq.c
@@ -516,13 +516,6 @@ static const AVFilterPad geq_inputs[] = {
     },
 };
 
-static const AVFilterPad geq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_geq = {
     .name          = "geq",
     .description   = NULL_IF_CONFIG_SMALL("Apply generic equation to each pixel."),
@@ -530,7 +523,7 @@ const AVFilter ff_vf_geq = {
     .init          = geq_init,
     .uninit        = geq_uninit,
     FILTER_INPUTS(geq_inputs),
-    FILTER_OUTPUTS(geq_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(geq_query_formats),
     .priv_class    = &geq_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_gradfun.c b/libavfilter/vf_gradfun.c
index 71a5f9c787..e8566918a4 100644
--- a/libavfilter/vf_gradfun.c
+++ b/libavfilter/vf_gradfun.c
@@ -236,13 +236,6 @@ static const AVFilterPad avfilter_vf_gradfun_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_gradfun_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_gradfun = {
     .name          = "gradfun",
     .description   = NULL_IF_CONFIG_SMALL("Debands video quickly using gradients."),
@@ -251,7 +244,7 @@ const AVFilter ff_vf_gradfun = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_gradfun_inputs),
-    FILTER_OUTPUTS(avfilter_vf_gradfun_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_grayworld.c b/libavfilter/vf_grayworld.c
index f20412cb10..6fa758199c 100644
--- a/libavfilter/vf_grayworld.c
+++ b/libavfilter/vf_grayworld.c
@@ -308,20 +308,13 @@ static const AVFilterPad grayworld_inputs[] = {
     }
 };
 
-static const AVFilterPad grayworld_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    }
-};
-
 const AVFilter ff_vf_grayworld = {
     .name          = "grayworld",
     .description   = NULL_IF_CONFIG_SMALL("Adjust white balance using LAB gray world algorithm"),
     .priv_size     = sizeof(GrayWorldContext),
     .priv_class    = &grayworld_class,
     FILTER_INPUTS(grayworld_inputs),
-    FILTER_OUTPUTS(grayworld_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .uninit        = uninit,
diff --git a/libavfilter/vf_hflip.c b/libavfilter/vf_hflip.c
index 8517b87889..09f4e08ea3 100644
--- a/libavfilter/vf_hflip.c
+++ b/libavfilter/vf_hflip.c
@@ -151,20 +151,13 @@ static const AVFilterPad avfilter_vf_hflip_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_hflip_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_hflip = {
     .name          = "hflip",
     .description   = NULL_IF_CONFIG_SMALL("Horizontally flip the input video."),
     .priv_size     = sizeof(FlipContext),
     .priv_class    = &hflip_class,
     FILTER_INPUTS(avfilter_vf_hflip_inputs),
-    FILTER_OUTPUTS(avfilter_vf_hflip_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SLICE_THREADS | AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_histeq.c b/libavfilter/vf_histeq.c
index 3fee4c9480..87ed6d79e8 100644
--- a/libavfilter/vf_histeq.c
+++ b/libavfilter/vf_histeq.c
@@ -254,20 +254,13 @@ static const AVFilterPad histeq_inputs[] = {
     },
 };
 
-static const AVFilterPad histeq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_histeq = {
     .name          = "histeq",
     .description   = NULL_IF_CONFIG_SMALL("Apply global color histogram equalization."),
     .priv_size     = sizeof(HisteqContext),
     .init          = init,
     FILTER_INPUTS(histeq_inputs),
-    FILTER_OUTPUTS(histeq_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &histeq_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index c796ea9ab4..f6d49675a1 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -383,13 +383,6 @@ static const AVFilterPad avfilter_vf_hqdn3d_inputs[] = {
 };
 
 
-static const AVFilterPad avfilter_vf_hqdn3d_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_hqdn3d = {
     .name          = "hqdn3d",
     .description   = NULL_IF_CONFIG_SMALL("Apply a High Quality 3D Denoiser."),
@@ -398,7 +391,7 @@ const AVFilter ff_vf_hqdn3d = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_hqdn3d_inputs),
-    FILTER_OUTPUTS(avfilter_vf_hqdn3d_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c
index 644c99b1b1..8f3b73e840 100644
--- a/libavfilter/vf_hue.c
+++ b/libavfilter/vf_hue.c
@@ -500,13 +500,6 @@ static const AVFilterPad hue_inputs[] = {
     },
 };
 
-static const AVFilterPad hue_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_hue = {
     .name            = "hue",
     .description     = NULL_IF_CONFIG_SMALL("Adjust the hue and saturation of the input video."),
@@ -515,7 +508,7 @@ const AVFilter ff_vf_hue = {
     .uninit          = uninit,
     .process_command = process_command,
     FILTER_INPUTS(hue_inputs),
-    FILTER_OUTPUTS(hue_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &hue_class,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_huesaturation.c b/libavfilter/vf_huesaturation.c
index d4e3fea1c5..4b427e6bf6 100644
--- a/libavfilter/vf_huesaturation.c
+++ b/libavfilter/vf_huesaturation.c
@@ -434,13 +434,6 @@ static const AVFilterPad huesaturation_inputs[] = {
     },
 };
 
-static const AVFilterPad huesaturation_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(HueSaturationContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -472,7 +465,7 @@ const AVFilter ff_vf_huesaturation = {
     .priv_size       = sizeof(HueSaturationContext),
     .priv_class      = &huesaturation_class,
     FILTER_INPUTS(huesaturation_inputs),
-    FILTER_OUTPUTS(huesaturation_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_iccdetect.c b/libavfilter/vf_iccdetect.c
index 7c08a2baaa..5288b0320d 100644
--- a/libavfilter/vf_iccdetect.c
+++ b/libavfilter/vf_iccdetect.c
@@ -31,6 +31,7 @@
 #include "avfilter.h"
 #include "fflcms2.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct IccDetectContext {
     const AVClass *class;
@@ -123,13 +124,6 @@ static const AVFilterPad iccdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad iccdetect_outputs[] = {
-    {
-        .name           = "default",
-        .type           = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_iccdetect = {
     .name        = "iccdetect",
     .description = NULL_IF_CONFIG_SMALL("Detect and parse ICC profiles."),
@@ -139,5 +133,5 @@ const AVFilter ff_vf_iccdetect = {
     .init        = &iccdetect_init,
     .uninit      = &iccdetect_uninit,
     FILTER_INPUTS(iccdetect_inputs),
-    FILTER_OUTPUTS(iccdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_iccgen.c b/libavfilter/vf_iccgen.c
index 67d02f5bc2..80771edf9e 100644
--- a/libavfilter/vf_iccgen.c
+++ b/libavfilter/vf_iccgen.c
@@ -30,6 +30,7 @@
 #include "avfilter.h"
 #include "fflcms2.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct IccGenContext {
     const AVClass *class;
@@ -161,13 +162,6 @@ static const AVFilterPad iccgen_inputs[] = {
     },
 };
 
-static const AVFilterPad iccgen_outputs[] = {
-    {
-        .name           = "default",
-        .type           = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_iccgen = {
     .name        = "iccgen",
     .description = NULL_IF_CONFIG_SMALL("Generate and attach ICC profiles."),
@@ -177,5 +171,5 @@ const AVFilter ff_vf_iccgen = {
     .init        = &iccgen_init,
     .uninit      = &iccgen_uninit,
     FILTER_INPUTS(iccgen_inputs),
-    FILTER_OUTPUTS(iccgen_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_il.c b/libavfilter/vf_il.c
index 210ce8e821..05c393d914 100644
--- a/libavfilter/vf_il.c
+++ b/libavfilter/vf_il.c
@@ -184,19 +184,12 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_il = {
     .name          = "il",
     .description   = NULL_IF_CONFIG_SMALL("Deinterleave or interleave fields."),
     .priv_size     = sizeof(IlContext),
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &il_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c
index 260a99bcc4..5267c3b3ae 100644
--- a/libavfilter/vf_kerndeint.c
+++ b/libavfilter/vf_kerndeint.c
@@ -295,13 +295,6 @@ static const AVFilterPad kerndeint_inputs[] = {
     },
 };
 
-static const AVFilterPad kerndeint_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 
 const AVFilter ff_vf_kerndeint = {
     .name          = "kerndeint",
@@ -310,6 +303,6 @@ const AVFilter ff_vf_kerndeint = {
     .priv_class    = &kerndeint_class,
     .uninit        = uninit,
     FILTER_INPUTS(kerndeint_inputs),
-    FILTER_OUTPUTS(kerndeint_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_limiter.c b/libavfilter/vf_limiter.c
index 67b734229f..b602ce384b 100644
--- a/libavfilter/vf_limiter.c
+++ b/libavfilter/vf_limiter.c
@@ -231,13 +231,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_limiter = {
     .name          = "limiter",
     .description   = NULL_IF_CONFIG_SMALL("Limit pixels components to the specified range."),
@@ -245,7 +238,7 @@ const AVFilter ff_vf_limiter = {
     .priv_class    = &limiter_class,
     .init          = init,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_lumakey.c b/libavfilter/vf_lumakey.c
index af1d85ec54..448b43dda0 100644
--- a/libavfilter/vf_lumakey.c
+++ b/libavfilter/vf_lumakey.c
@@ -173,13 +173,6 @@ static const AVFilterPad lumakey_inputs[] = {
     },
 };
 
-static const AVFilterPad lumakey_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(LumakeyContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -198,7 +191,7 @@ const AVFilter ff_vf_lumakey = {
     .priv_size     = sizeof(LumakeyContext),
     .priv_class    = &lumakey_class,
     FILTER_INPUTS(lumakey_inputs),
-    FILTER_OUTPUTS(lumakey_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     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 621291cdad..1a6ca06546 100644
--- a/libavfilter/vf_lut.c
+++ b/libavfilter/vf_lut.c
@@ -582,11 +582,6 @@ static const AVFilterPad inputs[] = {
       .config_props = config_props,
     },
 };
-static const AVFilterPad outputs[] = {
-    { .name = "default",
-      .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
 
 #define DEFINE_LUT_FILTER(name_, description_, priv_class_)             \
     const AVFilter ff_vf_##name_ = {                                    \
@@ -597,7 +592,7 @@ static const AVFilterPad outputs[] = {
         .init          = name_##_init,                                  \
         .uninit        = uninit,                                        \
         FILTER_INPUTS(inputs),                                          \
-        FILTER_OUTPUTS(outputs),                                        \
+        FILTER_OUTPUTS(ff_video_default_filterpad),                     \
         FILTER_QUERY_FUNC(query_formats),                               \
         .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |       \
                          AVFILTER_FLAG_SLICE_THREADS,                   \
diff --git a/libavfilter/vf_lut3d.c b/libavfilter/vf_lut3d.c
index 1ca448fcb3..db38d41932 100644
--- a/libavfilter/vf_lut3d.c
+++ b/libavfilter/vf_lut3d.c
@@ -1301,13 +1301,6 @@ static const AVFilterPad lut3d_inputs[] = {
     },
 };
 
-static const AVFilterPad lut3d_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_lut3d = {
     .name          = "lut3d",
     .description   = NULL_IF_CONFIG_SMALL("Adjust colors using a 3D LUT."),
@@ -1315,7 +1308,7 @@ const AVFilter ff_vf_lut3d = {
     .init          = lut3d_init,
     .uninit        = lut3d_uninit,
     FILTER_INPUTS(lut3d_inputs),
-    FILTER_OUTPUTS(lut3d_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &lut3d_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
@@ -2232,20 +2225,13 @@ static const AVFilterPad lut1d_inputs[] = {
     },
 };
 
-static const AVFilterPad lut1d_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_lut1d = {
     .name          = "lut1d",
     .description   = NULL_IF_CONFIG_SMALL("Adjust colors using a 1D LUT."),
     .priv_size     = sizeof(LUT1DContext),
     .init          = lut1d_init,
     FILTER_INPUTS(lut1d_inputs),
-    FILTER_OUTPUTS(lut1d_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &lut1d_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_maskfun.c b/libavfilter/vf_maskfun.c
index 253e5e40f7..44499d34ae 100644
--- a/libavfilter/vf_maskfun.c
+++ b/libavfilter/vf_maskfun.c
@@ -317,20 +317,13 @@ static const AVFilterPad maskfun_inputs[] = {
     },
 };
 
-static const AVFilterPad maskfun_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_maskfun = {
     .name          = "maskfun",
     .description   = NULL_IF_CONFIG_SMALL("Create Mask."),
     .priv_size     = sizeof(MaskFunContext),
     .uninit        = uninit,
     FILTER_INPUTS(maskfun_inputs),
-    FILTER_OUTPUTS(maskfun_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &maskfun_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c
index a33f6feebf..e1b0a082f3 100644
--- a/libavfilter/vf_mcdeint.c
+++ b/libavfilter/vf_mcdeint.c
@@ -301,20 +301,13 @@ static const AVFilterPad mcdeint_inputs[] = {
     },
 };
 
-static const AVFilterPad mcdeint_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_mcdeint = {
     .name          = "mcdeint",
     .description   = NULL_IF_CONFIG_SMALL("Apply motion compensating deinterlacing."),
     .priv_size     = sizeof(MCDeintContext),
     .uninit        = uninit,
     FILTER_INPUTS(mcdeint_inputs),
-    FILTER_OUTPUTS(mcdeint_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_YUV420P),
     .priv_class    = &mcdeint_class,
 };
diff --git a/libavfilter/vf_median.c b/libavfilter/vf_median.c
index 11eccf608c..bc070105cd 100644
--- a/libavfilter/vf_median.c
+++ b/libavfilter/vf_median.c
@@ -270,13 +270,6 @@ static const AVFilterPad median_inputs[] = {
     },
 };
 
-static const AVFilterPad median_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_median = {
     .name          = "median",
     .description   = NULL_IF_CONFIG_SMALL("Apply Median filter."),
@@ -284,7 +277,7 @@ const AVFilter ff_vf_median = {
     .priv_class    = &median_class,
     .uninit        = uninit,
     FILTER_INPUTS(median_inputs),
-    FILTER_OUTPUTS(median_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_mestimate.c b/libavfilter/vf_mestimate.c
index eff58f612e..001e6b0e8d 100644
--- a/libavfilter/vf_mestimate.c
+++ b/libavfilter/vf_mestimate.c
@@ -350,13 +350,6 @@ static const AVFilterPad mestimate_inputs[] = {
     },
 };
 
-static const AVFilterPad mestimate_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_mestimate = {
     .name          = "mestimate",
     .description   = NULL_IF_CONFIG_SMALL("Generate motion vectors."),
@@ -365,6 +358,6 @@ const AVFilter ff_vf_mestimate = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(mestimate_inputs),
-    FILTER_OUTPUTS(mestimate_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_monochrome.c b/libavfilter/vf_monochrome.c
index c77c3b8f19..92ea651db2 100644
--- a/libavfilter/vf_monochrome.c
+++ b/libavfilter/vf_monochrome.c
@@ -268,13 +268,6 @@ static const AVFilterPad monochrome_inputs[] = {
     },
 };
 
-static const AVFilterPad monochrome_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(MonochromeContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -294,7 +287,7 @@ const AVFilter ff_vf_monochrome = {
     .priv_size     = sizeof(MonochromeContext),
     .priv_class    = &monochrome_class,
     FILTER_INPUTS(monochrome_inputs),
-    FILTER_OUTPUTS(monochrome_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_mpdecimate.c b/libavfilter/vf_mpdecimate.c
index a7b50d3973..d677a6e385 100644
--- a/libavfilter/vf_mpdecimate.c
+++ b/libavfilter/vf_mpdecimate.c
@@ -241,13 +241,6 @@ static const AVFilterPad mpdecimate_inputs[] = {
     },
 };
 
-static const AVFilterPad mpdecimate_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_mpdecimate = {
     .name          = "mpdecimate",
     .description   = NULL_IF_CONFIG_SMALL("Remove near-duplicate frames."),
@@ -256,6 +249,6 @@ const AVFilter ff_vf_mpdecimate = {
     .priv_size     = sizeof(DecimateContext),
     .priv_class    = &mpdecimate_class,
     FILTER_INPUTS(mpdecimate_inputs),
-    FILTER_OUTPUTS(mpdecimate_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_negate.c b/libavfilter/vf_negate.c
index d782e63d3a..87cf908fd5 100644
--- a/libavfilter/vf_negate.c
+++ b/libavfilter/vf_negate.c
@@ -355,20 +355,13 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_negate = {
     .name          = "negate",
     .description   = NULL_IF_CONFIG_SMALL("Negate input video."),
     .priv_size     = sizeof(NegateContext),
     .priv_class    = &negate_class,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_neighbor.c b/libavfilter/vf_neighbor.c
index d6638779e5..796f33c157 100644
--- a/libavfilter/vf_neighbor.c
+++ b/libavfilter/vf_neighbor.c
@@ -341,13 +341,6 @@ static const AVFilterPad neighbor_inputs[] = {
     },
 };
 
-static const AVFilterPad neighbor_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(NContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -358,7 +351,7 @@ const AVFilter ff_vf_##name_ = {                                   \
     .priv_class    = &priv_class_##_class,                   \
     .priv_size     = sizeof(NContext),                       \
     FILTER_INPUTS(neighbor_inputs),                          \
-    FILTER_OUTPUTS(neighbor_outputs),                        \
+    FILTER_OUTPUTS(ff_video_default_filterpad),              \
     FILTER_PIXFMTS_ARRAY(pix_fmts),                          \
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC| \
                      AVFILTER_FLAG_SLICE_THREADS,            \
diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c
index 2fc3adacca..283865f3db 100644
--- a/libavfilter/vf_nlmeans.c
+++ b/libavfilter/vf_nlmeans.c
@@ -472,13 +472,6 @@ static const AVFilterPad nlmeans_inputs[] = {
     },
 };
 
-static const AVFilterPad nlmeans_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_nlmeans = {
     .name          = "nlmeans",
     .description   = NULL_IF_CONFIG_SMALL("Non-local means denoiser."),
@@ -486,7 +479,7 @@ const AVFilter ff_vf_nlmeans = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(nlmeans_inputs),
-    FILTER_OUTPUTS(nlmeans_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &nlmeans_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_noise.c b/libavfilter/vf_noise.c
index 8ed12f7409..ba843eed4e 100644
--- a/libavfilter/vf_noise.c
+++ b/libavfilter/vf_noise.c
@@ -330,13 +330,6 @@ static const AVFilterPad noise_inputs[] = {
     },
 };
 
-static const AVFilterPad noise_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_noise = {
     .name          = "noise",
     .description   = NULL_IF_CONFIG_SMALL("Add noise."),
@@ -344,7 +337,7 @@ const AVFilter ff_vf_noise = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(noise_inputs),
-    FILTER_OUTPUTS(noise_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &noise_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_normalize.c b/libavfilter/vf_normalize.c
index 43ed3c67b3..146e36f5fd 100644
--- a/libavfilter/vf_normalize.c
+++ b/libavfilter/vf_normalize.c
@@ -511,13 +511,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_normalize = {
     .name          = "normalize",
     .description   = NULL_IF_CONFIG_SMALL("Normalize RGB video."),
@@ -525,7 +518,7 @@ const AVFilter ff_vf_normalize = {
     .priv_class    = &normalize_class,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_null.c b/libavfilter/vf_null.c
index fa80e2a102..1502774f98 100644
--- a/libavfilter/vf_null.c
+++ b/libavfilter/vf_null.c
@@ -26,24 +26,10 @@
 #include "internal.h"
 #include "video.h"
 
-static const AVFilterPad avfilter_vf_null_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-static const AVFilterPad avfilter_vf_null_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_null = {
     .name        = "null",
     .description = NULL_IF_CONFIG_SMALL("Pass the source unchanged to the output."),
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
-    FILTER_INPUTS(avfilter_vf_null_inputs),
-    FILTER_OUTPUTS(avfilter_vf_null_outputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_ocr.c b/libavfilter/vf_ocr.c
index 1648afa0f9..c7f7b69df7 100644
--- a/libavfilter/vf_ocr.c
+++ b/libavfilter/vf_ocr.c
@@ -129,13 +129,6 @@ static const AVFilterPad ocr_inputs[] = {
     },
 };
 
-static const AVFilterPad ocr_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_ocr = {
     .name          = "ocr",
     .description   = NULL_IF_CONFIG_SMALL("Optical Character Recognition."),
@@ -145,6 +138,6 @@ const AVFilter ff_vf_ocr = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(ocr_inputs),
-    FILTER_OUTPUTS(ocr_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_owdenoise.c b/libavfilter/vf_owdenoise.c
index a728d2ba75..fad85bfa8e 100644
--- a/libavfilter/vf_owdenoise.c
+++ b/libavfilter/vf_owdenoise.c
@@ -355,20 +355,13 @@ static const AVFilterPad owdenoise_inputs[] = {
     },
 };
 
-static const AVFilterPad owdenoise_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_owdenoise = {
     .name          = "owdenoise",
     .description   = NULL_IF_CONFIG_SMALL("Denoise using wavelets."),
     .priv_size     = sizeof(OWDenoiseContext),
     .uninit        = uninit,
     FILTER_INPUTS(owdenoise_inputs),
-    FILTER_OUTPUTS(owdenoise_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &owdenoise_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_perspective.c b/libavfilter/vf_perspective.c
index da720dcb54..97ed938034 100644
--- a/libavfilter/vf_perspective.c
+++ b/libavfilter/vf_perspective.c
@@ -495,13 +495,6 @@ static const AVFilterPad perspective_inputs[] = {
     },
 };
 
-static const AVFilterPad perspective_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_perspective = {
     .name          = "perspective",
     .description   = NULL_IF_CONFIG_SMALL("Correct the perspective of video."),
@@ -509,7 +502,7 @@ const AVFilter ff_vf_perspective = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(perspective_inputs),
-    FILTER_OUTPUTS(perspective_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &perspective_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_phase.c b/libavfilter/vf_phase.c
index 1cb71e0e43..ba1223cc8f 100644
--- a/libavfilter/vf_phase.c
+++ b/libavfilter/vf_phase.c
@@ -218,13 +218,6 @@ static const AVFilterPad phase_inputs[] = {
     },
 };
 
-static const AVFilterPad phase_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_phase = {
     .name          = "phase",
     .description   = NULL_IF_CONFIG_SMALL("Phase shift fields."),
@@ -232,7 +225,7 @@ const AVFilter ff_vf_phase = {
     .priv_class    = &phase_class,
     .uninit        = uninit,
     FILTER_INPUTS(phase_inputs),
-    FILTER_OUTPUTS(phase_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_photosensitivity.c b/libavfilter/vf_photosensitivity.c
index e05d4d0262..8c8bbb8662 100644
--- a/libavfilter/vf_photosensitivity.c
+++ b/libavfilter/vf_photosensitivity.c
@@ -310,13 +310,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_photosensitivity = {
     .name          = "photosensitivity",
     .description   = NULL_IF_CONFIG_SMALL("Filter out photosensitive epilepsy seizure-inducing flashes."),
@@ -324,6 +317,6 @@ const AVFilter ff_vf_photosensitivity = {
     .priv_class    = &photosensitivity_class,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24),
 };
diff --git a/libavfilter/vf_pixdesctest.c b/libavfilter/vf_pixdesctest.c
index 12815aea9c..c2638d058f 100644
--- a/libavfilter/vf_pixdesctest.c
+++ b/libavfilter/vf_pixdesctest.c
@@ -115,18 +115,11 @@ static const AVFilterPad avfilter_vf_pixdesctest_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_pixdesctest_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_pixdesctest = {
     .name        = "pixdesctest",
     .description = NULL_IF_CONFIG_SMALL("Test pixel format definitions."),
     .priv_size   = sizeof(PixdescTestContext),
     .uninit      = uninit,
     FILTER_INPUTS(avfilter_vf_pixdesctest_inputs),
-    FILTER_OUTPUTS(avfilter_vf_pixdesctest_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_pp.c b/libavfilter/vf_pp.c
index 2d563f7d8a..aa37325a24 100644
--- a/libavfilter/vf_pp.c
+++ b/libavfilter/vf_pp.c
@@ -175,13 +175,6 @@ static const AVFilterPad pp_inputs[] = {
     },
 };
 
-static const AVFilterPad pp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_pp = {
     .name            = "pp",
     .description     = NULL_IF_CONFIG_SMALL("Filter video using libpostproc."),
@@ -189,7 +182,7 @@ const AVFilter ff_vf_pp = {
     .init            = pp_init,
     .uninit          = pp_uninit,
     FILTER_INPUTS(pp_inputs),
-    FILTER_OUTPUTS(pp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = pp_process_command,
     .priv_class      = &pp_class,
diff --git a/libavfilter/vf_pp7.c b/libavfilter/vf_pp7.c
index 4f0e60c2e2..f44a5396ea 100644
--- a/libavfilter/vf_pp7.c
+++ b/libavfilter/vf_pp7.c
@@ -386,20 +386,13 @@ static const AVFilterPad pp7_inputs[] = {
     },
 };
 
-static const AVFilterPad pp7_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_pp7 = {
     .name            = "pp7",
     .description     = NULL_IF_CONFIG_SMALL("Apply Postprocessing 7 filter."),
     .priv_size       = sizeof(PP7Context),
     .uninit          = uninit,
     FILTER_INPUTS(pp7_inputs),
-    FILTER_OUTPUTS(pp7_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &pp7_class,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
diff --git a/libavfilter/vf_pseudocolor.c b/libavfilter/vf_pseudocolor.c
index 31532e2824..427eb1b5b4 100644
--- a/libavfilter/vf_pseudocolor.c
+++ b/libavfilter/vf_pseudocolor.c
@@ -1040,13 +1040,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static av_cold void uninit(AVFilterContext *ctx)
 {
     PseudoColorContext *s = ctx->priv;
@@ -1067,7 +1060,7 @@ const AVFilter ff_vf_pseudocolor = {
     .priv_class    = &pseudocolor_class,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = process_command,
diff --git a/libavfilter/vf_pullup.c b/libavfilter/vf_pullup.c
index fcdcfc44af..80105ec1c0 100644
--- a/libavfilter/vf_pullup.c
+++ b/libavfilter/vf_pullup.c
@@ -749,13 +749,6 @@ static const AVFilterPad pullup_inputs[] = {
     },
 };
 
-static const AVFilterPad pullup_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_pullup = {
     .name          = "pullup",
     .description   = NULL_IF_CONFIG_SMALL("Pullup from field sequence to frames."),
@@ -763,6 +756,6 @@ const AVFilter ff_vf_pullup = {
     .priv_class    = &pullup_class,
     .uninit        = uninit,
     FILTER_INPUTS(pullup_inputs),
-    FILTER_OUTPUTS(pullup_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/vf_qp.c b/libavfilter/vf_qp.c
index a771b51ae1..3019e77052 100644
--- a/libavfilter/vf_qp.c
+++ b/libavfilter/vf_qp.c
@@ -184,19 +184,12 @@ static const AVFilterPad qp_inputs[] = {
     },
 };
 
-static const AVFilterPad qp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_qp = {
     .name          = "qp",
     .description   = NULL_IF_CONFIG_SMALL("Change video quantization parameters."),
     .priv_size     = sizeof(QPContext),
     FILTER_INPUTS(qp_inputs),
-    FILTER_OUTPUTS(qp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .priv_class    = &qp_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL |
                      AVFILTER_FLAG_METADATA_ONLY,
diff --git a/libavfilter/vf_readeia608.c b/libavfilter/vf_readeia608.c
index d85012564f..8f3c44e8d8 100644
--- a/libavfilter/vf_readeia608.c
+++ b/libavfilter/vf_readeia608.c
@@ -539,20 +539,13 @@ static const AVFilterPad readeia608_inputs[] = {
     },
 };
 
-static const AVFilterPad readeia608_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_readeia608 = {
     .name          = "readeia608",
     .description   = NULL_IF_CONFIG_SMALL("Read EIA-608 Closed Caption codes from input video and write them to frame metadata."),
     .priv_size     = sizeof(ReadEIA608Context),
     .priv_class    = &readeia608_class,
     FILTER_INPUTS(readeia608_inputs),
-    FILTER_OUTPUTS(readeia608_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC |
diff --git a/libavfilter/vf_readvitc.c b/libavfilter/vf_readvitc.c
index d0fba234f7..011063a29b 100644
--- a/libavfilter/vf_readvitc.c
+++ b/libavfilter/vf_readvitc.c
@@ -32,6 +32,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 
 #define LINE_DATA_SIZE 9
 
@@ -230,13 +231,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_readvitc = {
     .name          = "readvitc",
     .description   = NULL_IF_CONFIG_SMALL("Read vertical interval timecode and write it to frame metadata."),
@@ -244,7 +238,7 @@ const AVFilter ff_vf_readvitc = {
     .priv_class    = &readvitc_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .init          = init,
 };
diff --git a/libavfilter/vf_removegrain.c b/libavfilter/vf_removegrain.c
index 0d4b070cd5..a3a801f8d7 100644
--- a/libavfilter/vf_removegrain.c
+++ b/libavfilter/vf_removegrain.c
@@ -632,19 +632,12 @@ static const AVFilterPad removegrain_inputs[] = {
     },
 };
 
-static const AVFilterPad removegrain_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_removegrain = {
     .name          = "removegrain",
     .description   = NULL_IF_CONFIG_SMALL("Remove grain."),
     .priv_size     = sizeof(RemoveGrainContext),
     FILTER_INPUTS(removegrain_inputs),
-    FILTER_OUTPUTS(removegrain_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &removegrain_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_removelogo.c b/libavfilter/vf_removelogo.c
index c323b5eff3..346a746fe9 100644
--- a/libavfilter/vf_removelogo.c
+++ b/libavfilter/vf_removelogo.c
@@ -555,13 +555,6 @@ static const AVFilterPad removelogo_inputs[] = {
     },
 };
 
-static const AVFilterPad removelogo_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_removelogo = {
     .name          = "removelogo",
     .description   = NULL_IF_CONFIG_SMALL("Remove a TV logo based on a mask image."),
@@ -569,7 +562,7 @@ const AVFilter ff_vf_removelogo = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(removelogo_inputs),
-    FILTER_OUTPUTS(removelogo_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_YUV420P),
     .priv_class    = &removelogo_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_repeatfields.c b/libavfilter/vf_repeatfields.c
index 782b1e543f..bf0edb5440 100644
--- a/libavfilter/vf_repeatfields.c
+++ b/libavfilter/vf_repeatfields.c
@@ -22,6 +22,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct RepeatFieldsContext {
     const AVClass *class;
@@ -182,19 +183,12 @@ static const AVFilterPad repeatfields_inputs[] = {
     },
 };
 
-static const AVFilterPad repeatfields_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_repeatfields = {
     .name          = "repeatfields",
     .description   = NULL_IF_CONFIG_SMALL("Hard repeat fields based on MPEG repeat field flag."),
     .priv_size     = sizeof(RepeatFieldsContext),
     .uninit        = uninit,
     FILTER_INPUTS(repeatfields_inputs),
-    FILTER_OUTPUTS(repeatfields_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts_eq),
 };
diff --git a/libavfilter/vf_sab.c b/libavfilter/vf_sab.c
index ee6edd5a48..43cecea547 100644
--- a/libavfilter/vf_sab.c
+++ b/libavfilter/vf_sab.c
@@ -308,13 +308,6 @@ static const AVFilterPad sab_inputs[] = {
     },
 };
 
-static const AVFilterPad sab_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_sab = {
     .name          = "sab",
     .description   = NULL_IF_CONFIG_SMALL("Apply shape adaptive blur."),
@@ -322,7 +315,7 @@ const AVFilter ff_vf_sab = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(sab_inputs),
-    FILTER_OUTPUTS(sab_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &sab_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_scdet.c b/libavfilter/vf_scdet.c
index 8dcce5ada6..6de84a43a0 100644
--- a/libavfilter/vf_scdet.c
+++ b/libavfilter/vf_scdet.c
@@ -29,6 +29,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "scene_sad.h"
+#include "video.h"
 
 typedef struct SCDetContext {
     const AVClass *class;
@@ -193,13 +194,6 @@ static const AVFilterPad scdet_inputs[] = {
     },
 };
 
-static const AVFilterPad scdet_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_scdet = {
     .name          = "scdet",
     .description   = NULL_IF_CONFIG_SMALL("Detect video scene change"),
@@ -208,7 +202,7 @@ const AVFilter ff_vf_scdet = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(scdet_inputs),
-    FILTER_OUTPUTS(scdet_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .activate      = activate,
 };
diff --git a/libavfilter/vf_scroll.c b/libavfilter/vf_scroll.c
index 5b7d0ad11c..5e35958fcd 100644
--- a/libavfilter/vf_scroll.c
+++ b/libavfilter/vf_scroll.c
@@ -195,20 +195,13 @@ static const AVFilterPad scroll_inputs[] = {
     },
 };
 
-static const AVFilterPad scroll_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_scroll = {
     .name          = "scroll",
     .description   = NULL_IF_CONFIG_SMALL("Scroll input video."),
     .priv_size     = sizeof(ScrollContext),
     .priv_class    = &scroll_class,
     FILTER_INPUTS(scroll_inputs),
-    FILTER_OUTPUTS(scroll_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_selectivecolor.c b/libavfilter/vf_selectivecolor.c
index ea4b5dfee2..ab980479a8 100644
--- a/libavfilter/vf_selectivecolor.c
+++ b/libavfilter/vf_selectivecolor.c
@@ -474,19 +474,12 @@ static const AVFilterPad selectivecolor_inputs[] = {
     },
 };
 
-static const AVFilterPad selectivecolor_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_selectivecolor = {
     .name          = "selectivecolor",
     .description   = NULL_IF_CONFIG_SMALL("Apply CMYK adjustments to specific color ranges."),
     .priv_size     = sizeof(SelectiveColorContext),
     FILTER_INPUTS(selectivecolor_inputs),
-    FILTER_OUTPUTS(selectivecolor_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &selectivecolor_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_separatefields.c b/libavfilter/vf_separatefields.c
index 723974afaa..b7ddb26377 100644
--- a/libavfilter/vf_separatefields.c
+++ b/libavfilter/vf_separatefields.c
@@ -22,6 +22,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct SeparateFieldsContext {
     int nb_planes;
@@ -161,13 +162,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->second);
 }
 
-static const AVFilterPad separatefields_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad separatefields_outputs[] = {
     {
         .name          = "default",
@@ -182,6 +176,6 @@ const AVFilter ff_vf_separatefields = {
     .priv_size   = sizeof(SeparateFieldsContext),
     .activate    = activate,
     .uninit      = uninit,
-    FILTER_INPUTS(separatefields_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(separatefields_outputs),
 };
diff --git a/libavfilter/vf_setparams.c b/libavfilter/vf_setparams.c
index 321a64a14e..ae4c937518 100644
--- a/libavfilter/vf_setparams.c
+++ b/libavfilter/vf_setparams.c
@@ -169,13 +169,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_setparams = {
     .name        = "setparams",
     .description = NULL_IF_CONFIG_SMALL("Force field, or color property for the output video frame."),
@@ -183,7 +176,7 @@ const AVFilter ff_vf_setparams = {
     .priv_class  = &setparams_class,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 
 #if CONFIG_SETRANGE_FILTER
@@ -223,7 +216,7 @@ const AVFilter ff_vf_setrange = {
     .priv_class  = &setrange_class,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 #endif /* CONFIG_SETRANGE_FILTER */
 
@@ -258,6 +251,6 @@ const AVFilter ff_vf_setfield = {
     .priv_class  = &setfield_class,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
 #endif /* CONFIG_SETFIELD_FILTER */
diff --git a/libavfilter/vf_shuffleframes.c b/libavfilter/vf_shuffleframes.c
index 14b90e6446..cf8f197e27 100644
--- a/libavfilter/vf_shuffleframes.c
+++ b/libavfilter/vf_shuffleframes.c
@@ -146,13 +146,6 @@ static const AVFilterPad shuffleframes_inputs[] = {
     },
 };
 
-static const AVFilterPad shuffleframes_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_shuffleframes = {
     .name          = "shuffleframes",
     .description   = NULL_IF_CONFIG_SMALL("Shuffle video frames."),
@@ -161,6 +154,6 @@ const AVFilter ff_vf_shuffleframes = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(shuffleframes_inputs),
-    FILTER_OUTPUTS(shuffleframes_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_shuffleplanes.c b/libavfilter/vf_shuffleplanes.c
index b2f64ad076..1540eaad0e 100644
--- a/libavfilter/vf_shuffleplanes.c
+++ b/libavfilter/vf_shuffleplanes.c
@@ -153,20 +153,13 @@ static const AVFilterPad shuffleplanes_inputs[] = {
     },
 };
 
-static const AVFilterPad shuffleplanes_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_shuffleplanes = {
     .name         = "shuffleplanes",
     .description  = NULL_IF_CONFIG_SMALL("Shuffle video planes."),
     .priv_size    = sizeof(ShufflePlanesContext),
     .priv_class   = &shuffleplanes_class,
     FILTER_INPUTS(shuffleplanes_inputs),
-    FILTER_OUTPUTS(shuffleplanes_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags        = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_siti.c b/libavfilter/vf_siti.c
index 738affa5e8..ae9278c47c 100644
--- a/libavfilter/vf_siti.c
+++ b/libavfilter/vf_siti.c
@@ -328,13 +328,6 @@ static const AVFilterPad avfilter_vf_siti_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_siti_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_siti = {
     .name          = "siti",
     .description   = NULL_IF_CONFIG_SMALL("Calculate spatial information (SI) and temporal information (TI)."),
@@ -345,5 +338,5 @@ const AVFilter ff_vf_siti = {
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     FILTER_INPUTS(avfilter_vf_siti_inputs),
-    FILTER_OUTPUTS(avfilter_vf_siti_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_smartblur.c b/libavfilter/vf_smartblur.c
index 6c4719eab5..e9f56d5330 100644
--- a/libavfilter/vf_smartblur.c
+++ b/libavfilter/vf_smartblur.c
@@ -275,13 +275,6 @@ static const AVFilterPad smartblur_inputs[] = {
     },
 };
 
-static const AVFilterPad smartblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_smartblur = {
     .name          = "smartblur",
     .description   = NULL_IF_CONFIG_SMALL("Blur the input video without impacting the outlines."),
@@ -289,7 +282,7 @@ const AVFilter ff_vf_smartblur = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(smartblur_inputs),
-    FILTER_OUTPUTS(smartblur_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &smartblur_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
index efabe4dbae..83f062b3bf 100644
--- a/libavfilter/vf_spp.c
+++ b/libavfilter/vf_spp.c
@@ -485,13 +485,6 @@ static const AVFilterPad spp_inputs[] = {
     },
 };
 
-static const AVFilterPad spp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_spp = {
     .name            = "spp",
     .description     = NULL_IF_CONFIG_SMALL("Apply a simple post processing filter."),
@@ -499,7 +492,7 @@ const AVFilter ff_vf_spp = {
     .preinit         = preinit,
     .uninit          = uninit,
     FILTER_INPUTS(spp_inputs),
-    FILTER_OUTPUTS(spp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .process_command = process_command,
     .priv_class      = &spp_class,
diff --git a/libavfilter/vf_subtitles.c b/libavfilter/vf_subtitles.c
index 3e5a19e715..e2857e90c0 100644
--- a/libavfilter/vf_subtitles.c
+++ b/libavfilter/vf_subtitles.c
@@ -212,13 +212,6 @@ static const AVFilterPad ass_inputs[] = {
     },
 };
 
-static const AVFilterPad ass_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #if CONFIG_ASS_FILTER
 
 static const AVOption ass_options[] = {
@@ -260,7 +253,7 @@ const AVFilter ff_vf_ass = {
     .init          = init_ass,
     .uninit        = uninit,
     FILTER_INPUTS(ass_inputs),
-    FILTER_OUTPUTS(ass_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &ass_class,
 };
@@ -515,7 +508,7 @@ const AVFilter ff_vf_subtitles = {
     .init          = init_subtitles,
     .uninit        = uninit,
     FILTER_INPUTS(ass_inputs),
-    FILTER_OUTPUTS(ass_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &subtitles_class,
 };
diff --git a/libavfilter/vf_swaprect.c b/libavfilter/vf_swaprect.c
index fad650151f..13ae149afd 100644
--- a/libavfilter/vf_swaprect.c
+++ b/libavfilter/vf_swaprect.c
@@ -237,13 +237,6 @@ static const AVFilterPad inputs[] = {
     },
 };
 
-static const AVFilterPad outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_swaprect = {
     .name          = "swaprect",
     .description   = NULL_IF_CONFIG_SMALL("Swap 2 rectangular objects in video."),
@@ -251,7 +244,7 @@ const AVFilter ff_vf_swaprect = {
     .priv_class    = &swaprect_class,
     .uninit        = uninit,
     FILTER_INPUTS(inputs),
-    FILTER_OUTPUTS(outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_swapuv.c b/libavfilter/vf_swapuv.c
index 4452028262..df04631d20 100644
--- a/libavfilter/vf_swapuv.c
+++ b/libavfilter/vf_swapuv.c
@@ -101,20 +101,13 @@ static const AVFilterPad swapuv_inputs[] = {
     },
 };
 
-static const AVFilterPad swapuv_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_swapuv = {
     .name          = "swapuv",
     .description   = NULL_IF_CONFIG_SMALL("Swap U and V components."),
     .priv_size     = sizeof(SwapUVContext),
     .priv_class    = &swapuv_class,
     FILTER_INPUTS(swapuv_inputs),
-    FILTER_OUTPUTS(swapuv_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_tonemap.c b/libavfilter/vf_tonemap.c
index d1087e6bd9..f34448d0e9 100644
--- a/libavfilter/vf_tonemap.c
+++ b/libavfilter/vf_tonemap.c
@@ -307,13 +307,6 @@ static const AVFilterPad tonemap_inputs[] = {
     },
 };
 
-static const AVFilterPad tonemap_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_tonemap = {
     .name            = "tonemap",
     .description     = NULL_IF_CONFIG_SMALL("Conversion to/from different dynamic ranges."),
@@ -321,7 +314,7 @@ const AVFilter ff_vf_tonemap = {
     .priv_size       = sizeof(TonemapContext),
     .priv_class      = &tonemap_class,
     FILTER_INPUTS(tonemap_inputs),
-    FILTER_OUTPUTS(tonemap_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS(AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32),
     .flags           = AVFILTER_FLAG_SLICE_THREADS,
 };
diff --git a/libavfilter/vf_tpad.c b/libavfilter/vf_tpad.c
index 19c4f9b0b5..7990403e81 100644
--- a/libavfilter/vf_tpad.c
+++ b/libavfilter/vf_tpad.c
@@ -225,13 +225,6 @@ static const AVFilterPad tpad_inputs[] = {
     },
 };
 
-static const AVFilterPad tpad_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_tpad = {
     .name          = "tpad",
     .description   = NULL_IF_CONFIG_SMALL("Temporarily pad video frames."),
@@ -240,6 +233,6 @@ const AVFilter ff_vf_tpad = {
     .activate      = activate,
     .uninit        = uninit,
     FILTER_INPUTS(tpad_inputs),
-    FILTER_OUTPUTS(tpad_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c
index 5e17ebce1e..73dd2f2a28 100644
--- a/libavfilter/vf_unsharp.c
+++ b/libavfilter/vf_unsharp.c
@@ -366,13 +366,6 @@ static const AVFilterPad avfilter_vf_unsharp_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_unsharp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_unsharp = {
     .name          = "unsharp",
     .description   = NULL_IF_CONFIG_SMALL("Sharpen or blur the input video."),
@@ -381,7 +374,7 @@ const AVFilter ff_vf_unsharp = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_unsharp_inputs),
-    FILTER_OUTPUTS(avfilter_vf_unsharp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
 };
diff --git a/libavfilter/vf_untile.c b/libavfilter/vf_untile.c
index c8dafd1e60..f32f3e186b 100644
--- a/libavfilter/vf_untile.c
+++ b/libavfilter/vf_untile.c
@@ -24,6 +24,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "filters.h"
+#include "video.h"
 
 typedef struct UntileContext {
     const AVClass *class;
@@ -162,13 +163,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->frame);
 }
 
-static const AVFilterPad untile_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad untile_outputs[] = {
     {
         .name          = "default",
@@ -184,7 +178,7 @@ const AVFilter ff_vf_untile = {
     .uninit        = uninit,
     .activate      = activate,
     .priv_size     = sizeof(UntileContext),
-    FILTER_INPUTS(untile_inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(untile_outputs),
     FILTER_QUERY_FUNC(query_formats),
     .priv_class    = &untile_class,
diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c
index 5f410b98a5..10c8aaeb6c 100644
--- a/libavfilter/vf_uspp.c
+++ b/libavfilter/vf_uspp.c
@@ -547,20 +547,13 @@ static const AVFilterPad uspp_inputs[] = {
     },
 };
 
-static const AVFilterPad uspp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_uspp = {
     .name            = "uspp",
     .description     = NULL_IF_CONFIG_SMALL("Apply Ultra Simple / Slow Post-processing filter."),
     .priv_size       = sizeof(USPPContext),
     .uninit          = uninit,
     FILTER_INPUTS(uspp_inputs),
-    FILTER_OUTPUTS(uspp_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class      = &uspp_class,
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS,
diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
index fb66f0dea1..81cc4b26e1 100644
--- a/libavfilter/vf_vaguedenoiser.c
+++ b/libavfilter/vf_vaguedenoiser.c
@@ -594,13 +594,6 @@ static const AVFilterPad vaguedenoiser_inputs[] = {
 };
 
 
-static const AVFilterPad vaguedenoiser_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-};
-
 const AVFilter ff_vf_vaguedenoiser = {
     .name          = "vaguedenoiser",
     .description   = NULL_IF_CONFIG_SMALL("Apply a Wavelet based Denoiser."),
@@ -609,7 +602,7 @@ const AVFilter ff_vf_vaguedenoiser = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(vaguedenoiser_inputs),
-    FILTER_OUTPUTS(vaguedenoiser_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_vflip.c b/libavfilter/vf_vflip.c
index 0d624512f9..8d6724ed37 100644
--- a/libavfilter/vf_vflip.c
+++ b/libavfilter/vf_vflip.c
@@ -135,19 +135,12 @@ static const AVFilterPad avfilter_vf_vflip_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_vflip_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vflip = {
     .name        = "vflip",
     .description = NULL_IF_CONFIG_SMALL("Flip the input video vertically."),
     .priv_size   = sizeof(FlipContext),
     .priv_class  = &vflip_class,
     FILTER_INPUTS(avfilter_vf_vflip_inputs),
-    FILTER_OUTPUTS(avfilter_vf_vflip_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     .flags       = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
 };
diff --git a/libavfilter/vf_vfrdet.c b/libavfilter/vf_vfrdet.c
index 0ca221b5b8..8d641dd368 100644
--- a/libavfilter/vf_vfrdet.c
+++ b/libavfilter/vf_vfrdet.c
@@ -21,6 +21,7 @@
 #include "libavutil/common.h"
 #include "libavutil/opt.h"
 #include "internal.h"
+#include "video.h"
 
 typedef struct VFRDETContext {
     const AVClass *class;
@@ -95,13 +96,6 @@ static const AVFilterPad vfrdet_inputs[] = {
     },
 };
 
-static const AVFilterPad vfrdet_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vfrdet = {
     .name        = "vfrdet",
     .description = NULL_IF_CONFIG_SMALL("Variable frame rate detect filter."),
@@ -110,5 +104,5 @@ const AVFilter ff_vf_vfrdet = {
     .uninit      = uninit,
     .flags       = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(vfrdet_inputs),
-    FILTER_OUTPUTS(vfrdet_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
 };
diff --git a/libavfilter/vf_vibrance.c b/libavfilter/vf_vibrance.c
index 329b37bdc6..e5ab3d24bf 100644
--- a/libavfilter/vf_vibrance.c
+++ b/libavfilter/vf_vibrance.c
@@ -416,13 +416,6 @@ static const AVFilterPad vibrance_inputs[] = {
     },
 };
 
-static const AVFilterPad vibrance_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(VibranceContext, x)
 #define VF AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -446,7 +439,7 @@ const AVFilter ff_vf_vibrance = {
     .priv_size     = sizeof(VibranceContext),
     .priv_class    = &vibrance_class,
     FILTER_INPUTS(vibrance_inputs),
-    FILTER_OUTPUTS(vibrance_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pixel_fmts),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_vidstabdetect.c b/libavfilter/vf_vidstabdetect.c
index b27b1e40a6..a2c6d89503 100644
--- a/libavfilter/vf_vidstabdetect.c
+++ b/libavfilter/vf_vidstabdetect.c
@@ -29,6 +29,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "internal.h"
+#include "video.h"
 
 #include "vidstabutils.h"
 
@@ -188,13 +189,6 @@ static const AVFilterPad avfilter_vf_vidstabdetect_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_vidstabdetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vidstabdetect = {
     .name          = "vidstabdetect",
     .description   = NULL_IF_CONFIG_SMALL("Extract relative transformations, "
@@ -205,7 +199,7 @@ const AVFilter ff_vf_vidstabdetect = {
     .uninit        = uninit,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(avfilter_vf_vidstabdetect_inputs),
-    FILTER_OUTPUTS(avfilter_vf_vidstabdetect_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(ff_vidstab_pix_fmts),
     .priv_class    = &vidstabdetect_class,
 };
diff --git a/libavfilter/vf_vidstabtransform.c b/libavfilter/vf_vidstabtransform.c
index 9efc8ef5a0..8a66a463b4 100644
--- a/libavfilter/vf_vidstabtransform.c
+++ b/libavfilter/vf_vidstabtransform.c
@@ -283,13 +283,6 @@ static const AVFilterPad avfilter_vf_vidstabtransform_inputs[] = {
     },
 };
 
-static const AVFilterPad avfilter_vf_vidstabtransform_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vidstabtransform = {
     .name          = "vidstabtransform",
     .description   = NULL_IF_CONFIG_SMALL("Transform the frames, "
@@ -299,7 +292,7 @@ const AVFilter ff_vf_vidstabtransform = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(avfilter_vf_vidstabtransform_inputs),
-    FILTER_OUTPUTS(avfilter_vf_vidstabtransform_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(ff_vidstab_pix_fmts),
     .priv_class    = &vidstabtransform_class,
 };
diff --git a/libavfilter/vf_vignette.c b/libavfilter/vf_vignette.c
index 56764b49d1..177d51e276 100644
--- a/libavfilter/vf_vignette.c
+++ b/libavfilter/vf_vignette.c
@@ -325,13 +325,6 @@ static const AVFilterPad vignette_inputs[] = {
     },
 };
 
-static const AVFilterPad vignette_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vignette = {
     .name          = "vignette",
     .description   = NULL_IF_CONFIG_SMALL("Make or reverse a vignette effect."),
@@ -339,7 +332,7 @@ const AVFilter ff_vf_vignette = {
     .init          = init,
     .uninit        = uninit,
     FILTER_INPUTS(vignette_inputs),
-    FILTER_OUTPUTS(vignette_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .priv_class    = &vignette_class,
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
diff --git a/libavfilter/vf_vmafmotion.c b/libavfilter/vf_vmafmotion.c
index 137afd9245..022816e896 100644
--- a/libavfilter/vf_vmafmotion.c
+++ b/libavfilter/vf_vmafmotion.c
@@ -30,6 +30,7 @@
 #include "avfilter.h"
 #include "formats.h"
 #include "internal.h"
+#include "video.h"
 #include "vmaf_motion.h"
 
 #define BIT_SHIFT 15
@@ -350,13 +351,6 @@ static const AVFilterPad vmafmotion_inputs[] = {
     },
 };
 
-static const AVFilterPad vmafmotion_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 const AVFilter ff_vf_vmafmotion = {
     .name          = "vmafmotion",
     .description   = NULL_IF_CONFIG_SMALL("Calculate the VMAF Motion score."),
@@ -366,6 +360,6 @@ const AVFilter ff_vf_vmafmotion = {
     .priv_class    = &vmafmotion_class,
     .flags         = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(vmafmotion_inputs),
-    FILTER_OUTPUTS(vmafmotion_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_QUERY_FUNC(query_formats),
 };
diff --git a/libavfilter/vf_yaepblur.c b/libavfilter/vf_yaepblur.c
index 473a444498..b39738b577 100644
--- a/libavfilter/vf_yaepblur.c
+++ b/libavfilter/vf_yaepblur.c
@@ -310,13 +310,6 @@ static const AVFilterPad yaep_inputs[] = {
     },
 };
 
-static const AVFilterPad yaep_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 #define OFFSET(x) offsetof(YAEPContext, x)
 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
@@ -339,7 +332,7 @@ const AVFilter ff_vf_yaepblur = {
     .priv_class      = &yaepblur_class,
     .uninit          = uninit,
     FILTER_INPUTS(yaep_inputs),
-    FILTER_OUTPUTS(yaep_outputs),
+    FILTER_OUTPUTS(ff_video_default_filterpad),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
     .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
     .process_command = ff_filter_process_command,
diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c
index cca979e01a..2e8bc18f3a 100644
--- a/libavfilter/vf_zoompan.c
+++ b/libavfilter/vf_zoompan.c
@@ -351,13 +351,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     av_frame_free(&s->in);
 }
 
-static const AVFilterPad inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
 static const AVFilterPad outputs[] = {
     {
         .name          = "default",
@@ -374,7 +367,7 @@ const AVFilter ff_vf_zoompan = {
     .init          = init,
     .uninit        = uninit,
     .activate      = activate,
-    FILTER_INPUTS(inputs),
+    FILTER_INPUTS(ff_video_default_filterpad),
     FILTER_OUTPUTS(outputs),
     FILTER_PIXFMTS_ARRAY(pix_fmts),
 };
diff --git a/libavfilter/video.c b/libavfilter/video.c
index 7683ef6fd4..42eeb98c28 100644
--- a/libavfilter/video.c
+++ b/libavfilter/video.c
@@ -33,6 +33,13 @@
 #include "internal.h"
 #include "video.h"
 
+const AVFilterPad ff_video_default_filterpad[1] = {
+    {
+        .name = "default",
+        .type = AVMEDIA_TYPE_VIDEO,
+    }
+};
+
 AVFrame *ff_null_get_video_buffer(AVFilterLink *link, int w, int h)
 {
     return ff_get_video_buffer(link->dst->outputs[0], w, h);
diff --git a/libavfilter/video.h b/libavfilter/video.h
index f37bab9d03..8efea521ef 100644
--- a/libavfilter/video.h
+++ b/libavfilter/video.h
@@ -22,6 +22,11 @@
 #define AVFILTER_VIDEO_H
 
 #include "avfilter.h"
+#include "internal.h"
+
+/* An AVFilterPad array whose only entry has name "default"
+ * and is of type video. */
+extern const AVFilterPad ff_video_default_filterpad[1];
 
 AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h);
 AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int align);
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 4/4] avfilter/vf_colorconstancy: Remove redundant CONFIG check
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 2/4] avfilter/internal: Don't include video.h Andreas Rheinhardt
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs Andreas Rheinhardt
@ 2023-08-03 14:33 ` Andreas Rheinhardt
  2023-08-04  0:49 ` [FFmpeg-devel] [PATCH 5/7] avfilter/internal: Don't include formats.h Andreas Rheinhardt
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-03 14:33 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

This file is only used by the greyedge filter and therefore
only compiled if said filter is enabled. This also allows
to remove a config_components.h inclusion, avoiding unnecessary
rebuilds.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavfilter/vf_colorconstancy.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/libavfilter/vf_colorconstancy.c b/libavfilter/vf_colorconstancy.c
index af0356767f..b750087a9d 100644
--- a/libavfilter/vf_colorconstancy.c
+++ b/libavfilter/vf_colorconstancy.c
@@ -28,8 +28,6 @@
  * J. van de Weijer, Th. Gevers, A. Gijsenij "Edge-Based Color Constancy".
  */
 
-#include "config_components.h"
-
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
@@ -719,8 +717,6 @@ static const AVFilterPad colorconstancy_inputs[] = {
     },
 };
 
-#if CONFIG_GREYEDGE_FILTER
-
 static const AVOption greyedge_options[] = {
     { "difford",  "set differentiation order", OFFSET(difford),  AV_OPT_TYPE_INT,    {.i64=1}, 0,   2,      FLAGS },
     { "minknorm", "set Minkowski norm",        OFFSET(minknorm), AV_OPT_TYPE_INT,    {.i64=1}, 0,   20,     FLAGS },
@@ -743,5 +739,3 @@ const AVFilter ff_vf_greyedge = {
     FILTER_SINGLE_PIXFMT(AV_PIX_FMT_GBRP),
     .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
 };
-
-#endif /* CONFIG_GREY_EDGE_FILTER */
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs Andreas Rheinhardt
@ 2023-08-03 16:44   ` Marvin Scholz
  2023-08-03 21:12     ` Andreas Rheinhardt
  0 siblings, 1 reply; 10+ messages in thread
From: Marvin Scholz @ 2023-08-03 16:44 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On 3 Aug 2023, at 16:33, Andreas Rheinhardt wrote:

> Lots of video filters use a very simple input or output:
> An array with a single AVFilterPad whose name is "default"
> and whose type is AVMEDIA_TYPE_VIDEO; everything else is unset.
>
> Given that we never use pointer equality for inputs or outputs*,
> we can simply use a single AVFilterPad instead of dozens; this
> even saves .data.rel.ro (8312B here) as well as relocations.
>
> *: In fact, several filters (like the filters in vf_lut.c)
> already use the same outputs; furthermore, ff_filter_alloc()
> duplicates the input and output pads so that we do not even
> work with the pads directly.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---

[...]

> +#include "internal.h"
> +
> +/* An AVFilterPad array whose only entry has name "default"
> + * and is of type video. */
> +extern const AVFilterPad ff_video_default_filterpad[1];

This should probably be a Doxygen comment.

>
>  AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h);
>  AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int align);
> -- 
> 2.34.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs
  2023-08-03 16:44   ` Marvin Scholz
@ 2023-08-03 21:12     ` Andreas Rheinhardt
  0 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-03 21:12 UTC (permalink / raw)
  To: ffmpeg-devel

Marvin Scholz:
> 
> 
> On 3 Aug 2023, at 16:33, Andreas Rheinhardt wrote:
> 
>> Lots of video filters use a very simple input or output:
>> An array with a single AVFilterPad whose name is "default"
>> and whose type is AVMEDIA_TYPE_VIDEO; everything else is unset.
>>
>> Given that we never use pointer equality for inputs or outputs*,
>> we can simply use a single AVFilterPad instead of dozens; this
>> even saves .data.rel.ro (8312B here) as well as relocations.
>>
>> *: In fact, several filters (like the filters in vf_lut.c)
>> already use the same outputs; furthermore, ff_filter_alloc()
>> duplicates the input and output pads so that we do not even
>> work with the pads directly.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
>> ---
> 
> [...]
> 
>> +#include "internal.h"
>> +
>> +/* An AVFilterPad array whose only entry has name "default"
>> + * and is of type video. */
>> +extern const AVFilterPad ff_video_default_filterpad[1];
> 
> This should probably be a Doxygen comment.
> 

Changed it and the audio one in patch #1 locally to:
/**
 * An AVFilterPad array whose only entry has name "default"
 * and is of type AVMEDIA_TYPE_VIDEO.
 */

- Andreas

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 5/7] avfilter/internal: Don't include formats.h
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
                   ` (2 preceding siblings ...)
  2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 4/4] avfilter/vf_colorconstancy: Remove redundant CONFIG check Andreas Rheinhardt
@ 2023-08-04  0:49 ` Andreas Rheinhardt
  2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 6/7] avfilter: Remove unnecessary formats.h inclusions Andreas Rheinhardt
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-04  0:49 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

internal.h doesn't rely on it; instead include it directly
in every user that needs it (a filter needing it is basically
equivalent to it using FILTER_QUERY_FUNC, i.e. a majority of
filters doesn't need it).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavfilter/aeval.c             | 1 +
 libavfilter/af_aiir.c           | 1 +
 libavfilter/af_amerge.c         | 1 +
 libavfilter/af_anequalizer.c    | 1 +
 libavfilter/af_apulsator.c      | 1 +
 libavfilter/af_aresample.c      | 1 +
 libavfilter/af_asetrate.c       | 1 +
 libavfilter/af_asr.c            | 1 +
 libavfilter/af_biquads.c        | 1 +
 libavfilter/af_dialoguenhance.c | 1 +
 libavfilter/af_hdcd.c           | 1 +
 libavfilter/af_headphone.c      | 1 +
 libavfilter/af_ladspa.c         | 1 +
 libavfilter/af_loudnorm.c       | 1 +
 libavfilter/af_lv2.c            | 1 +
 libavfilter/af_replaygain.c     | 1 +
 libavfilter/af_sofalizer.c      | 1 +
 libavfilter/af_virtualbass.c    | 1 +
 libavfilter/asrc_afdelaysrc.c   | 1 +
 libavfilter/asrc_afirsrc.c      | 1 +
 libavfilter/asrc_anoisesrc.c    | 1 +
 libavfilter/asrc_anullsrc.c     | 1 +
 libavfilter/asrc_hilbert.c      | 1 +
 libavfilter/asrc_sinc.c         | 1 +
 libavfilter/asrc_sine.c         | 1 +
 libavfilter/avf_concat.c        | 1 +
 libavfilter/avf_showcqt.c       | 1 +
 libavfilter/avf_showcwt.c       | 1 +
 libavfilter/avf_showfreqs.c     | 1 +
 libavfilter/avf_showspatial.c   | 1 +
 libavfilter/avf_showspectrum.c  | 1 +
 libavfilter/buffersink.c        | 1 +
 libavfilter/internal.h          | 1 -
 libavfilter/vf_copy.c           | 1 +
 libavfilter/vf_deband.c         | 1 +
 libavfilter/vf_elbg.c           | 1 +
 libavfilter/vf_extractplanes.c  | 1 +
 libavfilter/vf_feedback.c       | 1 +
 libavfilter/vf_fieldhint.c      | 1 +
 libavfilter/vf_fieldmatch.c     | 1 +
 libavfilter/vf_geq.c            | 1 +
 libavfilter/vf_il.c             | 1 +
 libavfilter/vf_libplacebo.c     | 1 +
 libavfilter/vf_mergeplanes.c    | 1 +
 libavfilter/vf_palettegen.c     | 1 +
 libavfilter/vf_paletteuse.c     | 1 +
 libavfilter/vf_shuffleplanes.c  | 1 +
 libavfilter/vf_weave.c          | 1 +
 48 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/libavfilter/aeval.c b/libavfilter/aeval.c
index 94d7690ef4..b26d75f129 100644
--- a/libavfilter/aeval.c
+++ b/libavfilter/aeval.c
@@ -33,6 +33,7 @@
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 static const char * const var_names[] = {
diff --git a/libavfilter/af_aiir.c b/libavfilter/af_aiir.c
index 28f452f4a1..41709aa360 100644
--- a/libavfilter/af_aiir.c
+++ b/libavfilter/af_aiir.c
@@ -26,6 +26,7 @@
 #include "libavutil/xga_font_data.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index 801e592870..6ef05e213f 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -30,6 +30,7 @@
 #include "avfilter.h"
 #include "filters.h"
 #include "audio.h"
+#include "formats.h"
 #include "internal.h"
 
 #define SWR_CH_MAX 64
diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c
index c9b74aa344..69a9c629cd 100644
--- a/libavfilter/af_anequalizer.c
+++ b/libavfilter/af_anequalizer.c
@@ -25,6 +25,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 #include "video.h"
diff --git a/libavfilter/af_apulsator.c b/libavfilter/af_apulsator.c
index 51b4344a39..909a50215e 100644
--- a/libavfilter/af_apulsator.c
+++ b/libavfilter/af_apulsator.c
@@ -22,6 +22,7 @@
 #include "libavutil/channel_layout.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 
diff --git a/libavfilter/af_aresample.c b/libavfilter/af_aresample.c
index ead85dd46d..f4bcc45616 100644
--- a/libavfilter/af_aresample.c
+++ b/libavfilter/af_aresample.c
@@ -33,6 +33,7 @@
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct AResampleContext {
diff --git a/libavfilter/af_asetrate.c b/libavfilter/af_asetrate.c
index f1e48b7087..50ccfc91b9 100644
--- a/libavfilter/af_asetrate.c
+++ b/libavfilter/af_asetrate.c
@@ -20,6 +20,7 @@
 
 #include "libavutil/opt.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct ASetRateContext {
diff --git a/libavfilter/af_asr.c b/libavfilter/af_asr.c
index a9dd047cb3..884e17afb7 100644
--- a/libavfilter/af_asr.c
+++ b/libavfilter/af_asr.c
@@ -25,6 +25,7 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct ASRContext {
diff --git a/libavfilter/af_biquads.c b/libavfilter/af_biquads.c
index 1453f51a16..2bcc6fd4a5 100644
--- a/libavfilter/af_biquads.c
+++ b/libavfilter/af_biquads.c
@@ -71,6 +71,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 enum FilterType {
diff --git a/libavfilter/af_dialoguenhance.c b/libavfilter/af_dialoguenhance.c
index 1af2d17153..1762ea7cde 100644
--- a/libavfilter/af_dialoguenhance.c
+++ b/libavfilter/af_dialoguenhance.c
@@ -24,6 +24,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "window_func.h"
 
diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index d2cd71a0f3..a03c9aadf7 100644
--- a/libavfilter/af_hdcd.c
+++ b/libavfilter/af_hdcd.c
@@ -47,6 +47,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/avassert.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 
diff --git a/libavfilter/af_headphone.c b/libavfilter/af_headphone.c
index 03938c16ad..c8f753387f 100644
--- a/libavfilter/af_headphone.c
+++ b/libavfilter/af_headphone.c
@@ -29,6 +29,7 @@
 
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 
diff --git a/libavfilter/af_ladspa.c b/libavfilter/af_ladspa.c
index fc93d56af7..85e215850d 100644
--- a/libavfilter/af_ladspa.c
+++ b/libavfilter/af_ladspa.c
@@ -33,6 +33,7 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct MetaItem {
diff --git a/libavfilter/af_loudnorm.c b/libavfilter/af_loudnorm.c
index 4888fa9b43..d83398ae2a 100644
--- a/libavfilter/af_loudnorm.c
+++ b/libavfilter/af_loudnorm.c
@@ -23,6 +23,7 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 #include "ebur128.h"
diff --git a/libavfilter/af_lv2.c b/libavfilter/af_lv2.c
index 3cdf16457c..e577b1624d 100644
--- a/libavfilter/af_lv2.c
+++ b/libavfilter/af_lv2.c
@@ -33,6 +33,7 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct URITable {
diff --git a/libavfilter/af_replaygain.c b/libavfilter/af_replaygain.c
index 128454aa6b..266121e2c0 100644
--- a/libavfilter/af_replaygain.c
+++ b/libavfilter/af_replaygain.c
@@ -30,6 +30,7 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 
 #define HISTOGRAM_SLOTS 12000
diff --git a/libavfilter/af_sofalizer.c b/libavfilter/af_sofalizer.c
index acfd4323a5..60e0da30e9 100644
--- a/libavfilter/af_sofalizer.c
+++ b/libavfilter/af_sofalizer.c
@@ -36,6 +36,7 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 
diff --git a/libavfilter/af_virtualbass.c b/libavfilter/af_virtualbass.c
index fb7189d364..9b9967c419 100644
--- a/libavfilter/af_virtualbass.c
+++ b/libavfilter/af_virtualbass.c
@@ -23,6 +23,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 #include <float.h>
diff --git a/libavfilter/asrc_afdelaysrc.c b/libavfilter/asrc_afdelaysrc.c
index 2fc57cee4d..a7d25c5309 100644
--- a/libavfilter/asrc_afdelaysrc.c
+++ b/libavfilter/asrc_afdelaysrc.c
@@ -25,6 +25,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct AFDelaySrcContext {
diff --git a/libavfilter/asrc_afirsrc.c b/libavfilter/asrc_afirsrc.c
index 2f09579c9c..e2359c159f 100644
--- a/libavfilter/asrc_afirsrc.c
+++ b/libavfilter/asrc_afirsrc.c
@@ -27,6 +27,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "window_func.h"
 
diff --git a/libavfilter/asrc_anoisesrc.c b/libavfilter/asrc_anoisesrc.c
index 1c8dccf689..9a445534fc 100644
--- a/libavfilter/asrc_anoisesrc.c
+++ b/libavfilter/asrc_anoisesrc.c
@@ -23,6 +23,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "libavutil/lfg.h"
 #include "libavutil/random_seed.h"
diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c
index c071d8aa11..c89100c0dc 100644
--- a/libavfilter/asrc_anullsrc.c
+++ b/libavfilter/asrc_anullsrc.c
@@ -33,6 +33,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct ANullContext {
diff --git a/libavfilter/asrc_hilbert.c b/libavfilter/asrc_hilbert.c
index c8e8435467..98248e7e4e 100644
--- a/libavfilter/asrc_hilbert.c
+++ b/libavfilter/asrc_hilbert.c
@@ -22,6 +22,7 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "filters.h"
 #include "window_func.h"
diff --git a/libavfilter/asrc_sinc.c b/libavfilter/asrc_sinc.c
index 175f030f46..16e587f1b9 100644
--- a/libavfilter/asrc_sinc.c
+++ b/libavfilter/asrc_sinc.c
@@ -27,6 +27,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct SincContext {
diff --git a/libavfilter/asrc_sine.c b/libavfilter/asrc_sine.c
index c0d8d2265b..c576b57fec 100644
--- a/libavfilter/asrc_sine.c
+++ b/libavfilter/asrc_sine.c
@@ -27,6 +27,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 
 typedef struct SineContext {
diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c
index af758c5292..33edd7a394 100644
--- a/libavfilter/avf_concat.c
+++ b/libavfilter/avf_concat.c
@@ -28,6 +28,7 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "audio.h"
diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c
index 4d1937d139..a7b6e5bcf5 100644
--- a/libavfilter/avf_showcqt.c
+++ b/libavfilter/avf_showcqt.c
@@ -29,6 +29,7 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "lavfutils.h"
 #include "lswsutils.h"
diff --git a/libavfilter/avf_showcwt.c b/libavfilter/avf_showcwt.c
index 02b86345bb..83470deef8 100644
--- a/libavfilter/avf_showcwt.c
+++ b/libavfilter/avf_showcwt.c
@@ -30,6 +30,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
 #include "audio.h"
+#include "formats.h"
 #include "video.h"
 #include "avfilter.h"
 #include "filters.h"
diff --git a/libavfilter/avf_showfreqs.c b/libavfilter/avf_showfreqs.c
index b8cff608eb..e90c9e8fcb 100644
--- a/libavfilter/avf_showfreqs.c
+++ b/libavfilter/avf_showfreqs.c
@@ -30,6 +30,7 @@
 #include "libavutil/parseutils.h"
 #include "audio.h"
 #include "filters.h"
+#include "formats.h"
 #include "video.h"
 #include "avfilter.h"
 #include "internal.h"
diff --git a/libavfilter/avf_showspatial.c b/libavfilter/avf_showspatial.c
index 7b525aba8d..29b41bee85 100644
--- a/libavfilter/avf_showspatial.c
+++ b/libavfilter/avf_showspatial.c
@@ -28,6 +28,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
 #include "audio.h"
+#include "formats.h"
 #include "video.h"
 #include "avfilter.h"
 #include "filters.h"
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index b8e03d07a0..8cf73fce70 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -40,6 +40,7 @@
 #include "libavutil/parseutils.h"
 #include "libavutil/xga_font_data.h"
 #include "audio.h"
+#include "formats.h"
 #include "video.h"
 #include "avfilter.h"
 #include "filters.h"
diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index 6d83a9310c..9426ded7ee 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -37,6 +37,7 @@
 #include "avfilter.h"
 #include "buffersink.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/internal.h b/libavfilter/internal.h
index 6bcabd012d..80d003fc02 100644
--- a/libavfilter/internal.h
+++ b/libavfilter/internal.h
@@ -26,7 +26,6 @@
 
 #include "libavutil/internal.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "framequeue.h"
 
 typedef struct AVFilterCommand {
diff --git a/libavfilter/vf_copy.c b/libavfilter/vf_copy.c
index 057b851b4c..52ac9fb0ec 100644
--- a/libavfilter/vf_copy.c
+++ b/libavfilter/vf_copy.c
@@ -24,6 +24,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/internal.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_deband.c b/libavfilter/vf_deband.c
index b3c36de8c3..177d888bed 100644
--- a/libavfilter/vf_deband.c
+++ b/libavfilter/vf_deband.c
@@ -24,6 +24,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_elbg.c b/libavfilter/vf_elbg.c
index cc49b8e240..17947e226a 100644
--- a/libavfilter/vf_elbg.c
+++ b/libavfilter/vf_elbg.c
@@ -30,6 +30,7 @@
 
 #include "avfilter.h"
 #include "drawutils.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c
index 62c6002203..453e51a1ea 100644
--- a/libavfilter/vf_extractplanes.c
+++ b/libavfilter/vf_extractplanes.c
@@ -28,6 +28,7 @@
 #include "avfilter.h"
 #include "drawutils.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_feedback.c b/libavfilter/vf_feedback.c
index dc832c4671..33beae66ec 100644
--- a/libavfilter/vf_feedback.c
+++ b/libavfilter/vf_feedback.c
@@ -27,6 +27,7 @@
 #include "libavutil/internal.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_fieldhint.c b/libavfilter/vf_fieldhint.c
index ff940a50e6..8e1a4fc7aa 100644
--- a/libavfilter/vf_fieldhint.c
+++ b/libavfilter/vf_fieldhint.c
@@ -25,6 +25,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_fieldmatch.c b/libavfilter/vf_fieldmatch.c
index b65e75534e..55671d8517 100644
--- a/libavfilter/vf_fieldmatch.c
+++ b/libavfilter/vf_fieldmatch.c
@@ -38,6 +38,7 @@
 #include "libavutil/timestamp.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c
index 092124669f..912a4dd51c 100644
--- a/libavfilter/vf_geq.c
+++ b/libavfilter/vf_geq.c
@@ -31,6 +31,7 @@
 #include "libavutil/eval.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_il.c b/libavfilter/vf_il.c
index 05c393d914..1190d79fc7 100644
--- a/libavfilter/vf_il.c
+++ b/libavfilter/vf_il.c
@@ -28,6 +28,7 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 254e286530..3487991053 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -22,6 +22,7 @@
 #include "libavutil/file.h"
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
+#include "formats.h"
 #include "internal.h"
 #include "filters.h"
 #include "video.h"
diff --git a/libavfilter/vf_mergeplanes.c b/libavfilter/vf_mergeplanes.c
index 9bff5bbe63..91bc0d2c55 100644
--- a/libavfilter/vf_mergeplanes.c
+++ b/libavfilter/vf_mergeplanes.c
@@ -24,6 +24,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "framesync.h"
 #include "video.h"
diff --git a/libavfilter/vf_palettegen.c b/libavfilter/vf_palettegen.c
index 1c0836bee1..8985b42bcc 100644
--- a/libavfilter/vf_palettegen.c
+++ b/libavfilter/vf_palettegen.c
@@ -29,6 +29,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/intreadwrite.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "palette.h"
 #include "video.h"
diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c
index 463a2a6783..79d8fb2e51 100644
--- a/libavfilter/vf_paletteuse.c
+++ b/libavfilter/vf_paletteuse.c
@@ -31,6 +31,7 @@
 #include "libavutil/qsort.h"
 #include "avfilter.h"
 #include "filters.h"
+#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "palette.h"
diff --git a/libavfilter/vf_shuffleplanes.c b/libavfilter/vf_shuffleplanes.c
index 1540eaad0e..fb2f85cf55 100644
--- a/libavfilter/vf_shuffleplanes.c
+++ b/libavfilter/vf_shuffleplanes.c
@@ -24,6 +24,7 @@
 #include "libavutil/pixfmt.h"
 
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_weave.c b/libavfilter/vf_weave.c
index 6be4587089..84f3c5f337 100644
--- a/libavfilter/vf_weave.c
+++ b/libavfilter/vf_weave.c
@@ -22,6 +22,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
+#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 6/7] avfilter: Remove unnecessary formats.h inclusions
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
                   ` (3 preceding siblings ...)
  2023-08-04  0:49 ` [FFmpeg-devel] [PATCH 5/7] avfilter/internal: Don't include formats.h Andreas Rheinhardt
@ 2023-08-04  0:50 ` Andreas Rheinhardt
  2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 7/7] avcodec/qsvenc: Remove unnecessary config_components.h inclusion Andreas Rheinhardt
  2023-08-05  7:38 ` [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-04  0:50 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

A filter needs formats.h iff it uses FILTER_QUERY_FUNC();
since lots of filters have been switched to use something
else than FILTER_QUERY_FUNC, they don't need it any more,
but removing this header has been forgotten.
This commit does this; files with formats.h inclusion went down
from 304 to 139 here (it were 449 before the preceding commit).

While just at it, also improve the other headers a bit.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavfilter/af_acontrast.c         | 1 -
 libavfilter/af_adeclick.c          | 1 -
 libavfilter/af_adecorrelate.c      | 1 -
 libavfilter/af_adynamicsmooth.c    | 1 -
 libavfilter/af_afftdn.c            | 1 -
 libavfilter/af_afreqshift.c        | 1 -
 libavfilter/af_afwtdn.c            | 2 --
 libavfilter/af_alimiter.c          | 1 -
 libavfilter/af_amix.c              | 1 -
 libavfilter/af_amultiply.c         | 2 --
 libavfilter/af_anlmdn.c            | 2 --
 libavfilter/af_anlms.c             | 1 -
 libavfilter/af_arls.c              | 1 -
 libavfilter/af_asdr.c              | 3 ---
 libavfilter/af_asetnsamples.c      | 1 -
 libavfilter/af_asoftclip.c         | 1 -
 libavfilter/af_asubboost.c         | 1 -
 libavfilter/af_asupercut.c         | 1 -
 libavfilter/af_atilt.c             | 1 -
 libavfilter/af_axcorrelate.c       | 1 -
 libavfilter/af_crystalizer.c       | 1 -
 libavfilter/af_deesser.c           | 1 -
 libavfilter/af_rubberband.c        | 1 -
 libavfilter/af_silencedetect.c     | 1 -
 libavfilter/af_silenceremove.c     | 2 --
 libavfilter/afir_template.c        | 1 -
 libavfilter/blend_modes.c          | 1 -
 libavfilter/edge_template.c        | 1 -
 libavfilter/f_bench.c              | 1 -
 libavfilter/f_interleave.c         | 1 -
 libavfilter/f_latency.c            | 2 --
 libavfilter/f_loop.c               | 2 --
 libavfilter/f_metadata.c           | 1 -
 libavfilter/f_reverse.c            | 3 ---
 libavfilter/f_sidedata.c           | 1 -
 libavfilter/median_template.c      | 1 -
 libavfilter/opencl.c               | 1 -
 libavfilter/phase_template.c       | 1 -
 libavfilter/split.c                | 2 --
 libavfilter/vf_amplify.c           | 2 --
 libavfilter/vf_atadenoise.c        | 1 -
 libavfilter/vf_avgblur.c           | 1 -
 libavfilter/vf_backgroundkey.c     | 3 +--
 libavfilter/vf_bilateral.c         | 1 -
 libavfilter/vf_bilateral_cuda.c    | 4 ----
 libavfilter/vf_bitplanenoise.c     | 3 +--
 libavfilter/vf_blackframe.c        | 1 -
 libavfilter/vf_bm3d.c              | 1 -
 libavfilter/vf_bwdif.c             | 3 ---
 libavfilter/vf_cas.c               | 1 -
 libavfilter/vf_chromakey.c         | 4 +---
 libavfilter/vf_chromakey_cuda.c    | 4 ----
 libavfilter/vf_chromanr.c          | 2 --
 libavfilter/vf_chromashift.c       | 4 ----
 libavfilter/vf_colorbalance.c      | 1 -
 libavfilter/vf_colorchannelmixer.c | 1 -
 libavfilter/vf_colorconstancy.c    | 2 --
 libavfilter/vf_colorcontrast.c     | 3 +--
 libavfilter/vf_colorcorrect.c      | 3 +--
 libavfilter/vf_colorize.c          | 3 +--
 libavfilter/vf_colorkey.c          | 4 +---
 libavfilter/vf_colorkey_opencl.c   | 2 --
 libavfilter/vf_colorlevels.c       | 2 --
 libavfilter/vf_colormatrix.c       | 2 --
 libavfilter/vf_colorspace_cuda.c   | 4 ----
 libavfilter/vf_colortemperature.c  | 3 +--
 libavfilter/vf_convolution.c       | 1 -
 libavfilter/vf_convolve.c          | 3 ---
 libavfilter/vf_corr.c              | 2 --
 libavfilter/vf_cropdetect.c        | 1 -
 libavfilter/vf_dblur.c             | 1 -
 libavfilter/vf_deblock.c           | 1 -
 libavfilter/vf_dedot.c             | 2 --
 libavfilter/vf_deflicker.c         | 1 -
 libavfilter/vf_deinterlace_vaapi.c | 1 -
 libavfilter/vf_delogo.c            | 1 -
 libavfilter/vf_derain.c            | 2 --
 libavfilter/vf_deshake_opencl.c    | 3 +--
 libavfilter/vf_despill.c           | 4 +---
 libavfilter/vf_displace.c          | 2 --
 libavfilter/vf_dnn_processing.c    | 2 --
 libavfilter/vf_drawbox.c           | 1 -
 libavfilter/vf_entropy.c           | 2 --
 libavfilter/vf_estdif.c            | 1 -
 libavfilter/vf_exposure.c          | 2 --
 libavfilter/vf_fillborders.c       | 1 -
 libavfilter/vf_floodfill.c         | 3 +--
 libavfilter/vf_framepack.c         | 1 -
 libavfilter/vf_gblur.c             | 1 -
 libavfilter/vf_gradfun.c           | 1 -
 libavfilter/vf_grayworld.c         | 2 --
 libavfilter/vf_guided.c            | 1 -
 libavfilter/vf_histeq.c            | 1 -
 libavfilter/vf_hqdn3d.c            | 1 -
 libavfilter/vf_hsvkey.c            | 4 +---
 libavfilter/vf_hue.c               | 1 -
 libavfilter/vf_huesaturation.c     | 3 +--
 libavfilter/vf_hysteresis.c        | 1 -
 libavfilter/vf_identity.c          | 2 --
 libavfilter/vf_kerndeint.c         | 1 -
 libavfilter/vf_lagfun.c            | 2 --
 libavfilter/vf_lensfun.c           | 1 -
 libavfilter/vf_limitdiff.c         | 1 -
 libavfilter/vf_limiter.c           | 1 -
 libavfilter/vf_lumakey.c           | 3 +--
 libavfilter/vf_maskedclamp.c       | 1 -
 libavfilter/vf_maskedmerge.c       | 1 -
 libavfilter/vf_maskedminmax.c      | 1 -
 libavfilter/vf_maskedthreshold.c   | 1 -
 libavfilter/vf_maskfun.c           | 1 -
 libavfilter/vf_mcdeint.c           | 2 --
 libavfilter/vf_median.c            | 1 -
 libavfilter/vf_mestimate.c         | 3 ---
 libavfilter/vf_midequalizer.c      | 1 -
 libavfilter/vf_minterpolate.c      | 2 --
 libavfilter/vf_misc_vaapi.c        | 1 -
 libavfilter/vf_monochrome.c        | 3 +--
 libavfilter/vf_morpho.c            | 1 -
 libavfilter/vf_mpdecimate.c        | 1 -
 libavfilter/vf_multiply.c          | 1 -
 libavfilter/vf_negate.c            | 2 --
 libavfilter/vf_neighbor.c          | 1 -
 libavfilter/vf_nlmeans.c           | 1 -
 libavfilter/vf_normalize.c         | 2 --
 libavfilter/vf_ocr.c               | 1 -
 libavfilter/vf_overlay_vaapi.c     | 3 ---
 libavfilter/vf_pad_opencl.c        | 3 +--
 libavfilter/vf_perspective.c       | 1 -
 libavfilter/vf_phase.c             | 1 -
 libavfilter/vf_photosensitivity.c  | 3 ---
 libavfilter/vf_procamp_vaapi.c     | 1 -
 libavfilter/vf_pseudocolor.c       | 1 -
 libavfilter/vf_pullup.c            | 1 -
 libavfilter/vf_qp.c                | 3 ---
 libavfilter/vf_random.c            | 2 --
 libavfilter/vf_readeia608.c        | 2 --
 libavfilter/vf_readvitc.c          | 2 --
 libavfilter/vf_remap_opencl.c      | 2 --
 libavfilter/vf_removegrain.c       | 1 -
 libavfilter/vf_removelogo.c        | 1 -
 libavfilter/vf_sab.c               | 1 -
 libavfilter/vf_scale_cuda.c        | 3 ---
 libavfilter/vf_scale_vaapi.c       | 1 -
 libavfilter/vf_scroll.c            | 1 -
 libavfilter/vf_selectivecolor.c    | 1 -
 libavfilter/vf_siti.c              | 1 -
 libavfilter/vf_smartblur.c         | 1 -
 libavfilter/vf_sr.c                | 2 --
 libavfilter/vf_ssim360.c           | 2 --
 libavfilter/vf_super2xsai.c        | 1 -
 libavfilter/vf_tmidequalizer.c     | 1 -
 libavfilter/vf_tonemap.c           | 2 --
 libavfilter/vf_tonemap_vaapi.c     | 1 -
 libavfilter/vf_transpose_vaapi.c   | 1 -
 libavfilter/vf_unsharp.c           | 1 -
 libavfilter/vf_vaguedenoiser.c     | 2 --
 libavfilter/vf_varblur.c           | 1 -
 libavfilter/vf_vibrance.c          | 3 +--
 libavfilter/vf_vif.c               | 4 ----
 libavfilter/vf_vignette.c          | 1 -
 libavfilter/vf_w3fdif.c            | 1 -
 libavfilter/vf_xfade.c             | 3 +--
 libavfilter/vf_xmedian.c           | 2 --
 libavfilter/vf_yadif.c             | 3 ---
 libavfilter/vf_zoompan.c           | 1 -
 libavfilter/vsrc_cellauto.c        | 2 --
 libavfilter/vsrc_ddagrab.c         | 1 -
 libavfilter/vsrc_gradients.c       | 3 ---
 libavfilter/vsrc_mandelbrot.c      | 2 --
 libavfilter/vsrc_mptestsrc.c       | 3 ---
 libavfilter/vsrc_sierpinski.c      | 2 --
 171 files changed, 18 insertions(+), 271 deletions(-)

diff --git a/libavfilter/af_acontrast.c b/libavfilter/af_acontrast.c
index 91887e5689..1fcbad8782 100644
--- a/libavfilter/af_acontrast.c
+++ b/libavfilter/af_acontrast.c
@@ -23,7 +23,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct AudioContrastContext {
     const AVClass *class;
diff --git a/libavfilter/af_adeclick.c b/libavfilter/af_adeclick.c
index 5c9c4283ff..822f3065b8 100644
--- a/libavfilter/af_adeclick.c
+++ b/libavfilter/af_adeclick.c
@@ -23,7 +23,6 @@
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 
 typedef struct DeclickChannel {
diff --git a/libavfilter/af_adecorrelate.c b/libavfilter/af_adecorrelate.c
index 8d7bced634..87355e72e0 100644
--- a/libavfilter/af_adecorrelate.c
+++ b/libavfilter/af_adecorrelate.c
@@ -26,7 +26,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 #define MAX_STAGES 16
 #define FILTER_FC  1100.0
diff --git a/libavfilter/af_adynamicsmooth.c b/libavfilter/af_adynamicsmooth.c
index 72e7120bd7..8afe592226 100644
--- a/libavfilter/af_adynamicsmooth.c
+++ b/libavfilter/af_adynamicsmooth.c
@@ -20,7 +20,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct AudioDynamicSmoothContext {
     const AVClass *class;
diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c
index 6aa51184f5..b509d40eb5 100644
--- a/libavfilter/af_afftdn.c
+++ b/libavfilter/af_afftdn.c
@@ -26,7 +26,6 @@
 #include "libavutil/tx.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 #include "filters.h"
 
 #define C       (M_LN10 * 0.1)
diff --git a/libavfilter/af_afreqshift.c b/libavfilter/af_afreqshift.c
index ff2ba9f6c5..9a6cfd2fc1 100644
--- a/libavfilter/af_afreqshift.c
+++ b/libavfilter/af_afreqshift.c
@@ -24,7 +24,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 #define MAX_NB_COEFFS 16
 
diff --git a/libavfilter/af_afwtdn.c b/libavfilter/af_afwtdn.c
index d0c3cbbe83..0fcfa779f9 100644
--- a/libavfilter/af_afwtdn.c
+++ b/libavfilter/af_afwtdn.c
@@ -21,12 +21,10 @@
 #include <float.h>
 
 #include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
-#include "formats.h"
 
 enum WaveletTypes {
     SYM2,
diff --git a/libavfilter/af_alimiter.c b/libavfilter/af_alimiter.c
index c683c4bcf4..f08893229d 100644
--- a/libavfilter/af_alimiter.c
+++ b/libavfilter/af_alimiter.c
@@ -31,7 +31,6 @@
 
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 
 typedef struct MetaItem {
diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c
index d7e00ab1f1..aa42514106 100644
--- a/libavfilter/af_amix.c
+++ b/libavfilter/af_amix.c
@@ -43,7 +43,6 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 
 #define INPUT_ON       1    /**< input is active */
diff --git a/libavfilter/af_amultiply.c b/libavfilter/af_amultiply.c
index 97728954a5..3d8782002b 100644
--- a/libavfilter/af_amultiply.c
+++ b/libavfilter/af_amultiply.c
@@ -21,11 +21,9 @@
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
 #include "libavutil/float_dsp.h"
-#include "libavutil/opt.h"
 
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_anlmdn.c b/libavfilter/af_anlmdn.c
index af21a52a12..d1a4df1811 100644
--- a/libavfilter/af_anlmdn.c
+++ b/libavfilter/af_anlmdn.c
@@ -21,11 +21,9 @@
 #include <float.h>
 
 #include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 #include "filters.h"
 
 #include "af_anlmdndsp.h"
diff --git a/libavfilter/af_anlms.c b/libavfilter/af_anlms.c
index 5b412b87cc..3191ed1b31 100644
--- a/libavfilter/af_anlms.c
+++ b/libavfilter/af_anlms.c
@@ -25,7 +25,6 @@
 
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_arls.c b/libavfilter/af_arls.c
index 9058a54583..4f2eddffc4 100644
--- a/libavfilter/af_arls.c
+++ b/libavfilter/af_arls.c
@@ -24,7 +24,6 @@
 
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_asdr.c b/libavfilter/af_asdr.c
index 96aa80f843..0307e21fbf 100644
--- a/libavfilter/af_asdr.c
+++ b/libavfilter/af_asdr.c
@@ -20,11 +20,8 @@
 
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
-#include "libavutil/opt.h"
 
-#include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_asetnsamples.c b/libavfilter/af_asetnsamples.c
index e220444c3c..a12e6cadf9 100644
--- a/libavfilter/af_asetnsamples.c
+++ b/libavfilter/af_asetnsamples.c
@@ -30,7 +30,6 @@
 #include "audio.h"
 #include "filters.h"
 #include "internal.h"
-#include "formats.h"
 
 typedef struct ASNSContext {
     const AVClass *class;
diff --git a/libavfilter/af_asoftclip.c b/libavfilter/af_asoftclip.c
index 6fea6e56ab..c06d1c8ea8 100644
--- a/libavfilter/af_asoftclip.c
+++ b/libavfilter/af_asoftclip.c
@@ -23,7 +23,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 #define MAX_OVERSAMPLE 64
 
diff --git a/libavfilter/af_asubboost.c b/libavfilter/af_asubboost.c
index e132158da6..31db4b81a0 100644
--- a/libavfilter/af_asubboost.c
+++ b/libavfilter/af_asubboost.c
@@ -21,7 +21,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct ASubBoostContext {
     const AVClass *class;
diff --git a/libavfilter/af_asupercut.c b/libavfilter/af_asupercut.c
index 6764bee25d..848388c520 100644
--- a/libavfilter/af_asupercut.c
+++ b/libavfilter/af_asupercut.c
@@ -24,7 +24,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct BiquadCoeffs {
     double a1, a2;
diff --git a/libavfilter/af_atilt.c b/libavfilter/af_atilt.c
index 2211a214d1..172e3259db 100644
--- a/libavfilter/af_atilt.c
+++ b/libavfilter/af_atilt.c
@@ -21,7 +21,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 #define MAX_ORDER 30
 
diff --git a/libavfilter/af_axcorrelate.c b/libavfilter/af_axcorrelate.c
index a20c79f420..2e83711273 100644
--- a/libavfilter/af_axcorrelate.c
+++ b/libavfilter/af_axcorrelate.c
@@ -25,7 +25,6 @@
 
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_crystalizer.c b/libavfilter/af_crystalizer.c
index 08931fce43..01cdf8bd63 100644
--- a/libavfilter/af_crystalizer.c
+++ b/libavfilter/af_crystalizer.c
@@ -22,7 +22,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct CrystalizerContext {
     const AVClass *class;
diff --git a/libavfilter/af_deesser.c b/libavfilter/af_deesser.c
index 40abf844ee..3c5ae8a8cd 100644
--- a/libavfilter/af_deesser.c
+++ b/libavfilter/af_deesser.c
@@ -24,7 +24,6 @@
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 
 typedef struct DeesserChannel {
     double s1, s2, s3;
diff --git a/libavfilter/af_rubberband.c b/libavfilter/af_rubberband.c
index 50808f12df..63a0c5acce 100644
--- a/libavfilter/af_rubberband.c
+++ b/libavfilter/af_rubberband.c
@@ -25,7 +25,6 @@
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 
 typedef struct RubberBandContext {
diff --git a/libavfilter/af_silencedetect.c b/libavfilter/af_silencedetect.c
index aec5f97237..845c65bfed 100644
--- a/libavfilter/af_silencedetect.c
+++ b/libavfilter/af_silencedetect.c
@@ -28,7 +28,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/timestamp.h"
 #include "audio.h"
-#include "formats.h"
 #include "avfilter.h"
 #include "internal.h"
 
diff --git a/libavfilter/af_silenceremove.c b/libavfilter/af_silenceremove.c
index 4cb662080b..d565c75f07 100644
--- a/libavfilter/af_silenceremove.c
+++ b/libavfilter/af_silenceremove.c
@@ -25,10 +25,8 @@
 
 #include "libavutil/avassert.h"
 #include "libavutil/opt.h"
-#include "libavutil/timestamp.h"
 #include "audio.h"
 #include "filters.h"
-#include "formats.h"
 #include "avfilter.h"
 #include "internal.h"
 
diff --git a/libavfilter/afir_template.c b/libavfilter/afir_template.c
index 7c6573eeec..099fda2520 100644
--- a/libavfilter/afir_template.c
+++ b/libavfilter/afir_template.c
@@ -20,7 +20,6 @@
 
 #include "libavutil/tx.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "audio.h"
 
diff --git a/libavfilter/blend_modes.c b/libavfilter/blend_modes.c
index 0ff96a5b03..e2be676243 100644
--- a/libavfilter/blend_modes.c
+++ b/libavfilter/blend_modes.c
@@ -21,7 +21,6 @@
 #include "libavutil/common.h"
 #include "libavutil/intfloat.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "blend.h"
diff --git a/libavfilter/edge_template.c b/libavfilter/edge_template.c
index af33c178af..14635c25af 100644
--- a/libavfilter/edge_template.c
+++ b/libavfilter/edge_template.c
@@ -22,7 +22,6 @@
 
 #include "libavutil/avassert.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/f_bench.c b/libavfilter/f_bench.c
index 8b840b4b41..f9099df7ef 100644
--- a/libavfilter/f_bench.c
+++ b/libavfilter/f_bench.c
@@ -22,7 +22,6 @@
 #include "libavutil/time.h"
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/f_interleave.c b/libavfilter/f_interleave.c
index 74597a0ec6..e561ca2237 100644
--- a/libavfilter/f_interleave.c
+++ b/libavfilter/f_interleave.c
@@ -30,7 +30,6 @@
 #include "libavutil/opt.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "filters.h"
 #include "internal.h"
 #include "audio.h"
diff --git a/libavfilter/f_latency.c b/libavfilter/f_latency.c
index 7c97363853..a39c3c7d24 100644
--- a/libavfilter/f_latency.c
+++ b/libavfilter/f_latency.c
@@ -20,11 +20,9 @@
 
 #include "config_components.h"
 
-#include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c
index 23bdfba57e..0b08a2ead3 100644
--- a/libavfilter/f_loop.c
+++ b/libavfilter/f_loop.c
@@ -21,13 +21,11 @@
 #include "config_components.h"
 
 #include "libavutil/audio_fifo.h"
-#include "libavutil/fifo.h"
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c
index 86500cd353..a5a97cdcb1 100644
--- a/libavfilter/f_metadata.c
+++ b/libavfilter/f_metadata.c
@@ -36,7 +36,6 @@
 #include "libavformat/avio.h"
 #include "avfilter.h"
 #include "audio.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/f_reverse.c b/libavfilter/f_reverse.c
index 0ab2a3ab29..086819a207 100644
--- a/libavfilter/f_reverse.c
+++ b/libavfilter/f_reverse.c
@@ -20,11 +20,8 @@
 
 #include "config_components.h"
 
-#include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 #define DEFAULT_LENGTH 300
 
diff --git a/libavfilter/f_sidedata.c b/libavfilter/f_sidedata.c
index 208b457804..c86190b062 100644
--- a/libavfilter/f_sidedata.c
+++ b/libavfilter/f_sidedata.c
@@ -29,7 +29,6 @@
 #include "libavutil/opt.h"
 #include "audio.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/median_template.c b/libavfilter/median_template.c
index bb7646e0eb..760a0278c9 100644
--- a/libavfilter/median_template.c
+++ b/libavfilter/median_template.c
@@ -22,7 +22,6 @@
 
 #include "libavutil/avassert.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/opencl.c b/libavfilter/opencl.c
index 5d1e297af8..48752e9530 100644
--- a/libavfilter/opencl.c
+++ b/libavfilter/opencl.c
@@ -23,7 +23,6 @@
 #include "libavutil/mem.h"
 #include "libavutil/pixdesc.h"
 
-#include "formats.h"
 #include "opencl.h"
 
 static int opencl_filter_set_device(AVFilterContext *avctx,
diff --git a/libavfilter/phase_template.c b/libavfilter/phase_template.c
index 2621a543a1..c25bc88415 100644
--- a/libavfilter/phase_template.c
+++ b/libavfilter/phase_template.c
@@ -20,7 +20,6 @@
 
 #include "libavutil/avassert.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/split.c b/libavfilter/split.c
index 290537aba5..7935f2d518 100644
--- a/libavfilter/split.c
+++ b/libavfilter/split.c
@@ -28,13 +28,11 @@
 #include "libavutil/attributes.h"
 #include "libavutil/avstring.h"
 #include "libavutil/internal.h"
-#include "libavutil/mem.h"
 #include "libavutil/opt.h"
 
 #include "avfilter.h"
 #include "audio.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_amplify.c b/libavfilter/vf_amplify.c
index 0891d26413..0ebca60ea2 100644
--- a/libavfilter/vf_amplify.c
+++ b/libavfilter/vf_amplify.c
@@ -19,12 +19,10 @@
  */
 
 #include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_atadenoise.c b/libavfilter/vf_atadenoise.c
index 2178c62faf..eed12acfa4 100644
--- a/libavfilter/vf_atadenoise.c
+++ b/libavfilter/vf_atadenoise.c
@@ -34,7 +34,6 @@
 #include "bufferqueue.h"
 
 #include "atadenoise.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_avgblur.c b/libavfilter/vf_avgblur.c
index bbb85bab17..8ff6111bcc 100644
--- a/libavfilter/vf_avgblur.c
+++ b/libavfilter/vf_avgblur.c
@@ -25,7 +25,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_backgroundkey.c b/libavfilter/vf_backgroundkey.c
index 8c7c289d0b..26fb08bf86 100644
--- a/libavfilter/vf_backgroundkey.c
+++ b/libavfilter/vf_backgroundkey.c
@@ -17,9 +17,8 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_bilateral.c b/libavfilter/vf_bilateral.c
index 4d3dfa3511..fe16419026 100644
--- a/libavfilter/vf_bilateral.c
+++ b/libavfilter/vf_bilateral.c
@@ -25,7 +25,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_bilateral_cuda.c b/libavfilter/vf_bilateral_cuda.c
index 7a271f1ce0..ba008b517a 100644
--- a/libavfilter/vf_bilateral_cuda.c
+++ b/libavfilter/vf_bilateral_cuda.c
@@ -20,9 +20,7 @@
 
 #include <float.h>
 #include <stdio.h>
-#include <string.h>
 
-#include "libavutil/avstring.h"
 #include "libavutil/common.h"
 #include "libavutil/hwcontext.h"
 #include "libavutil/hwcontext_cuda_internal.h"
@@ -32,9 +30,7 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 #include "cuda/load_helper.h"
 
diff --git a/libavfilter/vf_bitplanenoise.c b/libavfilter/vf_bitplanenoise.c
index ebd8c4deaf..32235ff230 100644
--- a/libavfilter/vf_bitplanenoise.c
+++ b/libavfilter/vf_bitplanenoise.c
@@ -19,9 +19,8 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c
index 27198b318c..10062c995c 100644
--- a/libavfilter/vf_blackframe.c
+++ b/libavfilter/vf_blackframe.c
@@ -33,7 +33,6 @@
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_bm3d.c b/libavfilter/vf_bm3d.c
index 14f94cf535..cdced50ba3 100644
--- a/libavfilter/vf_bm3d.c
+++ b/libavfilter/vf_bm3d.c
@@ -38,7 +38,6 @@
 #include "libavutil/tx.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_bwdif.c b/libavfilter/vf_bwdif.c
index 6701208efe..5f5f8e4610 100644
--- a/libavfilter/vf_bwdif.c
+++ b/libavfilter/vf_bwdif.c
@@ -31,11 +31,8 @@
 #include "libavutil/common.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
-#include "libavutil/imgutils.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 #include "bwdif.h"
 
 /*
diff --git a/libavfilter/vf_cas.c b/libavfilter/vf_cas.c
index 545a0dd70a..5fa5055d76 100644
--- a/libavfilter/vf_cas.c
+++ b/libavfilter/vf_cas.c
@@ -19,7 +19,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/imgutils.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_chromakey.c b/libavfilter/vf_chromakey.c
index fdd610cb19..c204a58328 100644
--- a/libavfilter/vf_chromakey.c
+++ b/libavfilter/vf_chromakey.c
@@ -19,12 +19,10 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 typedef struct ChromakeyContext {
     const AVClass *class;
diff --git a/libavfilter/vf_chromakey_cuda.c b/libavfilter/vf_chromakey_cuda.c
index 113484279c..ac644caea7 100644
--- a/libavfilter/vf_chromakey_cuda.c
+++ b/libavfilter/vf_chromakey_cuda.c
@@ -20,9 +20,7 @@
 
 #include <float.h>
 #include <stdio.h>
-#include <string.h>
 
-#include "libavutil/avstring.h"
 #include "libavutil/common.h"
 #include "libavutil/hwcontext.h"
 #include "libavutil/hwcontext_cuda_internal.h"
@@ -32,9 +30,7 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 #include "cuda/load_helper.h"
 
 static const enum AVPixelFormat supported_formats[] = {
diff --git a/libavfilter/vf_chromanr.c b/libavfilter/vf_chromanr.c
index 8a16460c06..dd49d8670a 100644
--- a/libavfilter/vf_chromanr.c
+++ b/libavfilter/vf_chromanr.c
@@ -18,13 +18,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/avstring.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_chromashift.c b/libavfilter/vf_chromashift.c
index 92869113a9..39b96a749e 100644
--- a/libavfilter/vf_chromashift.c
+++ b/libavfilter/vf_chromashift.c
@@ -18,15 +18,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/avstring.h"
-#include "libavutil/eval.h"
 #include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorbalance.c b/libavfilter/vf_colorbalance.c
index 0e626681b6..676e74c770 100644
--- a/libavfilter/vf_colorbalance.c
+++ b/libavfilter/vf_colorbalance.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorchannelmixer.c b/libavfilter/vf_colorchannelmixer.c
index 88dd7451dc..884e9846a7 100644
--- a/libavfilter/vf_colorchannelmixer.c
+++ b/libavfilter/vf_colorchannelmixer.c
@@ -24,7 +24,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "preserve_color.h"
diff --git a/libavfilter/vf_colorconstancy.c b/libavfilter/vf_colorconstancy.c
index b750087a9d..3d4d433cc1 100644
--- a/libavfilter/vf_colorconstancy.c
+++ b/libavfilter/vf_colorconstancy.c
@@ -30,10 +30,8 @@
 
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorcontrast.c b/libavfilter/vf_colorcontrast.c
index 2cb46cc35a..f05701c1a5 100644
--- a/libavfilter/vf_colorcontrast.c
+++ b/libavfilter/vf_colorcontrast.c
@@ -21,10 +21,9 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorcorrect.c b/libavfilter/vf_colorcorrect.c
index 55df67404a..0f2fe33c0f 100644
--- a/libavfilter/vf_colorcorrect.c
+++ b/libavfilter/vf_colorcorrect.c
@@ -21,9 +21,8 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorize.c b/libavfilter/vf_colorize.c
index 03681a788f..ed14be9459 100644
--- a/libavfilter/vf_colorize.c
+++ b/libavfilter/vf_colorize.c
@@ -17,9 +17,8 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_colorkey.c b/libavfilter/vf_colorkey.c
index 9979f4ad0d..58dd513b31 100644
--- a/libavfilter/vf_colorkey.c
+++ b/libavfilter/vf_colorkey.c
@@ -21,12 +21,10 @@
 #include "config_components.h"
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 typedef struct ColorkeyContext {
     const AVClass *class;
diff --git a/libavfilter/vf_colorkey_opencl.c b/libavfilter/vf_colorkey_opencl.c
index 94361df88f..72a36df2d3 100644
--- a/libavfilter/vf_colorkey_opencl.c
+++ b/libavfilter/vf_colorkey_opencl.c
@@ -17,9 +17,7 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "opencl.h"
 #include "opencl_source.h"
diff --git a/libavfilter/vf_colorlevels.c b/libavfilter/vf_colorlevels.c
index b89f465d67..e1349c13a4 100644
--- a/libavfilter/vf_colorlevels.c
+++ b/libavfilter/vf_colorlevels.c
@@ -18,12 +18,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "preserve_color.h"
diff --git a/libavfilter/vf_colormatrix.c b/libavfilter/vf_colormatrix.c
index aa00295250..81254b0463 100644
--- a/libavfilter/vf_colormatrix.c
+++ b/libavfilter/vf_colormatrix.c
@@ -30,12 +30,10 @@
 
 #include <float.h>
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
-#include "libavutil/avstring.h"
 
 #define NS(n) ((n) < 0 ? (int)((n)*65536.0-0.5+DBL_EPSILON) : (int)((n)*65536.0+0.5))
 #define CB(n) av_clip_uint8(n)
diff --git a/libavfilter/vf_colorspace_cuda.c b/libavfilter/vf_colorspace_cuda.c
index 07d4edd0d8..09fd4dd778 100644
--- a/libavfilter/vf_colorspace_cuda.c
+++ b/libavfilter/vf_colorspace_cuda.c
@@ -22,7 +22,6 @@
 
 #include <string.h>
 
-#include "libavutil/avstring.h"
 #include "libavutil/common.h"
 #include "libavutil/cuda_check.h"
 #include "libavutil/hwcontext.h"
@@ -32,10 +31,7 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "scale_eval.h"
-#include "video.h"
 
 #include "cuda/load_helper.h"
 
diff --git a/libavfilter/vf_colortemperature.c b/libavfilter/vf_colortemperature.c
index e3f3005171..bac6743a34 100644
--- a/libavfilter/vf_colortemperature.c
+++ b/libavfilter/vf_colortemperature.c
@@ -21,10 +21,9 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
index 814203aeee..c1a63c9aa9 100644
--- a/libavfilter/vf_convolution.c
+++ b/libavfilter/vf_convolution.c
@@ -29,7 +29,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "convolution.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_convolve.c b/libavfilter/vf_convolve.c
index d9f4c4bd77..3246868888 100644
--- a/libavfilter/vf_convolve.c
+++ b/libavfilter/vf_convolve.c
@@ -22,16 +22,13 @@
 
 #include <float.h>
 
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/tx.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
-#include "video.h"
 
 #define MAX_THREADS 16
 
diff --git a/libavfilter/vf_corr.c b/libavfilter/vf_corr.c
index 65d8b09767..fb2770539e 100644
--- a/libavfilter/vf_corr.c
+++ b/libavfilter/vf_corr.c
@@ -26,10 +26,8 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
-#include "video.h"
 
 typedef struct CorrContext {
     const AVClass *class;
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index ff9bcc79f3..58755fc356 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -30,7 +30,6 @@
 #include "libavutil/qsort.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "edge_common.h"
diff --git a/libavfilter/vf_dblur.c b/libavfilter/vf_dblur.c
index 43100805c4..3110d19271 100644
--- a/libavfilter/vf_dblur.c
+++ b/libavfilter/vf_dblur.c
@@ -22,7 +22,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_deblock.c b/libavfilter/vf_deblock.c
index 770fce0eab..d35b22e3be 100644
--- a/libavfilter/vf_deblock.c
+++ b/libavfilter/vf_deblock.c
@@ -27,7 +27,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_dedot.c b/libavfilter/vf_dedot.c
index fb62c183d7..7aa2583184 100644
--- a/libavfilter/vf_dedot.c
+++ b/libavfilter/vf_dedot.c
@@ -18,13 +18,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_deflicker.c b/libavfilter/vf_deflicker.c
index c01c057e0e..25172135ed 100644
--- a/libavfilter/vf_deflicker.c
+++ b/libavfilter/vf_deflicker.c
@@ -27,7 +27,6 @@
 #define FF_BUFQUEUE_SIZE 129
 #include "bufferqueue.h"
 
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_deinterlace_vaapi.c b/libavfilter/vf_deinterlace_vaapi.c
index cb4f7b32d7..f085a7c10a 100644
--- a/libavfilter/vf_deinterlace_vaapi.c
+++ b/libavfilter/vf_deinterlace_vaapi.c
@@ -23,7 +23,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "vaapi_vpp.h"
diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c
index 4b835b65f1..c049f273b0 100644
--- a/libavfilter/vf_delogo.c
+++ b/libavfilter/vf_delogo.c
@@ -33,7 +33,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/eval.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 static const char * const var_names[] = {
diff --git a/libavfilter/vf_derain.c b/libavfilter/vf_derain.c
index 2a57035c83..35bc233ab1 100644
--- a/libavfilter/vf_derain.c
+++ b/libavfilter/vf_derain.c
@@ -24,11 +24,9 @@
  * http://openaccess.thecvf.com/content_ECCV_2018/html/Xia_Li_Recurrent_Squeeze-and-Excitation_Context_ECCV_2018_paper.html
  */
 
-#include "libavformat/avio.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "dnn_filter_common.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_deshake_opencl.c b/libavfilter/vf_deshake_opencl.c
index 8db59767bd..cddd5558e2 100644
--- a/libavfilter/vf_deshake_opencl.c
+++ b/libavfilter/vf_deshake_opencl.c
@@ -48,17 +48,16 @@
 #include <float.h>
 #include <libavutil/lfg.h>
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/mem.h"
 #include "libavutil/fifo.h"
 #include "libavutil/common.h"
 #include "libavutil/avassert.h"
+#include "libavutil/pixdesc.h"
 #include "libavutil/pixfmt.h"
 #include "avfilter.h"
 #include "framequeue.h"
 #include "filters.h"
 #include "transform.h"
-#include "formats.h"
 #include "internal.h"
 #include "opencl.h"
 #include "opencl_source.h"
diff --git a/libavfilter/vf_despill.c b/libavfilter/vf_despill.c
index 483d9c8560..cbd08b6f33 100644
--- a/libavfilter/vf_despill.c
+++ b/libavfilter/vf_despill.c
@@ -19,11 +19,9 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 typedef struct DespillContext {
     const AVClass *class;
diff --git a/libavfilter/vf_displace.c b/libavfilter/vf_displace.c
index ee56f32856..8cc11f07ba 100644
--- a/libavfilter/vf_displace.c
+++ b/libavfilter/vf_displace.c
@@ -18,11 +18,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_dnn_processing.c b/libavfilter/vf_dnn_processing.c
index 1ab2f25bda..6829e94585 100644
--- a/libavfilter/vf_dnn_processing.c
+++ b/libavfilter/vf_dnn_processing.c
@@ -23,14 +23,12 @@
  * implementing a generic image processing filter using deep learning networks.
  */
 
-#include "libavformat/avio.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/avassert.h"
 #include "libavutil/imgutils.h"
 #include "filters.h"
 #include "dnn_filter_common.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "libswscale/swscale.h"
diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c
index 82266481ca..27739dc89f 100644
--- a/libavfilter/vf_drawbox.c
+++ b/libavfilter/vf_drawbox.c
@@ -36,7 +36,6 @@
 #include "libavutil/detection_bbox.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_entropy.c b/libavfilter/vf_entropy.c
index c96cbaaecd..694a3ee872 100644
--- a/libavfilter/vf_entropy.c
+++ b/libavfilter/vf_entropy.c
@@ -18,12 +18,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_estdif.c b/libavfilter/vf_estdif.c
index 91e8431e35..471def9fa7 100644
--- a/libavfilter/vf_estdif.c
+++ b/libavfilter/vf_estdif.c
@@ -23,7 +23,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_exposure.c b/libavfilter/vf_exposure.c
index 12434cdd9d..926d784a81 100644
--- a/libavfilter/vf_exposure.c
+++ b/libavfilter/vf_exposure.c
@@ -21,9 +21,7 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_fillborders.c b/libavfilter/vf_fillborders.c
index e4aa7cd5ca..32ca7219bb 100644
--- a/libavfilter/vf_fillborders.c
+++ b/libavfilter/vf_fillborders.c
@@ -25,7 +25,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_floodfill.c b/libavfilter/vf_floodfill.c
index 675e0f084f..d5fa42651a 100644
--- a/libavfilter/vf_floodfill.c
+++ b/libavfilter/vf_floodfill.c
@@ -19,11 +19,10 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_framepack.c b/libavfilter/vf_framepack.c
index 6fb7688c0b..8693ad6488 100644
--- a/libavfilter/vf_framepack.c
+++ b/libavfilter/vf_framepack.c
@@ -34,7 +34,6 @@
 
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_gblur.c b/libavfilter/vf_gblur.c
index 509ae3dece..6e8ef96235 100644
--- a/libavfilter/vf_gblur.c
+++ b/libavfilter/vf_gblur.c
@@ -31,7 +31,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "gblur.h"
 #include "internal.h"
 #include "vf_gblur_init.h"
diff --git a/libavfilter/vf_gradfun.c b/libavfilter/vf_gradfun.c
index e8566918a4..39971b3120 100644
--- a/libavfilter/vf_gradfun.c
+++ b/libavfilter/vf_gradfun.c
@@ -38,7 +38,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "gradfun.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_grayworld.c b/libavfilter/vf_grayworld.c
index 6fa758199c..e9c959416e 100644
--- a/libavfilter/vf_grayworld.c
+++ b/libavfilter/vf_grayworld.c
@@ -27,10 +27,8 @@
 
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_guided.c b/libavfilter/vf_guided.c
index 58a1ff5a26..8c0e5e454e 100644
--- a/libavfilter/vf_guided.c
+++ b/libavfilter/vf_guided.c
@@ -23,7 +23,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_histeq.c b/libavfilter/vf_histeq.c
index 87ed6d79e8..d1fc3a19ae 100644
--- a/libavfilter/vf_histeq.c
+++ b/libavfilter/vf_histeq.c
@@ -34,7 +34,6 @@
 
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index f6d49675a1..2aef7751c4 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -36,7 +36,6 @@
 #include "libavutil/opt.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "vf_hqdn3d.h"
diff --git a/libavfilter/vf_hsvkey.c b/libavfilter/vf_hsvkey.c
index 8963bcf1f8..542ac1f3b2 100644
--- a/libavfilter/vf_hsvkey.c
+++ b/libavfilter/vf_hsvkey.c
@@ -21,12 +21,10 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 typedef struct HSVKeyContext {
     const AVClass *class;
diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c
index 8f3b73e840..8fea2128fa 100644
--- a/libavfilter/vf_hue.c
+++ b/libavfilter/vf_hue.c
@@ -32,7 +32,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_huesaturation.c b/libavfilter/vf_huesaturation.c
index 4b427e6bf6..8dd81ad1a4 100644
--- a/libavfilter/vf_huesaturation.c
+++ b/libavfilter/vf_huesaturation.c
@@ -17,10 +17,9 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_hysteresis.c b/libavfilter/vf_hysteresis.c
index a274ec4962..d2fd3011b8 100644
--- a/libavfilter/vf_hysteresis.c
+++ b/libavfilter/vf_hysteresis.c
@@ -23,7 +23,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_identity.c b/libavfilter/vf_identity.c
index 84def7959b..d3a5ec14f6 100644
--- a/libavfilter/vf_identity.c
+++ b/libavfilter/vf_identity.c
@@ -30,10 +30,8 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
-#include "video.h"
 #include "scene_sad.h"
 
 typedef struct IdentityContext {
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c
index 5267c3b3ae..bbad3f9bfc 100644
--- a/libavfilter/vf_kerndeint.c
+++ b/libavfilter/vf_kerndeint.c
@@ -32,7 +32,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_lagfun.c b/libavfilter/vf_lagfun.c
index 352f08512f..20cdd9fa65 100644
--- a/libavfilter/vf_lagfun.c
+++ b/libavfilter/vf_lagfun.c
@@ -19,12 +19,10 @@
  */
 
 #include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_lensfun.c b/libavfilter/vf_lensfun.c
index f544af773e..b31532bb1a 100644
--- a/libavfilter/vf_lensfun.c
+++ b/libavfilter/vf_lensfun.c
@@ -33,7 +33,6 @@
 #include "libswscale/swscale.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_limitdiff.c b/libavfilter/vf_limitdiff.c
index d2688c39f4..1e903d45a8 100644
--- a/libavfilter/vf_limitdiff.c
+++ b/libavfilter/vf_limitdiff.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_limiter.c b/libavfilter/vf_limiter.c
index b602ce384b..f67f590d60 100644
--- a/libavfilter/vf_limiter.c
+++ b/libavfilter/vf_limiter.c
@@ -22,7 +22,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "limiter.h"
 #include "video.h"
diff --git a/libavfilter/vf_lumakey.c b/libavfilter/vf_lumakey.c
index 448b43dda0..d426a5b67a 100644
--- a/libavfilter/vf_lumakey.c
+++ b/libavfilter/vf_lumakey.c
@@ -19,9 +19,8 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_maskedclamp.c b/libavfilter/vf_maskedclamp.c
index 72f98703a5..e6fbb1a6d5 100644
--- a/libavfilter/vf_maskedclamp.c
+++ b/libavfilter/vf_maskedclamp.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_maskedmerge.c b/libavfilter/vf_maskedmerge.c
index 7adb809760..4ca0c571c8 100644
--- a/libavfilter/vf_maskedmerge.c
+++ b/libavfilter/vf_maskedmerge.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "maskedmerge.h"
diff --git a/libavfilter/vf_maskedminmax.c b/libavfilter/vf_maskedminmax.c
index c7a05b42d9..b1c309cc7d 100644
--- a/libavfilter/vf_maskedminmax.c
+++ b/libavfilter/vf_maskedminmax.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_maskedthreshold.c b/libavfilter/vf_maskedthreshold.c
index 53731eefc9..36c4050b98 100644
--- a/libavfilter/vf_maskedthreshold.c
+++ b/libavfilter/vf_maskedthreshold.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_maskfun.c b/libavfilter/vf_maskfun.c
index 44499d34ae..1ac152fc8b 100644
--- a/libavfilter/vf_maskfun.c
+++ b/libavfilter/vf_maskfun.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c
index e1b0a082f3..66dfe755e4 100644
--- a/libavfilter/vf_mcdeint.c
+++ b/libavfilter/vf_mcdeint.c
@@ -50,10 +50,8 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 #include "libavcodec/avcodec.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_median.c b/libavfilter/vf_median.c
index bc070105cd..57514f9289 100644
--- a/libavfilter/vf_median.c
+++ b/libavfilter/vf_median.c
@@ -24,7 +24,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "median.h"
 #include "video.h"
diff --git a/libavfilter/vf_mestimate.c b/libavfilter/vf_mestimate.c
index 001e6b0e8d..4ec34cd7fb 100644
--- a/libavfilter/vf_mestimate.c
+++ b/libavfilter/vf_mestimate.c
@@ -21,12 +21,9 @@
 #include "motion_estimation.h"
 #include "libavcodec/mathops.h"
 #include "libavutil/common.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 #include "libavutil/motion_vector.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_midequalizer.c b/libavfilter/vf_midequalizer.c
index 8c0e02d888..fae2b7ef19 100644
--- a/libavfilter/vf_midequalizer.c
+++ b/libavfilter/vf_midequalizer.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_minterpolate.c b/libavfilter/vf_minterpolate.c
index f2de61ca39..610ac6b1bb 100644
--- a/libavfilter/vf_minterpolate.c
+++ b/libavfilter/vf_minterpolate.c
@@ -22,11 +22,9 @@
 #include "motion_estimation.h"
 #include "libavcodec/mathops.h"
 #include "libavutil/common.h"
-#include "libavutil/motion_vector.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "scene_sad.h"
diff --git a/libavfilter/vf_misc_vaapi.c b/libavfilter/vf_misc_vaapi.c
index 1cbed9bcf0..d68e18b52b 100644
--- a/libavfilter/vf_misc_vaapi.c
+++ b/libavfilter/vf_misc_vaapi.c
@@ -21,7 +21,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
 #include "video.h"
diff --git a/libavfilter/vf_monochrome.c b/libavfilter/vf_monochrome.c
index 92ea651db2..0e184e08b3 100644
--- a/libavfilter/vf_monochrome.c
+++ b/libavfilter/vf_monochrome.c
@@ -21,9 +21,8 @@
 #include <float.h>
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_morpho.c b/libavfilter/vf_morpho.c
index a218499d61..bd1d6b230f 100644
--- a/libavfilter/vf_morpho.c
+++ b/libavfilter/vf_morpho.c
@@ -29,7 +29,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_mpdecimate.c b/libavfilter/vf_mpdecimate.c
index d677a6e385..8c7824ed22 100644
--- a/libavfilter/vf_mpdecimate.c
+++ b/libavfilter/vf_mpdecimate.c
@@ -30,7 +30,6 @@
 #include "libavutil/timestamp.h"
 #include "avfilter.h"
 #include "internal.h"
-#include "formats.h"
 #include "video.h"
 
 typedef struct DecimateContext {
diff --git a/libavfilter/vf_multiply.c b/libavfilter/vf_multiply.c
index 979b885eb1..54fbeff483 100644
--- a/libavfilter/vf_multiply.c
+++ b/libavfilter/vf_multiply.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "framesync.h"
diff --git a/libavfilter/vf_negate.c b/libavfilter/vf_negate.c
index 87cf908fd5..4887fc4860 100644
--- a/libavfilter/vf_negate.c
+++ b/libavfilter/vf_negate.c
@@ -16,14 +16,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/attributes.h"
 #include "libavutil/common.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_neighbor.c b/libavfilter/vf_neighbor.c
index 796f33c157..915347d6ba 100644
--- a/libavfilter/vf_neighbor.c
+++ b/libavfilter/vf_neighbor.c
@@ -26,7 +26,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c
index 283865f3db..dc935538f0 100644
--- a/libavfilter/vf_nlmeans.c
+++ b/libavfilter/vf_nlmeans.c
@@ -33,7 +33,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "vf_nlmeans.h"
 #include "vf_nlmeans_init.h"
diff --git a/libavfilter/vf_normalize.c b/libavfilter/vf_normalize.c
index 146e36f5fd..d81b2d6457 100644
--- a/libavfilter/vf_normalize.c
+++ b/libavfilter/vf_normalize.c
@@ -72,13 +72,11 @@
  *              over-processed look. The default is full strength.
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_ocr.c b/libavfilter/vf_ocr.c
index c7f7b69df7..3cece91edf 100644
--- a/libavfilter/vf_ocr.c
+++ b/libavfilter/vf_ocr.c
@@ -22,7 +22,6 @@
 
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_overlay_vaapi.c b/libavfilter/vf_overlay_vaapi.c
index c13db4e0d9..979bbaa5e9 100644
--- a/libavfilter/vf_overlay_vaapi.c
+++ b/libavfilter/vf_overlay_vaapi.c
@@ -17,14 +17,11 @@
  */
 #include <string.h>
 
-#include "libavutil/avassert.h"
-#include "libavutil/mem.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
 #include "framesync.h"
-#include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
 #include "video.h"
diff --git a/libavfilter/vf_pad_opencl.c b/libavfilter/vf_pad_opencl.c
index b4b10397a4..7c163a1d0e 100644
--- a/libavfilter/vf_pad_opencl.c
+++ b/libavfilter/vf_pad_opencl.c
@@ -19,10 +19,9 @@
 #include "libavutil/colorspace.h"
 #include "libavutil/eval.h"
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "opencl.h"
 #include "opencl_source.h"
diff --git a/libavfilter/vf_perspective.c b/libavfilter/vf_perspective.c
index 97ed938034..f06c44b33a 100644
--- a/libavfilter/vf_perspective.c
+++ b/libavfilter/vf_perspective.c
@@ -25,7 +25,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_phase.c b/libavfilter/vf_phase.c
index ba1223cc8f..02dd08e002 100644
--- a/libavfilter/vf_phase.c
+++ b/libavfilter/vf_phase.c
@@ -23,7 +23,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_photosensitivity.c b/libavfilter/vf_photosensitivity.c
index 8c8bbb8662..e7920b3242 100644
--- a/libavfilter/vf_photosensitivity.c
+++ b/libavfilter/vf_photosensitivity.c
@@ -20,13 +20,10 @@
 
 #include <float.h>
 
-#include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_procamp_vaapi.c b/libavfilter/vf_procamp_vaapi.c
index f13f752e43..b535a36d33 100644
--- a/libavfilter/vf_procamp_vaapi.c
+++ b/libavfilter/vf_procamp_vaapi.c
@@ -21,7 +21,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
 #include "video.h"
diff --git a/libavfilter/vf_pseudocolor.c b/libavfilter/vf_pseudocolor.c
index 427eb1b5b4..81b2e5b9bc 100644
--- a/libavfilter/vf_pseudocolor.c
+++ b/libavfilter/vf_pseudocolor.c
@@ -25,7 +25,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_pullup.c b/libavfilter/vf_pullup.c
index 80105ec1c0..5a00673c41 100644
--- a/libavfilter/vf_pullup.c
+++ b/libavfilter/vf_pullup.c
@@ -23,7 +23,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "vf_pullup.h"
diff --git a/libavfilter/vf_qp.c b/libavfilter/vf_qp.c
index 3019e77052..37e575447d 100644
--- a/libavfilter/vf_qp.c
+++ b/libavfilter/vf_qp.c
@@ -20,13 +20,10 @@
 
 #include <math.h>
 #include "libavutil/eval.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "libavutil/video_enc_params.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_random.c b/libavfilter/vf_random.c
index cb4b3d3827..8c7cf8b806 100644
--- a/libavfilter/vf_random.c
+++ b/libavfilter/vf_random.c
@@ -22,9 +22,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/random_seed.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 #define MAX_FRAMES 512
 
diff --git a/libavfilter/vf_readeia608.c b/libavfilter/vf_readeia608.c
index 8f3c44e8d8..50bf915765 100644
--- a/libavfilter/vf_readeia608.c
+++ b/libavfilter/vf_readeia608.c
@@ -29,10 +29,8 @@
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
-#include "libavutil/timestamp.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_readvitc.c b/libavfilter/vf_readvitc.c
index 011063a29b..cb63a4d127 100644
--- a/libavfilter/vf_readvitc.c
+++ b/libavfilter/vf_readvitc.c
@@ -27,10 +27,8 @@
 #include "libavutil/common.h"
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
 #include "libavutil/timecode.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_remap_opencl.c b/libavfilter/vf_remap_opencl.c
index 89d47426c0..b4fe111c0a 100644
--- a/libavfilter/vf_remap_opencl.c
+++ b/libavfilter/vf_remap_opencl.c
@@ -19,12 +19,10 @@
  */
 
 #include "libavutil/colorspace.h"
-#include "libavutil/imgutils.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "opencl.h"
diff --git a/libavfilter/vf_removegrain.c b/libavfilter/vf_removegrain.c
index a3a801f8d7..6e6e99198c 100644
--- a/libavfilter/vf_removegrain.c
+++ b/libavfilter/vf_removegrain.c
@@ -26,7 +26,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/qsort.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "removegrain.h"
 #include "video.h"
diff --git a/libavfilter/vf_removelogo.c b/libavfilter/vf_removelogo.c
index 346a746fe9..b293054309 100644
--- a/libavfilter/vf_removelogo.c
+++ b/libavfilter/vf_removelogo.c
@@ -72,7 +72,6 @@
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "bbox.h"
diff --git a/libavfilter/vf_sab.c b/libavfilter/vf_sab.c
index 43cecea547..5e0687c9a2 100644
--- a/libavfilter/vf_sab.c
+++ b/libavfilter/vf_sab.c
@@ -28,7 +28,6 @@
 #include "libswscale/swscale.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_scale_cuda.c b/libavfilter/vf_scale_cuda.c
index 370cb1d9cd..4cd21bbf25 100644
--- a/libavfilter/vf_scale_cuda.c
+++ b/libavfilter/vf_scale_cuda.c
@@ -22,9 +22,7 @@
 
 #include <float.h>
 #include <stdio.h>
-#include <string.h>
 
-#include "libavutil/avstring.h"
 #include "libavutil/common.h"
 #include "libavutil/hwcontext.h"
 #include "libavutil/hwcontext_cuda_internal.h"
@@ -34,7 +32,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "scale_eval.h"
 #include "video.h"
diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c
index 11bd7a9de9..54c055f0a9 100644
--- a/libavfilter/vf_scale_vaapi.c
+++ b/libavfilter/vf_scale_vaapi.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "scale_eval.h"
 #include "video.h"
diff --git a/libavfilter/vf_scroll.c b/libavfilter/vf_scroll.c
index 5e35958fcd..eebf12e902 100644
--- a/libavfilter/vf_scroll.c
+++ b/libavfilter/vf_scroll.c
@@ -22,7 +22,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_selectivecolor.c b/libavfilter/vf_selectivecolor.c
index ab980479a8..315f9e0eed 100644
--- a/libavfilter/vf_selectivecolor.c
+++ b/libavfilter/vf_selectivecolor.c
@@ -32,7 +32,6 @@
 #include "libavcodec/mathops.h" // for mid_pred(), which is a macro so no link dependency
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_siti.c b/libavfilter/vf_siti.c
index ae9278c47c..1b6ff32d6e 100644
--- a/libavfilter/vf_siti.c
+++ b/libavfilter/vf_siti.c
@@ -31,7 +31,6 @@
 #include "libavutil/opt.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_smartblur.c b/libavfilter/vf_smartblur.c
index e9f56d5330..85d8d502e1 100644
--- a/libavfilter/vf_smartblur.c
+++ b/libavfilter/vf_smartblur.c
@@ -30,7 +30,6 @@
 #include "libswscale/swscale.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_sr.c b/libavfilter/vf_sr.c
index b02b68ebe7..05a54b0933 100644
--- a/libavfilter/vf_sr.c
+++ b/libavfilter/vf_sr.c
@@ -26,12 +26,10 @@
  */
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
-#include "libavformat/avio.h"
 #include "libswscale/swscale.h"
 #include "dnn_filter_common.h"
 
diff --git a/libavfilter/vf_ssim360.c b/libavfilter/vf_ssim360.c
index 5794275c2c..3dec430bff 100644
--- a/libavfilter/vf_ssim360.c
+++ b/libavfilter/vf_ssim360.c
@@ -50,9 +50,7 @@
 
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 #include "framesync.h"
 
 #define RIGHT   0
diff --git a/libavfilter/vf_super2xsai.c b/libavfilter/vf_super2xsai.c
index d932e2ba4b..65144cbf1b 100644
--- a/libavfilter/vf_super2xsai.c
+++ b/libavfilter/vf_super2xsai.c
@@ -29,7 +29,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/intreadwrite.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_tmidequalizer.c b/libavfilter/vf_tmidequalizer.c
index b5d497b637..650aa36636 100644
--- a/libavfilter/vf_tmidequalizer.c
+++ b/libavfilter/vf_tmidequalizer.c
@@ -22,7 +22,6 @@
 #include "libavutil/pixdesc.h"
 #include "libavutil/opt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_tonemap.c b/libavfilter/vf_tonemap.c
index f34448d0e9..2970307918 100644
--- a/libavfilter/vf_tonemap.c
+++ b/libavfilter/vf_tonemap.c
@@ -25,7 +25,6 @@
 
 #include <float.h>
 #include <stdio.h>
-#include <string.h>
 
 #include "libavutil/csp.h"
 #include "libavutil/imgutils.h"
@@ -36,7 +35,6 @@
 
 #include "avfilter.h"
 #include "colorspace.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_tonemap_vaapi.c b/libavfilter/vf_tonemap_vaapi.c
index 7c4729a381..0333cd3f6a 100644
--- a/libavfilter/vf_tonemap_vaapi.c
+++ b/libavfilter/vf_tonemap_vaapi.c
@@ -22,7 +22,6 @@
 #include "libavutil/mastering_display_metadata.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "vaapi_vpp.h"
 #include "video.h"
diff --git a/libavfilter/vf_transpose_vaapi.c b/libavfilter/vf_transpose_vaapi.c
index d698b0d3d0..07f4b2a549 100644
--- a/libavfilter/vf_transpose_vaapi.c
+++ b/libavfilter/vf_transpose_vaapi.c
@@ -21,7 +21,6 @@
 #include "libavutil/pixdesc.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "transpose.h"
 #include "vaapi_vpp.h"
diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c
index 73dd2f2a28..2705ac5270 100644
--- a/libavfilter/vf_unsharp.c
+++ b/libavfilter/vf_unsharp.c
@@ -37,7 +37,6 @@
  */
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "libavutil/common.h"
diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
index 81cc4b26e1..bfb6e9e262 100644
--- a/libavfilter/vf_vaguedenoiser.c
+++ b/libavfilter/vf_vaguedenoiser.c
@@ -24,11 +24,9 @@
 #include "libavutil/attributes.h"
 #include "libavutil/common.h"
 #include "libavutil/pixdesc.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_varblur.c b/libavfilter/vf_varblur.c
index 19b8bb4dd5..f6f8382adc 100644
--- a/libavfilter/vf_varblur.c
+++ b/libavfilter/vf_varblur.c
@@ -22,7 +22,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "framesync.h"
 #include "internal.h"
 #include "video.h"
diff --git a/libavfilter/vf_vibrance.c b/libavfilter/vf_vibrance.c
index e5ab3d24bf..e17fce07c0 100644
--- a/libavfilter/vf_vibrance.c
+++ b/libavfilter/vf_vibrance.c
@@ -19,10 +19,9 @@
  */
 
 #include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
+#include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_vif.c b/libavfilter/vf_vif.c
index 1aea4a73c6..3c662491b2 100644
--- a/libavfilter/vf_vif.c
+++ b/libavfilter/vf_vif.c
@@ -27,15 +27,11 @@
 
 #include <float.h>
 
-#include "libavutil/avstring.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "framesync.h"
-#include "drawutils.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 
 #define NUM_DATA_BUFS 13
 
diff --git a/libavfilter/vf_vignette.c b/libavfilter/vf_vignette.c
index 177d51e276..bfbf986f3c 100644
--- a/libavfilter/vf_vignette.c
+++ b/libavfilter/vf_vignette.c
@@ -24,7 +24,6 @@
 #include "libavutil/eval.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 
diff --git a/libavfilter/vf_w3fdif.c b/libavfilter/vf_w3fdif.c
index f10cf06a49..f2264efe2b 100644
--- a/libavfilter/vf_w3fdif.c
+++ b/libavfilter/vf_w3fdif.c
@@ -26,7 +26,6 @@
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "w3fdif.h"
diff --git a/libavfilter/vf_xfade.c b/libavfilter/vf_xfade.c
index 625b4075af..890995a608 100644
--- a/libavfilter/vf_xfade.c
+++ b/libavfilter/vf_xfade.c
@@ -18,12 +18,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/imgutils.h"
 #include "libavutil/eval.h"
 #include "libavutil/opt.h"
+#include "libavutil/pixdesc.h"
 #include "libavutil/pixfmt.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "filters.h"
 #include "video.h"
diff --git a/libavfilter/vf_xmedian.c b/libavfilter/vf_xmedian.c
index 7f7f3de12a..0a02ca065e 100644
--- a/libavfilter/vf_xmedian.c
+++ b/libavfilter/vf_xmedian.c
@@ -22,13 +22,11 @@
 
 #include "libavutil/avstring.h"
 #include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/pixdesc.h"
 #include "libavutil/qsort.h"
 
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
 #include "framesync.h"
 #include "video.h"
diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c
index d6fe24a386..a5a856bf5f 100644
--- a/libavfilter/vf_yadif.c
+++ b/libavfilter/vf_yadif.c
@@ -21,11 +21,8 @@
 
 #include "libavutil/common.h"
 #include "libavutil/pixdesc.h"
-#include "libavutil/imgutils.h"
 #include "avfilter.h"
-#include "formats.h"
 #include "internal.h"
-#include "video.h"
 #include "yadif.h"
 
 typedef struct ThreadData {
diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c
index 2e8bc18f3a..e729bda56d 100644
--- a/libavfilter/vf_zoompan.c
+++ b/libavfilter/vf_zoompan.c
@@ -23,7 +23,6 @@
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "internal.h"
 #include "video.h"
 #include "libswscale/swscale.h"
diff --git a/libavfilter/vsrc_cellauto.c b/libavfilter/vsrc_cellauto.c
index 8c682a7052..b469f1bf20 100644
--- a/libavfilter/vsrc_cellauto.c
+++ b/libavfilter/vsrc_cellauto.c
@@ -29,12 +29,10 @@
 #include "libavutil/internal.h"
 #include "libavutil/lfg.h"
 #include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
 #include "libavutil/random_seed.h"
 #include "libavutil/avstring.h"
 #include "avfilter.h"
 #include "internal.h"
-#include "formats.h"
 #include "video.h"
 
 typedef struct CellAutoContext {
diff --git a/libavfilter/vsrc_ddagrab.c b/libavfilter/vsrc_ddagrab.c
index 525d48110a..b65261f685 100644
--- a/libavfilter/vsrc_ddagrab.c
+++ b/libavfilter/vsrc_ddagrab.c
@@ -44,7 +44,6 @@
 #include "compat/w32dlfcn.h"
 #include "avfilter.h"
 #include "internal.h"
-#include "formats.h"
 #include "video.h"
 
 #include "vsrc_ddagrab_shaders.h"
diff --git a/libavfilter/vsrc_gradients.c b/libavfilter/vsrc_gradients.c
index 25a3d53238..10510c08bd 100644
--- a/libavfilter/vsrc_gradients.c
+++ b/libavfilter/vsrc_gradients.c
@@ -20,13 +20,10 @@
 
 #include "avfilter.h"
 #include "filters.h"
-#include "formats.h"
 #include "video.h"
 #include "internal.h"
 #include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
 #include "libavutil/lfg.h"
 #include "libavutil/random_seed.h"
 #include <float.h>
diff --git a/libavfilter/vsrc_mandelbrot.c b/libavfilter/vsrc_mandelbrot.c
index aa63f9edd1..8b42588f1c 100644
--- a/libavfilter/vsrc_mandelbrot.c
+++ b/libavfilter/vsrc_mandelbrot.c
@@ -27,12 +27,10 @@
  */
 
 #include "avfilter.h"
-#include "formats.h"
 #include "video.h"
 #include "internal.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
 #include <float.h>
 #include <math.h>
 
diff --git a/libavfilter/vsrc_mptestsrc.c b/libavfilter/vsrc_mptestsrc.c
index 55b723af00..9c422baeea 100644
--- a/libavfilter/vsrc_mptestsrc.c
+++ b/libavfilter/vsrc_mptestsrc.c
@@ -23,13 +23,10 @@
  * MP test source, ported from MPlayer libmpcodecs/vf_test.c
  */
 
-#include "libavutil/avstring.h"
 #include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
 #include "libavutil/pixdesc.h"
 #include "avfilter.h"
 #include "internal.h"
-#include "formats.h"
 #include "video.h"
 
 #define WIDTH 512
diff --git a/libavfilter/vsrc_sierpinski.c b/libavfilter/vsrc_sierpinski.c
index 72b28b1bd7..e7b2b8afec 100644
--- a/libavfilter/vsrc_sierpinski.c
+++ b/libavfilter/vsrc_sierpinski.c
@@ -24,13 +24,11 @@
  */
 
 #include "avfilter.h"
-#include "formats.h"
 #include "video.h"
 #include "internal.h"
 #include "libavutil/imgutils.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
 #include "libavutil/lfg.h"
 #include "libavutil/random_seed.h"
 #include <float.h>
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [FFmpeg-devel] [PATCH 7/7] avcodec/qsvenc: Remove unnecessary config_components.h inclusion
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
                   ` (4 preceding siblings ...)
  2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 6/7] avfilter: Remove unnecessary formats.h inclusions Andreas Rheinhardt
@ 2023-08-04  0:50 ` Andreas Rheinhardt
  2023-08-05  7:38 ` [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-04  0:50 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

While just at it, also improve the other headers a bit.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/qsvenc.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index df63c182b0..7ff9d333a2 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -21,12 +21,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "config_components.h"
-
 #include <string.h>
 #include <sys/types.h>
 #include <mfxvideo.h>
 
+#include "libavutil/avassert.h"
 #include "libavutil/common.h"
 #include "libavutil/hwcontext.h"
 #include "libavutil/hwcontext_qsv.h"
@@ -34,7 +33,6 @@
 #include "libavutil/log.h"
 #include "libavutil/time.h"
 #include "libavutil/imgutils.h"
-#include "libavcodec/bytestream.h"
 
 #include "avcodec.h"
 #include "internal.h"
-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs
  2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
                   ` (5 preceding siblings ...)
  2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 7/7] avcodec/qsvenc: Remove unnecessary config_components.h inclusion Andreas Rheinhardt
@ 2023-08-05  7:38 ` Andreas Rheinhardt
  6 siblings, 0 replies; 10+ messages in thread
From: Andreas Rheinhardt @ 2023-08-05  7:38 UTC (permalink / raw)
  To: ffmpeg-devel

Andreas Rheinhardt:
> Lots of audio filters use very simple inputs or outputs:
> An array with a single AVFilterPad whose name is "default"
> and whose type is AVMEDIA_TYPE_AUDIO; everything else is unset.
> 
> Given that we never use pointer equality for inputs or outputs*,
> we can simply use a single AVFilterPad instead of dozens; this
> even saves .data.rel.ro (4784B here) as well as relocations.
> 
> *: In fact, several filters (like the filters in af_biquads.c)
> already use the same inputs; furthermore, ff_filter_alloc()
> duplicates the input and output pads so that we do not even
> work with the pads directly.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---

Will apply this patchset (with its potential for many conflicts) the day
after tomorrow unless there are objections.

- Andreas

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-08-05  7:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-03 14:27 [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt
2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 2/4] avfilter/internal: Don't include video.h Andreas Rheinhardt
2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 3/4] avfilter: Deduplicate default video inputs/outputs Andreas Rheinhardt
2023-08-03 16:44   ` Marvin Scholz
2023-08-03 21:12     ` Andreas Rheinhardt
2023-08-03 14:33 ` [FFmpeg-devel] [PATCH 4/4] avfilter/vf_colorconstancy: Remove redundant CONFIG check Andreas Rheinhardt
2023-08-04  0:49 ` [FFmpeg-devel] [PATCH 5/7] avfilter/internal: Don't include formats.h Andreas Rheinhardt
2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 6/7] avfilter: Remove unnecessary formats.h inclusions Andreas Rheinhardt
2023-08-04  0:50 ` [FFmpeg-devel] [PATCH 7/7] avcodec/qsvenc: Remove unnecessary config_components.h inclusion Andreas Rheinhardt
2023-08-05  7:38 ` [FFmpeg-devel] [PATCH 1/4] avfilter: Deduplicate default audio inputs/outputs Andreas Rheinhardt

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git