diff --git a/avconv_opt.c b/avconv_opt.c index 8915a865c9..ac1a65ecfb 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 bb10810492..64d7b3da33 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 51077449b7..bc5cb8aae2 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 6fb5a35093..eb8a22a003 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