From Stephan Huber and Riccardo Corsi, port of QuickTime plugin to Windows
This commit is contained in:
@@ -6,33 +6,75 @@
|
||||
* Copyright (c) 2002 digital mind. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <osg/ref_ptr>
|
||||
#include <osg/Referenced>
|
||||
#include <osg/Notify>
|
||||
#include <QuickTime/QuickTime.h>
|
||||
#include <Carbon/Carbon.h>
|
||||
#include "QTUtils.h"
|
||||
#include "osgDB/Registry"
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace osgQuicktime {
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
~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("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");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
void initQuicktime(bool erase) {
|
||||
|
||||
static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer();
|
||||
if (erase)
|
||||
s_qt_init = NULL;
|
||||
}
|
||||
|
||||
|
||||
void initQuicktime() {
|
||||
|
||||
static bool s_fQuicktimeInited = 0;
|
||||
|
||||
OSErr err;
|
||||
if (!s_fQuicktimeInited) {
|
||||
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;
|
||||
s_fQuicktimeInited = true;
|
||||
}
|
||||
else
|
||||
osg::notify(osg::DEBUG_INFO) << "Quicktime already initialized ..." << endl;
|
||||
|
||||
void exitQuicktime() {
|
||||
initQuicktime(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +85,7 @@ namespace osgQuicktime {
|
||||
// wandelt einen Posix-Pfad in ein FSSpec um.
|
||||
// ---------------------------------------------------------------------------
|
||||
OSStatus MakeFSSpecFromPath(const char* path, FSSpec* spec) {
|
||||
#ifdef __APPLE__
|
||||
OSStatus err;
|
||||
FSRef fsref;
|
||||
Boolean isdir;
|
||||
@@ -58,17 +101,23 @@ namespace osgQuicktime {
|
||||
// Ditto
|
||||
err = FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, spec, NULL);
|
||||
return err;
|
||||
#else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MakeMovieFromPath
|
||||
// erzeugt movie-objekt aus Pfad
|
||||
// ---------------------------------------------------------------------------
|
||||
OSStatus MakeMovieFromPath(const char* path, Movie* movie) {
|
||||
OSStatus err;
|
||||
FSSpec spec;
|
||||
short resref;
|
||||
#ifdef __APPLE__
|
||||
MakeFSSpecFromPath(path, &spec);
|
||||
#else
|
||||
err = NativePathNameToFSSpec((char*)path, &spec, 0 /* flags */);
|
||||
#endif
|
||||
err = OpenMovieFile(&spec, &resref, fsRdPerm);
|
||||
if (err!=0) return err;
|
||||
err = NewMovieFromFile(movie, resref, NULL, NULL, 0, NULL);
|
||||
@@ -78,4 +127,3 @@ namespace osgQuicktime {
|
||||
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user