From 5278d56031c51d9619fd6169fec5c1d28c928507 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 30 Mar 2016 15:22:19 +0200 Subject: [PATCH] allow to sum channel maps --- libs/ardour/ardour/chan_mapping.h | 14 ++++++++++++++ libs/ardour/ardour/plugin_insert.h | 20 ++++++++++++++++++-- libs/ardour/luabindings.cc | 4 ++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libs/ardour/ardour/chan_mapping.h b/libs/ardour/ardour/chan_mapping.h index 4b0b930b02..730ecadc72 100644 --- a/libs/ardour/ardour/chan_mapping.h +++ b/libs/ardour/ardour/chan_mapping.h @@ -97,6 +97,20 @@ public: return ! (*this == other); } + ChanMapping operator+=(const ChanMapping& other) { + const ChanMapping::Mappings& mp (other.mappings()); + for (Mappings::const_iterator tm = mp.begin(); tm != mp.end(); ++tm) { + for (TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) { +#if 0 + bool valid; uint32_t x = get (tm->first, i->first, &valid); + assert (!valid || x == i->second); +#endif + set (tm->first, i->first, i->second); + } + } + return *this; + } + private: Mappings _mappings; }; diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 1441dfadb0..d64ee8f31d 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -69,7 +69,7 @@ class LIBARDOUR_API PluginInsert : public Processor int set_block_size (pframes_t nframes); - ChanMapping input_map (uint32_t num=0) const { + ChanMapping input_map (uint32_t num) const { if (num < _in_map.size()) { return _in_map.find (num)->second; } else { @@ -77,7 +77,7 @@ class LIBARDOUR_API PluginInsert : public Processor } } - ChanMapping output_map (uint32_t num=0) const { + ChanMapping output_map (uint32_t num) const { if (num < _out_map.size()) { return _out_map.find (num)->second; } else { @@ -85,6 +85,22 @@ class LIBARDOUR_API PluginInsert : public Processor } } + ChanMapping input_map () const { + ChanMapping rv; + for (PinMappings::const_iterator i = _in_map.begin (); i != _in_map.end (); ++i) { + rv += i->second; + } + return rv; + } + + ChanMapping output_map () const { + ChanMapping rv; + for (PinMappings::const_iterator i = _out_map.begin (); i != _out_map.end (); ++i) { + rv += i->second; + } + return rv; + } + void set_input_map (uint32_t, ChanMapping); void set_output_map (uint32_t, ChanMapping); diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index dfcdfaec61..d7b9410bfc 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -374,8 +374,8 @@ LuaBindings::common (lua_State* L) .addFunction ("deactivate", &PluginInsert::deactivate) .addFunction ("strict_io_configured", &PluginInsert::strict_io_configured) .addFunction ("no_inplace", &PluginInsert::no_inplace) - .addFunction ("input_map", &PluginInsert::input_map) - .addFunction ("output_map", &PluginInsert::output_map) + .addFunction ("input_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::input_map) + .addFunction ("output_map", (ARDOUR::ChanMapping (PluginInsert::*)(uint32_t) const)&PluginInsert::output_map) .addFunction ("set_no_inplace", &PluginInsert::set_no_inplace) // XXX .addFunction ("set_input_map", &PluginInsert::set_input_map) .addFunction ("set_output_map", &PluginInsert::set_output_map) -- 2.30.2