Am 13.03.16 um 15:08 schrieb wm4: > On Sat, 12 Mar 2016 15:13:21 +0100 > Thilo Borgmann <thilo.borgm...@mail.de> wrote: > >> From a1d9ce388c69eabb256e6b351c2acd36d7f4076e Mon Sep 17 00:00:00 2001 >> From: Thilo Borgmann <thilo.borgm...@mail.de> >> Date: Sat, 12 Mar 2016 14:52:17 +0100 >> Subject: [PATCH 1/2] lavu/dict: Add new flag to allow multiple equal keys. >> >> --- >> libavutil/dict.c | 5 ++++- >> libavutil/dict.h | 5 +++-- >> 2 files changed, 7 insertions(+), 3 deletions(-) >> >> diff --git a/libavutil/dict.c b/libavutil/dict.c >> index 8bb65a1..70c0184 100644 >> --- a/libavutil/dict.c >> +++ b/libavutil/dict.c >> @@ -70,9 +70,12 @@ int av_dict_set(AVDictionary **pm, const char *key, const >> char *value, >> int flags) >> { >> AVDictionary *m = *pm; >> - AVDictionaryEntry *tag = av_dict_get(m, key, NULL, flags); >> + AVDictionaryEntry *tag = NULL; >> char *oldval = NULL, *copy_key = NULL, *copy_value = NULL; >> >> + if (!(flags & AV_DICT_MULTIKEY)) { >> + tag = av_dict_get(m, key, NULL, flags); >> + } >> if (flags & AV_DICT_DONT_STRDUP_KEY) >> copy_key = (void *)key; >> else >> diff --git a/libavutil/dict.h b/libavutil/dict.h >> index b0aa784..c589bcd 100644 >> --- a/libavutil/dict.h >> +++ b/libavutil/dict.h >> @@ -76,6 +76,7 @@ >> #define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. >> #define AV_DICT_APPEND 32 /**< If the entry already exists, >> append to it. Note that no >> delimiter is added, the strings are >> simply concatenated. */ >> +#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys >> in the dictionary */ >> >> typedef struct AVDictionaryEntry { >> char *key; >> @@ -118,8 +119,8 @@ int av_dict_count(const AVDictionary *m); >> * >> * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL >> * a dictionary struct is allocated and put in *pm. >> - * @param key entry key to add to *pm (will be av_strduped depending on >> flags) >> - * @param value entry value to add to *pm (will be av_strduped depending on >> flags). >> + * @param key entry key to add to *pm (will either be av_strduped or added >> as a new key depending on flags) >> + * @param value entry value to add to *pm (will be av_strduped or added as >> a new key depending on flags). >> * Passing a NULL value will cause an existing entry to be deleted. >> * @return >= 0 on success otherwise an error code <0 >> */ > > Changing the semantics of AVDictionary just like this seems rather > questionable...
It changes nothing for existing code, just adds a new feature. I don't think it hurts anyone or anything... > Are you sure you don't want a list instead? AVDictionary serves the purpose perfectly and already handles all the key value seperation, parsing and error resilience... do we have a list container ready to do that? I'm not happy to use a deprecated thing either but AVTree seems not to be ready yet (parsing from string, keeping insertion order of keys even when rebalancing and most importantly enumeration (sequentially search for keys) seems not to be ready for multiple keys - although the tree itself can handle mutliple equal keys). This is why I decided to go with adding a new flag to the AVDictionary rather than doing it with AVTree nearly from scratch... -Thilo _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel