return ret;
}
-static double const_values[]={
+static const double const_values[]={
M_PI,
M_E,
FF_QP2LAMBDA,
0
};
-static const char *const_names[]={
+static const char * const const_names[]={
"PI",
"E",
"QP2LAMBDA",
return -1;
}
-const AVOption *av_set_string(void *obj, const char *name, const char *val){
+const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){
return set_all_opt(obj, o->unit, o->default_val);
return o;
}
if(o->type != FF_OPT_TYPE_STRING){
+ int notfirst=0;
for(;;){
int i;
char buf[256];
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))
val+= i;
if(!*val)
return o;
+ notfirst=1;
}
return NULL;
}
+ if(alloc){
+ av_free(*(void**)(((uint8_t*)obj) + o->offset));
+ val= av_strdup(val);
+ }
+
memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
return o;
}
+const AVOption *av_set_string(void *obj, const char *name, const char *val){
+ return av_set_string2(obj, name, val, 0);
+}
+
const AVOption *av_set_double(void *obj, const char *name, double n){
return av_set_number(obj, name, n, 1, 1);
}