From 73d5d405d424c06f3f354337cfdb24794932094d Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 25 Feb 2013 21:21:29 +0100 Subject: [PATCH] split: switch to an AVOptions-based system. --- libavfilter/split.c | 48 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/libavfilter/split.c b/libavfilter/split.c index 404cbcedbe..8284fe9a80 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; + SplitContext *s = ctx->priv; + int i; - 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); - } - } - - for (i = 0; i < nb_outputs; i++) { + for (i = 0; i < s->nb_outputs; i++) { char name[32]; AVFilterPad pad = { 0 }; @@ -87,6 +86,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", @@ -101,6 +121,9 @@ AVFilter avfilter_vf_split = { .name = "split", .description = NULL_IF_CONFIG_SMALL("Pass on the input to two outputs."), + .priv_size = sizeof(SplitContext), + .priv_class = &split_class, + .init = split_init, .uninit = split_uninit, @@ -122,6 +145,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,