From 5227f57f2eeb66b01756f1d2d26db96c358b2af1 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 26 Apr 2016 14:35:47 +0200 Subject: [PATCH] implement missing PortManager methods and lua-bind them --- libs/ardour/luabindings.cc | 21 +++++++++++++++++++++ libs/ardour/port_manager.cc | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) 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") .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))&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&))&PortManager::get_ports) .endClass() .deriveClass ("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& 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& 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& 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) {