lavu/opt: add av_opt_set_dict2() function
authorLukasz Marek <lukasz.m.luki2@gmail.com>
Tue, 29 Apr 2014 21:57:24 +0000 (23:57 +0200)
committerLukasz Marek <lukasz.m.luki2@gmail.com>
Fri, 2 May 2014 16:04:05 +0000 (18:04 +0200)
Existing av_opt_set_dict doesn't accept flags.
It doesn't allow to pass options to nested structs.
New function alllows that.

Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
doc/APIchanges
libavutil/opt.c
libavutil/opt.h
libavutil/version.h

index 7e3c592d75ebb0a2a2df66be26312d972222487d..b4fa99f2d48769860566710a71a3ddd86953f1be 100644 (file)
@@ -15,6 +15,9 @@ libavutil:     2012-10-22
 
 API changes, most recent first:
 
+2014-05-xx - xxxxxxx - lavu 52.81.0 - opt.h
+  Add av_opt_set_dict2() function.
+
 2014-04-xx - xxxxxxx - lavc 55.50.3 - avcodec.h
   Deprecate CODEC_FLAG_MV0. It is replaced by the flag "mv0" in the
   "mpv_flags" private option of the mpegvideo encoders.
index 33ebe52749e4eee14180aa4207d7280fdfe33aef..199eadbc05db9cdedd0e1b3adb2064d5d5fabf21 100644 (file)
@@ -1415,7 +1415,7 @@ void av_opt_free(void *obj)
             av_freep((uint8_t *)obj + o->offset);
 }
 
-int av_opt_set_dict(void *obj, AVDictionary **options)
+int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
 {
     AVDictionaryEntry *t = NULL;
     AVDictionary    *tmp = NULL;
@@ -1425,7 +1425,7 @@ int av_opt_set_dict(void *obj, AVDictionary **options)
         return 0;
 
     while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
-        ret = av_opt_set(obj, t->key, t->value, 0);
+        ret = av_opt_set(obj, t->key, t->value, search_flags);
         if (ret == AVERROR_OPTION_NOT_FOUND)
             av_dict_set(&tmp, t->key, t->value, 0);
         else if (ret < 0) {
@@ -1439,6 +1439,11 @@ int av_opt_set_dict(void *obj, AVDictionary **options)
     return ret;
 }
 
+int av_opt_set_dict(void *obj, AVDictionary **options)
+{
+    return av_opt_set_dict2(obj, options, 0);
+}
+
 const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
                             int opt_flags, int search_flags)
 {
index 6a1ae4354affd79e3d009bf518b4fd9917f2d2d9..1e1dd69b30e835e1f255fb6f5f3b4c80bddfe6a3 100644 (file)
@@ -541,6 +541,24 @@ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name)
  */
 int av_opt_set_dict(void *obj, struct AVDictionary **options);
 
+
+/**
+ * Set all the options from a given dictionary on an object.
+ *
+ * @param obj a struct whose first element is a pointer to AVClass
+ * @param options options to process. This dictionary will be freed and replaced
+ *                by a new one containing all options not found in obj.
+ *                Of course this new dictionary needs to be freed by caller
+ *                with av_dict_free().
+ * @param search_flags A combination of AV_OPT_SEARCH_*.
+ *
+ * @return 0 on success, a negative AVERROR if some option was found in obj,
+ *         but could not be set.
+ *
+ * @see av_dict_copy()
+ */
+int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags);
+
 /**
  * Extract a key-value pair from the beginning of a string.
  *
index a17cb506de889b76786d798ff4587da1cd0d219e..3cb5b66666ddbe433eba2dd4d4916439081fe8a6 100644 (file)
@@ -56,7 +56,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  52
-#define LIBAVUTIL_VERSION_MINOR  80
+#define LIBAVUTIL_VERSION_MINOR  81
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \