Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodger Combs <rodger.combs@gmail.com>2015-09-21 12:16:58 +0300
committerRodger Combs <rodger.combs@gmail.com>2015-10-09 12:12:57 +0300
commit0562f959021514a6697601e5b3e0690f41c06f4e (patch)
tree23b61f38ae3f3b18e19a2ee3de3f82667e706bdd /libavutil/opt.c
parentf36baeebc55d326b0a665b3e3e91792aa81102b7 (diff)
lavu/opt: add flag to return NULL when applicable in av_opt_get
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavutil/opt.c')
-rw-r--r--libavutil/opt.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/libavutil/opt.c b/libavutil/opt.c
index ce80de0596..03160c7602 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -666,12 +666,20 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break;
case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break;
case AV_OPT_TYPE_STRING:
- if (*(uint8_t**)dst)
+ if (*(uint8_t**)dst) {
*out_val = av_strdup(*(uint8_t**)dst);
- else
+ } else if (search_flags & AV_OPT_ALLOW_NULL) {
+ *out_val = NULL;
+ return 0;
+ } else {
*out_val = av_strdup("");
+ }
return *out_val ? 0 : AVERROR(ENOMEM);
case AV_OPT_TYPE_BINARY:
+ if (!*(uint8_t**)dst && (search_flags & AV_OPT_ALLOW_NULL)) {
+ *out_val = NULL;
+ return 0;
+ }
len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *));
if ((uint64_t)len*2 + 1 > INT_MAX)
return AVERROR(EINVAL);