diff options
author | Rodger Combs <rodger.combs@gmail.com> | 2015-09-21 04:16:58 -0500 |
---|---|---|
committer | Rodger Combs <rodger.combs@gmail.com> | 2015-10-09 04:12:57 -0500 |
commit | 0562f959021514a6697601e5b3e0690f41c06f4e (patch) | |
tree | 23b61f38ae3f3b18e19a2ee3de3f82667e706bdd /libavutil/opt.c | |
parent | f36baeebc55d326b0a665b3e3e91792aa81102b7 (diff) | |
download | ffmpeg-0562f959021514a6697601e5b3e0690f41c06f4e.tar.gz |
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.c | 12 |
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); |