@ -39,13 +39,15 @@
* @ brief Simple key : value store
*
* @ {
* Dictionaries are used for storing key : value pairs . To create
* an AVDictionary , simply pass an address of a NULL pointer to
* av_dict_set ( ) . NULL can be used as an empty dictionary wherever
* a pointer to an AVDictionary is required .
* Use av_dict_get ( ) to retrieve an entry and av_dict_iterate ( ) to
* iterate over all entries and finally av_dict_free ( ) to free the
* dictionary and all its contents .
* Dictionaries are used for storing key - value pairs .
*
* - To * * create an AVDictionary * * , simply pass an address of a NULL
* pointer to av_dict_set ( ) . NULL can be used as an empty dictionary
* wherever a pointer to an AVDictionary is required .
* - To * * insert an entry * * , use av_dict_set ( ) .
* - Use av_dict_get ( ) to * * retrieve an entry * * .
* - To * * iterate over all entries * * , use av_dict_iterate ( ) .
* - In order to * * free the dictionary and all its contents * * , use av_dict_free ( ) .
*
@ code
AVDictionary * d = NULL ; // "create" an empty dictionary
@ -57,13 +59,18 @@
char * v = av_strdup ( " value " ) ; // you can avoid copying them like this
av_dict_set ( & d , k , v , AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL ) ;
while ( t = av_dict_iterate ( d , t ) ) {
while ( ( t = av_dict_iterate ( d , t ) ) ) {
< . . . . > // iterate over all entries in d
}
av_dict_free ( & d ) ;
@ endcode
*/
/**
* @ name AVDictionary Flags
* Flags that influence behavior of the matching of keys or insertion to the dictionary .
* @ {
*/
# define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
# define AV_DICT_IGNORE_SUFFIX 2 / **< Return first entry in a dictionary whose first part corresponds to the search key,
ignoring the suffix of the found key string . Only relevant in av_dict_get ( ) . */
@ -71,10 +78,13 @@
allocated with av_malloc ( ) or another memory allocation function . */
# define AV_DICT_DONT_STRDUP_VAL 8 / **< Take ownership of a value that's been
allocated with av_malloc ( ) or another memory allocation function . */
# define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
# 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 . */
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 ;
@ -89,11 +99,13 @@ typedef struct AVDictionary AVDictionary;
* The returned entry key or value must not be changed , or it will
* cause undefined behavior .
*
* @ param prev Set to the previous matching element to find the next .
* If set to NULL the first matching element is returned .
* @ param key matching key
* @ param flags a collection of AV_DICT_ * flags controlling how the entry is retrieved
* @ return found entry or NULL in case no matching entry was found in the dictionary
* @ param prev Set to the previous matching element to find the next .
* If set to NULL the first matching element is returned .
* @ param key Matching key
* @ param flags A collection of AV_DICT_ * flags controlling how the
* entry is retrieved
*
* @ return Found entry or NULL in case no matching entry was found in the dictionary
*/
AVDictionaryEntry * av_dict_get ( const AVDictionary * m , const char * key ,
const AVDictionaryEntry * prev , int flags ) ;
@ -142,20 +154,21 @@ int av_dict_count(const AVDictionary *m);
* @ warning Adding a new entry to a dictionary invalidates all existing entries
* previously returned with av_dict_get ( ) or av_dict_iterate ( ) .
*
* @ 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 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
* @ 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 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
*/
int av_dict_set ( AVDictionary * * pm , const char * key , const char * value , int flags ) ;
/**
* Convenience wrapper for av_dict_set that converts the value to a string
* Convenience wrapper for av_dict_set ( ) that converts the value to a string
* and stores it .
*
* Note : If AV_DICT_DONT_STRDUP_KEY is set , key will be freed on error .
* Note : If : : AV_DICT_DONT_STRDUP_KEY is set , key will be freed on error .
*/
int av_dict_set_int ( AVDictionary * * pm , const char * key , int64_t value , int flags ) ;
@ -165,14 +178,15 @@ int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags
* In case of failure , all the successfully set entries are stored in
* * pm . You may need to manually free the created dictionary .
*
* @ param key_val_sep a 0 - terminated list of characters used to separate
* @ param key_val_sep A 0 - terminated list of characters used to separate
* key from value
* @ param pairs_sep a 0 - terminated list of characters used to separate
* @ param pairs_sep A 0 - terminated list of characters used to separate
* two pairs from each other
* @ param flags f lags to use when adding to dictionary .
* AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL
* @ param flags F lags to use when adding to the dictionary .
* : : AV_DICT_DONT_STRDUP_KEY and : : AV_DICT_DONT_STRDUP_VAL
* are ignored since the key / value tokens will always
* be duplicated .
*
* @ return 0 on success , negative AVERROR code on failure
*/
int av_dict_parse_string ( AVDictionary * * pm , const char * str ,
@ -181,11 +195,14 @@ int av_dict_parse_string(AVDictionary **pm, const char *str,
/**
* Copy entries from one AVDictionary struct into another .
* @ param dst pointer to a pointer to a AVDictionary struct . If * dst is NULL ,
* this function will allocate a struct for you and put it in * dst
* @ param src pointer to source AVDictionary struct
* @ param flags flags to use when setting entries in * dst
* @ note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
*
* @ note Metadata is read using the : : AV_DICT_IGNORE_SUFFIX flag
*
* @ param dst Pointer to a pointer to a AVDictionary struct to copy into . If * dst is NULL ,
* this function will allocate a struct for you and put it in * dst
* @ param src Pointer to the source AVDictionary struct to copy items from .
* @ param flags Flags to use when setting entries in * dst
*
* @ return 0 on success , negative AVERROR code on failure . If dst was allocated
* by this function , callers should free the associated memory .
*/
@ -204,13 +221,15 @@ void av_dict_free(AVDictionary **m);
* Such string may be passed back to av_dict_parse_string ( ) .
* @ note String is escaped with backslashes ( ' \ ' ) .
*
* @ param [ in ] m dictionary
* @ warning Separators cannot be neither ' \\ ' nor ' \0 ' . They also cannot be the same .
*
* @ param [ in ] m The dictionary
* @ param [ out ] buffer Pointer to buffer that will be allocated with string containg 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
* @ 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
* @ warning Separators cannot be neither ' \\ ' nor ' \0 ' . They also cannot be the same .
*/
int av_dict_get_string ( const AVDictionary * m , char * * buffer ,
const char key_val_sep , const char pairs_sep ) ;