boost::shared_ptr<Plugin> plugin_factory (boost::shared_ptr<Plugin>);
void add_plugin (boost::shared_ptr<Plugin>);
+ void add_sidechain_from_xml (const XMLNode& node, int version);
+
void start_touch (uint32_t param_id);
void end_touch (uint32_t param_id);
bool can_support_io_configuration (const ChanCount& in, ChanCount& out);
bool configure_io (ChanCount in, ChanCount out);
- int set_state(const XMLNode&, int version);
+ int set_state(const XMLNode&, int version);
protected:
XMLNode& state ();
// sidechain is a Processor (IO)
if ((*i)->name () == Processor::state_node_name) {
if (!_sidechain) {
- add_sidechain (0);
+ if (regenerate_xml_or_string_ids ()) {
+ add_sidechain_from_xml (**i, version);
+ } else {
+ add_sidechain (0);
+ }
}
if (!regenerate_xml_or_string_ids ()) {
_sidechain->set_state (**i, version);
+ } else {
+ update_sidechain_name ();
}
}
}
_plugins.push_back (plugin);
}
+void
+PluginInsert::add_sidechain_from_xml (const XMLNode& node, int version)
+{
+ if (version < 3000) {
+ return;
+ }
+
+ XMLNodeList nlist = node.children();
+
+ if (nlist.size() == 0) {
+ return;
+ }
+
+ uint32_t audio = 0;
+ uint32_t midi = 0;
+
+ XMLNodeConstIterator it = nlist.front()->children().begin();
+ for ( ; it != nlist.front()->children().end(); ++ it) {
+ if ((*it)->name() == "Port") {
+ DataType type(DataType::NIL);
+ (*it)->get_property ("type", type);
+ if (type == DataType::AUDIO) {
+ ++audio;
+ } else if (type == DataType::MIDI) {
+ ++midi;
+ }
+ }
+ }
+
+ ChanCount in_cc = ChanCount();
+ in_cc.set (DataType::AUDIO, audio);
+ in_cc.set (DataType::MIDI, midi);
+
+ add_sidechain (audio, midi);
+}
+
bool
PluginInsert::load_preset (ARDOUR::Plugin::PresetRecord pr)
{