root/OpenSceneGraph/trunk/src/osgPlugins/quicktime/MovieData.h @ 8792

Revision 8792, 4.6 kB (checked in by robert, 6 years ago)

From Michael Guerrero, Fixed crash that occurred when openning an new movie file after all previous movie ImageStream? had been closed. Also add a missing close of the movie file.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
RevLine 
[5803]1 /*
[2815]2 *  MovieData.h
3 *  encapsulates movie-related stuff
4 *
5 *  Created by Stephan Huber on Wed Mar 10 2004.
6 *  Copyright (c) 2004 digital mind. All rights reserved.
7 *
8 */
9
10#ifndef _MOVIEDATA_HEADER_
11#define _MOVIEDATA_HEADER_
12
13#include <osg/Notify>
14#include <osg/Image>
15#include <string>
16
[5799]17#include "QTUtils.h"
18
[7042]19#include <math.h>
[5799]20
[7042]21
[5799]22    /**
23     * the class MovieData encapsulates all quicktime-related stuff, so it doesn't polute the namespaces
24     * it handles all calls to quicktime etc... It is mainly used by the QuicktimeImageStream, it is
25     * rarely needed in other contexts
26     */
[2815]27    class MovieData {
28   
29        public:
[5799]30            /** default constructor */
[2815]31            MovieData();
[5799]32           
33            /** default destructor */
[2815]34            ~MovieData();
35           
[5799]36            /**
37             * loads a movie, start it playing at startTime, use Image for the storage
38             * @param image the image, to use as storage
39             * @param fileName the movie to open
40             * @param startTime the starttime to begin with
41             */
[2815]42            void load(osg::Image* image, std::string fileName, float startTime = 0.0f);
43           
[5799]44            /** @return the duration for this movie in seconds */
45            inline float getMovieDuration() { return GetMovieDuration(_movie)/(float)_timescale;}
[2815]46           
[5799]47            /** @return the current position for this movie in seconds */
48            inline float getMovieTime()  {return GetMovieTime(_movie,NULL)/(float)_timescale; }
49           
50            /** stes the movietime */
51            void setMovieTime(float atime);
52                       
53            /** @return the Movie-handle, to use it with other quicktime-calls */
54            inline Movie &getMovie() { return _movie; }
55           
56            /** @return the current movieRate */
57            inline float getMovieRate() { return Fix2X(GetMovieRate(_movie)); }
58            /** @return returns the cached movierate, may differ to the real movierate */
59            inline float getCachedMovieRate() { return _movieRate; }
60           
61            /** sets the MovieRate for this movie */
62            void setMovieRate(float rate);
63           
64            /** sets the volume for the soundtrack of this movie */
[7042]65            void setVolume(float volume) { SetMovieVolume(_movie,(short)(ceil(volume*255.0f)));}
66            float getVolume() const { return GetMovieVolume(_movie) / 255.0f; }
[5799]67           
68            void setAudioBalance(float f) {
69                Float32 balance = f;
70                SetMovieAudioBalance(_movie, balance, 0);
71            }
72           
73            float getAudioBalance() {
74                Float32 balance;
75                float f;
76                GetMovieAudioBalance(_movie, &balance, 0);
77                f = balance;
78                return f;
79            }
[6701]80           
81            /** @return true, if this movie is looping */
82            bool isLooping() const { return _isLooping; }
83           
84            /** sets the looping mode */
85            void setLooping(bool loop) {
86                if (_isLooping != loop) {
87                    _isLooping = loop;
88                    switch (_isLooping) {
89                        case true:
90                            SetTimeBaseFlags(GetMovieTimeBase(_movie), loopTimeBase);
91                            break;
92                        case false:
93                            SetTimeBaseFlags(GetMovieTimeBase(_movie), 0);
94                            break;
95                    }
96                }
97            }
[5799]98               
99           
[2815]100        protected:
[8792]101            char*           _pointer;
102            short           _resref;
[2815]103            Movie           _movie;
104            GWorldPtr       _gw;
105           
106            unsigned int    _movieWidth, _movieHeight, _textureWidth, _textureHeight;
107            float           _timescale;
108            bool            _fError;
[5803]109            float           _movieRate;
110            bool            _preRolled;
[6701]111            bool            _isLooping;
[2815]112           
[5799]113            /** inits the image for storage */
[2815]114            void _initImage(osg::Image* image);
[5799]115           
116            /** inits the gWorld, where the movie gets drawn into */
[2815]117            void _initGWorldStuff(osg::Image * image);
[5799]118           
119            /** inits the texture */
[2815]120            void _initTexture();
121           
[5799]122            /** checks for an movie-error */
[2815]123            inline void _checkMovieError(std::string msg) {
124                if (GetMoviesError()) {
125                    _fError = true;
126                    osg::notify(osg::ALWAYS) << "MovieData: GetMoviesError fails at " << msg << std::endl;
127                }
128            }
129           
130    };
131
132
133
[5799]134
[4688]135#endif
Note: See TracBrowser for help on using the browser.