Anoter try to make +- behave sanely.
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 24 May 2008 12:58:20 +0000 (12:58 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 24 May 2008 12:58:20 +0000 (12:58 +0000)
Originally committed as revision 13281 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/opt.c

index 70f2f3d..1b429ab 100644 (file)
@@ -146,6 +146,7 @@ const AVOption *av_set_string(void *obj, const char *name, const char *val){
         return o;
     }
     if(o->type != FF_OPT_TYPE_STRING){
+        int notfirst=0;
         for(;;){
             int i;
             char buf[256];
@@ -180,8 +181,8 @@ const AVOption *av_set_string(void *obj, const char *name, const char *val){
                 if     (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d;
                 else if(cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d;
             }else{
-                if     (cmd=='+') d= av_get_double(obj, name, NULL) + d;
-                else if(cmd=='-') d= av_get_double(obj, name, NULL) - d;
+                if     (cmd=='+') d= notfirst*av_get_double(obj, name, NULL) + d;
+                else if(cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;
             }
 
             if (!av_set_number(obj, name, d, 1, 1))
@@ -189,6 +190,7 @@ const AVOption *av_set_string(void *obj, const char *name, const char *val){
             val+= i;
             if(!*val)
                 return o;
+            notfirst=1;
         }
         return NULL;
     }