00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <fvutils/ipc/shm_image.h>
00024 #include <fvutils/ipc/shm_lut.h>
00025 #include <utils/system/argparser.h>
00026 #include <fvutils/writers/fvraw.h>
00027
00028 #include <iostream>
00029 #include <cstring>
00030 #include <cstdio>
00031
00032 using namespace std;
00033 using namespace fawkes;
00034 using namespace firevision;
00035
00036 int
00037 main(int argc, char **argv)
00038 {
00039
00040 ArgumentParser *argp = new ArgumentParser(argc, argv, "c::hl::i:");
00041 bool action_done = false;
00042
00043 if ( argp->has_arg("h") ) {
00044
00045 cout << endl << "Usage: " << argv[0] << " [-h] [-c] [-c[t]] [-l] [-i image_id] [file]" << endl
00046 << " -h Show this help message" << endl
00047 << " -i id Save image ID to file" << endl
00048 << " -c[t] Cleanup (remove all FireVision related shmem segments of given type)"
00049 << endl
00050 << " -l[t] List shared memory segments of given type" << endl
00051 << endl
00052 << " [t] type is a combination of" << endl
00053 << " i images" << endl
00054 << " l lookup tables" << endl
00055 << " or empty in which case all known shared memory segments are mangled" << endl
00056 << endl
00057 << " [file] is a file name. Content depends on the action. The possibilities are: " << endl
00058 << " for -i File where the saved image is stored" << endl
00059 << endl
00060 << "By default all known shared memory segments are listed" << endl
00061 << endl;
00062 action_done = true;
00063 } else {
00064 if ( argp->has_arg("i") ) {
00065 if ( argp->num_items() == 0 ) {
00066 printf("You have to give a file name where to store the image\n");
00067 } else {
00068 const char *image_id = argp->arg("i");
00069
00070 try {
00071 SharedMemoryImageBuffer *b = new SharedMemoryImageBuffer(image_id);
00072
00073 FvRawWriter *w = new FvRawWriter(argp->items()[0], b->width(), b->height(),
00074 b->colorspace(), b->buffer());
00075 w->write();
00076 delete w;
00077 delete b;
00078 printf("Image '%s' saved to %s\n", image_id, argp->items()[0]);
00079 } catch (Exception &e) {
00080 printf("Failed top save image\n");
00081 e.print_trace();
00082 }
00083 }
00084 }
00085 if ( argp->has_arg("c") ) {
00086 const char *tmp;
00087 if ( (tmp = argp->arg("c")) != NULL) {
00088 if ( strchr(tmp, 'i') != NULL) {
00089 SharedMemoryImageBuffer::cleanup();
00090 }
00091 if ( strchr(tmp, 'l') != NULL) {
00092 SharedMemoryLookupTable::cleanup();
00093 }
00094 } else {
00095 SharedMemoryImageBuffer::cleanup();
00096 SharedMemoryLookupTable::cleanup();
00097 }
00098
00099 action_done = true;
00100 }
00101 if ( argp->has_arg("l") ) {
00102 const char *tmp;
00103 if ( (tmp = argp->arg("l")) != NULL) {
00104 if ( strchr(tmp, 'i') != NULL) {
00105 SharedMemoryImageBuffer::list();
00106 }
00107 if ( strchr(tmp, 'l') != NULL) {
00108 SharedMemoryLookupTable::list();
00109 }
00110 } else {
00111 SharedMemoryImageBuffer::list();
00112 SharedMemoryLookupTable::list();
00113 }
00114
00115 action_done = true;
00116 }
00117 }
00118
00119 if (! action_done) {
00120 SharedMemoryImageBuffer::list();
00121 cout << endl;
00122 SharedMemoryLookupTable::list();
00123 }
00124
00125 cout << endl;
00126 }