|
|
|
@@ -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); |
|
|
|
} |
|
|
|
|