[FFmpeg-devel] [PATCH 1/2] fftools/cmdutils: add logflags option
Tobias Rapp
t.rapp at noa-archive.com
Wed Mar 14 10:55:22 EET 2018
Allows to set the AV_LOG_PRINT_LEVEL and AV_LOG_SKIP_REPEATED flags
using a distinct command-line option, similar to other flag options.
Previously only the AV_LOG_SKIP_REPEATED flag was supported as a prefix
to the "loglevel" option value.
Signed-off-by: Tobias Rapp <t.rapp at noa-archive.com>
---
doc/fftools-common-opts.texi | 13 +++++++++++++
fftools/cmdutils.c | 31 +++++++++++++++++++++++++++++++
fftools/cmdutils.h | 6 ++++++
3 files changed, 50 insertions(+)
diff --git a/doc/fftools-common-opts.texi b/doc/fftools-common-opts.texi
index 185ec21..dd69741 100644
--- a/doc/fftools-common-opts.texi
+++ b/doc/fftools-common-opts.texi
@@ -209,6 +209,19 @@ the environment variable @env{AV_LOG_FORCE_COLOR}.
The use of the environment variable @env{NO_COLOR} is deprecated and
will be dropped in a future FFmpeg version.
+ at item -logflags flags (@emph{global})
+Allows to set or clear logging flags.
+
+Possible flags for this option are:
+ at table @option
+ at item repeat
+Repeated log output will not be compressed to the first line and the "Last
+message repeated n times" line will be omitted.
+ at item level
+Add a @code{[level]} prefix string to each log message. Can be used as an
+alternative to log coloring e.g. when dumping the log to file.
+ at end table
+
@item -report
Dump full command line and console output to a file named
@code{@var{program}- at var{YYYYMMDD}- at var{HHMMSS}.log} in the current
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 0c7d13c..11fe69a 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -514,6 +514,9 @@ void parse_loglevel(int argc, char **argv, const OptionDef *options)
idx = locate_option(argc, argv, options, "v");
if (idx && argv[idx + 1])
opt_loglevel(NULL, "loglevel", argv[idx + 1]);
+ idx = locate_option(argc, argv, options, "logflags");
+ if (idx && argv[idx + 1])
+ opt_logflags(NULL, "logflags", argv[idx + 1]);
idx = locate_option(argc, argv, options, "report");
if ((env = getenv("FFREPORT")) || idx) {
init_report(env);
@@ -918,6 +921,34 @@ int opt_loglevel(void *optctx, const char *opt, const char *arg)
return 0;
}
+int opt_logflags(void *optctx, const char *opt, const char *arg)
+{
+ static const AVOption logflags_opts[] = {
+ { "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },
+ /* implement AV_LOG_SKIP_REPEATED using inverse logic for consistency with the -loglevel option */
+ { "repeat", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_LOG_SKIP_REPEATED }, .unit = "flags" },
+ { "level" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_LOG_PRINT_LEVEL }, .unit = "flags" },
+ { NULL },
+ };
+ static const AVClass class = {
+ .class_name = "logflags",
+ .item_name = av_default_item_name,
+ .option = logflags_opts,
+ .version = LIBAVUTIL_VERSION_INT,
+ };
+ const AVClass *pclass = &class;
+ int flags = av_log_get_flags();
+ int ret;
+
+ flags ^= AV_LOG_SKIP_REPEATED;
+ if ((ret = av_opt_eval_flags(&pclass, &logflags_opts[0], arg, &flags)) < 0)
+ return ret;
+ flags ^= AV_LOG_SKIP_REPEATED;
+
+ av_log_set_flags(flags);
+ return 0;
+}
+
static void expand_filename_template(AVBPrint *bp, const char *template,
struct tm *tm)
{
diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h
index 8724489..28735b2 100644
--- a/fftools/cmdutils.h
+++ b/fftools/cmdutils.h
@@ -99,6 +99,11 @@ int opt_default(void *optctx, const char *opt, const char *arg);
*/
int opt_loglevel(void *optctx, const char *opt, const char *arg);
+/**
+ * Update the log flags of libav* libraries.
+ */
+int opt_logflags(void *optctx, const char *opt, const char *arg);
+
int opt_report(const char *opt);
int opt_max_alloc(void *optctx, const char *opt, const char *arg);
@@ -236,6 +241,7 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
{ "colors", OPT_EXIT, { .func_arg = show_colors }, "show available color names" }, \
{ "loglevel", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
{ "v", HAS_ARG, { .func_arg = opt_loglevel }, "set logging level", "loglevel" }, \
+ { "logflags", HAS_ARG, { .func_arg = opt_logflags }, "set logging flags", "flags" }, \
{ "report", 0, { (void*)opt_report }, "generate a report" }, \
{ "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" }, \
{ "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" }, \
--
2.7.4
More information about the ffmpeg-devel
mailing list