X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=3eb9c18ecd9b6d01f7cca9c515047cbecf80de30;hb=dd9c773bd9d2f2ac1b64377f6ca8bbce635b0da9;hp=c01a6df247bc3e7c80c52d924827bab5f523c598;hpb=086ab00158cb8e0d5f7b7bce00b5c5cbed3177ce;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index c01a6df247b..3eb9c18ecd9 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -22,13 +22,15 @@ #include #include #include +#include +#include "config.h" #include "avformat.h" +#include "avfilter.h" #include "avdevice.h" #include "cmdutils.h" #include "avstring.h" #include "version.h" -#include "config.h" #undef exit @@ -50,6 +52,17 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do exit(1); } +int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration) +{ + int64_t us = parse_date(timestr, is_duration); + if (us == INT64_MIN) { + fprintf(stderr, "Invalid %s specification for %s: %s\n", + is_duration ? "duration" : "date", context, timestr); + exit(1); + } + return us; +} + void show_help_options(const OptionDef *options, const char *msg, int mask, int value) { const OptionDef *po; @@ -122,11 +135,11 @@ unknown_opt: } else if (po->flags & OPT_BOOL) { *po->u.int_arg = 1; } else if (po->flags & OPT_INT) { - *po->u.int_arg = atoi(arg); + *po->u.int_arg = parse_number_or_die(opt+1, arg, OPT_INT64, INT_MIN, INT_MAX); } else if (po->flags & OPT_INT64) { - *po->u.int64_arg = strtoll(arg, (char **)NULL, 10); + *po->u.int64_arg = parse_number_or_die(opt+1, arg, OPT_INT64, INT64_MIN, INT64_MAX); } else if (po->flags & OPT_FLOAT) { - *po->u.float_arg = atof(arg); + *po->u.float_arg = parse_number_or_die(opt+1, arg, OPT_FLOAT, -1.0/0.0, 1.0/0.0); } else if (po->flags & OPT_FUNC2) { if(po->u.func2_arg(opt+1, arg)<0) goto unknown_opt; @@ -157,12 +170,12 @@ void print_error(const char *filename, int err) fprintf(stderr, "%s: Unknown format\n", filename); break; case AVERROR(EIO): - fprintf(stderr, "%s: I/O error occured\n" + fprintf(stderr, "%s: I/O error occurred\n" "Usually that means that input file is truncated and/or corrupted.\n", filename); break; case AVERROR(ENOMEM): - fprintf(stderr, "%s: memory allocation error occured\n", filename); + fprintf(stderr, "%s: memory allocation error occurred\n", filename); break; case AVERROR(ENOENT): fprintf(stderr, "%s: no such file or directory\n", filename); @@ -182,6 +195,9 @@ void show_banner(const char *program_name, int program_birth_year) fprintf(stderr, " libavcodec version: " AV_STRINGIFY(LIBAVCODEC_VERSION) "\n"); fprintf(stderr, " libavformat version: " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\n"); fprintf(stderr, " libavdevice version: " AV_STRINGIFY(LIBAVDEVICE_VERSION) "\n"); +#if ENABLE_AVFILTER + fprintf(stderr, " libavfilter version: " AV_STRINGIFY(LIBAVFILTER_VERSION) "\n"); +#endif fprintf(stderr, " built on " __DATE__ " " __TIME__); #ifdef __GNUC__ fprintf(stderr, ", gcc: " __VERSION__ "\n");