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.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
|
||||
|
||||
protected:
|
||||
char* _pointer;
|
||||
char* _pointer;
|
||||
short _resref;
|
||||
Movie _movie;
|
||||
GWorldPtr _gw;
|
||||
|
||||
|
||||
@@ -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<QuicktimeInitializer> 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
|
||||
|
||||
Reference in New Issue
Block a user