cmdutils: replace fprintf() by av_log()
authorAnton Khirnov <anton@khirnov.net>
Mon, 26 Sep 2011 06:39:43 +0000 (08:39 +0200)
committerAnton Khirnov <anton@khirnov.net>
Mon, 26 Sep 2011 18:33:50 +0000 (20:33 +0200)
This way, all messages can be easily disabled with -loglevel.

Behavior change -- configuration is printed with AV_LOG_VERBOSE, so it's
not shown by default.

cmdutils.c

index 2b2fea8..1e873e6 100644 (file)
@@ -91,7 +91,7 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do
         error= "Expected int for %s but found %s\n";
     else
         return d;
-    fprintf(stderr, error, context, numstr, min, max);
+    av_log(NULL, AV_LOG_FATAL, error, context, numstr, min, max);
     exit_program(1);
     return 0;
 }
@@ -100,8 +100,8 @@ int64_t parse_time_or_die(const char *context, const char *timestr, int is_durat
 {
     int64_t us;
     if (av_parse_time(&us, timestr, is_duration) < 0) {
-        fprintf(stderr, "Invalid %s specification for %s: %s\n",
-                is_duration ? "duration" : "date", context, timestr);
+        av_log(NULL, AV_LOG_FATAL, "Invalid %s specification for %s: %s\n",
+               is_duration ? "duration" : "date", context, timestr);
         exit_program(1);
     }
     return us;
@@ -368,7 +368,7 @@ int opt_default(const char *opt, const char *arg)
 
     if (o)
         return 0;
-    fprintf(stderr, "Unrecognized option '%s'\n", opt);
+    av_log(NULL, AV_LOG_ERROR, "Unrecognized option '%s'\n", opt);
     return AVERROR_OPTION_NOT_FOUND;
 }
 
@@ -397,10 +397,10 @@ int opt_loglevel(const char *opt, const char *arg)
 
     level = strtol(arg, &tail, 10);
     if (*tail) {
-        fprintf(stderr, "Invalid loglevel \"%s\". "
-                        "Possible levels are numbers or:\n", arg);
+        av_log(NULL, AV_LOG_FATAL, "Invalid loglevel \"%s\". "
+               "Possible levels are numbers or:\n", arg);
         for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++)
-            fprintf(stderr, "\"%s\"\n", log_levels[i].name);
+            av_log(NULL, AV_LOG_FATAL, "\"%s\"\n", log_levels[i].name);
         exit_program(1);
     }
     av_log_set_level(level);
@@ -415,7 +415,7 @@ int opt_timelimit(const char *opt, const char *arg)
     if (setrlimit(RLIMIT_CPU, &rl))
         perror("setrlimit");
 #else
-    fprintf(stderr, "Warning: -%s not implemented on this OS\n", opt);
+    av_log(NULL, AV_LOG_WARNING, "-%s not implemented on this OS\n", opt);
 #endif
     return 0;
 }
@@ -427,7 +427,7 @@ void print_error(const char *filename, int err)
 
     if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
         errbuf_ptr = strerror(AVUNERROR(err));
-    fprintf(stderr, "%s: %s\n", filename, errbuf_ptr);
+    av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr);
 }
 
 static int warned_cfg = 0;
@@ -436,58 +436,59 @@ static int warned_cfg = 0;
 #define SHOW_VERSION  2
 #define SHOW_CONFIG   4
 
