TODO: bump minor, update doc/APIchanges Signed-off-by: Lukasz Marek <lukasz.m.lu...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel