lavfi/overlay: make use of av_opt_set_from_string()

Simplify.
This commit is contained in:
Stefano Sabatini 2012-12-15 14:50:09 +01:00
parent 5e402a5319
commit bde1e8bf06
3 changed files with 15 additions and 37 deletions

View File

@ -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}.
@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:
A description of the accepted options follows.
@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.

View File

@ -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, \

View File

@ -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);