allow to sum channel maps
authorRobin Gareus <robin@gareus.org>
Wed, 30 Mar 2016 13:22:19 +0000 (15:22 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 30 Mar 2016 13:28:15 +0000 (15:28 +0200)
libs/ardour/ardour/chan_mapping.h
libs/ardour/ardour/plugin_insert.h
libs/ardour/luabindings.cc

index 4b0b930b0215cb97398865f1a41a9f0ac2e9dc52..730ecadc7258443dde1e157d67f8222f6bc0d6f0 100644 (file)
@@ -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;
 };
index 1441dfadb0943e570a641802de4279240a1b957b..d64ee8f31da7705bbb5b3291a7e8cbf296797441 100644 (file)
@@ -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);
 
index dfcdfaec61b34e2549e8a35668258a3f0330c207..d7b9410bfc4f42d769b9a1c64d19a15305e5f7ec 100644 (file)
@@ -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)