Commit 7a6cd995 authored by Anton Khirnov's avatar Anton Khirnov

cmdutils/avtools: simplify show_help() by using av_opt_child_class_next()

parent 145f741e
......@@ -3676,11 +3676,7 @@ static void show_usage(void)
static void show_help(void)
{
AVCodec *c;
AVOutputFormat *oformat = NULL;
AVInputFormat *iformat = NULL;
const AVClass *class;
int flags = AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_ENCODING_PARAM;
av_log_set_callback(log_callback_help);
show_usage();
show_help_options(options, "Main options:\n",
......@@ -3707,41 +3703,9 @@ static void show_help(void)
OPT_GRAB,
OPT_GRAB);
printf("\n");
class = avcodec_get_class();
av_opt_show2(&class, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0);
printf("\n");
/* individual codec options */
c = NULL;
while ((c = av_codec_next(c))) {
if (c->priv_class) {
av_opt_show2(&c->priv_class, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0);
printf("\n");
}
}
class = avformat_get_class();
av_opt_show2(&class, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0);
printf("\n");
/* individual muxer options */
while ((oformat = av_oformat_next(oformat))) {
if (oformat->priv_class) {
av_opt_show2(&oformat->priv_class, NULL, AV_OPT_FLAG_ENCODING_PARAM, 0);
printf("\n");
}
}
/* individual demuxer options */
while ((iformat = av_iformat_next(iformat))) {
if (iformat->priv_class) {
av_opt_show2(&iformat->priv_class, NULL, AV_OPT_FLAG_DECODING_PARAM, 0);
printf("\n");
}
}
class = sws_get_class();
av_opt_show2(&class, NULL, AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM, 0);
show_help_children(avcodec_get_class(), flags);
show_help_children(avformat_get_class(), flags);
show_help_children(sws_get_class(), flags);
}
static int opt_target(OptionsContext *o, const char *opt, const char *arg)
......
......@@ -2996,7 +2996,6 @@ static void show_usage(void)
static void show_help(void)
{
const AVClass *class;
av_log_set_callback(log_callback_help);
show_usage();
show_help_options(options, "Main options:\n",
......@@ -3004,18 +3003,10 @@ static void show_help(void)
show_help_options(options, "\nAdvanced options:\n",
OPT_EXPERT, OPT_EXPERT);
printf("\n");
class = avcodec_get_class();
av_opt_show2(&class, NULL,
AV_OPT_FLAG_DECODING_PARAM, 0);
printf("\n");
class = avformat_get_class();
av_opt_show2(&class, NULL,
AV_OPT_FLAG_DECODING_PARAM, 0);
show_help_children(avcodec_get_class(), AV_OPT_FLAG_DECODING_PARAM);
show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
#if !CONFIG_AVFILTER
printf("\n");
class = sws_get_class();
av_opt_show2(&class, NULL,
AV_OPT_FLAG_ENCODING_PARAM, 0);
show_help_children(sws_get_class(), AV_OPT_FLAG_ENCODING_PARAM);
#endif
printf("\nWhile playing:\n"
"q, ESC quit\n"
......
......@@ -360,13 +360,11 @@ static void opt_input_file(void *optctx, const char *arg)
static void show_help(void)
{
const AVClass *class = avformat_get_class();
av_log_set_callback(log_callback_help);
show_usage();
show_help_options(options, "Main options:\n", 0, 0);
printf("\n");
av_opt_show2(&class, NULL,
AV_OPT_FLAG_DECODING_PARAM, 0);
show_help_children(avformat_get_class(), AV_OPT_FLAG_DECODING_PARAM);
}
static void opt_pretty(void)
......
......@@ -130,6 +130,16 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int
}
}
void show_help_children(const AVClass *class, int flags)
{
const AVClass *child = NULL;
av_opt_show2(&class, NULL, flags, 0);
printf("\n");
while (child = av_opt_child_class_next(class, child))
show_help_children(child, flags);
}
static const OptionDef* find_option(const OptionDef *po, const char *name){
const char *p = strchr(name, ':');
int len = p ? p - name : strlen(name);
......
......@@ -154,6 +154,12 @@ typedef struct {
void show_help_options(const OptionDef *options, const char *msg, int mask, int value);
/**
* Show help for all options with given flags in class and all its
* children.
*/
void show_help_children(const AVClass *class, int flags);
/**
* Parse the command line arguments.
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment