Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
ab922f9e
Commit
ab922f9e
authored
Nov 16, 2014
by
Lukasz Marek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavu/dict: add av_dict_get_string
Signed-off-by:
Lukasz Marek
<
lukasz.m.luki2@gmail.com
>
parent
7d75a399
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
113 additions
and
1 deletion
+113
-1
APIchanges
doc/APIchanges
+3
-0
Makefile
libavutil/Makefile
+1
-0
dict.c
libavutil/dict.c
+90
-0
dict.h
libavutil/dict.h
+18
-0
version.h
libavutil/version.h
+1
-1
No files found.
doc/APIchanges
View file @
ab922f9e
...
...
@@ -15,6 +15,9 @@ libavutil: 2014-08-09
API changes, most recent first:
2014-11-21 - xxxxxxx - lavu 54.15.100 - dict.h
Add av_dict_get_string().
2014-11-18 - xxxxxxx - lavu 54.14.100 - float_dsp.h
Add avpriv_float_dsp_alloc().
...
...
libavutil/Makefile
View file @
ab922f9e
...
...
@@ -157,6 +157,7 @@ TESTPROGS = adler32 \
cpu
\
crc
\
des
\
dict
\
error
\
eval
\
file
\
...
...
libavutil/dict.c
View file @
ab922f9e
...
...
@@ -24,6 +24,7 @@
#include "dict.h"
#include "internal.h"
#include "mem.h"
#include "bprint.h"
struct
AVDictionary
{
int
count
;
...
...
@@ -207,3 +208,92 @@ 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_get_string
(
const
AVDictionary
*
m
,
char
**
buffer
,
const
char
key_val_sep
,
const
char
pairs_sep
)
{
AVDictionaryEntry
*
t
=
NULL
;
AVBPrint
bprint
;
int
cnt
=
0
;
char
special_chars
[]
=
{
pairs_sep
,
key_val_sep
,
'\0'
};
if
(
!
buffer
||
pairs_sep
==
'\0'
||
key_val_sep
==
'\0'
||
pairs_sep
==
key_val_sep
||
pairs_sep
==
'\\'
||
key_val_sep
==
'\\'
)
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_bprint_escape
(
&
bprint
,
t
->
key
,
special_chars
,
AV_ESCAPE_MODE_BACKSLASH
,
0
);
av_bprint_append_data
(
&
bprint
,
&
key_val_sep
,
1
);
av_bprint_escape
(
&
bprint
,
t
->
value
,
special_chars
,
AV_ESCAPE_MODE_BACKSLASH
,
0
);
}
return
av_bprint_finalize
(
&
bprint
,
buffer
);
}
#ifdef TEST
static
void
print_dict
(
const
AVDictionary
*
m
)
{
AVDictionaryEntry
*
t
=
NULL
;
while
((
t
=
av_dict_get
(
m
,
""
,
t
,
AV_DICT_IGNORE_SUFFIX
)))
printf
(
"%s %s "
,
t
->
key
,
t
->
value
);
printf
(
"
\n
"
);
}
static
void
test_separators
(
const
AVDictionary
*
m
,
const
char
pair
,
const
char
val
)
{
AVDictionary
*
dict
=
NULL
;
char
pairs
[]
=
{
pair
,
'\0'
};
char
vals
[]
=
{
val
,
'\0'
};
char
*
buffer
=
NULL
;
av_dict_copy
(
&
dict
,
m
,
0
);
print_dict
(
dict
);
av_dict_get_string
(
dict
,
&
buffer
,
val
,
pair
);
printf
(
"%s
\n
"
,
buffer
);
av_dict_free
(
&
dict
);
av_dict_parse_string
(
&
dict
,
buffer
,
vals
,
pairs
,
0
);
av_freep
(
&
buffer
);
print_dict
(
dict
);
av_dict_free
(
&
dict
);
}
int
main
(
void
)
{
AVDictionary
*
dict
=
NULL
;
char
*
buffer
=
NULL
;
printf
(
"Testing av_dict_get_string() and av_dict_parse_string()
\n
"
);
av_dict_get_string
(
dict
,
&
buffer
,
'='
,
','
);
printf
(
"%s
\n
"
,
buffer
);
av_freep
(
&
buffer
);
av_dict_set
(
&
dict
,
"aaa"
,
"aaa"
,
0
);
av_dict_set
(
&
dict
,
"b,b"
,
"bbb"
,
0
);
av_dict_set
(
&
dict
,
"c=c"
,
"ccc"
,
0
);
av_dict_set
(
&
dict
,
"ddd"
,
"d,d"
,
0
);
av_dict_set
(
&
dict
,
"eee"
,
"e=e"
,
0
);
av_dict_set
(
&
dict
,
"f,f"
,
"f=f"
,
0
);
av_dict_set
(
&
dict
,
"g=g"
,
"g,g"
,
0
);
test_separators
(
dict
,
','
,
'='
);
av_dict_free
(
&
dict
);
av_dict_set
(
&
dict
,
"aaa"
,
"aaa"
,
0
);
av_dict_set
(
&
dict
,
"bbb"
,
"bbb"
,
0
);
av_dict_set
(
&
dict
,
"ccc"
,
"ccc"
,
0
);
av_dict_set
(
&
dict
,
"
\\
,=
\'\"
"
,
"
\\
,=
\'\"
"
,
0
);
test_separators
(
dict
,
'"'
,
'='
);
test_separators
(
dict
,
'\''
,
'='
);
test_separators
(
dict
,
','
,
'"'
);
test_separators
(
dict
,
','
,
'\''
);
test_separators
(
dict
,
'\''
,
'"'
);
test_separators
(
dict
,
'"'
,
'\''
);
av_dict_free
(
&
dict
);
return
0
;
}
#endif
libavutil/dict.h
View file @
ab922f9e
...
...
@@ -171,6 +171,24 @@ void av_dict_copy(AVDictionary **dst, FF_CONST_AVUTIL53 AVDictionary *src, int f
*/
void
av_dict_free
(
AVDictionary
**
m
);
/**
* Get dictionary entries as a string.
*
* Create a string containing dictionary's entries.
* Such string may be passed back to av_dict_parse_string().
* @note String is escaped with backslashes ('\').
*
* @param[in] m 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
* @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
);
/**
* @}
*/
...
...
libavutil/version.h
View file @
ab922f9e
...
...
@@ -56,7 +56,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 54
#define LIBAVUTIL_VERSION_MINOR 1
4
#define LIBAVUTIL_VERSION_MINOR 1
5
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment