void ImageSeries::SetImageCollection(const ImageVector& images){ _imageCollection.assign(images.begin(), images.end()); }
int main(int argc, char *argv[]) { int rc = 0; bool first = true; ImageVector v; Client client(argc, argv); if ((rc = parseArgs(argc, argv))) return rc; try { // event handler Event * event = new Event(); // Signal set to be handled by the event handler. ACE_Sig_Set sig; // register Signal handler for Ctr+C sig.sig_add(SIGINT); sig.sig_add(SIGTERM); // Reactor, misused as signal handler ACE_Reactor reactor; if (reactor.register_handler(sig, event) == -1) { throw Miro::ACE_Exception(errno, "failed to register signal handler"); } // get reference to video service Video_var video = client.resolveName<Video>(interfaceName.c_str()); Miro::VideoConnection connection(video.in()); ACE_Time_Value start; while(!canceled) { // wait for key if (first || !streaming) { first = false; cout << "Press key to grab next image: " << flush; getchar(); start = ACE_OS::gettimeofday(); } // init streaming timer if (!first && streaming) { ACE_Time_Value elapsed = ACE_OS::gettimeofday(); elapsed -= start; if (elapsed.msec() > stop) break; } { // get image Miro::VideoAcquireImage frame(connection, (interval)? Miro::VideoAcquireImage::Current : Miro::VideoAcquireImage::Next); // fill image structure Image image; image.fileName = path() + client.namingContextName + "_" + Miro::timeString() + ".ppm"; image.width = connection.handle->format.width; image.height = connection.handle->format.height; // fill image buffer if (!bgr && !streaming) image.buffer = (char*) frame.buffer; else { image.buffer = new char[3 * image.width * image.height]; // byte swapping if (bgr) { int offset = 0; for (int i = 0; i < image.width; ++i) { for (int j = 0; j < image.height; ++j, offset += 3) { image.buffer[offset + 0] = frame.buffer[offset + 2]; // r image.buffer[offset + 1] = frame.buffer[offset + 1]; // g image.buffer[offset + 2] = frame.buffer[offset + 0]; // b } } } else memcpy(image.buffer, frame.buffer, 3 * image.width * image.height); } // save image if (!streaming) { image.writePpm(); if (bgr) delete[] image.buffer; } else v.push_back(image); } // sleep if (interval) { ACE_Time_Value delta; delta.msec(interval); ACE_OS::sleep(delta); } } cout << "exiting on signal" << endl; for (ImageVector::const_iterator i = v.begin(); i != v.end(); ++i) { i->writePpm(); delete i->buffer; } } catch (const Miro::ETimeOut& e) { cerr << "Miro Timeout Exception: " << e << endl; rc = 1; } catch (const Miro::EDevIO & e) { cerr << "Miro Device I/O exception: " << e << endl; rc = 1; } catch (const Miro::EOutOfBounds & e) { cerr << "Miro out of bounds exception: " << e << endl; rc = 1; } catch (const CORBA::Exception & e) { cerr << "Uncaught CORBA exception: " << e << endl; rc = 1; } return rc; }