Browse Source

AVOptions: in av_opt_find() don't return named constants unless unit is specified.

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.
Anton Khirnov 13 years ago
parent
commit
a726d7fd4e
1 changed files with 3 additions and 2 deletions
  1. 3 2
      libavutil/opt.c

+ 3 - 2
libavutil/opt.c

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