[FFmpeg-cvslog] vf_settb: switch to an AVOptions-based system.
Anton Khirnov
git at videolan.org
Thu Apr 11 00:15:30 CEST 2013
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Feb 25 21:21:29 2013 +0100| [ffea3b00c39caa8ad78456ae08c8353929974dfd] | committer: Anton Khirnov
vf_settb: switch to an AVOptions-based system.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ffea3b00c39caa8ad78456ae08c8353929974dfd
---
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 0c7527f..9f190f9 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:
+
+ at table @option
+
+ at item expr
+The expression which is evaluated into the output timebase.
+
+ at 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 325dc74..bf1f633 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,
More information about the ffmpeg-cvslog
mailing list