diff options
Diffstat (limited to 'src/libs/engine/JackAudioDriver.cpp')
-rw-r--r-- | src/libs/engine/JackAudioDriver.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/libs/engine/JackAudioDriver.cpp b/src/libs/engine/JackAudioDriver.cpp index 9d5a06b9..cd86f91f 100644 --- a/src/libs/engine/JackAudioDriver.cpp +++ b/src/libs/engine/JackAudioDriver.cpp @@ -48,11 +48,11 @@ namespace Ingen { //// JackAudioPort //// JackAudioPort::JackAudioPort(JackAudioDriver* driver, DuplexPort* patch_port) -: DriverPort(patch_port), - Raul::List<JackAudioPort*>::Node(this), - _driver(driver), - _jack_port(NULL), - _jack_buffer(NULL) + : DriverPort(patch_port) + , Raul::List<JackAudioPort*>::Node(this) + , _driver(driver) + , _jack_port(NULL) + , _jack_buffer(NULL) { assert(patch_port->poly() == 1); @@ -61,6 +61,11 @@ JackAudioPort::JackAudioPort(JackAudioDriver* driver, DuplexPort* patch_port) (patch_port->is_input()) ? JackPortIsInput : JackPortIsOutput, 0); + if (_jack_port == NULL) { + cerr << "[JackAudioPort] ERROR: Failed to register port " << patch_port->path() << endl; + throw JackAudioDriver::PortRegistrationFailedException(); + } + patch_port->buffer(0)->clear(); patch_port->fixed_buffers(true); } @@ -95,15 +100,15 @@ JackAudioPort::prepare_buffer(jack_nframes_t nframes) JackAudioDriver::JackAudioDriver(Engine& engine, std::string server_name, jack_client_t* jack_client) -: _engine(engine), - _jack_thread(NULL), - _client(jack_client), - _buffer_size(jack_client ? jack_get_buffer_size(jack_client) : 0), - _sample_rate(jack_client ? jack_get_sample_rate(jack_client) : 0), - _is_activated(false), - _local_client(true), // FIXME - _process_context(engine), - _root_patch(NULL) + : _engine(engine) + , _jack_thread(NULL) + , _client(jack_client) + , _buffer_size(jack_client ? jack_get_buffer_size(jack_client) : 0) + , _sample_rate(jack_client ? jack_get_sample_rate(jack_client) : 0) + , _is_activated(false) + , _local_client(true) // FIXME + , _process_context(engine) + , _root_patch(NULL) { if (!_client) { // Try supplied server name @@ -247,10 +252,14 @@ JackAudioDriver::port(const Path& path) DriverPort* JackAudioDriver::create_port(DuplexPort* patch_port) { - if (patch_port->buffer_size() == _buffer_size) - return new JackAudioPort(this, patch_port); - else + try { + if (patch_port->buffer_size() == _buffer_size) + return new JackAudioPort(this, patch_port); + else + return NULL; + } catch (...) { return NULL; + } } |