From 630006277448bfa023a4de2c5f56cbd24f027052 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Sun, 30 Sep 2012 13:03:08 +0200 Subject: [PATCH] lavfi/transpose: add support to named options and shortands Allow extensibility. --- doc/filters.texi | 8 ++++++-- libavfilter/version.h | 2 +- libavfilter/vf_transpose.c | 26 +++++++++++++++++--------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index d9e73b38cc..e5774a1c1b 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -3519,8 +3519,11 @@ Default mode is @code{merge}. Transpose rows with columns in the input video and optionally flip it. -It accepts a parameter representing an integer, which can assume the -values: +This filter accepts the following named parameters: + +@table @option +@item dir +Specify the transposition direction. Can assume the following values: @table @samp @item 0, 4 @@ -3558,6 +3561,7 @@ l.r l.L For values between 4-7 transposition is only done if the input video geometry is portrait and not landscape. +@end table @section unsharp diff --git a/libavfilter/version.h b/libavfilter/version.h index 2acb3e6368..0475bc42f3 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 19 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_transpose.c b/libavfilter/vf_transpose.c index 4161050c74..41ca0629aa 100644 --- a/libavfilter/vf_transpose.c +++ b/libavfilter/vf_transpose.c @@ -28,6 +28,7 @@ #include #include "libavutil/intreadwrite.h" +#include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/imgutils.h" #include "libavutil/internal.h" @@ -37,6 +38,7 @@ #include "video.h" typedef struct { + const AVClass *class; int hsub, vsub; int pixsteps[4]; @@ -48,20 +50,25 @@ typedef struct { int passthrough; ///< landscape passthrough mode enabled } TransContext; +#define OFFSET(x) offsetof(TransContext, x) +#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM + +static const AVOption transpose_options[] = { + { "dir", "set transpose direction", OFFSET(dir), AV_OPT_TYPE_INT, {.i64=0}, 0, 7, FLAGS }, + { NULL }, +}; + +AVFILTER_DEFINE_CLASS(transpose); + static av_cold int init(AVFilterContext *ctx, const char *args) { TransContext *trans = ctx->priv; - trans->dir = 0; + const char *shorthand[] = { "dir", NULL }; - if (args) - sscanf(args, "%d", &trans->dir); + trans->class = &transpose_class; + av_opt_set_defaults(trans); - if (trans->dir < 0 || trans->dir > 7) { - av_log(ctx, AV_LOG_ERROR, "Invalid value %d not between 0 and 7.\n", - trans->dir); - return AVERROR(EINVAL); - } - return 0; + return av_opt_set_from_string(trans, args, shorthand, "=", ":"); } static int query_formats(AVFilterContext *ctx) @@ -262,4 +269,5 @@ AVFilter avfilter_vf_transpose = { .config_props = config_props_output, .type = AVMEDIA_TYPE_VIDEO, }, { .name = NULL}}, + .priv_class = &transpose_class, };