FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
dict.h
Go to the documentation of this file.
1
/*
2
*
3
* This file is part of FFmpeg.
4
*
5
* FFmpeg is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License as published by the Free Software Foundation; either
8
* version 2.1 of the License, or (at your option) any later version.
9
*
10
* FFmpeg is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* Lesser General Public License for more details.
14
*
15
* You should have received a copy of the GNU Lesser General Public
16
* License along with FFmpeg; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
*/
19
20
/**
21
* @file
22
* Public dictionary API.
23
* @deprecated
24
* AVDictionary is provided for compatibility with libav. It is both in
25
* implementation as well as API inefficient. It does not scale and is
26
* extremely slow with large dictionaries.
27
* It is recommended that new code uses our tree container from tree.c/h
28
* where applicable, which uses AVL trees to achieve O(log n) performance.
29
*/
30
31
#ifndef AVUTIL_DICT_H
32
#define AVUTIL_DICT_H
33
34
#include <stdint.h>
35
36
#include "
version.h
"
37
38
/**
39
* @addtogroup lavu_dict AVDictionary
40
* @ingroup lavu_data
41
*
42
* @brief Simple key:value store
43
*
44
* @{
45
* Dictionaries are used for storing key:value pairs. To create
46
* an AVDictionary, simply pass an address of a NULL pointer to
47
* av_dict_set(). NULL can be used as an empty dictionary wherever
48
* a pointer to an AVDictionary is required.
49
* Use av_dict_get() to retrieve an entry or iterate over all
50
* entries and finally av_dict_free() to free the dictionary
51
* and all its contents.
52
*
53
@code
54
AVDictionary *d = NULL; // "create" an empty dictionary
55
AVDictionaryEntry *t = NULL;
56
57
av_dict_set(&d, "foo", "bar", 0); // add an entry
58
59
char *k = av_strdup("key"); // if your strings are already allocated,
60
char *v = av_strdup("value"); // you can avoid copying them like this
61
av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
62
63
while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
64
<....> // iterate over all entries in d
65
}
66
av_dict_free(&d);
67
@endcode
68
*
69
*/
70
71
#define AV_DICT_MATCH_CASE 1
/**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
72
#define AV_DICT_IGNORE_SUFFIX 2
/**< Return first entry in a dictionary whose first part corresponds to the search key,
73
ignoring the suffix of the found key string. Only relevant in av_dict_get(). */
74
#define AV_DICT_DONT_STRDUP_KEY 4
/**< Take ownership of a key that's been
75
allocated with av_malloc() or another memory allocation function. */
76
#define AV_DICT_DONT_STRDUP_VAL 8
/**< Take ownership of a value that's been
77
allocated with av_malloc() or another memory allocation function. */
78
#define AV_DICT_DONT_OVERWRITE 16
///< Don't overwrite existing entries.
79
#define AV_DICT_APPEND 32
/**< If the entry already exists, append to it. Note that no
80
delimiter is added, the strings are simply concatenated. */
81
82
typedef
struct
AVDictionaryEntry
{
83
char
*
key
;
84
char
*
value
;
85
}
AVDictionaryEntry
;
86
87
typedef
struct
AVDictionary
AVDictionary
;
88
89
/**
90
* Get a dictionary entry with matching key.
91
*
92
* The returned entry key or value must not be changed, or it will
93
* cause undefined behavior.
94
*
95
* To iterate through all the dictionary entries, you can set the matching key
96
* to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
97
*
98
* @param prev Set to the previous matching element to find the next.
99
* If set to NULL the first matching element is returned.
100
* @param key matching key
101
* @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved
102
* @return found entry or NULL in case no matching entry was found in the dictionary
103
*/
104
AVDictionaryEntry
*
av_dict_get
(
const
AVDictionary
*
m
,
const
char
*key,
105
const
AVDictionaryEntry
*prev,
int
flags
);
106
107
/**
108
* Get number of entries in dictionary.
109
*
110
* @param m dictionary
111
* @return number of entries in dictionary
112
*/
113
int
av_dict_count
(
const
AVDictionary
*
m
);
114
115
/**
116
* Set the given entry in *pm, overwriting an existing entry.
117
*
118
* Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set,
119
* these arguments will be freed on error.
120
*
121
* @param pm pointer to a pointer to a dictionary struct. If *pm is NULL
122
* a dictionary struct is allocated and put in *pm.
123
* @param key entry key to add to *pm (will be av_strduped depending on flags)
124
* @param value entry value to add to *pm (will be av_strduped depending on flags).
125
* Passing a NULL value will cause an existing entry to be deleted.
126
* @return >= 0 on success otherwise an error code <0
127
*/
128
int
av_dict_set
(
AVDictionary
**pm,
const
char
*key,
const
char
*
value
,
int
flags
);
129
130
/**
131
* Convenience wrapper for av_dict_set that converts the value to a string
132
* and stores it.
133
*
134
* Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error.
135
*/
136
int
av_dict_set_int
(
AVDictionary
**pm,
const
char
*key, int64_t
value
,
int
flags
);
137
138
/**
139
* Parse the key/value pairs list and add the parsed entries to a dictionary.
140
*
141
* In case of failure, all the successfully set entries are stored in
142
* *pm. You may need to manually free the created dictionary.
143
*
144
* @param key_val_sep a 0-terminated list of characters used to separate
145
* key from value
146
* @param pairs_sep a 0-terminated list of characters used to separate
147
* two pairs from each other
148
* @param flags flags to use when adding to dictionary.
149
* AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL
150
* are ignored since the key/value tokens will always
151
* be duplicated.
152
* @return 0 on success, negative AVERROR code on failure
153
*/
154
int
av_dict_parse_string
(
AVDictionary
**pm,
const
char
*str,
155
const
char
*key_val_sep,
const
char
*pairs_sep,
156
int
flags
);
157
158
/**
159
* Copy entries from one AVDictionary struct into another.
160
* @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
161
* this function will allocate a struct for you and put it in *dst
162
* @param src pointer to source AVDictionary struct
163
* @param flags flags to use when setting entries in *dst
164
* @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
165
*/
166
void
av_dict_copy
(
AVDictionary
**dst,
const
AVDictionary
*
src
,
int
flags
);
167
168
/**
169
* Free all the memory allocated for an AVDictionary struct
170
* and all keys and values.
171
*/
172
void
av_dict_free
(
AVDictionary
**
m
);
173
174
/**
175
* Get dictionary entries as a string.
176
*
177
* Create a string containing dictionary's entries.
178
* Such string may be passed back to av_dict_parse_string().
179
* @note String is escaped with backslashes ('\').
180
*
181
* @param[in] m dictionary
182
* @param[out] buffer Pointer to buffer that will be allocated with string containg entries.
183
* Buffer must be freed by the caller when is no longer needed.
184
* @param[in] key_val_sep character used to separate key from value
185
* @param[in] pairs_sep character used to separate two pairs from each other
186
* @return >= 0 on success, negative on error
187
* @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
188
*/
189
int
av_dict_get_string
(
const
AVDictionary
*
m
,
char
**
buffer
,
190
const
char
key_val_sep,
const
char
pairs_sep);
191
192
/**
193
* @}
194
*/
195
196
#endif
/* AVUTIL_DICT_H */
Generated on Sun Mar 8 2015 02:35:14 for FFmpeg by
1.8.2