summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/JackAudioDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-01-07 06:11:57 +0000
committerDavid Robillard <d@drobilla.net>2007-01-07 06:11:57 +0000
commit99ab1c257b7456c16f82119e1faea62c61eea660 (patch)
tree8c31966bbf0e8919380cb4ece65351105b2bb597 /src/libs/engine/JackAudioDriver.cpp
parent81e148286602439b71950d5c69de5ce06f513592 (diff)
downloadingen-99ab1c257b7456c16f82119e1faea62c61eea660.tar.gz
ingen-99ab1c257b7456c16f82119e1faea62c61eea660.tar.bz2
ingen-99ab1c257b7456c16f82119e1faea62c61eea660.zip
Top level port destruction (Jack port removal).
git-svn-id: http://svn.drobilla.net/lad/ingen@238 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/JackAudioDriver.cpp')
-rw-r--r--src/libs/engine/JackAudioDriver.cpp39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/libs/engine/JackAudioDriver.cpp b/src/libs/engine/JackAudioDriver.cpp
index 58834139..87728e93 100644
--- a/src/libs/engine/JackAudioDriver.cpp
+++ b/src/libs/engine/JackAudioDriver.cpp
@@ -73,19 +73,6 @@ JackAudioPort::~JackAudioPort()
void
-JackAudioPort::add_to_driver()
-{
- _driver->add_port(this);
-}
-
-
-void
-JackAudioPort::remove_from_driver()
-{
- _driver->remove_port(this);
-}
-
-void
JackAudioPort::prepare_buffer(jack_nframes_t nframes)
{
// FIXME: Technically this doesn't need to be done every time for output ports
@@ -227,9 +214,12 @@ JackAudioDriver::deactivate()
* See create_port() and remove_port().
*/
void
-JackAudioDriver::add_port(JackAudioPort* port)
+JackAudioDriver::add_port(DriverPort* port)
{
- _ports.push_back(port);
+ assert(ThreadManager::current_thread_id() == THREAD_PROCESS);
+
+ assert(dynamic_cast<JackAudioPort*>(port));
+ _ports.push_back((JackAudioPort*)port);
}
@@ -241,11 +231,13 @@ JackAudioDriver::add_port(JackAudioPort* port)
*
* It is the callers responsibility to delete the returned port.
*/
-JackAudioPort*
-JackAudioDriver::remove_port(JackAudioPort* port)
+DriverPort*
+JackAudioDriver::remove_port(const Path& path)
{
+ assert(ThreadManager::current_thread_id() == THREAD_PROCESS);
+
for (List<JackAudioPort*>::iterator i = _ports.begin(); i != _ports.end(); ++i)
- if ((*i) == port)
+ if ((*i)->patch_port()->path() == path)
return _ports.remove(i)->elem();
cerr << "[JackAudioDriver::remove_port] WARNING: Failed to find Jack port to remove!" << endl;
@@ -254,6 +246,17 @@ JackAudioDriver::remove_port(JackAudioPort* port)
DriverPort*
+JackAudioDriver::port(const Path& path)
+{
+ for (List<JackAudioPort*>::iterator i = _ports.begin(); i != _ports.end(); ++i)
+ if ((*i)->patch_port()->path() == path)
+ return (*i);
+
+ return NULL;
+}
+
+
+DriverPort*
JackAudioDriver::create_port(DuplexPort<Sample>* patch_port)
{
if (patch_port->buffer_size() == _buffer_size)