diff --git a/src/osgPlugins/quicktime/MovieData.cpp b/src/osgPlugins/quicktime/MovieData.cpp index 8fb0c82d6..6e79e3705 100644 --- a/src/osgPlugins/quicktime/MovieData.cpp +++ b/src/osgPlugins/quicktime/MovieData.cpp @@ -23,10 +23,14 @@ MovieData::MovieData() : _pointer(NULL), _movie(NULL), _gw(NULL), _fError(false) MovieData::~MovieData() -{ +{ if (_pointer) free(_pointer); if (_gw) DisposeGWorld(_gw); - if (_movie) DisposeMovie(_movie); + + if (_movie) { + CloseMovieFile(_resref); + DisposeMovie(_movie); + } } @@ -41,7 +45,7 @@ void MovieData::load(osg::Image* image, std::string afilename, float startTime) osg::notify(osg::INFO) << "MovieData :: opening movie '" << filename << "'" << std::endl; - OSStatus err = MakeMovieFromPath(filename.c_str(),&_movie); + OSStatus err = MakeMovieFromPath(filename.c_str(), &_movie, _resref); if (err !=0) { _fError = true; osg::notify(osg::FATAL) << " MovieData :: MakeMovieFromPath failed with err " << err << std::endl; diff --git a/src/osgPlugins/quicktime/MovieData.h b/src/osgPlugins/quicktime/MovieData.h index aab3c624a..d10165197 100644 --- a/src/osgPlugins/quicktime/MovieData.h +++ b/src/osgPlugins/quicktime/MovieData.h @@ -98,7 +98,8 @@ protected: - char* _pointer; + char* _pointer; + short _resref; Movie _movie; GWorldPtr _gw; diff --git a/src/osgPlugins/quicktime/QTUtils.cpp b/src/osgPlugins/quicktime/QTUtils.cpp index 0cbf0b0ca..5757ce85c 100644 --- a/src/osgPlugins/quicktime/QTUtils.cpp +++ b/src/osgPlugins/quicktime/QTUtils.cpp @@ -20,19 +20,21 @@ using namespace std; class QuicktimeInitializer : public osg::Referenced { public: QuicktimeInitializer() :osg::Referenced() { - static bool s_fQuicktimeInited = 0; - if (!s_fQuicktimeInited) { - #ifndef __APPLE__ - InitializeQTML(0); - #endif - OSErr err = EnterMovies(); - if (err!=0) - osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << endl; - else - osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully" << endl; - registerQTReader(); - s_fQuicktimeInited = true; - } + + #ifndef __APPLE__ + InitializeQTML(0); + #endif + OSErr err = EnterMovies(); + if (err!=0) + osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << endl; + else + osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully" << endl; + + static bool registered = false; + + if (!registered){ + registerQTReader(); + } } ~QuicktimeInitializer() { @@ -72,8 +74,12 @@ using namespace std; void initQuicktime(bool erase) { static osg::ref_ptr s_qt_init = new QuicktimeInitializer(); - if (erase) + if (erase) { s_qt_init = NULL; + } else if (!s_qt_init.valid()) + { + s_qt_init = new QuicktimeInitializer(); + } } @@ -113,10 +119,9 @@ using namespace std; // --------------------------------------------------------------------------- // MakeMovieFromPath // --------------------------------------------------------------------------- - OSStatus MakeMovieFromPath(const char* path, Movie* movie) { + OSStatus MakeMovieFromPath(const char* path, Movie* movie, short& resref) { OSStatus err; FSSpec spec; - short resref; #ifdef __APPLE__ MakeFSSpecFromPath(path, &spec); #else