-#define PRINT_LIB_INFO(outstream,libname,LIBNAME,flags)                 \
+#define PRINT_LIB_INFO(libname, LIBNAME, flags, level)                  \
     if (CONFIG_##LIBNAME) {                                             \
         const char *indent = flags & INDENT? "  " : "";                 \
         if (flags & SHOW_VERSION) {                                     \
             unsigned int version = libname##_version();                 \
-            fprintf(outstream, "%slib%-9s %2d.%3d.%2d / %2d.%3d.%2d\n", \
-                    indent, #libname,                                   \
-                    LIB##LIBNAME##_VERSION_MAJOR,                       \
-                    LIB##LIBNAME##_VERSION_MINOR,                       \
-                    LIB##LIBNAME##_VERSION_MICRO,                       \
-                    version >> 16, version >> 8 & 0xff, version & 0xff); \
+            av_log(NULL, level, "%slib%-9s %2d.%3d.%2d / %2d.%3d.%2d\n",\
+                   indent, #libname,                                    \
+                   LIB##LIBNAME##_VERSION_MAJOR,                        \
+                   LIB##LIBNAME##_VERSION_MINOR,                        \
+                   LIB##LIBNAME##_VERSION_MICRO,                        \
+                   version >> 16, version >> 8 & 0xff, version & 0xff); \
         }                                                               \
         if (flags & SHOW_CONFIG) {                                      \
             const char *cfg = libname##_configuration();                \
             if (strcmp(LIBAV_CONFIGURATION, cfg)) {                     \
                 if (!warned_cfg) {                                      \
-                    fprintf(outstream,                                  \
+                    av_log(NULL, level,                                 \
                             "%sWARNING: library configuration mismatch\n", \
                             indent);                                    \
                     warned_cfg = 1;                                     \
                 }                                                       \
-                fprintf(stderr, "%s%-11s configuration: %s\n",          \
+                av_log(NULL, level, "%s%-11s configuration: %s\n",      \
                         indent, #libname, cfg);                         \
             }                                                           \
         }                                                               \
     }                                                                   \
 
-static void print_all_libs_info(FILE* outstream, int flags)
+static void print_all_libs_info(int flags, int level)
 {
-    PRINT_LIB_INFO(outstream, avutil,   AVUTIL,   flags);
-    PRINT_LIB_INFO(outstream, avcodec,  AVCODEC,  flags);
-    PRINT_LIB_INFO(outstream, avformat, AVFORMAT, flags);
-    PRINT_LIB_INFO(outstream, avdevice, AVDEVICE, flags);
-    PRINT_LIB_INFO(outstream, avfilter, AVFILTER, flags);
-    PRINT_LIB_INFO(outstream, swscale,  SWSCALE,  flags);
-    PRINT_LIB_INFO(outstream, postproc, POSTPROC, flags);
+    PRINT_LIB_INFO(avutil,   AVUTIL,   flags, level);
+    PRINT_LIB_INFO(avcodec,  AVCODEC,  flags, level);
+    PRINT_LIB_INFO(avformat, AVFORMAT, flags, level);
+    PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level);
+    PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
+    PRINT_LIB_INFO(swscale,  SWSCALE,  flags, level);
+    PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
 }
 
 void show_banner(void)
 {
-    fprintf(stderr, "%s version " LIBAV_VERSION ", Copyright (c) %d-%d the Libav developers\n",
-            program_name, program_birth_year, this_year);
-    fprintf(stderr, "  built on %s %s with %s %s\n",
-            __DATE__, __TIME__, CC_TYPE, CC_VERSION);
-    fprintf(stderr, "  configuration: " LIBAV_CONFIGURATION "\n");
-    print_all_libs_info(stderr, INDENT|SHOW_CONFIG);
-    print_all_libs_info(stderr, INDENT|SHOW_VERSION);
+    av_log(NULL, AV_LOG_INFO, "%s version " LIBAV_VERSION ", Copyright (c) %d-%d the Libav developers\n",
+           program_name, program_birth_year, this_year);
+    av_log(NULL, AV_LOG_INFO, "  built on %s %s with %s %s\n",
+           __DATE__, __TIME__, CC_TYPE, CC_VERSION);
+    av_log(NULL, AV_LOG_VERBOSE, "  configuration: " LIBAV_CONFIGURATION "\n");
+    print_all_libs_info(INDENT|SHOW_CONFIG,  AV_LOG_VERBOSE);
+    print_all_libs_info(INDENT|SHOW_VERSION, AV_LOG_VERBOSE);
 }
 
 void show_version(void) {
+    av_log_set_callback(log_callback_help);
     printf("%s " LIBAV_VERSION "\n", program_name);
-    print_all_libs_info(stdout, SHOW_VERSION);
+    print_all_libs_info(SHOW_VERSION, AV_LOG_INFO);
 }
 
 void show_license(void)
@@ -777,7 +778,7 @@ int read_file(const char *filename, char **bufptr, size_t *size)
     FILE *f = fopen(filename, "rb");
 
     if (!f) {
-        fprintf(stderr, "Cannot read file '%s': %s\n", filename, strerror(errno));
+        av_log(NULL, AV_LOG_ERROR, "Cannot read file '%s': %s\n", filename, strerror(errno));
         return AVERROR(errno);
     }
     fseek(f, 0, SEEK_END);
@@ -785,7 +786,7 @@ int read_file(const char *filename, char **bufptr, size_t *size)
     fseek(f, 0, SEEK_SET);
     *bufptr = av_malloc(*size + 1);
     if (!*bufptr) {
-        fprintf(stderr, "Could not allocate file buffer\n");
+        av_log(NULL, AV_LOG_ERROR, "Could not allocate file buffer\n");
         fclose(f);
         return AVERROR(ENOMEM);
     }