diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2012-12-15 22:40:26 +0100 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2012-12-16 10:57:50 +0100 |
commit | cb0f97b59d67bda2c33586922640e65e128c17fb (patch) | |
tree | dab09f883da09f4136521eb14ee8aa43ad510f9d /ffplay.c | |
parent | 718eab527b9af53582c0370e28967e20df991364 (diff) | |
download | ffmpeg-cb0f97b59d67bda2c33586922640e65e128c17fb.tar.gz |
ffplay: improve robustness of opt_codec(), and add options acodec,vcodec,scodec
Fail with a meaningfull error message in case of bogus input.
Also the new options are more consistent with the rest of the tool
options, since it does not support generic stream specifiers.
Diffstat (limited to 'ffplay.c')
-rw-r--r-- | ffplay.c | 29 |
1 files changed, 21 insertions, 8 deletions
@@ -3147,14 +3147,24 @@ static void opt_input_file(void *optctx, const char *filename) input_filename = filename; } -static int opt_codec(void *o, const char *opt, const char *arg) +static int opt_codec(void *optctx, const char *opt, const char *arg) { - switch(opt[strlen(opt)-1]){ - case 'a' : audio_codec_name = arg; break; - case 's' : subtitle_codec_name = arg; break; - case 'v' : video_codec_name = arg; break; - } - return 0; + const char *spec = strchr(opt, ':'); + if (!spec) { + fprintf(stderr, "No media specifier was specified in '%s' in option '%s'\n", + arg, opt); + return AVERROR(EINVAL); + } + spec++; + switch (spec[0]) { + case 'a' : audio_codec_name = arg; break; + case 's' : subtitle_codec_name = arg; break; + case 'v' : video_codec_name = arg; break; + default: + fprintf(stderr, "Invalid media specifier '%s' in option '%s'\n", spec, opt); + return AVERROR(EINVAL); + } + return 0; } static int dummy; @@ -3202,7 +3212,10 @@ static const OptionDef options[] = { { "showmode", HAS_ARG, { .func_arg = opt_show_mode}, "select show mode (0 = video, 1 = waves, 2 = RDFT)", "mode" }, { "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, { .func_arg = opt_default }, "generic catch all option", "" }, { "i", OPT_BOOL, { &dummy}, "read specified file", "input_file"}, - { "codec", HAS_ARG, { .func_arg = opt_codec}, "force decoder", "decoder" }, + { "codec", HAS_ARG, { .func_arg = opt_codec}, "force decoder", "decoder_name" }, + { "acodec", HAS_ARG | OPT_STRING | OPT_EXPERT, { &audio_codec_name }, "force audio decoder", "decoder_name" }, + { "scodec", HAS_ARG | OPT_STRING | OPT_EXPERT, { &subtitle_codec_name }, "force subtitle decoder", "decoder_name" }, + { "vcodec", HAS_ARG | OPT_STRING | OPT_EXPERT, { &video_codec_name }, "force video decoder", "decoder_name" }, { NULL, }, }; |