[FFmpeg-devel] [PATCH 6/8] lavfi/avfilter: process options for filters without a private class

Anton Khirnov anton at khirnov.net
Sun Jan 8 14:58:09 EET 2023


It still makes sense to apply AVFilterContext-level options to such
filters.
---
 libavfilter/avfilter.c | 14 ++++++--------
 1 file 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;
-- 
2.35.1



More information about the ffmpeg-devel mailing list