00001 /*!@file Transport/FrameOfilt.H Generic base class for output frame filters */ 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/Transport/FrameOfilt.H $ 00035 // $Id: FrameOfilt.H 9547 2008-03-28 23:32:43Z rjpeters $ 00036 // 00037 00038 #ifndef TRANSPORT_FRAMEOFILT_H_DEFINED 00039 #define TRANSPORT_FRAMEOFILT_H_DEFINED 00040 00041 #include "Transport/FrameOstream.H" 00042 00043 /// Generic base class for output frame filters 00044 /** This class is the base class for output filter classes that can be 00045 chained together to perform one or more operations on output 00046 frames before they reach their final destination (display, disk, 00047 network, etc.) */ 00048 class FrameOfilt : public FrameOstream 00049 { 00050 public: 00051 /// Constructor 00052 FrameOfilt(OptionManager& mgr, 00053 const std::string& descrName, 00054 const std::string& tagName); 00055 00056 /// Destructor 00057 virtual ~FrameOfilt(); 00058 00059 /// Build our frame destination from the given string 00060 /** Subclasses should NOT override setConfigInfo() from 00061 FrameOfilt. If they need additional configuration information, 00062 they should get it from a command-line option through an 00063 OModelParam, or if more flexibility is needed, then just inherit 00064 from FrameOstream itself rather than from FrameOfilt. */ 00065 virtual void setConfigInfo(const std::string& cfg); 00066 00067 /// Just pass the frame number onto our frame destination 00068 /** Subclasses should NOT override setFrameNumber() from 00069 FrameOfilt. If more flexibility is needed, then just inherit 00070 from FrameOstream itself rather than from FrameOfilt. */ 00071 virtual bool setFrameNumber(int n); 00072 00073 /// Sends the frame through filterFrame() 00074 /** Subclasses should NOT override writeFrame() from FrameOfilt; 00075 instead, they should implement filterFrame(). If more 00076 flexibility is needed, then just inherit from FrameOstream 00077 itself rather than from FrameOfilt. */ 00078 virtual void writeFrame(const GenericFrame& frame, 00079 const std::string& shortname, 00080 const FrameInfo& auxinfo); 00081 00082 /// Default version just returns the result of isVoid() from our destination 00083 virtual bool isVoid() const; 00084 00085 /// Just pass the closeStream() request on to our frame destination 00086 virtual void closeStream(const std::string& shortname); 00087 00088 protected: 00089 /// Subclasses implement their filtering here 00090 /** A trivial pass-through implementation would be 00091 dest.writeFrame(frame, shortname, auxinfo) */ 00092 virtual void filterFrame(FrameOstream& dest, 00093 const GenericFrame& frame, 00094 const std::string& shortname, 00095 const FrameInfo& auxinfo) = 0; 00096 00097 private: 00098 nub::soft_ref<FrameOstream> itsDest; 00099 }; 00100 00101 // ###################################################################### 00102 /* So things look consistent in everyone's emacs... */ 00103 /* Local Variables: */ 00104 /* mode: c++ */ 00105 /* indent-tabs-mode: nil */ 00106 /* End: */ 00107 00108 #endif // TRANSPORT_FRAMEOFILT_H_DEFINED