diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-04-11 02:49:13 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-04-11 02:50:21 +0200 |
commit | 7f2198a2f1cf24c8df6709058f9e6f3d69c44f7a (patch) | |
tree | 21e37dc9c4d1225b3f006982e274019d9b5d41c7 /libavfilter/split.c | |
parent | ae6634da8b81021c15db3048c185a874b2b96505 (diff) | |
parent | 73d5d405d424c06f3f354337cfdb24794932094d (diff) | |
download | ffmpeg-7f2198a2f1cf24c8df6709058f9e6f3d69c44f7a.tar.gz |
Merge commit '73d5d405d424c06f3f354337cfdb24794932094d'
* commit '73d5d405d424c06f3f354337cfdb24794932094d':
split: switch to an AVOptions-based system.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/split.c')
-rw-r--r-- | libavfilter/split.c | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/libavfilter/split.c b/libavfilter/split.c index b57d8cd483..cde2ab1efb 100644 --- a/libavfilter/split.c +++ b/libavfilter/split.c @@ -27,25 +27,24 @@ #include "libavutil/internal.h" #include "libavutil/mem.h" +#include "libavutil/opt.h" + #include "avfilter.h" #include "audio.h" #include "internal.h" #include "video.h" +typedef struct SplitContext { + const AVClass *class; + int nb_outputs; +} SplitContext; + static int split_init(AVFilterContext *ctx, const char *args) { - int i, nb_outputs = 2; - - if (args) { - nb_outputs = strtol(args, NULL, 0); - if (nb_outputs <= 0) { - av_log(ctx, AV_LOG_ERROR, "Invalid number of outputs specified: %d.\n", - nb_outputs); - return AVERROR(EINVAL); - } - } + SplitContext *s = ctx->priv; + int i; - for (i = 0; i < nb_outputs; i++) { + for (i = 0; i < s->nb_outputs; i++) { char name[32]; AVFilterPad pad = { 0 }; @@ -91,6 +90,27 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) return ret; } +#define OFFSET(x) offsetof(SplitContext, x) +#define FLAGS AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_VIDEO_PARAM +static const AVOption options[] = { + { "outputs", "Number of outputs", OFFSET(nb_outputs), AV_OPT_TYPE_INT, { .i64 = 2 }, 1, INT_MAX, FLAGS }, + { NULL }, +}; + +static const AVClass split_class = { + .class_name = "split", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +static const AVClass asplit_class = { + .class_name = "asplit", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + static const AVFilterPad avfilter_vf_split_inputs[] = { { .name = "default", @@ -105,6 +125,9 @@ AVFilter avfilter_vf_split = { .name = "split", .description = NULL_IF_CONFIG_SMALL("Pass on the input video to N outputs."), + .priv_size = sizeof(SplitContext), + .priv_class = &split_class, + .init = split_init, .uninit = split_uninit, @@ -126,6 +149,9 @@ AVFilter avfilter_af_asplit = { .name = "asplit", .description = NULL_IF_CONFIG_SMALL("Pass on the audio input to N audio outputs."), + .priv_size = sizeof(SplitContext), + .priv_class = &asplit_class, + .init = split_init, .uninit = split_uninit, |