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