00001 /*!@file Parallel/test-beoGrab.C Test frame grabbing and X display */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00005 // University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: T. Nathan Mundhenk <mundhenk@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Parallel/test-beoGrab.C $ 00035 // $Id: test-beoGrab.C 6454 2006-04-11 00:47:40Z rjpeters $ 00036 // 00037 00038 #include "Beowulf/Beowulf.H" 00039 #include "Component/ModelManager.H" 00040 #include "Devices/FrameGrabberConfigurator.H" 00041 #include "Image/Image.H" 00042 #include "Image/Pixels.H" 00043 #include "Transport/FrameIstream.H" 00044 #include "Util/Types.H" 00045 #include "Util/log.H" 00046 #include "Util/sformat.H" 00047 00048 #include <cstdio> 00049 #include <cstdlib> 00050 #include <cstring> 00051 00052 #define NAVG 20 00053 00054 /*! This simple executable tests video frame grabbing through the 00055 video4linux driver (see V4Lgrabber.H) or the IEEE1394 (firewire) 00056 grabber (see IEEE1394grabber.H). Selection of the grabber type is 00057 made via the --fg-type=XX command-line option. */ 00058 int main(const int argc, const char **argv) 00059 { 00060 // instantiate a model manager: 00061 ModelManager manager("Beo Frame Grabber Tester"); 00062 00063 // Instantiate our various ModelComponents: 00064 nub::soft_ref<FrameGrabberConfigurator> 00065 gbc(new FrameGrabberConfigurator(manager)); 00066 manager.addSubComponent(gbc); 00067 00068 nub::soft_ref<Beowulf> 00069 beo(new Beowulf(manager, "Beowulf Slave", "BeowulfSlave", false)); 00070 manager.addSubComponent(beo); 00071 00072 // Parse command-line: 00073 if (manager.parseCommandLine(argc, argv, "", 0, 0) == false) return(1); 00074 00075 // do post-command-line configs: 00076 nub::soft_ref<FrameIstream> gb = gbc->getFrameGrabber(); 00077 if (gb.isInvalid()) 00078 LFATAL("You need to select a frame grabber type via the " 00079 "--fg-type=XX command-line option for this program " 00080 "to be useful"); 00081 00082 TCPmessage rmsg; // message being received and to process 00083 TCPmessage smsg; // message being sent 00084 00085 // let's get all our ModelComponent instances started: 00086 manager.start(); 00087 00088 // get ready for main loop: 00089 00090 int c = 0; 00091 00092 while(1) { 00093 int32 rframe, raction, rnode = -1; // receive from any node 00094 while(beo->receive(rnode, rmsg, rframe, raction, 5)) 00095 { 00096 Image< PixRGB<byte> > ima = gb->readRGB(); 00097 smsg.reset(rframe, 0); 00098 smsg.addImage(ima); 00099 smsg.addString(sformat("%dx%d frame %d", 00100 ima.getWidth(), ima.getHeight(), 00101 c++).c_str()); 00102 //com->send(node,smsg); 00103 beo->send(rnode, smsg); 00104 rmsg.reset(rframe, raction); 00105 } 00106 00107 } 00108 00109 // stop all our ModelComponents 00110 manager.stop(); 00111 00112 // all done! 00113 return 0; 00114 } 00115 00116 // ###################################################################### 00117 /* So things look consistent in everyone's emacs... */ 00118 /* Local Variables: */ 00119 /* indent-tabs-mode: nil */ 00120 /* End: */