X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=fcdebb2005bdaf4cadbc1004b8e8252b4b388c8b;hb=63ae7e7ca88aec32eb5b0b60a152ef08527d2b52;hp=90c165e42ed72a0d3543fac29d4629a922924918;hpb=33bc794738224930f8ac07865861d07cbb959e3b;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index 90c165e42ed..fcdebb2005b 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -36,6 +36,7 @@ #include "libpostproc/postprocess.h" #include "libavutil/avstring.h" #include "libavutil/pixdesc.h" +#include "libavutil/eval.h" #include "libavcodec/opt.h" #include "cmdutils.h" #include "version.h" @@ -46,11 +47,9 @@ #include #endif -#undef exit - const char **opt_names; static int opt_name_count; -AVCodecContext *avcodec_opts[CODEC_TYPE_NB]; +AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB]; AVFormatContext *avformat_opts; struct SwsContext *sws_opts; @@ -60,7 +59,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) @@ -172,7 +171,7 @@ unknown_opt: *po->u.float_arg = parse_number_or_die(opt, arg, OPT_FLOAT, -1.0/0.0, 1.0/0.0); } else if (po->flags & OPT_FUNC2) { if (po->u.func2_arg(opt, arg) < 0) { - fprintf(stderr, "%s: invalid value '%s' for option '%s'\n", argv[0], arg, opt); + fprintf(stderr, "%s: failed to set value '%s' for option '%s'\n", argv[0], arg, opt); exit(1); } } else { @@ -193,22 +192,22 @@ int opt_default(const char *opt, const char *arg){ const AVOption *o= NULL; int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0}; - for(type=0; type= 0; type++){ + for(type=0; type= 0; type++){ const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]); if(o2) ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o); } if(!o) ret = av_set_string3(avformat_opts, opt, arg, 1, &o); - if(!o) + if(!o && sws_opts) ret = av_set_string3(sws_opts, opt, arg, 1, &o); if(!o){ if(opt[0] == 'a') - ret = av_set_string3(avcodec_opts[CODEC_TYPE_AUDIO], opt+1, arg, 1, &o); + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o); else if(opt[0] == 'v') - ret = av_set_string3(avcodec_opts[CODEC_TYPE_VIDEO], opt+1, arg, 1, &o); + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o); else if(opt[0] == 's') - ret = av_set_string3(avcodec_opts[CODEC_TYPE_SUBTITLE], opt+1, arg, 1, &o); + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o); } if (o && ret < 0) { fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt); @@ -293,40 +292,12 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags) void print_error(const char *filename, int err) { - switch(err) { - case AVERROR_NUMEXPECTED: - fprintf(stderr, "%s: Incorrect image filename syntax.\n" - "Use '%%d' to specify the image number:\n" - " for img1.jpg, img2.jpg, ..., use 'img%%d.jpg';\n" - " for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n", - filename); - break; - case AVERROR_INVALIDDATA: - fprintf(stderr, "%s: Error while parsing header\n", filename); - break; - case AVERROR_NOFMT: - fprintf(stderr, "%s: Unknown format\n", filename); - break; - case AVERROR(EIO): - 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 occurred\n", filename); - break; - case AVERROR(ENOENT): - fprintf(stderr, "%s: no such file or directory\n", filename); - break; -#if CONFIG_NETWORK - case AVERROR(FF_NETERROR(EPROTONOSUPPORT)): - fprintf(stderr, "%s: Unsupported network protocol\n", filename); - break; -#endif - default: - fprintf(stderr, "%s: Error while opening file\n", filename); - break; - } + char errbuf[128]; + const char *errbuf_ptr = 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) \ @@ -559,13 +530,13 @@ void show_codecs(void) last_name= p2->name; switch(p2->type) { - case CODEC_TYPE_VIDEO: + case AVMEDIA_TYPE_VIDEO: type_str = "V"; break; - case CODEC_TYPE_AUDIO: + case AVMEDIA_TYPE_AUDIO: type_str = "A"; break; - case CODEC_TYPE_SUBTITLE: + case AVMEDIA_TYPE_SUBTITLE: type_str = "S"; break; default: @@ -612,9 +583,6 @@ void show_protocols(void) printf("Supported file protocols:\n"); while((up = av_protocol_next(up))) printf("%s\n", up->name); - printf("\n"); - - printf("Frame size, frame rate abbreviations:\n ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif\n"); } void show_filters(void) @@ -642,6 +610,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", @@ -666,3 +639,27 @@ int read_yesno(void) return yesno; } + +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)); + return AVERROR(errno); + } + fseek(f, 0, SEEK_END); + *size = ftell(f); + fseek(f, 0, SEEK_SET); + *bufptr = av_malloc(*size + 1); + if (!*bufptr) { + fprintf(stderr, "Could not allocate file buffer\n"); + fclose(f); + return AVERROR(ENOMEM); + } + fread(*bufptr, 1, *size, f); + (*bufptr)[*size++] = '\0'; + + fclose(f); + return 0; +}