root/OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp @ 8806

Revision 8806, 4.3 kB (checked in by robert, 6 years ago)

From Michael Guerrero, "I've attached the files with the new addition of the "registered = true"
flag set."

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
RevLine 
[2815]1/*
2 *  QTUtils.cpp
3 *  NativeContext
4 *
5 *  Created by Stephan Huber on Fri Sep 06 2002.
6 *  Copyright (c) 2002 digital mind. All rights reserved.
7 *
8 */
[5799]9#include <osg/ref_ptr>
10#include <osg/Referenced>
[2815]11#include <osg/Notify>
12#include "QTUtils.h"
[5799]13#include "osgDB/Registry"
[2815]14
[5799]15
[2815]16using namespace std;
17
18
19
[5799]20    class QuicktimeInitializer : public osg::Referenced {
21        public:
22            QuicktimeInitializer() :osg::Referenced() {
[8792]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){
[8806]36                     registerQTReader();
37                     registered = true;   
[8792]38                 }                 
[5799]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();
[5981]51         r->addFileExtensionAlias("mov""qt");
52
53         #ifdef QT_HANDLE_IMAGES_ALSO
[5799]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");
[5981]68            r->addFileExtensionAlias("mp4""qt");
69            r->addFileExtensionAlias("m4v""qt");         
70         #endif
[4801]71        }
[5799]72               
73    };
74   
75    void initQuicktime(bool erase) {
[2815]76
[5799]77        static osg::ref_ptr<QuicktimeInitializer> s_qt_init = new QuicktimeInitializer();
[8792]78        if (erase) {
[5799]79            s_qt_init = NULL;
[8792]80        } else if (!s_qt_init.valid())
81        {
82            s_qt_init = new QuicktimeInitializer();
83        }
[4801]84    }
[2815]85
[5799]86   
87    void exitQuicktime() {
88        initQuicktime(true);
89    }
[2815]90
[5799]91
[4801]92   
[2815]93
[4801]94    // ---------------------------------------------------------------------------
95    // MakeFSSPecFromPath
96    // wandelt einen Posix-Pfad in ein FSSpec um.
97    // ---------------------------------------------------------------------------
98    OSStatus MakeFSSpecFromPath(const char* path, FSSpec* spec) {
[5799]99#ifdef __APPLE__
[4801]100        OSStatus err;
101        FSRef fsref;
102        Boolean isdir;
103          /*
104           FSPathMakeRef is only available in Carbon.  It takes a POSIX path and
105           tries to convert it into a MacOS FSRef object.
106           We don't want folders, only files, so we'll fail here if we got a
107           directory.
108           */
109        err = FSPathMakeRef((const UInt8*)path, &fsref, &isdir);
110        if (err!=0) return err;
111        if (isdir) return 1;
112          // Ditto
113        err = FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, spec, NULL);
114        return err;
[5799]115#else
116        return -1;
117#endif
[4801]118    }
[2815]119
[4801]120    // ---------------------------------------------------------------------------
121    // MakeMovieFromPath
122    // ---------------------------------------------------------------------------
[8792]123    OSStatus MakeMovieFromPath(const char* path, Movie* movie, short& resref) {
[4801]124        OSStatus err;
125        FSSpec   spec;
[5799]126#ifdef __APPLE__
[4801]127        MakeFSSpecFromPath(path, &spec);
[5799]128#else
129        err = NativePathNameToFSSpec((char*)path, &spec, 0 /* flags */);
130#endif
[4801]131        err = OpenMovieFile(&spec, &resref, fsRdPerm);
132        if (err!=0) return err;
133        err = NewMovieFromFile(movie, resref, NULL, NULL, 0, NULL);
134        if (err==0) err=GetMoviesError();
135        return err;
136    }
[2815]137
138
Note: See TracBrowser for help on using the browser.