MovieDecoder.H

Go to the documentation of this file.
00001 /*!@file Media/MovieDecoder.H Abstract base class for low-level movie decoders */
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/MovieDecoder.H $
00035 // $Id: MovieDecoder.H 9547 2008-03-28 23:32:43Z rjpeters $
00036 //
00037 
00038 #ifndef MEDIA_MOVIEDECODER_H_DEFINED
00039 #define MEDIA_MOVIEDECODER_H_DEFINED
00040 
00041 #include "Util/Types.H" // for byte
00042 
00043 class Dims;
00044 class GenericFrameSpec;
00045 class VideoFrame;
00046 template <class T> class Image;
00047 template <class T> class PixRGB;
00048 
00049 /// Abstract base class for low-level movie decoders
00050 class MovieDecoder
00051 {
00052 public:
00053   /// Virtual destructor for safe inheritance
00054   virtual ~MovieDecoder();
00055 
00056   /// Seek to the given frame number
00057   /** The new frame number must be greater than or equal to the
00058       current frame number (i.e., we can't seek backwards). Default
00059       implementation just calls readAndDiscardFrame() until
00060       apparentFrameNumber() == n.
00061 
00062       @return Whether the frame number was succesfully set to the
00063       requested value. The function may fail if the requested number
00064       is greater than the number of frames in the movie, for example.
00065   */
00066   virtual bool setFrameNumber(int n);
00067 
00068   /// Get the "apparent" frame number
00069   /** This function takes into account whether or not the next frame
00070       will be a push-back frame */
00071   virtual int apparentFrameNumber() const = 0;
00072 
00073   /// Get the specifications of the movie frames
00074   virtual GenericFrameSpec peekFrameSpec() = 0;
00075 
00076   /// Get the next raw VideoFrame from the stream
00077   virtual VideoFrame readVideoFrame() = 0;
00078 
00079   /// Read an RGB image from the stream
00080   virtual Image<PixRGB<byte> > readRGB() = 0;
00081 
00082   /// Read a frame from the stream and discard it
00083   /** If you know you are going to discard the frame (e.g. to skip
00084       ahead to a certain frame number, or to count the frame), then it
00085       is more efficient to call readAndDiscardFrame() than to call
00086       readVideoFrame() or readRGB() but ignore the result. */
00087   virtual bool readAndDiscardFrame() = 0;
00088 };
00089 
00090 // ######################################################################
00091 /* So things look consistent in everyone's emacs... */
00092 /* Local Variables: */
00093 /* mode: c++ */
00094 /* indent-tabs-mode: nil */
00095 /* End: */
00096 
00097 #endif // MEDIA_MOVIEDECODER_H_DEFINED
Generated on Sun May 8 08:05:20 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3