Commit bde1e8bf authored by Stefano Sabatini's avatar Stefano Sabatini

lavfi/overlay: make use of av_opt_set_from_string()

Simplify.
parent 5e402a53
......@@ -3176,12 +3176,19 @@ Overlay one video on top of another.
It takes two inputs and one output, the first input is the "main"
video on which the second input is overlayed.
It accepts the parameters: @var{x}:@var{y}[:@var{options}].
This filter accepts a list of @var{key}=@var{value} pairs as argument,
separated by ":". If the key of the first options is omitted, the
arguments are interpreted according to the syntax @var{x}:@var{y}.
A description of the accepted options follows.
@var{x} is the x coordinate of the overlayed video on the main video,
@var{y} is the y coordinate. @var{x} and @var{y} are expressions containing
the following parameters:
@table @option
@item x, y
Set the expression for the x and y coordinates of the overlayed video
on the main video. Default value is 0.
The @var{x} and @var{y} expressions can contain the following
parameters:
@table @option
@item main_w, main_h
main input width and height
......@@ -3196,12 +3203,6 @@ overlay input width and height
same as @var{overlay_w} and @var{overlay_h}
@end table
@var{options} is an optional list of @var{key}=@var{value} pairs,
separated by ":".
The description of the accepted options follows.
@table @option
@item rgb
If set to 1, force the filter to accept inputs in the RGB
color space. Default value is 0.
......
......@@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 3
#define LIBAVFILTER_VERSION_MINOR 29
#define LIBAVFILTER_VERSION_MICRO 100
#define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \
......
......@@ -110,42 +110,19 @@ AVFILTER_DEFINE_CLASS(overlay);
static av_cold int init(AVFilterContext *ctx, const char *args)
{
OverlayContext *over = ctx->priv;
char *args1 = av_strdup(args);
char *expr, *bufptr = NULL;
int ret = 0;
static const char *shorthand[] = { "x", "y", NULL };
over->class = &overlay_class;
av_opt_set_defaults(over);
if (expr = av_strtok(args1, ":", &bufptr)) {
av_free(over->x_expr);
if (!(over->x_expr = av_strdup(expr))) {
ret = AVERROR(ENOMEM);
goto end;
}
}
if (expr = av_strtok(NULL, ":", &bufptr)) {
av_free(over->y_expr);
if (!(over->y_expr = av_strdup(expr))) {
ret = AVERROR(ENOMEM);
goto end;
}
}
if (bufptr && (ret = av_set_options_string(over, bufptr, "=", ":")) < 0)
goto end;
end:
av_free(args1);
return ret;
return av_opt_set_from_string(over, args, shorthand, "=", ":");
}
static av_cold void uninit(AVFilterContext *ctx)
{
OverlayContext *over = ctx->priv;
av_freep(&over->x_expr);
av_freep(&over->y_expr);
av_opt_free(over);
avfilter_unref_bufferp(&over->overpicref);
ff_bufqueue_discard_all(&over->queue_main);
......
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