fix peakfile/sourcefactory botch
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Oct 2007 14:27:47 +0000 (14:27 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 12 Oct 2007 14:27:47 +0000 (14:27 +0000)
git-svn-id: svn://localhost/ardour2/trunk@2546 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/source_factory.h
libs/ardour/source_factory.cc

index 01f50126a4b68cf2f9fea6ac1b0fb247bced07a3..7e9be451e8b11a0ce1e26b218a8dc4215fb6ce10 100644 (file)
@@ -46,7 +46,7 @@ class SourceFactory {
        static boost::shared_ptr<Source> createReadable (DataType type, Session&, std::string path, int chn, AudioFileSource::Flag flags,
                                                         bool announce = true, bool async = false);
        static boost::shared_ptr<Source> createWritable (DataType type, Session&, std::string name, bool destructive, nframes_t rate, 
-                                                        bool announce = true, bool async = true);
+                                                        bool announce = true, bool async = false);
 
        static Glib::Cond*                              PeaksToBuild;
        static Glib::StaticMutex                        peak_building_lock;
index c6b19c860030523156b83f0e865b581ba480df23..d07b9d6d690a96b1aa6c7910447326d9811f9d4c 100644 (file)
@@ -116,60 +116,66 @@ SourceFactory::createSilent (Session& s, const XMLNode& node, nframes_t nframes,
        return ret;
 }
 
-#ifdef USE_COREAUDIO_FOR_FILES
 boost::shared_ptr<Source>
 SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
 {
-       try {
-               boost::shared_ptr<Source> ret (new CoreAudioSource (s, node));
-               if (!defer_peaks) {
-                       if (setup_peakfile (ret, false)) {
-                               return boost::shared_ptr<Source>();
-                       }
-               }
-               SourceCreated (ret);
-               return ret;
-       } 
-
-
-       catch (failed_constructor& err) {       
+       DataType type = DataType::AUDIO;
+       const XMLProperty* prop = node.property("type");
 
-               /* this is allowed to throw */
+       if (prop) {
+               type = DataType(prop->value());
+       }
 
-               boost::shared_ptr<Source> ret (new SndFileSource (s, node));
-               if (!defer_peaks) {
-                       if (setup_peakfile (ret, false)) {
-                               return boost::shared_ptr<Source>();
-                       }
-               }
-               SourceCreated (ret);
-               return ret;
-       }
+       if (type == DataType::AUDIO) {
 
-       return boost::shared_ptr<Source>();
-}
+#ifdef HAVE_COREAUDIO
 
+              try {
+                      boost::shared_ptr<Source> ret (new CoreAudioSource (s, node));
+                      
+                      if (setup_peakfile (ret, defer_peaks)) {
+                              return boost::shared_ptr<Source>();
+                      }
+                      
+                      SourceCreated (ret);
+                      return ret;
+              } 
+              
+              
+              catch (failed_constructor& err) {        
+                      
+                      /* this is allowed to throw */
+                      
+                      boost::shared_ptr<Source> ret (new SndFileSource (s, node));
+                      
+                      if (setup_peakfile (ret, defer_peaks)) {
+                              return boost::shared_ptr<Source>();
+                      }
+                      
+                      SourceCreated (ret);
+                      return ret;
+              }
 #else
+              /* this is allowed to throw */
+
+              boost::shared_ptr<Source> ret (new SndFileSource (s, node));
+              
+              if (setup_peakfile (ret, defer_peaks)) {
+                      return boost::shared_ptr<Source>();
+              }
+              
+              SourceCreated (ret);
+              return ret;
+#endif
+       
+       } else if (type == DataType::MIDI) {
 
-boost::shared_ptr<Source>
-SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
-{
-       /* this is allowed to throw */
+               boost::shared_ptr<Source> ret (new SMFSource (s, node));
+       }
 
-       boost::shared_ptr<Source> ret (new SndFileSource (s, node));
-       
-       if (!defer_peaks) {
-               if (setup_peakfile (ret, false)) {
-                       return boost::shared_ptr<Source>();
-               }
-       }
-       
-       SourceCreated (ret);
-       return ret;
+       return boost::shared_ptr<Source>();
 }
 
-#endif // USE_COREAUDIO_FOR_FILES
-
 boost::shared_ptr<Source>
 SourceFactory::createReadable (DataType type, Session& s, string path, int chn, AudioFileSource::Flag flags, bool announce, bool defer_peaks)
 {
@@ -178,11 +184,11 @@ SourceFactory::createReadable (DataType type, Session& s, string path, int chn,
 #ifdef HAVE_COREAUDIO
                try {
                        boost::shared_ptr<Source> ret (new CoreAudioSource (s, path, chn, flags));
-                       if (!defer_peaks) {
-                               if (setup_peakfile (ret, false)) {
-                                       return boost::shared_ptr<Source>();
-                               }
+
+                       if (setup_peakfile (ret, defer_peaks)) {
+                               return boost::shared_ptr<Source>();
                        }
+
                        if (announce) {
                                SourceCreated (ret);
                        }
@@ -191,10 +197,8 @@ SourceFactory::createReadable (DataType type, Session& s, string path, int chn,
                
                catch (failed_constructor& err) {
                        boost::shared_ptr<Source> ret (new SndFileSource (s, path, chn, flags));
-                       if (!defer_peaks) {
-                               if (setup_peakfile (ret, false)) {
-                                       return boost::shared_ptr<Source>();
-                               }
+                       if (setup_peakfile (ret, defer_peaks)) {
+                               return boost::shared_ptr<Source>();
                        }
                        if (announce) {
                                SourceCreated (ret);
@@ -204,10 +208,8 @@ SourceFactory::createReadable (DataType type, Session& s, string path, int chn,
 #else
                boost::shared_ptr<Source> ret (new SndFileSource (s, path, chn, flags));
 
-               if (!defer_peaks) {
-                       if (setup_peakfile (ret, false)) {
-                               return boost::shared_ptr<Source>();
-                       }
+               if (setup_peakfile (ret, defer_peaks)) {
+                       return boost::shared_ptr<Source>();
                }
 
                if (announce) {
@@ -246,11 +248,10 @@ SourceFactory::createWritable (DataType type, Session& s, std::string path, bool
                                                (destructive ? AudioFileSource::Flag (SndFileSource::default_writable_flags | AudioFileSource::Destructive) :
                                                 SndFileSource::default_writable_flags)));      
 
-               if (!defer_peaks) {
-                       if (setup_peakfile (ret, false)) {
-                               return boost::shared_ptr<Source>();
-                       }
+               if (setup_peakfile (ret, false)) {
+                       return boost::shared_ptr<Source>();
                }
+
                if (announce) {
                        SourceCreated (ret);
                }