Re-add code to support do-not-record-plugins (#4487).
git-svn-id: svn://localhost/ardour2/branches/3.0@10731 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
@@ -203,6 +203,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember,
|
||||
}
|
||||
}
|
||||
|
||||
boost::shared_ptr<Processor> processor_by_id (PBD::ID) const;
|
||||
|
||||
boost::shared_ptr<Processor> nth_plugin (uint32_t n);
|
||||
boost::shared_ptr<Processor> nth_send (uint32_t n);
|
||||
|
||||
|
||||
@@ -165,6 +165,10 @@ class Track : public Route, public PublicDiskstream
|
||||
|
||||
boost::shared_ptr<Diskstream> _diskstream;
|
||||
MeterPoint _saved_meter_point;
|
||||
/** used to keep track of processors that we are deactivating during record,
|
||||
if `do-not-record-plugins' is enabled.
|
||||
*/
|
||||
std::list<boost::weak_ptr<Processor> > _deactivated_processors;
|
||||
TrackMode _mode;
|
||||
bool _needs_butler;
|
||||
MonitorChoice _monitoring;
|
||||
@@ -223,6 +227,10 @@ private:
|
||||
void diskstream_record_enable_changed ();
|
||||
void diskstream_speed_changed ();
|
||||
void diskstream_alignment_style_changed ();
|
||||
|
||||
void parameter_changed (std::string);
|
||||
void deactivate_visible_processors ();
|
||||
void activate_deactivated_processors ();
|
||||
};
|
||||
|
||||
}; /* namespace ARDOUR*/
|
||||
|
||||
@@ -3908,3 +3908,16 @@ Route::maybe_note_meter_position ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boost::shared_ptr<Processor>
|
||||
Route::processor_by_id (PBD::ID id) const
|
||||
{
|
||||
Glib::RWLock::ReaderLock lm (_processor_lock);
|
||||
for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
if ((*i)->id() == id) {
|
||||
return *i;
|
||||
}
|
||||
}
|
||||
|
||||
return boost::shared_ptr<Processor> ();
|
||||
}
|
||||
|
||||
@@ -48,6 +48,8 @@ Track::Track (Session& sess, string name, Route::Flag flag, TrackMode mode, Data
|
||||
{
|
||||
_freeze_record.state = NoFreeze;
|
||||
_declickable = true;
|
||||
|
||||
Config->ParameterChanged.connect_same_thread (*this, boost::bind (&Track::parameter_changed, this, _1));
|
||||
}
|
||||
|
||||
Track::~Track ()
|
||||
@@ -79,6 +81,20 @@ Track::state (bool full)
|
||||
root.add_property (X_("saved-meter-point"), enum_2_string (_saved_meter_point));
|
||||
root.add_child_nocopy (_rec_enable_control->get_state());
|
||||
root.add_child_nocopy (_diskstream->get_state ());
|
||||
|
||||
if (!_deactivated_processors.empty ()) {
|
||||
XMLNode* node = new XMLNode (X_("DeactivatedProcessors"));
|
||||
for (list<boost::weak_ptr<Processor> >::iterator i = _deactivated_processors.begin(); i != _deactivated_processors.end(); ++i) {
|
||||
boost::shared_ptr<Processor> p = i->lock ();
|
||||
if (p) {
|
||||
XMLNode* c = new XMLNode (X_("Processor"));
|
||||
c->add_property (X_("id"), p->id().to_s());
|
||||
node->add_child_nocopy (*c);
|
||||
}
|
||||
}
|
||||
root.add_child_nocopy (*node);
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
@@ -113,6 +129,18 @@ Track::set_state (const XMLNode& node, int version)
|
||||
_rec_enable_control->set_state (*child, version);
|
||||
}
|
||||
}
|
||||
|
||||
if (child->name() == X_("DeactivatedProcessors")) {
|
||||
XMLNodeList dp = child->children ();
|
||||
for (XMLNodeConstIterator i = dp.begin(); i != dp.end(); ++i) {
|
||||
assert ((*i)->name() == X_("Processor"));
|
||||
XMLProperty* prop = (*i)->property (X_("id"));
|
||||
boost::shared_ptr<Processor> p = processor_by_id (PBD::ID (prop->value ()));
|
||||
if (p) {
|
||||
_deactivated_processors.push_back (p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const XMLProperty* prop;
|
||||
@@ -196,6 +224,33 @@ Track::can_record()
|
||||
return will_record;
|
||||
}
|
||||
|
||||
/* Turn off visible processors (except Fader), keeping track of the old states */
|
||||
void
|
||||
Track::deactivate_visible_processors ()
|
||||
{
|
||||
_deactivated_processors.clear ();
|
||||
Glib::RWLock::ReaderLock lm (_processor_lock);
|
||||
|
||||
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
|
||||
if ((*i)->active() && (*i)->display_to_user() && boost::dynamic_pointer_cast<Amp> (*i) == 0) {
|
||||
(*i)->deactivate ();
|
||||
_deactivated_processors.push_back (*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Turn deactivated processors back on again */
|
||||
void
|
||||
Track::activate_deactivated_processors ()
|
||||
{
|
||||
for (list<boost::weak_ptr<Processor> >::iterator i = _deactivated_processors.begin(); i != _deactivated_processors.end(); ++i) {
|
||||
boost::shared_ptr<Processor> p = i->lock ();
|
||||
if (p) {
|
||||
p->activate ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Track::set_record_enabled (bool yn, void *src)
|
||||
{
|
||||
@@ -217,6 +272,14 @@ Track::set_record_enabled (bool yn, void *src)
|
||||
_saved_meter_point = _meter_point;
|
||||
}
|
||||
|
||||
if (Config->get_do_not_record_plugins ()) {
|
||||
if (yn) {
|
||||
deactivate_visible_processors ();
|
||||
} else {
|
||||
activate_deactivated_processors ();
|
||||
}
|
||||
}
|
||||
|
||||
_diskstream->set_record_enabled (yn);
|
||||
|
||||
if (_diskstream->record_enabled()) {
|
||||
@@ -845,3 +908,20 @@ Track::set_monitoring (MonitorChoice mc)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Track::parameter_changed (string p)
|
||||
{
|
||||
if (p != "do-not-record-plugins") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (record_enabled ()) {
|
||||
if (Config->get_do_not_record_plugins ()) {
|
||||
deactivate_visible_processors ();
|
||||
} else {
|
||||
activate_deactivated_processors ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user