Commit 0c2466de authored by Anton Khirnov's avatar Anton Khirnov

vf_transpose: switch to an AVOptions-based system.

parent ffea3b00
...@@ -2107,11 +2107,19 @@ will create 5 copies of the input video. ...@@ -2107,11 +2107,19 @@ will create 5 copies of the input video.
Transpose rows with columns in the input video and optionally flip it. Transpose rows with columns in the input video and optionally flip it.
It accepts a parameter representing an integer, which can assume the This filter accepts the following options:
values:
@table @option
@item dir
The direction of the transpose.
@end table
The direction can assume the following values:
@table @samp @table @samp
@item 0 @item cclock_flip
Rotate by 90 degrees counterclockwise and vertically flip (default), that is: Rotate by 90 degrees counterclockwise and vertically flip (default), that is:
@example @example
L.R L.l L.R L.l
...@@ -2119,7 +2127,7 @@ L.R L.l ...@@ -2119,7 +2127,7 @@ L.R L.l
l.r R.r l.r R.r
@end example @end example
@item 1 @item clock
Rotate by 90 degrees clockwise, that is: Rotate by 90 degrees clockwise, that is:
@example @example
L.R l.L L.R l.L
...@@ -2127,7 +2135,7 @@ L.R l.L ...@@ -2127,7 +2135,7 @@ L.R l.L
l.r r.R l.r r.R
@end example @end example
@item 2 @item cclock
Rotate by 90 degrees counterclockwise, that is: Rotate by 90 degrees counterclockwise, that is:
@example @example
L.R R.r L.R R.r
...@@ -2135,7 +2143,7 @@ L.R R.r ...@@ -2135,7 +2143,7 @@ L.R R.r
l.r L.l l.r L.l
@end example @end example
@item 3 @item clock_flip
Rotate by 90 degrees clockwise and vertically flip, that is: Rotate by 90 degrees clockwise and vertically flip, that is:
@example @example
L.R r.R L.R r.R
......
...@@ -31,38 +31,27 @@ ...@@ -31,38 +31,27 @@
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "avfilter.h" #include "avfilter.h"
#include "formats.h" #include "formats.h"
#include "internal.h" #include "internal.h"
#include "video.h" #include "video.h"
enum TransposeDir {
TRANSPOSE_CCLOCK_FLIP,
TRANSPOSE_CLOCK,
TRANSPOSE_CCLOCK,
TRANSPOSE_CLOCK_FLIP,
};
typedef struct { typedef struct {
const AVClass *class;
int hsub, vsub; int hsub, vsub;
int pixsteps[4]; int pixsteps[4];
/* 0 Rotate by 90 degrees counterclockwise and vflip. */ enum TransposeDir dir;
/* 1 Rotate by 90 degrees clockwise. */
/* 2 Rotate by 90 degrees counterclockwise. */
/* 3 Rotate by 90 degrees clockwise and vflip. */
int dir;
} TransContext; } TransContext;
static av_cold int init(AVFilterContext *ctx, const char *args)
{
TransContext *trans = ctx->priv;
trans->dir = 0;
if (args)
sscanf(args, "%d", &trans->dir);
if (trans->dir < 0 || trans->dir > 3) {
av_log(ctx, AV_LOG_ERROR, "Invalid value %d not between 0 and 3.\n",
trans->dir);
return AVERROR(EINVAL);
}
return 0;
}
static int query_formats(AVFilterContext *ctx) static int query_formats(AVFilterContext *ctx)
{ {
enum AVPixelFormat pix_fmts[] = { enum AVPixelFormat pix_fmts[] = {
...@@ -198,6 +187,25 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -198,6 +187,25 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
return ff_filter_frame(outlink, out); return ff_filter_frame(outlink, out);
} }
#define OFFSET(x) offsetof(TransContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM
static const AVOption options[] = {
{ "dir", "Transpose direction", OFFSET(dir), AV_OPT_TYPE_INT, { .i64 = TRANSPOSE_CCLOCK_FLIP },
TRANSPOSE_CCLOCK_FLIP, TRANSPOSE_CLOCK_FLIP, FLAGS, "dir" },
{ "cclock_flip", "counter-clockwise with vertical flip", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CCLOCK_FLIP }, .unit = "dir" },
{ "clock", "clockwise", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CLOCK }, .unit = "dir" },
{ "cclock", "counter-clockwise", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CCLOCK }, .unit = "dir" },
{ "clock_flip", "clockwise with vertical flip", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CLOCK_FLIP }, .unit = "dir" },
{ NULL },
};
static const AVClass transpose_class = {
.class_name = "transpose",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
};
static const AVFilterPad avfilter_vf_transpose_inputs[] = { static const AVFilterPad avfilter_vf_transpose_inputs[] = {
{ {
.name = "default", .name = "default",
...@@ -220,8 +228,8 @@ AVFilter avfilter_vf_transpose = { ...@@ -220,8 +228,8 @@ AVFilter avfilter_vf_transpose = {
.name = "transpose", .name = "transpose",
.description = NULL_IF_CONFIG_SMALL("Transpose input video."), .description = NULL_IF_CONFIG_SMALL("Transpose input video."),
.init = init,
.priv_size = sizeof(TransContext), .priv_size = sizeof(TransContext),
.priv_class = &transpose_class,
.query_formats = query_formats, .query_formats = query_formats,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment