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.tags/n1.0
| @@ -1795,24 +1795,19 @@ static int show_help(const char *opt, const char *arg) | |||||
| av_log_set_callback(log_callback_help); | av_log_set_callback(log_callback_help); | ||||
| show_usage(); | show_usage(); | ||||
| show_help_options(options, "Main options:", | 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:", | 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:", | 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:", | 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:", | 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:", | 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:", | show_help_options(options, "Subtitle options:", | ||||
| OPT_SUBTITLE, OPT_SUBTITLE); | |||||
| OPT_SUBTITLE, 0); | |||||
| printf("\n"); | printf("\n"); | ||||
| show_help_children(avcodec_get_class(), flags); | show_help_children(avcodec_get_class(), flags); | ||||
| show_help_children(avformat_get_class(), flags); | show_help_children(avformat_get_class(), flags); | ||||
| @@ -2926,10 +2926,8 @@ static int show_help(const char *opt, const char *arg) | |||||
| { | { | ||||
| av_log_set_callback(log_callback_help); | av_log_set_callback(log_callback_help); | ||||
| show_usage(); | 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"); | printf("\n"); | ||||
| show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM); | show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM); | ||||
| show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM); | show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM); | ||||
| @@ -113,8 +113,8 @@ int64_t parse_time_or_die(const char *context, const char *timestr, | |||||
| return us; | 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; | const OptionDef *po; | ||||
| int first; | int first; | ||||
| @@ -122,18 +122,21 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, | |||||
| first = 1; | first = 1; | ||||
| for (po = options; po->name != NULL; po++) { | for (po = options; po->name != NULL; po++) { | ||||
| char buf[64]; | 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"); | printf("\n"); | ||||
| } | } | ||||
| @@ -153,8 +153,16 @@ typedef struct { | |||||
| const char *argname; | const char *argname; | ||||
| } OptionDef; | } 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 | * Show help for all options with given flags in class and all its | ||||