diff --git a/doc/filters.texi b/doc/filters.texi index 282355ad77771d0a5a988e8809bcb74d24b994f3..c0bd2816002e17effcb93462d2c5508b0d7ac7a7 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -5883,6 +5883,19 @@ rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none @end example @end itemize +@subsection Commands + +The filter supports the following commands: + +@table @option +@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. +@end table + @section sab Apply Shape Adaptive Blur. diff --git a/libavfilter/version.h b/libavfilter/version.h index c71cce65a8b3fff6a6d76eb4f27d45882f79af86..4485a7fb045b0d564ec519af4dca81cc7f307cbb 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 76 -#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_rotate.c b/libavfilter/vf_rotate.c index b2fe66197db4f061098b7445e4bcc1da9508feed..a032f99086739a30e09f26ba136200b770647079 100644 --- a/libavfilter/vf_rotate.c +++ b/libavfilter/vf_rotate.c @@ -409,6 +409,29 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) return ff_filter_frame(outlink, out); } +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")) { + AVExpr *old = rot->angle_expr; + ret = av_expr_parse(&rot->angle_expr, args, var_names, + NULL, NULL, NULL, NULL, 0, ctx); + if (ret < 0) { + av_log(ctx, AV_LOG_ERROR, + "Error when parsing the expression '%s' for angle command\n", args); + rot->angle_expr = old; + return ret; + } + av_expr_free(old); + } else + ret = AVERROR(ENOSYS); + + return ret; +} + static const AVFilterPad rotate_inputs[] = { { .name = "default", @@ -434,6 +457,7 @@ AVFilter avfilter_vf_rotate = { .init = init, .uninit = uninit, .query_formats = query_formats, + .process_command = process_command, .inputs = rotate_inputs, .outputs = rotate_outputs, .priv_class = &rotate_class,