X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=2c53d90daa3b451ff781fcd0d78d8172d9a16ba0;hb=013591c5f2a8b1425dc3508754fd384db50e4509;hp=16067cb556e6ccc3a8bd7928e9123ec4b6f1314a;hpb=0ecca7a49f8e254c12a3a1de048d738bfbb614c6;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index 16067cb556e..2c53d90daa3 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -2,19 +2,21 @@ * Various utilities for command line tools * Copyright (c) 2000-2003 Fabrice Bellard * - * This library is free software; you can redistribute it and/or + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * - * This library is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define HAVE_AV_CONFIG_H #include "avformat.h" @@ -45,25 +47,36 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int } } +static const OptionDef* find_option(const OptionDef *po, const char *name){ + while (po->name != NULL) { + if (!strcmp(name, po->name)) + break; + po++; + } + return po; +} + void parse_options(int argc, char **argv, const OptionDef *options) { const char *opt, *arg; - int optindex; + int optindex, handleoptions=1; const OptionDef *po; /* parse options */ optindex = 1; while (optindex < argc) { opt = argv[optindex++]; - - if (opt[0] == '-' && opt[1] != '\0') { - po = options; - while (po->name != NULL) { - if (!strcmp(opt + 1, po->name)) - break; - po++; - } + + if (handleoptions && opt[0] == '-' && opt[1] != '\0') { + if (opt[1] == '-' && opt[2] == '\0') { + handleoptions = 0; + continue; + } + po= find_option(options, opt + 1); + if (!po->name) + po= find_option(options, "default"); if (!po->name) { +unknown_opt: fprintf(stderr, "%s: unrecognized option '%s'\n", argv[0], opt); exit(1); } @@ -85,8 +98,11 @@ void parse_options(int argc, char **argv, const OptionDef *options) *po->u.int_arg = atoi(arg); } else if (po->flags & OPT_FLOAT) { *po->u.float_arg = atof(arg); + } else if (po->flags & OPT_FUNC2) { + if(po->u.func2_arg(opt+1, arg)<0) + goto unknown_opt; } else { - po->u.func_arg(arg); + po->u.func_arg(arg); } } else { parse_arg_file(opt); @@ -101,7 +117,7 @@ void print_error(const char *filename, int err) 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", + " for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n", filename); break; case AVERROR_INVALIDDATA: @@ -110,6 +126,14 @@ void print_error(const char *filename, int err) case AVERROR_NOFMT: fprintf(stderr, "%s: Unknown format\n", filename); break; + case AVERROR_IO: + fprintf(stderr, "%s: I/O error occured\n" + "Usually that means that input file is truncated and/or corrupted.\n", + filename); + break; + case AVERROR_NOMEM: + fprintf(stderr, "%s: memory allocation error occured\n", filename); + break; default: fprintf(stderr, "%s: Error while opening file\n", filename); break;