summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/opt.c11
-rw-r--r--libavcodec/opt.h12
2 files changed, 21 insertions, 2 deletions
diff --git a/libavcodec/opt.c b/libavcodec/opt.c
index 321bf6cc27..3e10380222 100644
--- a/libavcodec/opt.c
+++ b/libavcodec/opt.c
@@ -115,7 +115,7 @@ static int hexchar2int(char c) {
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);
@@ -195,10 +195,19 @@ const AVOption *av_set_string(void *obj, const char *name, const char *val){
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);
}
diff --git a/libavcodec/opt.h b/libavcodec/opt.h
index cbcdedc3c4..26039f49b3 100644
--- a/libavcodec/opt.h
+++ b/libavcodec/opt.h
@@ -98,7 +98,17 @@ typedef struct AVOption {
* has been found
*/
const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
-const AVOption *av_set_string(void *obj, const char *name, const char *val);
+
+attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);
+
+/**
+ * Sets the field of obj with the given name to value.
+ * @param alloc when 1 then the old value will be av_freed() and the
+ * new av_strduped()
+ * when 0 then no av_free() nor av_strdup() will be used
+ */
+const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
+
const AVOption *av_set_double(void *obj, const char *name, double n);
const AVOption *av_set_q(void *obj, const char *name, AVRational n);
const AVOption *av_set_int(void *obj, const char *name, int64_t n);