From ffea3b00c39caa8ad78456ae08c8353929974dfd Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 25 Feb 2013 21:21:29 +0100 Subject: [PATCH] vf_settb: switch to an AVOptions-based system. --- doc/filters.texi | 14 +++++++++++--- libavfilter/vf_settb.c | 31 ++++++++++++++++++------------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 0c7527fd11..9f190f9bca 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -1998,7 +1998,15 @@ setsar=sar=10/11 Set the timebase to use for the output frames timestamps. It is mainly useful for testing timebase configuration. -It accepts in input an arithmetic expression representing a rational. +This filter accepts the following options: + +@table @option + +@item expr +The expression which is evaluated into the output timebase. + +@end table + The expression can contain the constants "PI", "E", "PHI", "AVTB" (the default timebase), and "intb" (the input timebase). @@ -2008,10 +2016,10 @@ Follow some examples. @example # set the timebase to 1/25 -settb=1/25 +settb=expr=1/25 # set the timebase to 1/10 -settb=0.1 +settb=expr=0.1 #set the timebase to 1001/1000 settb=1+0.001 diff --git a/libavfilter/vf_settb.c b/libavfilter/vf_settb.c index 325dc741ce..bf1f633462 100644 --- a/libavfilter/vf_settb.c +++ b/libavfilter/vf_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" @@ -54,21 +55,11 @@ 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) -{ - SetTBContext *settb = ctx->priv; - av_strlcpy(settb->tb_expr, "intb", sizeof(settb->tb_expr)); - - if (args) - sscanf(args, "%255[^:]", settb->tb_expr); - - return 0; -} - static int config_output_props(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; @@ -124,6 +115,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) return ff_filter_frame(outlink, frame); } +#define OFFSET(x) offsetof(SetTBContext, x) +#define FLAGS AV_OPT_FLAG_VIDEO_PARAM +static const AVOption options[] = { + { "expr", "Expression determining the output timebase", OFFSET(tb_expr), AV_OPT_TYPE_STRING, { .str = "intb" }, .flags = FLAGS }, + { NULL }, +}; + +static const AVClass settb_class = { + .class_name = "settb", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + static const AVFilterPad avfilter_vf_settb_inputs[] = { { .name = "default", @@ -146,9 +151,9 @@ static const AVFilterPad avfilter_vf_settb_outputs[] = { AVFilter avfilter_vf_settb = { .name = "settb", .description = NULL_IF_CONFIG_SMALL("Set timebase for the output link."), - .init = init, .priv_size = sizeof(SetTBContext), + .priv_class = &settb_class, .inputs = avfilter_vf_settb_inputs,