X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fprocessor.cc;h=cbec3e602901a8130c986c896f0a408d8ab71338;hb=454f14d9c58de541a230c266ad59987b8ca7b1a4;hp=c75a7720e0b8c3512a7d107cd3e25fb5dfd42b62;hpb=9a539fd347543ee2f1ba14507570085e2e7b4ea7;p=ardour.git diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index c75a7720e0..cbec3e6029 100644 --- a/libs/ardour/processor.cc +++ b/libs/ardour/processor.cc @@ -42,7 +42,7 @@ #include "ardour/vst_plugin.h" #endif -#ifdef HAVE_AUDIOUNITS +#ifdef AUDIOUNIT_SUPPORT #include "ardour/audio_unit.h" #endif @@ -66,9 +66,24 @@ Processor::Processor(Session& session, const string& name) , _active(false) , _next_ab_is_active(false) , _configured(false) - , _gui(0) , _display_to_user (true) , _pre_fader (false) + , _ui_pointer (0) +{ +} + +Processor::Processor (const Processor& other) + : Evoral::ControlSet (other) + , SessionObject (other.session(), other.name()) + , Automatable (other.session()) + , Latent (other) + , _pending_active(other._pending_active) + , _active(other._active) + , _next_ab_is_active(false) + , _configured(false) + , _display_to_user (true) + , _pre_fader (false) + , _ui_pointer (0) { } @@ -108,25 +123,15 @@ Processor::state (bool full_state) } if (full_state) { - XMLNode& automation = Automatable::get_automation_state(); - if (!automation.children().empty() - || !automation.properties().empty() - || !_visible_controls.empty()) { - - stringstream sstr; - for (set::iterator x = _visible_controls.begin(); - x != _visible_controls.end(); ++x) { - if (x != _visible_controls.begin()) { - sstr << ' '; - } - sstr << *x; - } - - automation.add_property ("visible", sstr.str()); + XMLNode& automation = Automatable::get_automation_xml_state(); + if (!automation.children().empty() || !automation.properties().empty()) { node->add_child_nocopy (automation); } } + snprintf (buf, sizeof (buf), "%" PRId64, _user_latency); + node->add_property("user-latency", buf); + return *node; } @@ -145,9 +150,7 @@ Processor::set_state_2X (const XMLNode & node, int /*version*/) set_name (prop->value ()); } - if ((prop = (*i)->property ("id")) != 0) { - _id = prop->value (); - } + set_id (**i); if ((prop = (*i)->property ("active")) != 0) { bool const a = string_is_affirmative (prop->value ()); @@ -171,23 +174,25 @@ Processor::set_state (const XMLNode& node, int version) if (version < 3000) { return set_state_2X (node, version); } - + const XMLProperty *prop; const XMLProperty *legacy_active = 0; // may not exist for legacy 3.0 sessions if ((prop = node.property ("name")) != 0) { - set_name(prop->value()); + /* don't let derived classes have a crack at set_name, + as some (like Send) will screw with the one we suggest. + */ + Processor::set_name (prop->value()); } - // may not exist for legacy 3.0 sessions - if ((prop = node.property ("id")) != 0) { - _id = prop->value(); - } + set_id (node); XMLNodeList nlist = node.children(); XMLNodeIterator niter; + Stateful::save_extra_xml (node); + for (niter = nlist.begin(); niter != nlist.end(); ++niter) { if ((*niter)->name() == X_("Automation")) { @@ -197,28 +202,9 @@ Processor::set_state (const XMLNode& node, int version) if ((prop = (*niter)->property ("path")) != 0) { old_set_automation_state (*(*niter)); } else { - set_automation_state (*(*niter), Evoral::Parameter(PluginAutomation)); - } - - if ((prop = (*niter)->property ("visible")) != 0) { - uint32_t what; - stringstream sstr; - - _visible_controls.clear (); - - sstr << prop->value(); - while (1) { - sstr >> what; - if (sstr.fail()) { - break; - } - // FIXME: other automation types? - mark_automation_visible (Evoral::Parameter(PluginAutomation, 0, what), true); - } + set_automation_xml_state (*(*niter), Evoral::Parameter(PluginAutomation)); } - } else if ((*niter)->name() == "Extra") { - _extra_xml = new XMLNode (*(*niter)); } else if ((*niter)->name() == "Redirect") { if ( !(legacy_active = (*niter)->property("active"))) { error << string_compose(_("No %1 property flag in element %2"), "active", (*niter)->name()) << endl; @@ -244,9 +230,14 @@ Processor::set_state (const XMLNode& node, int version) } } + if ((prop = node.property ("user-latency")) != 0) { + _user_latency = atoi (prop->value ()); + } + return 0; } +/** @pre Caller must hold process lock */ bool Processor::configure_io (ChanCount in, ChanCount out) { @@ -265,7 +256,7 @@ Processor::configure_io (ChanCount in, ChanCount out) } void -Processor::set_display_to_user (bool yn) +Processor::set_display_to_user (bool yn) { _display_to_user = yn; } @@ -275,3 +266,9 @@ Processor::set_pre_fader (bool p) { _pre_fader = p; } + +void +Processor::set_ui (void* p) +{ + _ui_pointer = p; +}