test-beoGrab.C

Go to the documentation of this file.
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: */
Generated on Sun May 8 08:05:30 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3