| @@ -20,10 +20,11 @@ · 19 unmodified lines |
| 20 | | 20 | |
| 21 | /** | 21 | /** |
| 22 | * @file | 22 | * @file |
| 23 | * Video splitter | 23 | * audio and video splitter |
| 24 | */ | 24 | */ |
| 25 | | 25 | |
| 26 | #include "avfilter.h" | 26 | #include "avfilter.h" |
| | 27 | #include "audio.h" |
| 27 | | 28 | |
| 28 | static int split_init(AVFilterContext *ctx, const char *args, void *opaque) | 29 | static int split_init(AVFilterContext *ctx, const char *args, void *opaque) |
| 29 | { | 30 | { |
| @@ -43,7 +44,7 @@ static int split_init(AVFilterContext *ctx, const char *args, void *opaque) · 13 unmodified lines |
| 43 | AVFilterPad pad = { 0 }; | 44 | AVFilterPad pad = { 0 }; |
| 44 | | 45 | |
| 45 | snprintf(name, sizeof(name), "output%d", i); | 46 | snprintf(name, sizeof(name), "output%d", i); |
| 46 | pad.type = AVMEDIA_TYPE_VIDEO; | 47 | pad.type = ctx->filter->inputs[0].type; |
| 47 | pad.name = av_strdup(name); | 48 | pad.name = av_strdup(name); |
| 48 | | 49 | |
| 49 | avfilter_insert_outpad(ctx, i, &pad); | 50 | avfilter_insert_outpad(ctx, i, &pad); |
| @@ -106,3 +107,28 @@ AVFilter avfilter_vf_split = { · 56 unmodified lines |
| 106 | { .name = NULL}}, | 107 | { .name = NULL}}, |
| 107 | .outputs = (AVFilterPad[]) {{ .name = NULL}}, | 108 | .outputs = (AVFilterPad[]) {{ .name = NULL}}, |
| 108 | }; | 109 | }; |
| | 110 | |
| | 111 | static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) |
| | 112 | { |
| | 113 | AVFilterContext *ctx = inlink->dst; |
| | 114 | int i; |
| | 115 | |
| | 116 | for (i = 0; i < ctx->output_count; i++) |
| | 117 | ff_filter_samples(inlink->dst->outputs[i], |
| | 118 | avfilter_ref_buffer(samplesref, ~AV_PERM_WRITE)); |
| | 119 | } |
| | 120 | |
| | 121 | AVFilter avfilter_af_asplit = { |
| | 122 | .name = "asplit", |
| | 123 | .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."), |
| | 124 | |
| | 125 | .init = split_init, |
| | 126 | .uninit = split_uninit, |
| | 127 | |
| | 128 | .inputs = (const AVFilterPad[]) {{ .name = "default", |
| | 129 | .type = AVMEDIA_TYPE_AUDIO, |
| | 130 | .get_audio_buffer = ff_null_get_audio_buffer, |
| | 131 | .filter_samples = filter_samples }, |
| | 132 | { .name = NULL }}, |
| | 133 | .outputs = (const AVFilterPad[]) {{ .name = NULL }}, |
| | 134 | }; |