diff --git a/floatimg.h b/floatimg.h index 1f61a10..13a9fdb 100644 --- a/floatimg.h +++ b/floatimg.h @@ -88,5 +88,8 @@ int fimg_save_as_png(FloatImg *src, char *outname, int flags); int fimg_draw_something(FloatImg *fimg); int parse_WxH(char *str, int *pw, int *ph); +int parse_double(char *str, double *dptr); + + diff --git a/funcs/t.c b/funcs/t.c index 0f90ab9..4f8a937 100644 --- a/funcs/t.c +++ b/funcs/t.c @@ -8,20 +8,28 @@ #include "../floatimg.h" -int fimg_pnm_infos(char *); - /* --------------------------------------------------------------------- */ int main(int argc, char *argv[]) { int foo; -char *infile = "foo.pnm"; +double dval; +char *str; -pnm_init(&argc, argv); +str = "12.34"; dval = 0.0; +foo = parse_double(str, &dval); +printf("%-10s -> %3d %g\n", str, foo, dval); -if (2 == argc) infile = argv[1]; +str = "12e4"; dval = 0.0; +foo = parse_double(str, &dval); +printf("%-10s -> %3d %g\n", str, foo, dval); -foo = fimg_pnm_infos(infile); -fprintf(stderr, "got %d\n", foo); +str = "5s"; dval = 0.0; +foo = parse_double(str, &dval); +printf("%-10s -> %3d %g\n", str, foo, dval); + +str = "PORN"; dval = 0.0; +foo = parse_double(str, &dval); +printf("%-10s -> %3d %g\n", str, foo, dval); return 0; } diff --git a/funcs/utils.c b/funcs/utils.c index f88bdf7..495fac6 100644 --- a/funcs/utils.c +++ b/funcs/utils.c @@ -29,3 +29,16 @@ if (2 != foo) { return 2; } /* --------------------------------------------------------------------- */ +int parse_double(char *str, double *dptr) +{ +double value; +int foo; + +foo = sscanf(str, "%lf", &value); +if (1 == foo) { + *dptr = value; + return 1; + } +return -1; +} +/* --------------------------------------------------------------------- */ diff --git a/v4l2/grabvidseq.c b/v4l2/grabvidseq.c index b311544..6735316 100644 --- a/v4l2/grabvidseq.c +++ b/v4l2/grabvidseq.c @@ -122,7 +122,14 @@ while ((opt = getopt(argc, argv, "d:ghn:o:O:p:s:uv")) != -1) { case 'n': nbre_capt = atoi(optarg); break; case 'O': dest_dir = optarg; break; case 'o': outfile = optarg; break; - case 'p': period = 1e6*atof(optarg); break; + case 'p': foo = parse_double(optarg, &period); + if (foo<0) { + fprintf(stderr, + "error parsing -p arg '%s'\n", + optarg); + exit(1); + } + break; case 's': parse_WxH(optarg, &width, &height); break; case 'u': upscaling = 1; break;