OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ImageSequence.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSG_IMAGESEQUENCE
15 #define OSG_IMAGESEQUENCE 1
16 
17 #include <OpenThreads/Mutex>
18 #include <osg/ImageStream>
19 
20 #include <list>
21 #include <set>
22 
23 namespace osg {
24 
29 {
30  public:
31  ImageSequence();
32 
35 
36  virtual Object* cloneType() const { return new ImageSequence(); }
37  virtual Object* clone(const CopyOp& copyop) const { return new ImageSequence(*this,copyop); }
38  virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const ImageSequence*>(obj)!=0; }
39  virtual const char* libraryName() const { return "osg"; }
40  virtual const char* className() const { return "ImageSequence"; }
41 
43  virtual int compare(const Image& rhs) const;
44 
45  virtual void setReferenceTime(double t) { _referenceTime = t; }
46  virtual double getReferenceTime() const { return _referenceTime; }
47 
48  virtual void setTimeMultiplier(double tm) { _timeMultiplier = tm; }
49  virtual double getTimeMultiplier() const { return _timeMultiplier; }
50 
52  {
53  ImageData();
54  ImageData(const ImageData& id);
55  ImageData& operator = (const ImageData& id);
56 
57  std::string _filename;
60  };
61 
62  typedef std::vector<ImageData> ImageDataList;
63 
64  virtual void seek(double time);
65 
66  virtual void play();
67 
68  virtual void pause();
69 
70  virtual void rewind();
71 
72  enum Mode
73  {
78  LOAD_AND_DISCARD_IN_UPDATE_TRAVERSAL
79  };
80 
81  void setMode(Mode mode);
82  Mode getMode() const { return _mode; }
83 
84  void setLength(double length);
85  virtual double getLength() const { return _length; }
86 
87 
88  void addImageFile(const std::string& fileName);
89 
90  void setImageFile(unsigned int pos, const std::string& fileName);
91  std::string getImageFile(unsigned int pos) const;
92 
93  void addImage(osg::Image* image);
94 
95  void setImage(int s,int t,int r,
96  GLint internalTextureformat,
97  GLenum pixelFormat,GLenum type,
98  unsigned char* data,
99  AllocationMode mode,
100  int packing=1) { Image::setImage(s,t,r,internalTextureformat, pixelFormat, type, data, mode, packing); }
101 
102  void setImage(unsigned int pos, osg::Image* image);
103  Image* getImage(unsigned int pos);
104  const Image* getImage(unsigned int pos) const;
105 
106  unsigned int getNumImageData() const { return _imageDataList.size(); }
107 
108  ImageDataList& getImageDataList() { return _imageDataList; }
109  const ImageDataList& getImageDataList() const { return _imageDataList; }
110 
111 
113  virtual bool requiresUpdateCall() const { return true; }
114 
116  virtual void update(NodeVisitor* nv);
117 
118 
120  void setReadOptions(osg::Referenced* options) { _readOptions = options; }
121 
123  osg::Referenced* getReadOptions() { return _readOptions.get(); }
124 
126  const osg::Referenced* getReadOptions() const { return _readOptions.get(); }
127 
128 protected:
129 
130  virtual ~ImageSequence() {}
131 
132  virtual void applyLoopingMode();
133 
134  void setImageToChild(int pos);
135 
136  void computeTimePerImage();
137 
138  int imageIndex(double time);
139 
140  // setImage without acquiring mutex.
141  void _setImage(unsigned int pos, osg::Image* image);
142 
145 
147  double _length;
148 
150 
152 
153  ImageDataList _imageDataList;
154 
156 
157 
159  double _seekTime;
160 
162 
163 };
164 
165 } // namespace
166 
167 #endif
const ImageDataList & getImageDataList() const
#define OSG_EXPORT
Definition: Export.h:43
virtual void setReferenceTime(double t)
Definition: ImageSequence.h:45
unsigned int getNumImageData() const
This class provides an object-oriented thread mutex interface.
Definition: Mutex.h:31
Mode getMode() const
Definition: ImageSequence.h:82
void setImage(int s, int t, int r, GLint internalTextureformat, GLenum pixelFormat, GLenum type, unsigned char *data, AllocationMode mode, int packing=1)
Definition: ImageSequence.h:95
osg::ref_ptr< osg::Referenced > _imageRequest
Definition: ImageSequence.h:59
osg::ref_ptr< osg::Image > _image
Definition: ImageSequence.h:58
OpenThreads::Mutex _mutex
virtual ~ImageSequence()
virtual void setTimeMultiplier(double tm)
Definition: ImageSequence.h:48
virtual const char * libraryName() const
Definition: ImageSequence.h:39
virtual double getLength() const
Definition: ImageSequence.h:85
osg::Referenced * getReadOptions()
const osg::Referenced * getReadOptions() const
virtual double getReferenceTime() const
Definition: ImageSequence.h:46
AllocationMode
Definition: Image.h:175
virtual Object * cloneType() const
Definition: ImageSequence.h:36
virtual Object * clone(const CopyOp &copyop) const
Definition: ImageSequence.h:37
virtual void setImage(int s, int t, int r, GLint internalTextureformat, GLenum pixelFormat, GLenum type, unsigned char *data, AllocationMode mode, int packing=1, int rowLength=0)
osg::ref_ptr< osg::Referenced > _readOptions
virtual bool requiresUpdateCall() const
virtual bool isSameKindAs(const Object *obj) const
Definition: ImageSequence.h:38
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
Definition: GLU.h:71
virtual const char * className() const
Definition: ImageSequence.h:40
Definition: AlphaFunc.h:19
std::vector< ImageData > ImageDataList
Definition: ImageSequence.h:62
ImageDataList _imageDataList
void setReadOptions(osg::Referenced *options)
ImageDataList & getImageDataList()
virtual double getTimeMultiplier() const
Definition: ImageSequence.h:49