[FFmpeg-devel] [PATCH 07/11] lavu/dict: add av_dict_serialize
Lukasz Marek
lukasz.m.luki2 at gmail.com
Mon Nov 17 02:46:54 CET 2014
TODO: bump minor, update doc/APIchanges
Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>
---
libavutil/dict.c | 27 +++++++++++++++++++++++++++
libavutil/dict.h | 16 ++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/libavutil/dict.c b/libavutil/dict.c
index 475e906..a41d61e 100644
--- a/libavutil/dict.c
+++ b/libavutil/dict.c
@@ -24,6 +24,7 @@
#include "dict.h"
#include "internal.h"
#include "mem.h"
+#include "bprint.h"
struct AVDictionary {
int count;
@@ -207,3 +208,29 @@ void av_dict_copy(AVDictionary **dst, FF_CONST_AVUTIL53 AVDictionary *src, int f
while ((t = av_dict_get(src, "", t, AV_DICT_IGNORE_SUFFIX)))
av_dict_set(dst, t->key, t->value, flags);
}
+
+int av_dict_serialize(const AVDictionary *m, char **buffer,
+ const char pairs_sep, const char key_val_sep)
+{
+ AVDictionaryEntry *t = NULL;
+ AVBPrint bprint;
+ int cnt = 0;
+
+ if (!m || !buffer)
+ return AVERROR(EINVAL);
+
+ if (!av_dict_count(m)) {
+ *buffer = av_strdup("");
+ return *buffer ? 0 : AVERROR(ENOMEM);
+ }
+
+ av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED);
+
+ while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) {
+ if (cnt++)
+ av_bprint_append_data(&bprint, &pairs_sep, 1);
+ av_bprintf(&bprint, "%s%c%s", t->key, key_val_sep, t->value);
+ }
+
+ return av_bprint_finalize(&bprint, buffer);
+}
diff --git a/libavutil/dict.h b/libavutil/dict.h
index 9b3381b..6088837 100644
--- a/libavutil/dict.h
+++ b/libavutil/dict.h
@@ -172,6 +172,22 @@ void av_dict_copy(AVDictionary **dst, FF_CONST_AVUTIL53 AVDictionary *src, int f
void av_dict_free(AVDictionary **m);
/**
+ * Serialize a dictionary.
+ *
+ * Create a string containing dictionary's serialized entries.
+ * Such string may be passed back to av_dict_parse_string().
+ *
+ * @param[in] m dictionary to serialize
+ * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized entries.
+ * Buffer must be freed by the caller when is no longer needed.
+ * @param[in] key_val_sep character used to separate key from value
+ * @param[in] pairs_sep character used to separate two pairs from each other
+ * @return >= 0 on success, negative on error
+ */
+int av_dict_serialize(const AVDictionary *m, char **buffer,
+ const char pairs_sep, const char key_val_sep);
+
+/**
* @}
*/
--
1.9.1
More information about the ffmpeg-devel
mailing list