From 386f244f1e69634d70d3347d3a909349f79ef1df Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 20 Apr 2016 11:55:02 +0200 Subject: [PATCH] Reset I/O map when copying plugin and ChanCount changes --- libs/ardour/plugin_insert.cc | 41 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index a58a25fb9f..de67acc0b8 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -1399,7 +1399,7 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) #ifndef NDEBUG if (DEBUG_ENABLED(DEBUG::ChanMapping)) { DEBUG_STR_DECL(a); - DEBUG_STR_APPEND(a, string_compose ("Match '%1': ", name())); + DEBUG_STR_APPEND(a, string_compose ("%1: ", name())); DEBUG_STR_APPEND(a, _match); DEBUG_TRACE (DEBUG::ChanMapping, DEBUG_STR(a).str()); } @@ -1439,7 +1439,7 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) if (useins.n_audio() == 0) { useins = in; } - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("Delegate configuration: %1 %2 %3\n", name(), useins, dout)); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: Delegate configuration: %2 %3\n", name(), useins, dout)); if (_plugins.front()->configure_io (useins, dout) == false) { PluginIoReConfigure (); /* EMIT SIGNAL */ @@ -1457,6 +1457,17 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) break; } + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: cfg:%2 state:%3 chn-in:%4 chn-out:%5 match:%6 size-in:%7 size-out:%8\n", + name (), + _configured ? "Y" : "N", + _maps_from_state ? "Y" : "N", + old_in == in ? "==" : "!=", + old_out == out ? "==" : "!=", + old_match.method == _match.method ? "==" : "!=", + _in_map.size() == get_count () ? "==" : "!=", + _out_map.size() == get_count () ? "==" : "!=" + )); + bool mapping_changed = false; if (old_in == in && old_out == out && _configured @@ -1476,7 +1487,6 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) #ifdef MIXBUS if (is_channelstrip ()) { /* fake channel map - for wire display */ - _maps_from_state = false; _in_map.clear (); _out_map.clear (); _thru_map = ChanMapping (); @@ -1492,23 +1502,14 @@ PluginInsert::configure_io (ChanCount in, ChanCount out) } } else #endif - if (_maps_from_state) { - _maps_from_state = false; + if (_maps_from_state && old_in == in && old_out == out) { mapping_changed = true; sanitize_maps (); } else { - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("Reset Map for '%1': cfg:%2 chn-in:%3 chn-out:%4 match:%5 size-in:%6 size-out:%7\n", - name (), - _configured ? "Y" : "N", - old_in == in ? "==" : "!=", - old_out == out ? "==" : "mismatch", - old_match.method == _match.method ? "==" : "!=", - _in_map.size() == get_count () ? "==" : "!=", - _out_map.size() == get_count () ? "==" : "!=" - )); /* generate a new mapping */ mapping_changed = reset_map (false); } + _maps_from_state = false; } if (mapping_changed) { @@ -1616,7 +1617,7 @@ PluginInsert::private_can_support_io_configuration (ChanCount const& in, ChanCou Match rv = internal_can_support_io_configuration (in, out); if (!_custom_cfg && _preset_out.n_audio () > 0) { - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("using output preset: %1 %2\n", name(), _preset_out)); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: using output preset: %2\n", name(), _preset_out)); out.set (DataType::AUDIO, _preset_out.n_audio ()); } return rv; @@ -1668,7 +1669,7 @@ PluginInsert::internal_can_support_io_configuration (ChanCount const & inx, Chan ChanCount max_out (DataType::AUDIO, 2); // TODO use master-out max_out.set (DataType::MIDI, out.get(DataType::MIDI)); out = ChanCount::min (out, max_out); - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("special case strict-i/o instrument: %1\n", name())); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: special case strict-i/o instrument\n", name())); return m; } @@ -1684,7 +1685,7 @@ PluginInsert::internal_can_support_io_configuration (ChanCount const & inx, Chan f = max (f, (uint32_t) ceil (inx.get(*t) / (float)nout)); } out = inx; - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("special case strict-i/o generator: %1\n", name())); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: special case strict-i/o for generator\n", name())); return Match (Replicate, f, _strict_io); } break; @@ -1702,7 +1703,7 @@ PluginInsert::internal_can_support_io_configuration (ChanCount const & inx, Chan ChanCount ns_inputs = inputs - sidechain_input_pins (); - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("resolving 'Impossible' match for %1\n", name())); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: resolving 'Impossible' match...\n", name())); if (info->reconfigurable_io()) { ChanCount useins; @@ -1790,11 +1791,11 @@ PluginInsert::automatic_can_support_io_configuration (ChanCount const & inx, Cha ChanCount ns_inputs = inputs - sidechain_input_pins (); if (in.get(DataType::MIDI) == 1 && outputs.get(DataType::MIDI) == 0) { - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("bypassing midi-data around %1\n", name())); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: bypassing midi-data\n", name())); midi_bypass.set (DataType::MIDI, 1); } if (in.get(DataType::MIDI) == 1 && inputs.get(DataType::MIDI) == 0) { - DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("hiding midi-port from plugin %1\n", name())); + DEBUG_TRACE (DEBUG::ChanMapping, string_compose ("%1: hiding midi-port from plugin\n", name())); in.set(DataType::MIDI, 0); }