[FFmpeg-cvslog] cmdutils: change semantics of show_help_options() and document it.
Anton Khirnov
git at videolan.org
Mon Aug 20 16:58:28 CEST 2012
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Aug 11 19:45:30 2012 +0200| [7c5012127fb7e18f0616011257bb4248f6a8b608] | committer: Anton Khirnov
cmdutils: change semantics of show_help_options() and document it.
Currently it takes a mask and value, such that options for which
(flags & mask) == value.
Change it to take required flags and forbidden flags instead. This is
shorter and simpler to understand.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7c5012127fb7e18f0616011257bb4248f6a8b608
---
avconv_opt.c | 19 +++++++------------
avplay.c | 6 ++----
cmdutils.c | 29 ++++++++++++++++-------------
cmdutils.h | 12 ++++++++++--
4 files changed, 35 insertions(+), 31 deletions(-)
diff --git a/avconv_opt.c b/avconv_opt.c
index 8915a86..ac1a65e 100644
--- a/avconv_opt.c
+++ b/avconv_opt.c
@@ -1795,24 +1795,19 @@ static int show_help(const char *opt, const char *arg)
av_log_set_callback(log_callback_help);
show_usage();
show_help_options(options, "Main options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, 0);
+ 0, OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE);
show_help_options(options, "Advanced options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE,
- OPT_EXPERT);
+ OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE);
show_help_options(options, "Video options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
- OPT_VIDEO);
+ OPT_VIDEO, OPT_EXPERT | OPT_AUDIO);
show_help_options(options, "Advanced Video options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
- OPT_VIDEO | OPT_EXPERT);
+ OPT_EXPERT | OPT_VIDEO, OPT_AUDIO);
show_help_options(options, "Audio options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
- OPT_AUDIO);
+ OPT_AUDIO, OPT_EXPERT | OPT_VIDEO);
show_help_options(options, "Advanced Audio options:",
- OPT_EXPERT | OPT_AUDIO | OPT_VIDEO,
- OPT_AUDIO | OPT_EXPERT);
+ OPT_EXPERT | OPT_AUDIO, OPT_VIDEO);
show_help_options(options, "Subtitle options:",
- OPT_SUBTITLE, OPT_SUBTITLE);
+ OPT_SUBTITLE, 0);
printf("\n");
show_help_children(avcodec_get_class(), flags);
show_help_children(avformat_get_class(), flags);
diff --git a/avplay.c b/avplay.c
index bb10810..64d7b3d 100644
--- a/avplay.c
+++ b/avplay.c
@@ -2926,10 +2926,8 @@ static int show_help(const char *opt, const char *arg)
{
av_log_set_callback(log_callback_help);
show_usage();
- show_help_options(options, "Main options:",
- OPT_EXPERT, 0);
- show_help_options(options, "Advanced options:",
- OPT_EXPERT, OPT_EXPERT);
+ show_help_options(options, "Main options:", 0, OPT_EXPERT);
+ show_help_options(options, "Advanced options:", OPT_EXPERT, 0);
printf("\n");
show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM);
show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
diff --git a/cmdutils.c b/cmdutils.c
index 5107744..bc5cb8a 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -113,8 +113,8 @@ int64_t parse_time_or_die(const char *context, const char *timestr,
return us;
}
-void show_help_options(const OptionDef *options, const char *msg, int mask,
- int value)
+void show_help_options(const OptionDef *options, const char *msg, int req_flags,
+ int rej_flags)
{
const OptionDef *po;
int first;
@@ -122,18 +122,21 @@ void show_help_options(const OptionDef *options, const char *msg, int mask,
first = 1;
for (po = options; po->name != NULL; po++) {
char buf[64];
- if ((po->flags & mask) == value) {
- if (first) {
- printf("%s\n", msg);
- first = 0;
- }
- av_strlcpy(buf, po->name, sizeof(buf));
- if (po->flags & HAS_ARG) {
- av_strlcat(buf, " ", sizeof(buf));
- av_strlcat(buf, po->argname, sizeof(buf));
- }
- printf("-%-17s %s\n", buf, po->help);
+
+ if (((po->flags & req_flags) != req_flags) ||
+ (po->flags & rej_flags))
+ continue;
+
+ if (first) {
+ printf("%s\n", msg);
+ first = 0;
+ }
+ av_strlcpy(buf, po->name, sizeof(buf));
+ if (po->flags & HAS_ARG) {
+ av_strlcat(buf, " ", sizeof(buf));
+ av_strlcat(buf, po->argname, sizeof(buf));
}
+ printf("-%-17s %s\n", buf, po->help);
}
printf("\n");
}
diff --git a/cmdutils.h b/cmdutils.h
index 6fb5a35..eb8a22a 100644
--- a/cmdutils.h
+++ b/cmdutils.h
@@ -153,8 +153,16 @@ typedef struct {
const char *argname;
} OptionDef;
-void show_help_options(const OptionDef *options, const char *msg, int mask,
- int value);
+/**
+ * Print help for all options matching specified flags.
+ *
+ * @param options a list of options
+ * @param msg title of this group. Only printed if at least one option matches.
+ * @param req_flags print only options which have all those flags set.
+ * @param rej_flags don't print options which have any of those flags set.
+ */
+void show_help_options(const OptionDef *options, const char *msg, int req_flags,
+ int rej_flags);
/**
* Show help for all options with given flags in class and all its
More information about the ffmpeg-cvslog
mailing list