[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