summaryrefslogtreecommitdiff
path: root/libavfilter/split.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavfilter/split.c')
-rw-r--r--libavfilter/split.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/libavfilter/split.c b/libavfilter/split.c
index da6b3ff320..83ad765081 100644
--- a/libavfilter/split.c
+++ b/libavfilter/split.c
@@ -20,10 +20,11 @@
/**
* @file
- * Video splitter
+ * audio and video splitter
*/
#include "avfilter.h"
+#include "audio.h"
static int split_init(AVFilterContext *ctx, const char *args, void *opaque)
{
@@ -43,7 +44,7 @@ static int split_init(AVFilterContext *ctx, const char *args, void *opaque)
AVFilterPad pad = { 0 };
snprintf(name, sizeof(name), "output%d", i);
- pad.type = AVMEDIA_TYPE_VIDEO;
+ pad.type = ctx->filter->inputs[0].type;
pad.name = av_strdup(name);
avfilter_insert_outpad(ctx, i, &pad);
@@ -106,3 +107,28 @@ AVFilter avfilter_vf_split = {
{ .name = NULL}},
.outputs = (AVFilterPad[]) {{ .name = NULL}},
};
+
+static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref)
+{
+ AVFilterContext *ctx = inlink->dst;
+ int i;
+
+ for (i = 0; i < ctx->output_count; i++)
+ ff_filter_samples(inlink->dst->outputs[i],
+ avfilter_ref_buffer(samplesref, ~AV_PERM_WRITE));
+}
+
+AVFilter avfilter_af_asplit = {
+ .name = "asplit",
+ .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."),
+
+ .init = split_init,
+ .uninit = split_uninit,
+
+ .inputs = (const AVFilterPad[]) {{ .name = "default",
+ .type = AVMEDIA_TYPE_AUDIO,
+ .get_audio_buffer = ff_null_get_audio_buffer,
+ .filter_samples = filter_samples },
+ { .name = NULL }},
+ .outputs = (const AVFilterPad[]) {{ .name = NULL }},
+};