LowLevelEncoderMap.C

Go to the documentation of this file.
00001 /*!@file Transport/LowLevelEncoderMap.C A partial implementation of FrameOstream, using a map between 'shortnames' and LowLevelEncoder objects */
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/LowLevelEncoderMap.C $
00035 // $Id: LowLevelEncoderMap.C 8906 2007-10-25 23:30:51Z rjpeters $
00036 //
00037 
00038 #ifndef TRANSPORT_LOWLEVELENCODERMAP_C_DEFINED
00039 #define TRANSPORT_LOWLEVELENCODERMAP_C_DEFINED
00040 
00041 #include "Transport/LowLevelEncoderMap.H"
00042 
00043 #include "Raster/GenericFrame.H"
00044 #include "Util/Assert.H"
00045 
00046 #include <map>
00047 
00048 // ######################################################################
00049 struct LowLevelEncoderMap::Impl
00050 {
00051   typedef std::map<std::string, rutz::shared_ptr<LowLevelEncoder> > MapType;
00052 
00053   MapType encoders;
00054 };
00055 
00056 // ######################################################################
00057 LowLevelEncoderMap::LowLevelEncoderMap(OptionManager& mgr,
00058                                        const std::string& descrName,
00059                                        const std::string& tagName)
00060   :
00061   FrameOstream(mgr, descrName, tagName),
00062   rep(0)
00063 {}
00064 
00065 // ######################################################################
00066 LowLevelEncoderMap::~LowLevelEncoderMap()
00067 {
00068   delete rep;
00069 }
00070 
00071 // ######################################################################
00072 void LowLevelEncoderMap::writeFrame(const GenericFrame& frame,
00073                                     const std::string& shortname,
00074                                     const FrameInfo& auxinfo)
00075 {
00076 
00077   if (shortname.length() == 0)
00078     LFATAL("must specify a non-empty filename");
00079 
00080   if (rep == 0)
00081     {
00082       rep = new Impl;
00083     }
00084 
00085   ASSERT(rep != 0);
00086 
00087   if (!rep->encoders[shortname].is_valid())
00088     rep->encoders[shortname] =
00089       this->makeEncoder(frame.frameSpec(), shortname, auxinfo);
00090 
00091   rutz::shared_ptr<LowLevelEncoder> enc = rep->encoders[shortname];
00092 
00093   ASSERT(enc.is_valid());
00094 
00095   enc->writeFrame(frame);
00096 }
00097 
00098 // ######################################################################
00099 void LowLevelEncoderMap::closeStream(const std::string& shortname)
00100 {
00101   if (rep != 0)
00102     {
00103       Impl::MapType::iterator itr = rep->encoders.find(shortname);
00104 
00105       if (itr != rep->encoders.end())
00106         {
00107           (*itr).second->close();
00108           rep->encoders.erase(itr);
00109         }
00110     }
00111 }
00112 
00113 // ######################################################################
00114 void LowLevelEncoderMap::stop2()
00115 {
00116   if (rep)
00117     {
00118       for (Impl::MapType::iterator itr = rep->encoders.begin(),
00119              stop = rep->encoders.end();
00120            itr != stop; ++itr)
00121         {
00122           itr->second->close();
00123           itr->second.reset(NULL);
00124         }
00125 
00126       delete rep;
00127       rep = 0;
00128     }
00129 
00130   FrameOstream::stop2();
00131 }
00132 
00133 // ######################################################################
00134 /* So things look consistent in everyone's emacs... */
00135 /* Local Variables: */
00136 /* mode: c++ */
00137 /* indent-tabs-mode: nil */
00138 /* End: */
00139 
00140 #endif // TRANSPORT_LOWLEVELENCODERMAP_C_DEFINED
Generated on Sun May 8 08:06:57 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3