diff --git a/avconv.c b/avconv.c index 9e2fac7f3b..9d3eb7c07b 100644 --- a/avconv.c +++ b/avconv.c @@ -4019,6 +4019,7 @@ int main(int argc, char **argv) reset_options(&o); av_log_set_flags(AV_LOG_SKIP_REPEATED); + parse_loglevel(argc, argv, options); avcodec_register_all(); #if CONFIG_AVDEVICE diff --git a/avplay.c b/avplay.c index b95cba750f..2eea5d72fd 100644 --- a/avplay.c +++ b/avplay.c @@ -3050,6 +3050,7 @@ int main(int argc, char **argv) int flags; av_log_set_flags(AV_LOG_SKIP_REPEATED); + parse_loglevel(argc, argv, options); /* register all codecs, demux and protocols */ avcodec_register_all(); diff --git a/avprobe.c b/avprobe.c index 5e83916f87..ae22dac648 100644 --- a/avprobe.c +++ b/avprobe.c @@ -399,6 +399,7 @@ int main(int argc, char **argv) { int ret; + parse_loglevel(argc, argv, options); av_register_all(); init_opts(); #if CONFIG_AVDEVICE diff --git a/avserver.c b/avserver.c index df9d07d1ad..d0a14aa565 100644 --- a/avserver.c +++ b/avserver.c @@ -4668,6 +4668,7 @@ int main(int argc, char **argv) { struct sigaction sigact; + parse_loglevel(argc, argv, options); av_register_all(); show_banner(); diff --git a/cmdutils.c b/cmdutils.c index b6ed475fba..2b2fea827e 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -304,6 +304,41 @@ void parse_options(void *optctx, int argc, char **argv, const OptionDef *options } } +/* + * Return index of option opt in argv or 0 if not found. + */ +static int locate_option(int argc, char **argv, const OptionDef *options, const char *optname) +{ + const OptionDef *po; + int i; + + for (i = 1; i < argc; i++) { + const char *cur_opt = argv[i]; + + if (*cur_opt++ != '-') + continue; + + po = find_option(options, cur_opt); + if (!po->name && cur_opt[0] == 'n' && cur_opt[1] == 'o') + po = find_option(options, cur_opt + 2); + + if ((!po->name && !strcmp(cur_opt, optname)) || + (po->name && !strcmp(optname, po->name))) + return i; + + if (!po || po->flags & HAS_ARG) + i++; + } + return 0; +} + +void parse_loglevel(int argc, char **argv, const OptionDef *options) +{ + int idx = locate_option(argc, argv, options, "loglevel"); + if (idx && argv[idx + 1]) + opt_loglevel("loglevel", argv[idx + 1]); +} + #define FLAGS (o->type == FF_OPT_TYPE_FLAGS) ? AV_DICT_APPEND : 0 int opt_default(const char *opt, const char *arg) { diff --git a/cmdutils.h b/cmdutils.h index dc19486834..a20b779f1a 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -174,6 +174,11 @@ void parse_options(void *optctx, int argc, char **argv, const OptionDef *options */ int parse_option(void *optctx, const char *opt, const char *arg, const OptionDef *options); +/** + * Find the '-loglevel' option in the commandline args and apply it. + */ +void parse_loglevel(int argc, char **argv, const OptionDef *options); + /** * Check if the given stream matches a stream specifier. * diff --git a/ffmpeg.c b/ffmpeg.c index 2a921d068d..86b73b2370 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -4357,6 +4357,7 @@ int main(int argc, char **argv) int64_t ti; av_log_set_flags(AV_LOG_SKIP_REPEATED); + parse_loglevel(argc, argv, options); avcodec_register_all(); #if CONFIG_AVDEVICE