X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=a79c38ea3eca6e119fcf0aede538cf94dd315d76;hb=0bb7408e557f5d5ee3f8c1d001012e5c204c20b4;hp=7e652a1e7f9fb81e8bc86d8c485fc79ba25d74b0;hpb=458b062d61a92d725cde9363941747a1c6d1e575;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index 7e652a1e7f9..a79c38ea3ec 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -36,7 +36,9 @@ #include "libpostproc/postprocess.h" #include "libavutil/avstring.h" #include "libavutil/pixdesc.h" +#include "libavutil/eval.h" #include "libavcodec/opt.h" +#include "libavcore/avcore.h" #include "cmdutils.h" #include "version.h" #if CONFIG_NETWORK @@ -58,7 +60,7 @@ double parse_number_or_die(const char *context, const char *numstr, int type, do { char *tail; const char *error; - double d = strtod(numstr, &tail); + double d = av_strtod(numstr, &tail); if (*tail) error= "Expected number for %s but found: %s\n"; else if (d < min || d > max) @@ -292,59 +294,58 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags) void print_error(const char *filename, int err) { char errbuf[128]; + const char *errbuf_ptr = errbuf; - switch(err) { -#if CONFIG_NETWORK - case AVERROR(FF_NETERROR(EPROTONOSUPPORT)): - fprintf(stderr, "%s: Unsupported network protocol\n", filename); - break; -#endif - default: - av_strerror(err, errbuf, sizeof(errbuf)); - fprintf(stderr, "%s: %s\n", filename, errbuf); - } + if (av_strerror(err, errbuf, sizeof(errbuf)) < 0) + errbuf_ptr = strerror(AVUNERROR(err)); + fprintf(stderr, "%s: %s\n", filename, errbuf_ptr); } -#define PRINT_LIB_VERSION(outstream,libname,LIBNAME,indent) \ - if (CONFIG_##LIBNAME) { \ - unsigned int version = libname##_version(); \ - fprintf(outstream, "%slib%-10s %2d.%2d.%2d / %2d.%2d.%2d\n", \ - indent? " " : "", #libname, \ - LIB##LIBNAME##_VERSION_MAJOR, \ - LIB##LIBNAME##_VERSION_MINOR, \ - LIB##LIBNAME##_VERSION_MICRO, \ - version >> 16, version >> 8 & 0xff, version & 0xff); \ - } +static int warned_cfg = 0; -static void print_all_lib_versions(FILE* outstream, int indent) -{ - PRINT_LIB_VERSION(outstream, avutil, AVUTIL, indent); - PRINT_LIB_VERSION(outstream, avcodec, AVCODEC, indent); - PRINT_LIB_VERSION(outstream, avformat, AVFORMAT, indent); - PRINT_LIB_VERSION(outstream, avdevice, AVDEVICE, indent); - PRINT_LIB_VERSION(outstream, avfilter, AVFILTER, indent); - PRINT_LIB_VERSION(outstream, swscale, SWSCALE, indent); - PRINT_LIB_VERSION(outstream, postproc, POSTPROC, indent); -} +#define INDENT 1 +#define SHOW_VERSION 2 +#define SHOW_CONFIG 4 -static void maybe_print_config(const char *lib, const char *cfg) +#define PRINT_LIB_INFO(outstream,libname,LIBNAME,flags) \ + if (CONFIG_##LIBNAME) { \ + const char *indent = flags & INDENT? " " : ""; \ + if (flags & SHOW_VERSION) { \ + unsigned int version = libname##_version(); \ + fprintf(outstream, "%slib%-10s %2d.%2d.%2d / %2d.%2d.%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(FFMPEG_CONFIGURATION, cfg)) { \ + if (!warned_cfg) { \ + fprintf(outstream, \ + "%sWARNING: library configuration mismatch\n", \ + indent); \ + warned_cfg = 1; \ + } \ + fprintf(stderr, "%s%-11s configuration: %s\n", \ + indent, #libname, cfg); \ + } \ + } \ + } \ + +static void print_all_libs_info(FILE* outstream, int flags) { - static int warned_cfg; - - if (strcmp(FFMPEG_CONFIGURATION, cfg)) { - if (!warned_cfg) { - fprintf(stderr, " WARNING: library configuration mismatch\n"); - warned_cfg = 1; - } - fprintf(stderr, " %-11s configuration: %s\n", lib, cfg); - } + PRINT_LIB_INFO(outstream, avutil, AVUTIL, flags); + PRINT_LIB_INFO(outstream, avcore, AVCORE, 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); } -#define PRINT_LIB_CONFIG(lib, tag, cfg) do { \ - if (CONFIG_##lib) \ - maybe_print_config(tag, cfg); \ - } while (0) - void show_banner(void) { fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d the FFmpeg developers\n", @@ -352,19 +353,13 @@ void show_banner(void) fprintf(stderr, " built on %s %s with %s %s\n", __DATE__, __TIME__, CC_TYPE, CC_VERSION); fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n"); - PRINT_LIB_CONFIG(AVUTIL, "libavutil", avutil_configuration()); - PRINT_LIB_CONFIG(AVCODEC, "libavcodec", avcodec_configuration()); - PRINT_LIB_CONFIG(AVFORMAT, "libavformat", avformat_configuration()); - PRINT_LIB_CONFIG(AVDEVICE, "libavdevice", avdevice_configuration()); - PRINT_LIB_CONFIG(AVFILTER, "libavfilter", avfilter_configuration()); - PRINT_LIB_CONFIG(SWSCALE, "libswscale", swscale_configuration()); - PRINT_LIB_CONFIG(POSTPROC, "libpostproc", postproc_configuration()); - print_all_lib_versions(stderr, 1); + print_all_libs_info(stderr, INDENT|SHOW_CONFIG); + print_all_libs_info(stderr, INDENT|SHOW_VERSION); } void show_version(void) { printf("%s " FFMPEG_VERSION "\n", program_name); - print_all_lib_versions(stdout, 0); + print_all_libs_info(stdout, SHOW_VERSION); } void show_license(void) @@ -585,9 +580,18 @@ void show_protocols(void) { URLProtocol *up=NULL; - printf("Supported file protocols:\n"); + printf("Supported file protocols:\n" + "I.. = Input supported\n" + ".O. = Output supported\n" + "..S = Seek supported\n" + "FLAGS NAME\n" + "----- \n"); while((up = av_protocol_next(up))) - printf("%s\n", up->name); + printf("%c%c%c %s\n", + up->url_read ? 'I' : '.', + up->url_write ? 'O' : '.', + up->url_seek ? 'S' : '.', + up->name); } void show_filters(void) @@ -615,6 +619,11 @@ void show_pix_fmts(void) "FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL\n" "-----\n"); +#if !CONFIG_SWSCALE +# define sws_isSupportedInput(x) 0 +# define sws_isSupportedOutput(x) 0 +#endif + for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++) { const AVPixFmtDescriptor *pix_desc = &av_pix_fmt_descriptors[pix_fmt]; printf("%c%c%c%c%c %-16s %d %2d\n", @@ -642,7 +651,7 @@ int read_yesno(void) int read_file(const char *filename, char **bufptr, size_t *size) { - FILE *f = fopen(filename, "r"); + FILE *f = fopen(filename, "rb"); if (!f) { fprintf(stderr, "Cannot read file '%s': %s\n", filename, strerror(errno));