summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-26 14:35:47 +0200
committerRobin Gareus <robin@gareus.org>2016-04-26 18:16:14 +0200
commit5227f57f2eeb66b01756f1d2d26db96c358b2af1 (patch)
tree7b8507e2f7bc60620abdcdb5282ee03b31e73548 /libs/ardour
parent7f8c7d8647293b7511bdecbc2cfcb6531fde0c74 (diff)
implement missing PortManager methods and lua-bind them
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/luabindings.cc21
-rw-r--r--libs/ardour/port_manager.cc36
2 files changed, 57 insertions, 0 deletions
diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc
index b4f81ab2a9..c5ff0ada33 100644
--- a/libs/ardour/luabindings.cc
+++ b/libs/ardour/luabindings.cc
@@ -868,6 +868,14 @@ LuaBindings::common (lua_State* L)
.addConst ("SrcBest", ARDOUR::SrcQuality(SrcBest))
.endNamespace ()
+ .beginNamespace ("PortFlags")
+ .addConst ("IsInput", ARDOUR::PortFlags(IsInput))
+ .addConst ("IsOutput", ARDOUR::PortFlags(IsOutput))
+ .addConst ("IsPhysical", ARDOUR::PortFlags(IsPhysical))
+ .addConst ("CanMonitor", ARDOUR::PortFlags(CanMonitor))
+ .addConst ("IsTerminal", ARDOUR::PortFlags(IsTerminal))
+ .endNamespace ()
+
.beginNamespace ("PlaylistDisposition")
.addConst ("CopyPlaylist", ARDOUR::PlaylistDisposition(CopyPlaylist))
.addConst ("NewPlaylist", ARDOUR::PlaylistDisposition(NewPlaylist))
@@ -932,7 +940,20 @@ LuaBindings::common (lua_State* L)
.beginClass <PortManager> ("PortManager")
.addFunction ("port_engine", &PortManager::port_engine)
.addFunction ("connected", &PortManager::connected)
+ .addFunction ("connect", &PortManager::connect)
+ .addFunction ("physically_connected", &PortManager::physically_connected)
+ .addFunction ("disconnect", (int (PortManager::*)(const std::string&, const std::string&))&PortManager::disconnect)
+ .addFunction ("disconnect_port", (int (PortManager::*)(boost::shared_ptr<Port>))&PortManager::disconnect)
+ .addFunction ("get_port_by_name", &PortManager::get_port_by_name)
+ .addFunction ("get_pretty_name_by_name", &PortManager::get_pretty_name_by_name)
+ .addFunction ("port_is_physical", &PortManager::port_is_physical)
+ .addFunction ("get_physical_outputs", &PortManager::get_physical_outputs)
+ .addFunction ("get_physical_inputs", &PortManager::get_physical_inputs)
+ .addFunction ("n_physical_outputs", &PortManager::n_physical_outputs)
+ .addFunction ("n_physical_inputs", &PortManager::n_physical_inputs)
+ .addRefFunction ("get_connections", &PortManager::get_connections)
.addRefFunction ("get_ports", (int (PortManager::*)(DataType, PortManager::PortList&))&PortManager::get_ports)
+ .addRefFunction ("get_backend_ports", (int (PortManager::*)(const std::string&, DataType, PortFlags, std::vector<std::string>&))&PortManager::get_ports)
.endClass()
.deriveClass <AudioEngine, PortManager> ("AudioEngine")
diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc
index 874d36d882..93cb5fbb1a 100644
--- a/libs/ardour/port_manager.cc
+++ b/libs/ardour/port_manager.cc
@@ -158,6 +158,7 @@ void
PortManager::get_physical_outputs (DataType type, std::vector<std::string>& s)
{
if (!_backend) {
+ s.clear ();
return;
}
_backend->get_physical_outputs (type, s);
@@ -167,6 +168,7 @@ void
PortManager::get_physical_inputs (DataType type, std::vector<std::string>& s)
{
if (!_backend) {
+ s.clear ();
return;
}
@@ -385,6 +387,40 @@ PortManager::connected (const string& port_name)
return _backend->connected (handle);
}
+bool
+PortManager::physically_connected (const string& port_name)
+{
+ if (!_backend) {
+ return false;
+ }
+
+ PortEngine::PortHandle handle = _backend->get_port_by_name (port_name);
+
+ if (!handle) {
+ return false;
+ }
+
+ return _backend->physically_connected (handle);
+}
+
+int
+PortManager::get_connections (const string& port_name, std::vector<std::string>& s)
+{
+ if (!_backend) {
+ s.clear ();
+ return 0;
+ }
+
+ PortEngine::PortHandle handle = _backend->get_port_by_name (port_name);
+
+ if (!handle) {
+ s.clear ();
+ return 0;
+ }
+
+ return _backend->get_connections (handle, s);
+}
+
int
PortManager::connect (const string& source, const string& destination)
{