allow to sum channel maps

This commit is contained in:
Robin Gareus 2016-03-30 15:22:19 +02:00
parent 1316e85d41
commit 5278d56031
3 changed files with 34 additions and 4 deletions

View 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;
};

View 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);

View 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)