diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-01-08 11:19:47 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-01-10 11:52:02 +0100 |
commit | 1c18530e936e2cc20e932415ad9f290e952c9d25 (patch) | |
tree | 0c6460816db270dae91ba549871ccb08767c7cda | |
parent | d234b4b193e017411e179c7a1d0521a6fa6dbc8d (diff) | |
download | ffmpeg-1c18530e936e2cc20e932415ad9f290e952c9d25.tar.gz |
lavfi/avfilter: process options for filters without a private class
It still makes sense to apply AVFilterContext-level options to such
filters.
-rw-r--r-- | libavfilter/avfilter.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 43dfb11bdb..c2ecdffa6f 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -812,7 +812,8 @@ static int process_options(AVFilterContext *ctx, AVDictionary **options, while (*args) { const char *shorthand = NULL; - o = av_opt_next(ctx->priv, o); + if (ctx->filter->priv_class) + o = av_opt_next(ctx->priv, o); if (o) { if (o->type == AV_OPT_TYPE_CONST || o->offset == offset) continue; @@ -835,7 +836,10 @@ static int process_options(AVFilterContext *ctx, AVDictionary **options, args++; if (parsed_key) { key = parsed_key; - while ((o = av_opt_next(ctx->priv, o))); /* discard all remaining shorthand */ + + /* discard all remaining shorthand */ + if (ctx->filter->priv_class) + while ((o = av_opt_next(ctx->priv, o))); } else { key = shorthand; } @@ -904,12 +908,6 @@ int avfilter_init_str(AVFilterContext *filter, const char *args) int ret = 0; if (args && *args) { - if (!filter->filter->priv_class) { - av_log(filter, AV_LOG_ERROR, "This filter does not take any " - "options, but options were provided: %s.\n", args); - return AVERROR(EINVAL); - } - ret = process_options(filter, &options, args); if (ret < 0) goto fail; |