int main(int argc, char* argv[]) { application_settings config; sprintf(config.file,"none"); const char *app_name = "reacTIVision"; const char *version_no = "1.6"; bool headless = false; std::cout << app_name << " " << version_no << " (" << __DATE__ << ")" << std::endl << std::endl; if (argc>1) { if (strcmp( argv[1], "-h" ) == 0 ) { printUsage(app_name); return 0; } else if( strcmp( argv[1], "-c" ) == 0 ) { if (argc==3) sprintf(config.file,"%s",argv[2]); else { printUsage(app_name); return 0; } } else if( strcmp( argv[1], "-n" ) == 0 ) { headless = true; } else if( strcmp( argv[1], "-l" ) == 0 ) { CameraTool::listDevices(); return 0; } else if ( (std::string(argv[1]).find("-NSDocumentRevisionsDebugMode")==0 ) || (std::string(argv[1]).find("-psn_")==0) ){ // ignore mac specific arguments } else { printUsage(app_name); } } #ifndef WIN32 signal(SIGINT,terminate); signal(SIGHUP,terminate); signal(SIGQUIT,terminate); signal(SIGTERM,terminate); #endif readSettings(&config); config.headless = headless; engine = new VisionEngine(app_name,&config); if (!headless) { UserInterface *uiface = new SDLinterface(app_name,config.fullscreen); switch (config.display_mode) { case 0: uiface->setDisplayMode(NO_DISPLAY); break; case 1: uiface->setDisplayMode(SOURCE_DISPLAY); break; case 2: uiface->setDisplayMode(DEST_DISPLAY); break; } engine->setInterface(uiface); } TuioServer *server = NULL; FrameProcessor *fiducialfinder = NULL; FrameProcessor *thresholder = NULL; FrameProcessor *calibrator = NULL; for (int i=0;i<config.tuio_count;i++) { OscSender *sender = NULL; try { switch (config.tuio_type[i]) { case TUIO_UDP: sender = new UdpSender(config.tuio_host[i].c_str(),config.tuio_port[i]); break; case TUIO_TCP_CLIENT: sender = new TcpSender(config.tuio_host[i].c_str(),config.tuio_port[i]); break; case TUIO_TCP_HOST: sender = new TcpSender(config.tuio_port[i]); break; case TUIO_WEB: sender = new WebSockSender(config.tuio_port[i]); break; case TUIO_FLASH: sender = new FlashSender(); break; default: continue; } } catch (std::exception e) {} if (sender) { if(i==0) server = new TuioServer(sender); else server->addOscSender(sender); pv_sleep(1); } } server->setSourceName("rtv"); server->setInversion(config.invert_x, config.invert_y, config.invert_a); thresholder = new FrameThresholder(config.gradient_gate, config.tile_size, config.thread_count); if (config.background) thresholder->toggleFlag(KEY_SPACE,false); engine->addFrameProcessor(thresholder); fiducialfinder = new FidtrackFinder(server, &config); engine->addFrameProcessor(fiducialfinder); calibrator = new CalibrationEngine(config.grid_config); engine->addFrameProcessor(calibrator); engine->start(); engine->removeFrameProcessor(calibrator); delete calibrator; config.finger_size = ((FidtrackFinder*)fiducialfinder)->getFingerSize(); config.finger_sensitivity = ((FidtrackFinder*)fiducialfinder)->getFingerSensitivity(); config.max_blob_size = ((FidtrackFinder*)fiducialfinder)->getBlobSize(); config.object_blobs = ((FidtrackFinder*)fiducialfinder)->getFiducialBlob(); config.cursor_blobs = ((FidtrackFinder*)fiducialfinder)->getFingerBlob(); config.yamaarashi = ((FidtrackFinder*)fiducialfinder)->getYamaarashi(); engine->removeFrameProcessor(fiducialfinder); delete fiducialfinder; config.gradient_gate = ((FrameThresholder*)thresholder)->getGradientGate(); config.tile_size = ((FrameThresholder*)thresholder)->getTileSize(); config.background = ((FrameThresholder*)thresholder)->getEqualizerState(); engine->removeFrameProcessor(thresholder); delete thresholder; config.invert_x = server->getInvertXpos(); config.invert_y = server->getInvertYpos(); config.invert_a = server->getInvertAngle(); delete engine; delete server; writeSettings(&config); return 0; }
int main(int argc, char* argv[]) { reactivision_settings config; sprintf(config.file,"none"); const char *app_name = "reacTIVision"; const char *version_no = "1.5.1"; bool headless = false; std::cout << app_name << " " << version_no << " (" << __DATE__ << ")" << std::endl << std::endl; if (argc>1) { if (strcmp( argv[1], "-h" ) == 0 ) { printUsage(); return 0; } else if( strcmp( argv[1], "-c" ) == 0 ) { if (argc==3) sprintf(config.file,"%s",argv[2]); else { printUsage(); return 0; } } else if( strcmp( argv[1], "-n" ) == 0 ) { headless = true; } else if( strcmp( argv[1], "-l" ) == 0 ) { CameraTool::listDevices(); MidiServer::listDevices(); return 0; } else if ( (std::string(argv[1]).find("-NSDocumentRevisionsDebugMode")==0 ) || (std::string(argv[1]).find("-psn_")==0) ){ // ignore mac specific arguments } else { printUsage(); } } #ifndef WIN32 signal(SIGINT,terminate); signal(SIGHUP,terminate); signal(SIGQUIT,terminate); signal(SIGTERM,terminate); #endif readSettings(&config); config.headless = headless; CameraEngine *camera = setupCamera(config.camera_config); engine = new SDLinterface(app_name, camera, &config); if (!headless) { switch (config.display_mode) { case 0: engine->setDisplayMode(engine->NO_DISPLAY); break; case 1: engine->setDisplayMode(engine->SOURCE_DISPLAY); break; case 2: engine->setDisplayMode(engine->DEST_DISPLAY); break; } } else engine->setDisplayMode(engine->NO_DISPLAY); MessageServer *server = NULL; FrameProcessor *fiducialfinder = NULL; FrameProcessor *thresholder = NULL; FrameProcessor *equalizer = NULL; FrameProcessor *calibrator = NULL; if(config.midi) server = new MidiServer(config.midi_config); else server = new TuioServer(config.host,config.port); server->setInversion(config.invert_x, config.invert_y, config.invert_a); equalizer = new FrameEqualizer(); engine->addFrameProcessor(equalizer); if (config.background) equalizer->toggleFlag(' '); thresholder = new FrameThresholder(config.gradient_gate, config.tile_size, config.thread_count); engine->addFrameProcessor(thresholder); if (config.amoeba) fiducialfinder = new FidtrackFinder(server, config.tree_config, config.grid_config, config.finger_size, config.finger_sensitivity); else if (config.classic) fiducialfinder = new FidtrackFinderClassic(server, config.grid_config); engine->addFrameProcessor(fiducialfinder); calibrator = new CalibrationEngine(config.grid_config); engine->addFrameProcessor(calibrator); engine->run(); teardownCamera(camera); config.display_mode = engine->getDisplayMode(); engine->removeFrameProcessor(calibrator); delete calibrator; if (config.amoeba) { config.finger_size = ((FidtrackFinder*)fiducialfinder)->getFingerSize(); config.finger_sensitivity = ((FidtrackFinder*)fiducialfinder)->getFingerSensitivity(); } engine->removeFrameProcessor(fiducialfinder); config.gradient_gate = ((FrameThresholder*)thresholder)->getGradientGate(); config.tile_size = ((FrameThresholder*)thresholder)->getTileSize(); engine->removeFrameProcessor(thresholder); delete thresholder; config.background = ((FrameEqualizer*)equalizer)->getState(); engine->removeFrameProcessor(equalizer); delete equalizer; config.invert_x = server->getInvertX(); config.invert_y = server->getInvertY(); config.invert_a = server->getInvertA(); delete fiducialfinder; delete engine; delete server; writeSettings(&config); return 0; }