diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2013-03-16 00:29:55 +0100 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2013-03-17 00:27:33 +0100 |
commit | db36ea5b5e6237503991dc89cb2d5b7efd6c2067 (patch) | |
tree | b2d61af2ae01157b38ea7427d80bebcaa07c7052 /libavfilter/f_settb.c | |
parent | 0407a79e412e7e7229d4e70c8c0df86e4db9066e (diff) | |
download | ffmpeg-db36ea5b5e6237503991dc89cb2d5b7efd6c2067.tar.gz |
lavfi/settb: add support for named options
Diffstat (limited to 'libavfilter/f_settb.c')
-rw-r--r-- | libavfilter/f_settb.c | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/libavfilter/f_settb.c b/libavfilter/f_settb.c index 436491e26f..1fba23ab07 100644 --- a/libavfilter/f_settb.c +++ b/libavfilter/f_settb.c @@ -30,6 +30,7 @@ #include "libavutil/eval.h" #include "libavutil/internal.h" #include "libavutil/mathematics.h" +#include "libavutil/opt.h" #include "libavutil/rational.h" #include "avfilter.h" #include "internal.h" @@ -51,21 +52,40 @@ enum var_name { }; typedef struct { - char tb_expr[256]; + const AVClass *class; + char *tb_expr; double var_values[VAR_VARS_NB]; } SetTBContext; -static av_cold int init(AVFilterContext *ctx, const char *args) +#define OFFSET(x) offsetof(SetTBContext, x) +#define DEFINE_OPTIONS(filt_name, filt_type) \ +static const AVOption filt_name##_options[] = { \ + { "tb", "set timebase expression", OFFSET(tb_expr), AV_OPT_TYPE_STRING, {.str="intb"}, \ + .flags=AV_OPT_FLAG_##filt_type##_PARAM|AV_OPT_FLAG_FILTERING_PARAM }, \ + { NULL } \ +} + +static av_cold int init(AVFilterContext *ctx, const char *args, const AVClass *class) { SetTBContext *settb = ctx->priv; - av_strlcpy(settb->tb_expr, "intb", sizeof(settb->tb_expr)); + static const char *shorthand[] = { "tb", NULL }; + int ret; - if (args) - sscanf(args, "%255[^:]", settb->tb_expr); + settb->class = class; + av_opt_set_defaults(settb); + + if ((ret = av_opt_set_from_string(settb, args, shorthand, "=", ":")) < 0) + return ret; return 0; } +static av_cold void uninit(AVFilterContext *ctx) +{ + SetTBContext *settb = ctx->priv; + av_opt_free(settb); +} + static int config_output_props(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; @@ -120,6 +140,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) } #if CONFIG_SETTB_FILTER + +DEFINE_OPTIONS(settb, VIDEO); +AVFILTER_DEFINE_CLASS(settb); + +static av_cold int settb_init(AVFilterContext *ctx, const char *args) +{ + return init(ctx, args, &settb_class); +} + static const AVFilterPad avfilter_vf_settb_inputs[] = { { .name = "default", @@ -142,16 +171,27 @@ static const AVFilterPad avfilter_vf_settb_outputs[] = { AVFilter avfilter_vf_settb = { .name = "settb", .description = NULL_IF_CONFIG_SMALL("Set timebase for the video output link."), - .init = init, + .init = settb_init, + .uninit = uninit, .priv_size = sizeof(SetTBContext), .inputs = avfilter_vf_settb_inputs, .outputs = avfilter_vf_settb_outputs, + .priv_class = &settb_class, }; #endif #if CONFIG_ASETTB_FILTER + +DEFINE_OPTIONS(asettb, AUDIO); +AVFILTER_DEFINE_CLASS(asettb); + +static av_cold int asettb_init(AVFilterContext *ctx, const char *args) +{ + return init(ctx, args, &asettb_class); +} + static const AVFilterPad avfilter_af_asettb_inputs[] = { { .name = "default", @@ -174,10 +214,12 @@ static const AVFilterPad avfilter_af_asettb_outputs[] = { AVFilter avfilter_af_asettb = { .name = "asettb", .description = NULL_IF_CONFIG_SMALL("Set timebase for the audio output link."), - .init = init, + .init = asettb_init, + .uninit = uninit, .priv_size = sizeof(SetTBContext), .inputs = avfilter_af_asettb_inputs, .outputs = avfilter_af_asettb_outputs, + .priv_class = &asettb_class, }; #endif |