vf_settb: switch to an AVOptions-based system.

This commit is contained in:
Anton Khirnov 2013-02-25 21:21:29 +01:00
parent 33b97faaba
commit ffea3b00c3
2 changed files with 29 additions and 16 deletions

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

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,