diff mbox series

[FFmpeg-devel,1/4] avfilter: Deduplicate default audio inputs/outputs

Message ID GV1P250MB0737FCB5E606E15B87D929DA8F08A@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
State Accepted
Headers show
Series [FFmpeg-devel,1/4] avfilter: Deduplicate default audio inputs/outputs | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Andreas Rheinhardt Aug. 3, 2023, 2:27 p.m. UTC
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(-)

Comments

Andreas Rheinhardt Aug. 5, 2023, 7:38 a.m. UTC | #1
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
diff mbox series

Patch

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