Show
Ignore:
Timestamp:
02/11/09 18:14:53 (4 years ago)
Author:
robert
Message:

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?
"

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/quicktime/QTUtils.cpp

    r8806 r9769  
    1616using namespace std; 
    1717 
    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      
    9318 
    9419    // ---------------------------------------------------------------------------