diff options
author | Anton Khirnov <anton@khirnov.net> | 2011-08-29 07:54:56 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2011-09-04 13:12:00 +0200 |
commit | 6361c5e1e61033259e91b480f23ae81bed775c8b (patch) | |
tree | 5aa1a4981835e2a49e09d20eb9a58fefb8d4979f /cmdutils.c | |
parent | 2f8e586df14649ebf1538dc610928c844e0068ec (diff) | |
download | ffmpeg-6361c5e1e61033259e91b480f23ae81bed775c8b.tar.gz |
cmdutils: allow storing per-stream/chapter/.... options in a generic way
Diffstat (limited to 'cmdutils.c')
-rw-r--r-- | cmdutils.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/cmdutils.c b/cmdutils.c index 1eed404647..6c64d47d01 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -207,6 +207,7 @@ int parse_option(void *optctx, const char *opt, const char *arg, const OptionDef { const OptionDef *po; int bool_val = 1; + int *dstcount; void *dst; po = find_option(options, opt); @@ -231,7 +232,17 @@ unknown_opt: /* new-style options contain an offset into optctx, old-style address of * a global var*/ - dst = po->flags & (OPT_OFFSET) ? (uint8_t*)optctx + po->u.off : po->u.dst_ptr; + dst = po->flags & (OPT_OFFSET|OPT_SPEC) ? (uint8_t*)optctx + po->u.off : po->u.dst_ptr; + + if (po->flags & OPT_SPEC) { + SpecifierOpt **so = dst; + char *p = strchr(opt, ':'); + + dstcount = (int*)(so + 1); + *so = grow_array(*so, sizeof(**so), dstcount, *dstcount + 1); + (*so)[*dstcount - 1].specifier = av_strdup(p ? p + 1 : ""); + dst = &(*so)[*dstcount - 1].u; + } if (po->flags & OPT_STRING) { char *str; |