[FFmpeg-devel] [PATCH] lavfi/rotate: add angle command
Stefano Sabatini
stefasab at gmail.com
Tue Jun 11 16:09:37 CEST 2013
---
doc/filters.texi | 13 +++++++++++++
libavfilter/vf_rotate.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/doc/filters.texi b/doc/filters.texi
index 7e8fff9..c4ad494 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -5852,6 +5852,19 @@ rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow
@end example
@end itemize
+ at subsection Commands
+
+The filter supports the following commands:
+
+ at table @option
+ at item a, angle
+Set the angle expression.
+The command accepts the same syntax of the corresponding option.
+
+If the specified expression is not valid, it is kept at its current
+value.
+ at end table
+
@section removelogo
Suppress a TV station logo, using an image file to determine which
diff --git a/libavfilter/vf_rotate.c b/libavfilter/vf_rotate.c
index da294c3..ce31a7c 100644
--- a/libavfilter/vf_rotate.c
+++ b/libavfilter/vf_rotate.c
@@ -425,6 +425,41 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
return ff_filter_frame(outlink, out);
}
+static int set_expr(AVExpr **pexpr, const char *expr, const char *option, void *log_ctx)
+{
+ int ret;
+ AVExpr *old = NULL;
+
+ if (*pexpr)
+ old = *pexpr;
+ ret = av_expr_parse(pexpr, expr, var_names,
+ NULL, NULL, NULL, NULL, 0, log_ctx);
+ if (ret < 0) {
+ av_log(log_ctx, AV_LOG_ERROR,
+ "Error when evaluating the expression '%s' for %s\n",
+ expr, option);
+ *pexpr = old;
+ return ret;
+ }
+
+ av_expr_free(old);
+ return 0;
+}
+
+static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
+ char *res, int res_len, int flags)
+{
+ RotContext *rot = ctx->priv;
+ int ret;
+
+ if (!strcmp(cmd, "angle") || !strcmp(cmd, "a")) {
+ ret = set_expr(&rot->angle_expr, args, cmd, ctx);
+ } else
+ ret = AVERROR(ENOSYS);
+
+ return ret;
+}
+
static const AVFilterPad rotate_inputs[] = {
{
.name = "default",
@@ -453,4 +488,5 @@ AVFilter avfilter_vf_rotate = {
.inputs = rotate_inputs,
.outputs = rotate_outputs,
.priv_class = &rotate_class,
+ .process_command = process_command,
};
--
1.7.9.5
More information about the ffmpeg-devel
mailing list