diff --git a/avconv_opt.c b/avconv_opt.c index 7d4922c375..2c6af6a94b 100644 --- a/avconv_opt.c +++ b/avconv_opt.c @@ -1791,6 +1791,8 @@ static int opt_filter_complex(const char *opt, const char *arg) void show_help_default(const char *opt, const char *arg) { + /* per-file options have at least one of those set */ + const int per_file = OPT_SPEC | OPT_OFFSET | OPT_FUNC2; int show_advanced = 0, show_avoptions = 0; if (opt) { @@ -1812,27 +1814,35 @@ void show_help_default(const char *opt, const char *arg) "\n", program_name); show_help_options(options, "Print help / information / capabilities:", - OPT_EXIT, 0); - show_help_options(options, "Main options:", - 0, OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE | - OPT_EXIT); + OPT_EXIT, 0, 0); + + show_help_options(options, "Global options (affect whole program " + "instead of just one file:", + 0, per_file | OPT_EXIT | OPT_EXPERT, 0); + if (show_advanced) + show_help_options(options, "Advanced global options:", OPT_EXPERT, + per_file | OPT_EXIT, 0); + + show_help_options(options, "Per-file main options:", 0, + OPT_EXPERT | OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE | + OPT_EXIT, per_file); if (show_advanced) - show_help_options(options, "Advanced options:", - OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE); + show_help_options(options, "Advanced per-file options:", + OPT_EXPERT, OPT_AUDIO | OPT_VIDEO | OPT_SUBTITLE, per_file); show_help_options(options, "Video options:", - OPT_VIDEO, OPT_EXPERT | OPT_AUDIO); + OPT_VIDEO, OPT_EXPERT | OPT_AUDIO, 0); if (show_advanced) show_help_options(options, "Advanced Video options:", - OPT_EXPERT | OPT_VIDEO, OPT_AUDIO); + OPT_EXPERT | OPT_VIDEO, OPT_AUDIO, 0); show_help_options(options, "Audio options:", - OPT_AUDIO, OPT_EXPERT | OPT_VIDEO); + OPT_AUDIO, OPT_EXPERT | OPT_VIDEO, 0); if (show_advanced) show_help_options(options, "Advanced Audio options:", - OPT_EXPERT | OPT_AUDIO, OPT_VIDEO); + OPT_EXPERT | OPT_AUDIO, OPT_VIDEO, 0); show_help_options(options, "Subtitle options:", - OPT_SUBTITLE, 0); + OPT_SUBTITLE, 0, 0); printf("\n"); if (show_avoptions) { diff --git a/avplay.c b/avplay.c index 4322802e2c..0c642e07b0 100644 --- a/avplay.c +++ b/avplay.c @@ -2924,8 +2924,8 @@ void show_help_default(const char *opt, const char *arg) { av_log_set_callback(log_callback_help); show_usage(); - show_help_options(options, "Main options:", 0, OPT_EXPERT); - show_help_options(options, "Advanced options:", OPT_EXPERT, 0); + show_help_options(options, "Main options:", 0, OPT_EXPERT, 0); + show_help_options(options, "Advanced options:", OPT_EXPERT, 0, 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/avprobe.c b/avprobe.c index b708cb6683..00e0ad09e0 100644 --- a/avprobe.c +++ b/avprobe.c @@ -872,7 +872,7 @@ void show_help_default(const char *opt, const char *arg) { av_log_set_callback(log_callback_help); show_usage(); - show_help_options(options, "Main options:", 0, 0); + show_help_options(options, "Main options:", 0, 0, 0); printf("\n"); show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM); } diff --git a/avserver.c b/avserver.c index c97b4ca213..9e6289914a 100644 --- a/avserver.c +++ b/avserver.c @@ -4634,7 +4634,7 @@ void show_help_default(const char *opt, const char *arg) printf("usage: avserver [options]\n" "Hyper fast multi format Audio/Video streaming server\n"); printf("\n"); - show_help_options(options, "Main options:", 0, 0); + show_help_options(options, "Main options:", 0, 0, 0); } static const OptionDef options[] = { diff --git a/cmdutils.c b/cmdutils.c index 50076c231d..6576eba95c 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -114,7 +114,7 @@ int64_t parse_time_or_die(const char *context, const char *timestr, } void show_help_options(const OptionDef *options, const char *msg, int req_flags, - int rej_flags) + int rej_flags, int alt_flags) { const OptionDef *po; int first; @@ -124,6 +124,7 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags, char buf[64]; if (((po->flags & req_flags) != req_flags) || + (alt_flags && !(po->flags & alt_flags)) || (po->flags & rej_flags)) continue; diff --git a/cmdutils.h b/cmdutils.h index 39125ce4ba..212aa71fc6 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -160,9 +160,10 @@ typedef struct { * @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. + * @param alt_flags print only options that have at least one of those flags set */ void show_help_options(const OptionDef *options, const char *msg, int req_flags, - int rej_flags); + int rej_flags, int alt_flags); /** * Show help for all options with given flags in class and all its