Browse Source

vf_settb: switch to an AVOptions-based system.

tags/n2.0
Anton Khirnov 12 years ago
parent
commit
ffea3b00c3
2 changed files with 29 additions and 16 deletions
  1. +11
    -3
      doc/filters.texi
  2. +18
    -13
      libavfilter/vf_settb.c

+ 11
- 3
doc/filters.texi View File

@@ -1998,7 +1998,15 @@ setsar=sar=10/11
Set the timebase to use for the output frames timestamps. Set the timebase to use for the output frames timestamps.
It is mainly useful for testing timebase configuration. 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 The expression can contain the constants "PI", "E", "PHI", "AVTB" (the
default timebase), and "intb" (the input timebase). default timebase), and "intb" (the input timebase).


@@ -2008,10 +2016,10 @@ Follow some examples.


@example @example
# set the timebase to 1/25 # set the timebase to 1/25
settb=1/25
settb=expr=1/25


# set the timebase to 1/10 # set the timebase to 1/10
settb=0.1
settb=expr=0.1


#set the timebase to 1001/1000 #set the timebase to 1001/1000
settb=1+0.001 settb=1+0.001


+ 18
- 13
libavfilter/vf_settb.c View File

@@ -30,6 +30,7 @@
#include "libavutil/eval.h" #include "libavutil/eval.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/rational.h" #include "libavutil/rational.h"
#include "avfilter.h" #include "avfilter.h"
#include "internal.h" #include "internal.h"
@@ -54,21 +55,11 @@ enum var_name {
}; };


typedef struct { typedef struct {
char tb_expr[256];
const AVClass *class;
char *tb_expr;
double var_values[VAR_VARS_NB]; double var_values[VAR_VARS_NB];
} SetTBContext; } 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) static int config_output_props(AVFilterLink *outlink)
{ {
AVFilterContext *ctx = outlink->src; AVFilterContext *ctx = outlink->src;
@@ -124,6 +115,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
return ff_filter_frame(outlink, 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[] = { static const AVFilterPad avfilter_vf_settb_inputs[] = {
{ {
.name = "default", .name = "default",
@@ -146,9 +151,9 @@ static const AVFilterPad avfilter_vf_settb_outputs[] = {
AVFilter avfilter_vf_settb = { AVFilter avfilter_vf_settb = {
.name = "settb", .name = "settb",
.description = NULL_IF_CONFIG_SMALL("Set timebase for the output link."), .description = NULL_IF_CONFIG_SMALL("Set timebase for the output link."),
.init = init,


.priv_size = sizeof(SetTBContext), .priv_size = sizeof(SetTBContext),
.priv_class = &settb_class,


.inputs = avfilter_vf_settb_inputs, .inputs = avfilter_vf_settb_inputs,




Loading…
Cancel
Save