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.
... | ... |
@@ -91,7 +91,7 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do |
91 | 91 |
error= "Expected int for %s but found %s\n"; |
92 | 92 |
else |
93 | 93 |
return d; |
94 |
- fprintf(stderr, error, context, numstr, min, max); |
|
94 |
+ av_log(NULL, AV_LOG_FATAL, error, context, numstr, min, max); |
|
95 | 95 |
exit_program(1); |
96 | 96 |
return 0; |
97 | 97 |
} |
... | ... |
@@ -100,8 +100,8 @@ int64_t parse_time_or_die(const char *context, const char *timestr, int is_durat |
100 | 100 |
{ |
101 | 101 |
int64_t us; |
102 | 102 |
if (av_parse_time(&us, timestr, is_duration) < 0) { |
103 |
- fprintf(stderr, "Invalid %s specification for %s: %s\n", |
|
104 |
- is_duration ? "duration" : "date", context, timestr); |
|
103 |
+ av_log(NULL, AV_LOG_FATAL, "Invalid %s specification for %s: %s\n", |
|
104 |
+ is_duration ? "duration" : "date", context, timestr); |
|
105 | 105 |
exit_program(1); |
106 | 106 |
} |
107 | 107 |
return us; |
... | ... |
@@ -368,7 +368,7 @@ int opt_default(const char *opt, const char *arg) |
368 | 368 |
|
369 | 369 |
if (o) |
370 | 370 |
return 0; |
371 |
- fprintf(stderr, "Unrecognized option '%s'\n", opt); |
|
371 |
+ av_log(NULL, AV_LOG_ERROR, "Unrecognized option '%s'\n", opt); |
|
372 | 372 |
return AVERROR_OPTION_NOT_FOUND; |
373 | 373 |
} |
374 | 374 |
|
... | ... |
@@ -397,10 +397,10 @@ int opt_loglevel(const char *opt, const char *arg) |
397 | 397 |
|
398 | 398 |
level = strtol(arg, &tail, 10); |
399 | 399 |
if (*tail) { |
400 |
- fprintf(stderr, "Invalid loglevel \"%s\". " |
|
401 |
- "Possible levels are numbers or:\n", arg); |
|
400 |
+ av_log(NULL, AV_LOG_FATAL, "Invalid loglevel \"%s\". " |
|
401 |
+ "Possible levels are numbers or:\n", arg); |
|
402 | 402 |
for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++) |
403 |
- fprintf(stderr, "\"%s\"\n", log_levels[i].name); |
|
403 |
+ av_log(NULL, AV_LOG_FATAL, "\"%s\"\n", log_levels[i].name); |
|
404 | 404 |
exit_program(1); |
405 | 405 |
} |
406 | 406 |
av_log_set_level(level); |
... | ... |
@@ -415,7 +415,7 @@ int opt_timelimit(const char *opt, const char *arg) |
415 | 415 |
if (setrlimit(RLIMIT_CPU, &rl)) |
416 | 416 |
perror("setrlimit"); |
417 | 417 |
#else |
418 |
- fprintf(stderr, "Warning: -%s not implemented on this OS\n", opt); |
|
418 |
+ av_log(NULL, AV_LOG_WARNING, "-%s not implemented on this OS\n", opt); |
|
419 | 419 |
#endif |
420 | 420 |
return 0; |
421 | 421 |
} |
... | ... |
@@ -427,7 +427,7 @@ void print_error(const char *filename, int err) |
427 | 427 |
|
428 | 428 |
if (av_strerror(err, errbuf, sizeof(errbuf)) < 0) |
429 | 429 |
errbuf_ptr = strerror(AVUNERROR(err)); |
430 |
- fprintf(stderr, "%s: %s\n", filename, errbuf_ptr); |
|
430 |
+ av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr); |
|
431 | 431 |
} |
432 | 432 |
|
433 | 433 |
static int warned_cfg = 0; |
... | ... |
@@ -436,58 +436,59 @@ static int warned_cfg = 0; |
436 | 436 |
#define SHOW_VERSION 2 |
437 | 437 |
#define SHOW_CONFIG 4 |
438 | 438 |
|
439 |
-#define PRINT_LIB_INFO(outstream,libname,LIBNAME,flags) \ |
|
439 |
+#define PRINT_LIB_INFO(libname, LIBNAME, flags, level) \ |
|
440 | 440 |
if (CONFIG_##LIBNAME) { \ |
441 | 441 |
const char *indent = flags & INDENT? " " : ""; \ |
442 | 442 |
if (flags & SHOW_VERSION) { \ |
443 | 443 |
unsigned int version = libname##_version(); \ |
444 |
- fprintf(outstream, "%slib%-9s %2d.%3d.%2d / %2d.%3d.%2d\n", \ |
|
445 |
- indent, #libname, \ |
|
446 |
- LIB##LIBNAME##_VERSION_MAJOR, \ |
|
447 |
- LIB##LIBNAME##_VERSION_MINOR, \ |
|
448 |
- LIB##LIBNAME##_VERSION_MICRO, \ |
|
449 |
- version >> 16, version >> 8 & 0xff, version & 0xff); \ |
|
444 |
+ av_log(NULL, level, "%slib%-9s %2d.%3d.%2d / %2d.%3d.%2d\n",\ |
|
445 |
+ indent, #libname, \ |
|
446 |
+ LIB##LIBNAME##_VERSION_MAJOR, \ |
|
447 |
+ LIB##LIBNAME##_VERSION_MINOR, \ |
|
448 |
+ LIB##LIBNAME##_VERSION_MICRO, \ |
|
449 |
+ version >> 16, version >> 8 & 0xff, version & 0xff); \ |
|
450 | 450 |
} \ |
451 | 451 |
if (flags & SHOW_CONFIG) { \ |
452 | 452 |
const char *cfg = libname##_configuration(); \ |
453 | 453 |
if (strcmp(LIBAV_CONFIGURATION, cfg)) { \ |
454 | 454 |
if (!warned_cfg) { \ |
455 |
- fprintf(outstream, \ |
|
455 |
+ av_log(NULL, level, \ |
|
456 | 456 |
"%sWARNING: library configuration mismatch\n", \ |
457 | 457 |
indent); \ |
458 | 458 |
warned_cfg = 1; \ |
459 | 459 |
} \ |
460 |
- fprintf(stderr, "%s%-11s configuration: %s\n", \ |
|
460 |
+ av_log(NULL, level, "%s%-11s configuration: %s\n", \ |
|
461 | 461 |
indent, #libname, cfg); \ |
462 | 462 |
} \ |
463 | 463 |
} \ |
464 | 464 |
} \ |
465 | 465 |
|
466 |
-static void print_all_libs_info(FILE* outstream, int flags) |
|
466 |
+static void print_all_libs_info(int flags, int level) |
|
467 | 467 |
{ |
468 |
- PRINT_LIB_INFO(outstream, avutil, AVUTIL, flags); |
|
469 |
- PRINT_LIB_INFO(outstream, avcodec, AVCODEC, flags); |
|
470 |
- PRINT_LIB_INFO(outstream, avformat, AVFORMAT, flags); |
|
471 |
- PRINT_LIB_INFO(outstream, avdevice, AVDEVICE, flags); |
|
472 |
- PRINT_LIB_INFO(outstream, avfilter, AVFILTER, flags); |
|
473 |
- PRINT_LIB_INFO(outstream, swscale, SWSCALE, flags); |
|
474 |
- PRINT_LIB_INFO(outstream, postproc, POSTPROC, flags); |
|
468 |
+ PRINT_LIB_INFO(avutil, AVUTIL, flags, level); |
|
469 |
+ PRINT_LIB_INFO(avcodec, AVCODEC, flags, level); |
|
470 |
+ PRINT_LIB_INFO(avformat, AVFORMAT, flags, level); |
|
471 |
+ PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level); |
|
472 |
+ PRINT_LIB_INFO(avfilter, AVFILTER, flags, level); |
|
473 |
+ PRINT_LIB_INFO(swscale, SWSCALE, flags, level); |
|
474 |
+ PRINT_LIB_INFO(postproc, POSTPROC, flags, level); |
|
475 | 475 |
} |
476 | 476 |
|
477 | 477 |
void show_banner(void) |
478 | 478 |
{ |
479 |
- fprintf(stderr, "%s version " LIBAV_VERSION ", Copyright (c) %d-%d the Libav developers\n", |
|
480 |
- program_name, program_birth_year, this_year); |
|
481 |
- fprintf(stderr, " built on %s %s with %s %s\n", |
|
482 |
- __DATE__, __TIME__, CC_TYPE, CC_VERSION); |
|
483 |
- fprintf(stderr, " configuration: " LIBAV_CONFIGURATION "\n"); |
|
484 |
- print_all_libs_info(stderr, INDENT|SHOW_CONFIG); |
|
485 |
- print_all_libs_info(stderr, INDENT|SHOW_VERSION); |
|
479 |
+ av_log(NULL, AV_LOG_INFO, "%s version " LIBAV_VERSION ", Copyright (c) %d-%d the Libav developers\n", |
|
480 |
+ program_name, program_birth_year, this_year); |
|
481 |
+ av_log(NULL, AV_LOG_INFO, " built on %s %s with %s %s\n", |
|
482 |
+ __DATE__, __TIME__, CC_TYPE, CC_VERSION); |
|
483 |
+ av_log(NULL, AV_LOG_VERBOSE, " configuration: " LIBAV_CONFIGURATION "\n"); |
|
484 |
+ print_all_libs_info(INDENT|SHOW_CONFIG, AV_LOG_VERBOSE); |
|
485 |
+ print_all_libs_info(INDENT|SHOW_VERSION, AV_LOG_VERBOSE); |
|
486 | 486 |
} |
487 | 487 |
|
488 | 488 |
void show_version(void) { |
489 |
+ av_log_set_callback(log_callback_help); |
|
489 | 490 |
printf("%s " LIBAV_VERSION "\n", program_name); |
490 |
- print_all_libs_info(stdout, SHOW_VERSION); |
|
491 |
+ print_all_libs_info(SHOW_VERSION, AV_LOG_INFO); |
|
491 | 492 |
} |
492 | 493 |
|
493 | 494 |
void show_license(void) |
... | ... |
@@ -777,7 +778,7 @@ int read_file(const char *filename, char **bufptr, size_t *size) |
777 | 777 |
FILE *f = fopen(filename, "rb"); |
778 | 778 |
|
779 | 779 |
if (!f) { |
780 |
- fprintf(stderr, "Cannot read file '%s': %s\n", filename, strerror(errno)); |
|
780 |
+ av_log(NULL, AV_LOG_ERROR, "Cannot read file '%s': %s\n", filename, strerror(errno)); |
|
781 | 781 |
return AVERROR(errno); |
782 | 782 |
} |
783 | 783 |
fseek(f, 0, SEEK_END); |
... | ... |
@@ -785,7 +786,7 @@ int read_file(const char *filename, char **bufptr, size_t *size) |
785 | 785 |
fseek(f, 0, SEEK_SET); |
786 | 786 |
*bufptr = av_malloc(*size + 1); |
787 | 787 |
if (!*bufptr) { |
788 |
- fprintf(stderr, "Could not allocate file buffer\n"); |
|
788 |
+ av_log(NULL, AV_LOG_ERROR, "Could not allocate file buffer\n"); |
|
789 | 789 |
fclose(f); |
790 | 790 |
return AVERROR(ENOMEM); |
791 | 791 |
} |