| 18 | | |
| 19 | | |
| 20 | | class QuicktimeInitializer : public osg::Referenced { |
| 21 | | public: |
| 22 | | QuicktimeInitializer() :osg::Referenced() { |
| 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 | | registered = true; |
| 38 | | } |
| 39 | | } |
| 40 | | |
| 41 | | ~QuicktimeInitializer() { |
| 42 | | #ifndef __APPLE__ |
| 43 | | ExitMovies(); |
| 44 | | #endif |
| 45 | | //osg::notify(osg::DEBUG_INFO) << "Quicktime deinitialized successfully" << endl; |
| 46 | | } |
| 47 | | |
| 48 | | protected: |
| 49 | | void registerQTReader() { |
| 50 | | osgDB::Registry* r = osgDB::Registry::instance(); |
| 51 | | r->addFileExtensionAlias("mov", "qt"); |
| 52 | | |
| 53 | | #ifdef QT_HANDLE_IMAGES_ALSO |
| 54 | | r->addFileExtensionAlias("jpg", "qt"); |
| 55 | | r->addFileExtensionAlias("jpe", "qt"); |
| 56 | | r->addFileExtensionAlias("jpeg", "qt"); |
| 57 | | r->addFileExtensionAlias("tif", "qt"); |
| 58 | | r->addFileExtensionAlias("tiff", "qt"); |
| 59 | | r->addFileExtensionAlias("gif", "qt"); |
| 60 | | r->addFileExtensionAlias("png", "qt"); |
| 61 | | r->addFileExtensionAlias("psd", "qt"); |
| 62 | | r->addFileExtensionAlias("tga", "qt"); |
| 63 | | r->addFileExtensionAlias("mov", "qt"); |
| 64 | | r->addFileExtensionAlias("avi", "qt"); |
| 65 | | r->addFileExtensionAlias("mpg", "qt"); |
| 66 | | r->addFileExtensionAlias("mpv", "qt"); |
| 67 | | r->addFileExtensionAlias("dv", "qt"); |
| 68 | | r->addFileExtensionAlias("mp4", "qt"); |
| 69 | | r->addFileExtensionAlias("m4v", "qt"); |
| 70 | | #endif |
| 71 | | } |
| 72 | | |
| 73 | | }; |
| 74 | | |
| 75 | | void initQuicktime(bool erase) { |
| 76 | | |
| 77 | | static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer(); |
| 78 | | if (erase) { |
| 79 | | s_qt_init = NULL; |
| 80 | | } else if (!s_qt_init.valid()) |
| 81 | | { |
| 82 | | s_qt_init = new QuicktimeInitializer(); |
| 83 | | } |
| 84 | | } |
| 85 | | |
| 86 | | |
| 87 | | void exitQuicktime() { |
| 88 | | initQuicktime(true); |
| 89 | | } |
| 90 | | |
| 91 | | |
| 92 | | |