Changeset 8792

Show
Ignore:
Timestamp:
08/25/08 17:20:42 (6 years ago)
Author:
robert
Message:

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.

Location:
OpenSceneGraph/trunk/src/osgPlugins/quicktime
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/quicktime/MovieData.cpp

    r6701 r8792  
    2424 
    2525MovieData::~MovieData() 
    26 { 
     26{   
    2727    if (_pointer) free(_pointer); 
    2828    if (_gw) DisposeGWorld(_gw); 
    29     if (_movie) DisposeMovie(_movie); 
     29 
     30    if (_movie) { 
     31        CloseMovieFile(_resref); 
     32        DisposeMovie(_movie); 
     33    } 
    3034} 
    3135     
     
    4246    osg::notify(osg::INFO) << "MovieData :: opening movie '" << filename << "'" << std::endl; 
    4347     
    44     OSStatus err = MakeMovieFromPath(filename.c_str(),&_movie); 
     48    OSStatus err = MakeMovieFromPath(filename.c_str(), &_movie, _resref); 
    4549    if (err !=0) { 
    4650        _fError = true; 
  • OpenSceneGraph/trunk/src/osgPlugins/quicktime/MovieData.h

    r7042 r8792  
    9999             
    100100        protected: 
    101             char*            _pointer; 
     101            char*           _pointer; 
     102            short           _resref; 
    102103            Movie           _movie; 
    103104            GWorldPtr       _gw; 
  • OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp

    r5981 r8792  
    2121        public: 
    2222            QuicktimeInitializer() :osg::Referenced() { 
    23                 static bool s_fQuicktimeInited = 0; 
    24                 if (!s_fQuicktimeInited) { 
    25                     #ifndef __APPLE__ 
    26                         InitializeQTML(0); 
    27                     #endif 
    28                     OSErr err = EnterMovies(); 
    29                     if (err!=0) 
    30                        osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << endl;  
    31                     else 
    32                        osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully"  << endl; 
    33                     registerQTReader(); 
    34                     s_fQuicktimeInited = true; 
    35                 } 
     23                
     24                 #ifndef __APPLE__ 
     25                     InitializeQTML(0); 
     26                 #endif 
     27                 OSErr err = EnterMovies(); 
     28                 if (err!=0) 
     29                    osg::notify(osg::FATAL) << "Error while initializing quicktime: " << err << endl;  
     30                 else 
     31                    osg::notify(osg::DEBUG_INFO) << "Quicktime initialized successfully"  << endl; 
     32 
     33                 static bool registered = false; 
     34 
     35                 if (!registered){ 
     36                  registerQTReader();                   
     37                 }                  
    3638            } 
    3739             
     
    7375 
    7476        static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer(); 
    75         if (erase) 
     77        if (erase) { 
    7678            s_qt_init = NULL; 
     79        } else if (!s_qt_init.valid()) 
     80        { 
     81            s_qt_init = new QuicktimeInitializer(); 
     82        } 
    7783    } 
    7884 
     
    114120    // MakeMovieFromPath 
    115121    // --------------------------------------------------------------------------- 
    116     OSStatus MakeMovieFromPath(const char* path, Movie* movie) { 
     122    OSStatus MakeMovieFromPath(const char* path, Movie* movie, short& resref) { 
    117123        OSStatus err; 
    118124        FSSpec   spec; 
    119         short    resref; 
    120125#ifdef __APPLE__ 
    121126        MakeFSSpecFromPath(path, &spec);