From: Paul Davis Date: Tue, 24 Aug 2010 22:07:53 +0000 (+0000) Subject: fix load+save of plugin parameter automation X-Git-Tag: 3.0-alpha5~1585 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=be85889464470e66e33f6f09f3cf1a64ef3c5063;ds=sidebyside fix load+save of plugin parameter automation git-svn-id: svn://localhost/ardour2/branches/3.0@7678 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index fd809a9b0d..a763da39c5 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -210,6 +210,10 @@ AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool ensure_xml_node (); ensure_pan_views (show); + } else if (param.type() == PluginAutomation) { + + /* handled elsewhere */ + } else { error << "AudioTimeAxisView: unknown automation child " << EventTypeMap::instance().to_symbol(param) << endmsg; } diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index c62ea68b2a..2c64615ea1 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1827,9 +1827,10 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr ProcessorAutomationNode* pan; if ((pan = find_processor_automation_node (processor, what)) == 0) { - error << _("programming error: ") - << string_compose (X_("processor automation curve for %1:%2 not registered with track!"), - processor->name(), what) + /* session state may never have been saved with new plugin */ + error << _("programming error: ") + << string_compose (X_("processor automation curve for %1:%2/%3/%4 not registered with track!"), + processor->name(), what.type(), (int) what.channel(), what.id() ) << endmsg; /*NOTREACHED*/ return; @@ -1846,7 +1847,7 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr /* FIXME: ew */ char state_name[256]; - snprintf (state_name, sizeof (state_name), "Redirect-%s-%" PRIu32, legalize_for_xml_node (processor->name()).c_str(), what.id()); + snprintf (state_name, sizeof (state_name), "%s-%" PRIu32, legalize_for_xml_node (processor->name()).c_str(), what.id()); boost::shared_ptr control = boost::dynamic_pointer_cast(processor->control(what, true)); diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 5b1bba1f3c..3e9cd41698 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1140,9 +1140,15 @@ Selection::set_state (XMLNode const & node, int) assert (rtv); boost::shared_ptr atv = rtv->automation_child (EventTypeMap::instance().new_parameter (prop_parameter->value ())); - assert (atv); - - add (atv.get()); + + /* the automation could be for an entity that was never saved + in the session file. Don't freak out if we can't find + it. + */ + + if (atv) { + add (atv.get()); + } } } diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index 68c42ba7b5..0c28eb95e0 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -253,7 +253,7 @@ Automatable::set_automation_state (const XMLNode& node, Evoral::Parameter legacy if (param.type() == NullAutomation) { warning << "Automation has null type" << endl; continue; - } + } boost::shared_ptr al (new AutomationList(**niter, param)); diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index 53fdb233c6..c8f5d18aec 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -41,13 +41,12 @@ PBD::Signal1 AutomationList::AutomationListCreated; static void dumpit (const AutomationList& al, string prefix = "") { cerr << prefix << &al << endl; - for (AutomationList::const_iterator i = al.const_begin(); i != al.const_end(); ++i) { + for (AutomationList::const_iterator i = al.begin(); i != al.end(); ++i) { cerr << prefix << '\t' << (*i)->when << ',' << (*i)->value << endl; } cerr << "\n"; } #endif - AutomationList::AutomationList (Evoral::Parameter id) : ControlList(id) { @@ -364,7 +363,7 @@ AutomationList::deserialize_events (const XMLNode& node) } thaw (); - + return 0; } @@ -465,19 +464,19 @@ AutomationList::set_state (const XMLNode& node, int version) _state = Off; } - if ((prop = node.property (X_("min_yval"))) != 0) { + if ((prop = node.property (X_("min-yval"))) != 0) { _min_yval = atof (prop->value ().c_str()); } else { _min_yval = FLT_MIN; } - if ((prop = node.property (X_("max_yval"))) != 0) { + if ((prop = node.property (X_("max-yval"))) != 0) { _max_yval = atof (prop->value ().c_str()); } else { _max_yval = FLT_MAX; } - if ((prop = node.property (X_("max_xval"))) != 0) { + if ((prop = node.property (X_("max-xval"))) != 0) { _max_xval = atof (prop->value ().c_str()); } else { _max_xval = 0; // means "no limit ; diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index a0deec6807..108a7e03aa 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -684,25 +684,6 @@ PluginInsert::state (bool full) node.add_property("count", string_compose("%1", _plugins.size())); node.add_child_nocopy (_plugins[0]->get_state()); - /* add port automation state */ - XMLNode *autonode = new XMLNode(port_automation_node_name); - set automatable = _plugins[0]->automatable(); - - for (set::iterator x = automatable.begin(); x != automatable.end(); ++x) { - - /*XMLNode* child = new XMLNode("port"); - snprintf(buf, sizeof(buf), "%" PRIu32, *x); - child->add_property("number", string(buf)); - - child->add_child_nocopy (automation_list (*x).state (full)); - autonode->add_child_nocopy (*child); - */ - AutomationList* list = dynamic_cast(control(*x)->list().get()); - autonode->add_child_nocopy (list->state (full)); - } - - node.add_child_nocopy (*autonode); - return node; } @@ -816,11 +797,11 @@ PluginInsert::set_state(const XMLNode& node, int version) } } - set_parameter_state_2X (node, version); + // set_parameter_state_2X (node, version); } else { - set_parameter_state (node, version); + // set_parameter_state (node, version); } // The name of the PluginInsert comes from the plugin, nothing else diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc index 0bea376fc9..555dff5092 100644 --- a/libs/ardour/processor.cc +++ b/libs/ardour/processor.cc @@ -115,10 +115,11 @@ Processor::state (bool full_state) stringstream sstr; for (set::iterator x = _visible_controls.begin(); x != _visible_controls.end(); ++x) { + if (x != _visible_controls.begin()) { sstr << ' '; } - sstr << *x; + sstr << (*x).id(); } automation.add_property ("visible", sstr.str());