From 4bfc5ddf71728c1f14a3fbff5dab4986fbabe15c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 21 Jul 2017 17:03:04 -0400 Subject: [PATCH] mechanism to allow Track (or other Route-derived type) to add its own processors at the right time --- libs/ardour/ardour/route.h | 1 + libs/ardour/ardour/track.h | 1 + libs/ardour/route.cc | 4 ++++ libs/ardour/track.cc | 40 ++++++++++++++++++++++---------------- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index c3d46f6175..2590be291b 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -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 (); diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index d14ccdc938..9b9b1c79ee 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -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; }; diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index d405dd8f08..c1725c4258 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -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 */ { diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 72948b4a98..6439f8c0aa 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -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 (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 (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 rp (boost::dynamic_pointer_cast (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 (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 (shared_from_this())); +} + void Track::input_changed () { -- 2.30.2