From 6361c5e1e61033259e91b480f23ae81bed775c8b Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 29 Aug 2011 07:54:56 +0200 Subject: cmdutils: allow storing per-stream/chapter/.... options in a generic way --- cmdutils.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'cmdutils.c') 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; -- cgit v1.2.3