X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=32f380838d1c12c4c1331fc3246f4e29044b0ed8;hb=7f12a9780e2129b788a42574f8e71dc8c22e86d1;hp=2131605b1695b920d5473b728170dc8b65b935e0;hpb=01310af292fe18ba700f7ba9d97ab8d43427a619;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index 2131605b169..32f380838d1 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -14,44 +14,46 @@ * * 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 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include -#include -#include - -#include "common.h" +#define HAVE_AV_CONFIG_H #include "avformat.h" +#include "common.h" #include "cmdutils.h" -void show_help_options(const OptionDef *options) +void show_help_options(const OptionDef *options, const char *msg, int mask, int value) { const OptionDef *po; - int i, expert, first; + int first; - printf("Main options are:\n"); - for(i=0;i<2;i++) { - first = 1; - for(po = options; po->name != NULL; po++) { - char buf[64]; - expert = (po->flags & OPT_EXPERT) != 0; - if (expert == i) { - if (expert && first) { - printf("\nAdvanced options are:\n"); - first = 0; - } - strcpy(buf, po->name); - if (po->flags & HAS_ARG) { - strcat(buf, " "); - strcat(buf, po->argname); - } - printf("-%-17s %s\n", buf, po->help); + first = 1; + for(po = options; po->name != NULL; po++) { + char buf[64]; + if ((po->flags & mask) == value) { + if (first) { + printf("%s", msg); + first = 0; + } + pstrcpy(buf, sizeof(buf), po->name); + if (po->flags & HAS_ARG) { + pstrcat(buf, sizeof(buf), " "); + pstrcat(buf, sizeof(buf), po->argname); } + printf("-%-17s %s\n", buf, po->help); } } } +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; @@ -62,15 +64,13 @@ void parse_options(int argc, char **argv, const OptionDef *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++; - } + 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); } @@ -84,12 +84,19 @@ void parse_options(int argc, char **argv, const OptionDef *options) } if (po->flags & OPT_STRING) { char *str; - str = strdup(arg); + str = av_strdup(arg); *po->u.str_arg = str; } else if (po->flags & OPT_BOOL) { *po->u.int_arg = 1; + } else if (po->flags & OPT_INT) { + *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); @@ -104,7 +111,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: @@ -113,6 +120,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;