summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-09-26 08:15:37 +0200
committerAnton Khirnov <anton@khirnov.net>2011-09-26 20:33:50 +0200
commit182cbe433aea20b0d9627d40de7c75713ec736db (patch)
tree86c5c5d6b80fc435a51beefde15ff8f41d5c6659
parent4ca59d19485afce923c6f1d8ccef980011b76f50 (diff)
avtools: parse loglevel before all the other options.
This way it can be applied to cmdutils too -- e.g. showing the banner and printing startup messages.
-rw-r--r--avconv.c1
-rw-r--r--avplay.c1
-rw-r--r--avprobe.c1
-rw-r--r--avserver.c1
-rw-r--r--cmdutils.c35
-rw-r--r--cmdutils.h5
-rw-r--r--ffmpeg.c1
7 files changed, 45 insertions, 0 deletions
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
@@ -175,6 +175,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.
*
* @param s Corresponding format context.
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