AVOptions: in av_opt_find() don't return named constants unless unit is specified.
authorAnton Khirnov <anton@khirnov.net>
Wed, 6 Jul 2011 17:56:58 +0000 (19:56 +0200)
committerAnton Khirnov <anton@khirnov.net>
Fri, 8 Jul 2011 16:34:18 +0000 (18:34 +0200)
That is, unless the caller explicitly asks for them.

Prevents conflict between e.g. the 'loop' option in img2 demuxer and
'loop' flag in AVCodecContext.

libavutil/opt.c

index 65e0213..9c601a2 100644 (file)
@@ -573,8 +573,9 @@ const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
         return o;
 
     while (o = av_next_option(obj, o)) {
-        if (!strcmp(o->name, name) && (!unit || (o->unit && !strcmp(o->unit, unit))) &&
-            (o->flags & opt_flags) == opt_flags)
+        if (!strcmp(o->name, name) && (o->flags & opt_flags) == opt_flags &&
+            ((!unit && o->type != FF_OPT_TYPE_CONST) ||
+             (unit  && o->unit && !strcmp(o->unit, unit))))
             return o;
     }
     return NULL;