[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