X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=d5fb6cff7bb9f346ce2c7fdb0212dd67a5fd115a;hb=cf960242a465b92d26fc9c3d3f23ebde4a48904b;hp=5dad258743080500ba708070387c92540402eaf5;hpb=88b77ef1e0c651c5bf17e10bfa4694905c28aad8;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index 5dad2587430..d5fb6cff7bb 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -24,6 +24,10 @@ #include #include +/* Include only the enabled headers since some compilers (namely, Sun + Studio) will not omit unused inline functions and create undefined + references to libraries that are not being built. */ + #include "config.h" #include "libavformat/avformat.h" #include "libavfilter/avfilter.h" @@ -34,7 +38,7 @@ #include "libavcodec/opt.h" #include "cmdutils.h" #include "version.h" -#ifdef CONFIG_NETWORK +#if CONFIG_NETWORK #include "libavformat/network.h" #endif @@ -46,6 +50,8 @@ AVCodecContext *avctx_opts[CODEC_TYPE_NB]; AVFormatContext *avformat_opts; struct SwsContext *sws_opts; +const int this_year = 2009; + double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max) { char *tail; @@ -119,10 +125,10 @@ void parse_options(int argc, char **argv, const OptionDef *options, opt = argv[optindex++]; if (handleoptions && opt[0] == '-' && opt[1] != '\0') { - if (opt[1] == '-' && opt[2] == '\0') { - handleoptions = 0; - continue; - } + if (opt[1] == '-' && opt[2] == '\0') { + handleoptions = 0; + continue; + } po= find_option(options, opt + 1); if (!po->name) po= find_option(options, "default"); @@ -168,25 +174,30 @@ unknown_opt: int opt_default(const char *opt, const char *arg){ int type; + int ret= 0; 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++){ const AVOption *o2 = av_find_opt(avctx_opts[0], opt, NULL, opt_types[type], opt_types[type]); if(o2) - o = av_set_string2(avctx_opts[type], opt, arg, 1); + ret = av_set_string3(avctx_opts[type], opt, arg, 1, &o); } if(!o) - o = av_set_string2(avformat_opts, opt, arg, 1); + ret = av_set_string3(avformat_opts, opt, arg, 1, &o); if(!o) - o = av_set_string2(sws_opts, opt, arg, 1); + ret = av_set_string3(sws_opts, opt, arg, 1, &o); if(!o){ if(opt[0] == 'a') - o = av_set_string2(avctx_opts[CODEC_TYPE_AUDIO], opt+1, arg, 1); + ret = av_set_string3(avctx_opts[CODEC_TYPE_AUDIO], opt+1, arg, 1, &o); else if(opt[0] == 'v') - o = av_set_string2(avctx_opts[CODEC_TYPE_VIDEO], opt+1, arg, 1); + ret = av_set_string3(avctx_opts[CODEC_TYPE_VIDEO], opt+1, arg, 1, &o); else if(opt[0] == 's') - o = av_set_string2(avctx_opts[CODEC_TYPE_SUBTITLE], opt+1, arg, 1); + ret = av_set_string3(avctx_opts[CODEC_TYPE_SUBTITLE], opt+1, arg, 1, &o); + } + if (o && ret < 0) { + fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt); + exit(1); } if(!o) return -1; @@ -211,7 +222,7 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags) const char *str= av_get_string(opts_ctx, opt_names[i], &opt, buf, sizeof(buf)); /* if an option with name opt_names[i] is present in opts_ctx then str is non-NULL */ if(str && ((opt->flags & flags) == flags)) - av_set_string2(ctx, opt_names[i], str, 1); + av_set_string3(ctx, opt_names[i], str, 1, NULL); } } @@ -242,7 +253,7 @@ void print_error(const char *filename, int err) case AVERROR(ENOENT): fprintf(stderr, "%s: no such file or directory\n", filename); break; -#ifdef CONFIG_NETWORK +#if CONFIG_NETWORK case AVERROR(FF_NETERROR(EPROTONOSUPPORT)): fprintf(stderr, "%s: Unsupported network protocol\n", filename); break; @@ -266,21 +277,21 @@ static void print_all_lib_versions(FILE* outstream, int indent) PRINT_LIB_VERSION(outstream, avcodec, AVCODEC, indent); PRINT_LIB_VERSION(outstream, avformat, AVFORMAT, indent); PRINT_LIB_VERSION(outstream, avdevice, AVDEVICE, indent); -#if ENABLE_AVFILTER +#if CONFIG_AVFILTER PRINT_LIB_VERSION(outstream, avfilter, AVFILTER, indent); #endif -#if ENABLE_SWSCALE +#if CONFIG_SWSCALE PRINT_LIB_VERSION(outstream, swscale, SWSCALE, indent); #endif -#if ENABLE_POSTPROC +#if CONFIG_POSTPROC PRINT_LIB_VERSION(outstream, postproc, POSTPROC, indent); #endif } void show_banner(void) { - fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-2008 Fabrice Bellard, et al.\n", - program_name, program_birth_year); + fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d Fabrice Bellard, et al.\n", + program_name, program_birth_year, this_year); fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n"); print_all_lib_versions(stderr, 1); fprintf(stderr, " built on " __DATE__ " " __TIME__); @@ -298,7 +309,7 @@ void show_version(void) { void show_license(void) { -#ifdef CONFIG_NONFREE +#if CONFIG_NONFREE printf( "This version of %s has nonfree parts compiled in.\n" "Therefore it is not legally redistributable.\n",