From Riccardo Corsi, "in attach you'll find a patch to cleanup a little bit the (de)initialization code of QuickTime environment from the quickTime pluging.

It basically removes the static init() and exit() functions,and move them inside the observer class (the one that cleans everything up when the last media is unloaded).

It also add an extra check to clean up on exit if the QuickTime env is initialized, but no media is succesfully loaded / written (it might happens with streaming resources).

I tested it under WinXP with zero, one and multiple videos.

Stephan reads in copy: could you kindly check if everything runs smooth under OSX as well? Also, have you got a chance to test it with streaming media?
"
This commit is contained in:
Robert Osfield
2009-02-11 17:14:53 +00:00
parent 04351b0af8
commit c385e11aff
4 changed files with 120 additions and 126 deletions

View File

@@ -16,81 +16,6 @@
using namespace std;
class QuicktimeInitializer : public osg::Referenced {
public:
QuicktimeInitializer() :osg::Referenced() {
#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();
registered = true;
}
}
~QuicktimeInitializer() {
#ifndef __APPLE__
ExitMovies();
#endif
//osg::notify(osg::DEBUG_INFO) << "Quicktime deinitialized successfully" << endl;
}
protected:
void registerQTReader() {
osgDB::Registry* r = osgDB::Registry::instance();
r->addFileExtensionAlias("mov", "qt");
#ifdef QT_HANDLE_IMAGES_ALSO
r->addFileExtensionAlias("jpg", "qt");
r->addFileExtensionAlias("jpe", "qt");
r->addFileExtensionAlias("jpeg", "qt");
r->addFileExtensionAlias("tif", "qt");
r->addFileExtensionAlias("tiff", "qt");
r->addFileExtensionAlias("gif", "qt");
r->addFileExtensionAlias("png", "qt");
r->addFileExtensionAlias("psd", "qt");
r->addFileExtensionAlias("tga", "qt");
r->addFileExtensionAlias("mov", "qt");
r->addFileExtensionAlias("avi", "qt");
r->addFileExtensionAlias("mpg", "qt");
r->addFileExtensionAlias("mpv", "qt");
r->addFileExtensionAlias("dv", "qt");
r->addFileExtensionAlias("mp4", "qt");
r->addFileExtensionAlias("m4v", "qt");
#endif
}
};
void initQuicktime(bool erase) {
static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer();
if (erase) {
s_qt_init = NULL;
} else if (!s_qt_init.valid())
{
s_qt_init = new QuicktimeInitializer();
}
}
void exitQuicktime() {
initQuicktime(true);
}
// ---------------------------------------------------------------------------
// MakeFSSPecFromPath
// wandelt einen Posix-Pfad in ein FSSpec um.