InputHandler.H

Go to the documentation of this file.
00001 /*!@file Channels/InputHandler.H Hooks for tweaking individual pieces of channel functionality */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005   //
00005 // by the 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: Rob Peters <rjpeters at usc dot edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Channels/InputHandler.H $
00035 // $Id: InputHandler.H 8195 2007-03-30 04:34:07Z rjpeters $
00036 //
00037 
00038 #ifndef CHANNELS_INPUTHANDLER_H_DEFINED
00039 #define CHANNELS_INPUTHANDLER_H_DEFINED
00040 
00041 #include "Util/Types.H"
00042 
00043 class SimTime;
00044 class SingleChannel;
00045 
00046 template <class T> class Image;
00047 template <class T> class PyramidCache;
00048 namespace rutz { template <class T> class shared_ptr; }
00049 
00050 //! Auxiliary class that can override parts of SingleChannel's functionality
00051 class InputHandler
00052 {
00053 public:
00054   virtual ~InputHandler();
00055 
00056   /// Like h->makeClone(), but works with null pointers, too.
00057   /** The point of this is to allow us to pass one InputHandler to a
00058       ComplexChannel, and then let that ComplexChannel make multiple
00059       clones of the handler to pass to each of its subchannels. This
00060       means that there may be many clones of a given InputHandler, but
00061       only some of them (i.e., the ones sitting in SingleChannel
00062       objects) will ever see any input; the other ones (sitting in
00063       ComplexChannel objects) won't be used except to instantiate
00064       additional clones when needed. In terms of implementation, this
00065       means that InputHandler classes shouldn't do anything "heavy"
00066       until they actually receive some input. Along those lines, the
00067       prototypical InputHandler subclass is the beowulf
00068       BeoInputHandler, which doesn't do a Beowulf::requestNode() in
00069       its constructor, but rather waits until it gets a handleInput()
00070       call. That way it is safe to have more BeoInputHandler objects
00071       than we have Beowulf nodes, as long as only a subset of the
00072       objects actually request Beowulf nodes. */
00073   static rutz::shared_ptr<InputHandler> clone(rutz::shared_ptr<InputHandler> h);
00074 
00075   virtual void handleInput(SingleChannel& chan,
00076                            const Image<float>& bwimg,
00077                            const SimTime& t,
00078                            const Image<byte>& clipMask,
00079                            const rutz::shared_ptr<PyramidCache<float> >& cache) = 0;
00080 
00081   virtual void waitForOutput(SingleChannel& chan) = 0;
00082 
00083 private:
00084   /// Make a clone of this InputHandler object.
00085   virtual rutz::shared_ptr<InputHandler> makeClone() const = 0;
00086 };
00087 
00088 // ######################################################################
00089 /* So things look consistent in everyone's emacs... */
00090 /* Local Variables: */
00091 /* mode: c++ */
00092 /* indent-tabs-mode: nil */
00093 /* End: */
00094 
00095 #endif // CHANNELS_INPUTHANDLER_H_DEFINED
Generated on Sun May 8 08:40:21 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3