/* * +-------------------------+ * | S I N G L E P A S S | * +-------------------------+ */ #include #include #include #include #include #include "../floatimg.h" #include "crapulator.h" #include "filterstack.h" #include "single.h" /* ----------------------------------------------------------- */ #define FILTERS 0 int verbosity; /* ----------------------------------------------------------- */ int run_the_singlepass(char *globber, char *destdir, int fchain) { FloatImg image = { 0 }; int idx, foo; glob_t globbuf; char *fname; double elapsed; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( '%s' '%s' %d )\n", __func__, globber, destdir, fchain); #endif // filterstack_list(fchain, "Run the single pass"); (void)fimg_timer_set(0); foo = single_init(0, destdir, fchain); if (foo) { fprintf(stderr, "erreur %d single_init\n", foo); return foo; } // single_print_state("just after init", 0); memset(&globbuf, 0, sizeof(glob_t)); foo = glob(globber, 0, NULL, &globbuf); // fprintf(stderr, "globbing '%s' -> %d, %d files found\n", // globber, foo, (int)globbuf.gl_pathc); switch (foo) { case GLOB_NOSPACE: fprintf(stderr, "%s: glob run out of memory\n", __func__); break; case GLOB_ABORTED: fprintf(stderr, "%s: glob read error\n", __func__); break; case GLOB_NOMATCH: fprintf(stderr, "%s: glob found no matches\n", __func__); break; } if (0 == globbuf.gl_pathc) { fprintf(stderr, "%s: no file found, aborting\n", __func__); return -1; } for (idx=0; idx %d\n", foo); return -1; } foo = filterstack_run(fchain, &image, 0); if (foo) { fprintf(stderr, "%s: filterstack run --> %d\n", __func__, foo); return foo; } foo = single_push_picture(&image); if (foo) { fprintf(stderr, "error %d on push_picture\n", foo); return foo; } } fprintf(stderr, "\n"); fimg_destroy(&image); single_print_state("end of run :)", 0); elapsed = fimg_timer_get(0); fprintf(stderr, "%s: %ld frames, elapsed %.3f s, %.3f fps\n", __func__, (long)globbuf.gl_pathc, elapsed, (double)globbuf.gl_pathc/elapsed); return 0; } /* ----------------------------------------------------------- */ static void help(void) { puts("------ Single pass serial filter ------\nusage:"); puts("\t-F\tdefine:the:filter:chain"); puts("\t-g\tinput glob pattern"); puts("\t-L\tlist available filters"); puts("\t-O\t/output/directory"); // puts("\t-s\tdo single test"); puts("\t-v\tspit more messages"); exit(0); } /* ----------------------------------------------------------- */ int main(int argc, char *argv[]) { int foo, opt; char *filterchain = "none"; char *globbing = "./capture/?????.fimg"; char *outdir = "./p8"; int do_xper = 0; fprintf(stderr, "*** %s : compiled %s %s\n", __FILE__, __DATE__, __TIME__); fimg_print_version(2); while ((opt = getopt(argc, argv, "hF:g:LO:svx")) != -1) { switch (opt) { case 'h': help(); break; case 'F': filterchain = optarg; break; case 'g': globbing = optarg; break; case 'L': list_crapulors("available filters"); exit(0); case 'O': outdir = optarg; break; case 'v': verbosity++; break; case 'x': do_xper = 1; break; default: fprintf(stderr, "%s ABEND\n", argv[0]); exit(1); } } foo = parse_filter_chain(FILTERS, filterchain); if (foo) { fprintf(stderr, "err %d in parse_filter_chain\n", foo); exit(1); } if (verbosity) { fprintf(stderr, "\tpid %d\n", getpid()); fprintf(stderr, "\tinput glob %s\n", globbing); fprintf(stderr, "\tfilter chain %s\n", filterchain); fprintf(stderr, "\tourput dir %s\n", outdir); fprintf(stderr, "\tdo xper %d\n", do_xper); } foo = run_the_singlepass(globbing, outdir, FILTERS); fprintf(stderr, "\n\tRun the single pass --> %d\n", foo); return 0; } /* ----------------------------------------------------------- */