00001 /*!@file Media/MgzEncoder.H Low-level class to decode mgz files */ 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/Media/MgzEncoder.H $ 00035 // $Id: MgzEncoder.H 8906 2007-10-25 23:30:51Z rjpeters $ 00036 // 00037 00038 #ifndef MEDIA_MGZENCODER_H_DEFINED 00039 #define MEDIA_MGZENCODER_H_DEFINED 00040 00041 #include "Image/Range.H" 00042 #include "Raster/GenericFrame.H" 00043 #include "Transport/LowLevelEncoder.H" 00044 #include "Util/Types.H" // for byte 00045 #include <zlib.h> 00046 00047 /// Low-level class to write mgz files 00048 /** You probably want to use MgzOutputStream instead, which relies on 00049 MgzEncoder internally for its implementation but offers a richer, 00050 higher-level interface. MGZ is a custom format which basically 00051 consists of just dumping raw frames into a gzip-compressed file, 00052 using zlib as the back-end compression engine. As far as 00053 MgzEncoder is concerned, frames could be of any size and any 00054 type. Applications using the encoder, however, may want to enforce 00055 that a given MGZ file only contains frames of a given size and 00056 type. */ 00057 class MgzEncoder : public LowLevelEncoder 00058 { 00059 public: 00060 //! Constructor 00061 /*! @param fname the file name 00062 @param complev the zlib compression level (1..9) */ 00063 MgzEncoder(const std::string& fname, const int complev); 00064 00065 //! Destructor 00066 virtual ~MgzEncoder(); 00067 00068 //! Close the file cleanly 00069 virtual int close(); 00070 00071 //! Write a frame into the file 00072 virtual void writeFrame(const GenericFrame& frame); 00073 00074 private: 00075 gzFile itsFile; 00076 }; 00077 00078 // ###################################################################### 00079 /* So things look consistent in everyone's emacs... */ 00080 /* Local Variables: */ 00081 /* mode: c++ */ 00082 /* indent-tabs-mode: nil */ 00083 /* End: */ 00084 00085 #endif // MEDIA_MGZENCODER_H_DEFINED