mechanism to allow Track (or other Route-derived type) to add its own processors...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 21 Jul 2017 21:03:04 +0000 (17:03 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
libs/ardour/ardour/route.h
libs/ardour/ardour/track.h
libs/ardour/route.cc
libs/ardour/track.cc

index c3d46f6175fcc3ac3b38eddceeb999a65754ffa8..2590be291b87fae81a13033a1b6239baa21c411b 100644 (file)
@@ -741,6 +741,7 @@ private:
 
        void setup_invisible_processors ();
        virtual void setup_invisible_processors_oh_children_of_mine (ProcessorList&) {}
+       virtual void add_processors_oh_children_of_mine () {}
 
        void unpan ();
 
index d14ccdc938b126032a11ac481ac1493c86d9383c..9b9b1c79ee9d0030b4560a4a31d5539f8e9337b7 100644 (file)
@@ -256,6 +256,7 @@ class LIBARDOUR_API Track : public Route, public Recordable
 private:
        void parameter_changed (std::string const & p);
        void setup_invisible_processors_oh_children_of_mine (ProcessorList&);
+       void add_processors_oh_children_of_mine ();
 
        std::string _diskstream_name;
 };
index d405dd8f082ee527837b3055f07832eed0a44c7e..c1725c42586748e4e02d7e86fdab61b317b6d94d 100644 (file)
@@ -239,6 +239,10 @@ Route::init ()
                _monitor_control->activate ();
        }
 
+       /* give derived classes a chance to add processors before we configure */
+
+       add_processors_oh_children_of_mine ();
+
        /* now that we have _meter, its safe to connect to this */
 
        {
index 72948b4a98a5ffc90c9bae6a99ec3cf78c523146..6439f8c0aacd9bffde44a7c8ee9fdba0265ed16b 100644 (file)
@@ -85,26 +85,10 @@ Track::init ()
                 return -1;
         }
 
-        DiskIOProcessor::Flag dflags = DiskIOProcessor::Recordable;
-
-        if (_mode == Destructive && !Profile->get_trx()) {
-               dflags = DiskIOProcessor::Flag (dflags | DiskIOProcessor::Destructive);
-        } else if (_mode == NonLayered){
-               dflags = DiskIOProcessor::Flag(dflags | DiskIOProcessor::NonLayered);
-        }
-
-        _disk_reader.reset (new DiskReader (_session, name(), dflags));
-        _disk_reader->set_block_size (_session.get_block_size ());
-        _disk_reader->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
-
-        _disk_writer.reset (new DiskWriter (_session, name(), dflags));
-        _disk_writer->set_block_size (_session.get_block_size ());
-        _disk_writer->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
-
         use_new_playlist ();
 
         /* disk writer and reader processors will be added when Route calls
-         * setup_invisible_processors_oh_children_of_mine ().
+         * add_processors_oh_children_of_mine ().
          */
 
         boost::shared_ptr<Route> rp (boost::dynamic_pointer_cast<Route> (shared_from_this()));
@@ -130,6 +114,28 @@ Track::init ()
         return 0;
 }
 
+void
+Track::add_processors_oh_children_of_mine ()
+{
+        cerr << name() << " ::apocom(), create DW + DR\n";
+
+        DiskIOProcessor::Flag dflags = DiskIOProcessor::Recordable;
+
+        if (_mode == Destructive && !Profile->get_trx()) {
+               dflags = DiskIOProcessor::Flag (dflags | DiskIOProcessor::Destructive);
+        } else if (_mode == NonLayered){
+               dflags = DiskIOProcessor::Flag(dflags | DiskIOProcessor::NonLayered);
+        }
+
+        _disk_reader.reset (new DiskReader (_session, name(), dflags));
+        _disk_reader->set_block_size (_session.get_block_size ());
+        _disk_reader->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
+
+        _disk_writer.reset (new DiskWriter (_session, name(), dflags));
+        _disk_writer->set_block_size (_session.get_block_size ());
+        _disk_writer->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
+}
+
 void
 Track::input_changed ()
 {