diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-04-10 23:48:26 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-04-10 23:49:58 +0200 |
commit | f42635a50b7af62b120c09e98dbd4a12f4d1e4b5 (patch) | |
tree | 562ffbe8d57fdb4fdd7b5d9681eea61b55d81e47 | |
parent | 270d3c96ec492e004275fdb7fd625f801fd1a26b (diff) | |
parent | 33b97faaba2744f0a2fd65c0ef9ecc2de3fad7ff (diff) | |
download | ffmpeg-f42635a50b7af62b120c09e98dbd4a12f4d1e4b5.tar.gz |
Merge commit '33b97faaba2744f0a2fd65c0ef9ecc2de3fad7ff'
* commit '33b97faaba2744f0a2fd65c0ef9ecc2de3fad7ff':
vf_setpts: switch to an AVOptions-based system.
Conflicts:
doc/filters.texi
libavfilter/f_setpts.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | doc/filters.texi | 13 | ||||
-rw-r--r-- | libavfilter/avfilter.c | 1 | ||||
-rw-r--r-- | libavfilter/f_setpts.c | 23 |
3 files changed, 33 insertions, 4 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index b0d6abc5d8..1c0d82d22a 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -6712,8 +6712,17 @@ Change the PTS (presentation timestamp) of the input frames. @code{asetpts} works on audio frames, @code{setpts} on video frames. -Accept in input an expression evaluated through the eval API, which -can contain the following constants: +This filter accepts the following options: + +@table @option + +@item expr +The expression which is evaluated for each frame to construct its timestamp. + +@end table + +The expression is evaluated through the eval API and can contain the following +constants: @table @option @item FRAME_RATE diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 1e16809ed8..b301b33de2 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -690,6 +690,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque !strcmp(filter->filter->name, "pp" ) || !strcmp(filter->filter->name, "aperms") || !strcmp(filter->filter->name, "resample") || + !strcmp(filter->filter->name, "setpts" ) || !strcmp(filter->filter->name, "showspectrum") || !strcmp(filter->filter->name, "silencedetect") || !strcmp(filter->filter->name, "subtitles") || diff --git a/libavfilter/f_setpts.c b/libavfilter/f_setpts.c index d3a297688f..41be1cadbe 100644 --- a/libavfilter/f_setpts.c +++ b/libavfilter/f_setpts.c @@ -27,6 +27,7 @@ #include "libavutil/eval.h" #include "libavutil/internal.h" #include "libavutil/mathematics.h" +#include "libavutil/opt.h" #include "libavutil/time.h" #include "avfilter.h" #include "internal.h" @@ -78,6 +79,8 @@ enum var_name { }; typedef struct { + const AVClass *class; + char *expr_str; AVExpr *expr; double var_values[VAR_VARS_NB]; enum AVMediaType type; @@ -88,9 +91,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args) SetPTSContext *setpts = ctx->priv; int ret; - if ((ret = av_expr_parse(&setpts->expr, args ? args : "PTS", + if ((ret = av_expr_parse(&setpts->expr, setpts->expr_str, var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) { - av_log(ctx, AV_LOG_ERROR, "Error while parsing expression '%s'\n", args); + av_log(ctx, AV_LOG_ERROR, "Error while parsing expression '%s'\n", setpts->expr_str); return ret; } @@ -236,6 +239,21 @@ AVFilter avfilter_af_asetpts = { #endif /* CONFIG_ASETPTS_FILTER */ #if CONFIG_SETPTS_FILTER + +#define OFFSET(x) offsetof(SetPTSContext, x) +#define FLAGS AV_OPT_FLAG_VIDEO_PARAM +static const AVOption options[] = { + { "expr", "Expression determining the frame timestamp", OFFSET(expr_str), AV_OPT_TYPE_STRING, { .str = "PTS" }, .flags = FLAGS }, + { NULL }, +}; + +static const AVClass setpts_class = { + .class_name = "setpts", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + static const AVFilterPad avfilter_vf_setpts_inputs[] = { { .name = "default", @@ -262,6 +280,7 @@ AVFilter avfilter_vf_setpts = { .uninit = uninit, .priv_size = sizeof(SetPTSContext), + .priv_class = &setpts_class, .inputs = avfilter_vf_setpts_inputs, .outputs = avfilter_vf_setpts_outputs, |