git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1845 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.70
@@ -17,6 +17,10 @@ Tim Blechmann | |||||
Jackdmp changes log | Jackdmp changes log | ||||
--------------------------- | --------------------------- | ||||
2008-02-11 Stephane Letz <letz@grame.fr> | |||||
* Use SetAlias for port naming. Use jackd midi port naming scheme. | |||||
2008-02-08 Stephane Letz <letz@grame.fr> | 2008-02-08 Stephane Letz <letz@grame.fr> | ||||
* More robust external API. | * More robust external API. | ||||
@@ -86,20 +86,22 @@ int JackAudioDriver::Attach() | |||||
{ | { | ||||
JackPort* port; | JackPort* port; | ||||
jack_port_id_t port_index; | jack_port_id_t port_index; | ||||
char buf[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | ||||
int i; | int i; | ||||
JackLog("JackAudioDriver::Attach fBufferSize = %ld fSampleRate = %ld\n", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | JackLog("JackAudioDriver::Attach fBufferSize = %ld fSampleRate = %ld\n", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | ||||
for (i = 0; i < fCaptureChannels; i++) { | for (i = 0; i < fCaptureChannels; i++) { | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:out%d", fClientControl->fName, fCaptureDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("driver: cannot register port for %s", buf); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%d", fClientControl->fName, fCaptureDriverName, i + 1); | |||||
snprintf(name, sizeof(name) - 1, "system:capture_%d", i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("driver: cannot register port for %s", alias); | |||||
return -1; | return -1; | ||||
} | } | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||
port->Rename("system:capture_%d", i + 1); | |||||
port->SetAlias(alias); | |||||
port->SetLatency(fEngineControl->fBufferSize + fCaptureLatency); | port->SetLatency(fEngineControl->fBufferSize + fCaptureLatency); | ||||
fCapturePortList[i] = port_index; | fCapturePortList[i] = port_index; | ||||
JackLog("JackAudioDriver::Attach fCapturePortList[i] port_index = %ld\n", port_index); | JackLog("JackAudioDriver::Attach fCapturePortList[i] port_index = %ld\n", port_index); | ||||
@@ -108,13 +110,14 @@ int JackAudioDriver::Attach() | |||||
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | ||||
for (i = 0; i < fPlaybackChannels; i++) { | for (i = 0; i < fPlaybackChannels; i++) { | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:in%d", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("driver: cannot register port for %s", buf); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%d", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
snprintf(name, sizeof(name) - 1, "system:playback_%d", i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, alias, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("driver: cannot register port for %s", alias); | |||||
return -1; | return -1; | ||||
} | } | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||
port->Rename("system:playback_%d", i + 1); | |||||
port->SetAlias(alias); | |||||
port->SetLatency(fEngineControl->fBufferSize + fPlaybackLatency); | port->SetLatency(fEngineControl->fBufferSize + fPlaybackLatency); | ||||
fPlaybackPortList[i] = port_index; | fPlaybackPortList[i] = port_index; | ||||
JackLog("JackAudioDriver::Attach fPlaybackPortList[i] port_index = %ld\n", port_index); | JackLog("JackAudioDriver::Attach fPlaybackPortList[i] port_index = %ld\n", port_index); | ||||
@@ -122,9 +125,9 @@ int JackAudioDriver::Attach() | |||||
// Monitor ports | // Monitor ports | ||||
if (fWithMonitorPorts) { | if (fWithMonitorPorts) { | ||||
JackLog("Create monitor port \n"); | JackLog("Create monitor port \n"); | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register monitor port for %s", buf); | |||||
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register monitor port for %s", name); | |||||
return -1; | return -1; | ||||
} else { | } else { | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||
@@ -193,12 +193,6 @@ int JackPort::SetName(const char* new_name) | |||||
return 0; | return 0; | ||||
} | } | ||||
void JackPort::Rename(const char* name, int index) | |||||
{ | |||||
SetAlias(GetName()); | |||||
snprintf(fName, sizeof(fName) - 1, name, index); | |||||
} | |||||
bool JackPort::NameEquals(const char* target) | bool JackPort::NameEquals(const char* target) | ||||
{ | { | ||||
char buf[JACK_PORT_NAME_SIZE + 1]; | char buf[JACK_PORT_NAME_SIZE + 1]; | ||||
@@ -81,7 +81,6 @@ class JackPort | |||||
const char* GetName() const; | const char* GetName() const; | ||||
const char* GetShortName() const; | const char* GetShortName() const; | ||||
int SetName(const char* name); | int SetName(const char* name); | ||||
void Rename(const char* name, int index); | |||||
int GetAliases(char* const aliases[2]); | int GetAliases(char* const aliases[2]); | ||||
int SetAlias(const char* alias); | int SetAlias(const char* alias); | ||||
@@ -2369,6 +2369,11 @@ void* JackAlsaDriver::port_get_buffer(int port, jack_nframes_t nframes) | |||||
return fGraphManager->GetBuffer(port, nframes); | return fGraphManager->GetBuffer(port, nframes); | ||||
} | } | ||||
int JackAlsaDriver::port_set_alias(int port, const char* name) | |||||
{ | |||||
return fGraphManager->GetPort(port)->SetAlias(name); | |||||
} | |||||
jack_nframes_t JackAlsaDriver::get_sample_rate() const | jack_nframes_t JackAlsaDriver::get_sample_rate() const | ||||
{ | { | ||||
return fEngineControl->fSampleRate; | return fEngineControl->fSampleRate; | ||||
@@ -163,6 +163,7 @@ class JackAlsaDriver : public JackAudioDriver | |||||
int port_register(const char *port_name, const char *port_type, unsigned long flags, unsigned long buf_size); | int port_register(const char *port_name, const char *port_type, unsigned long flags, unsigned long buf_size); | ||||
int port_unregister(int port); | int port_unregister(int port); | ||||
void* port_get_buffer(int port, jack_nframes_t nframes); | void* port_get_buffer(int port, jack_nframes_t nframes); | ||||
int port_set_alias(int port, const char* name); | |||||
jack_nframes_t get_sample_rate() const; | jack_nframes_t get_sample_rate() const; | ||||
jack_nframes_t frame_time() const; | jack_nframes_t frame_time() const; | ||||
@@ -34,6 +34,7 @@ int JACK_client_create_thread(jack_client_t *client, pthread_t *thread, int prio | |||||
jack_port_t* JACK_port_register(jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size); | jack_port_t* JACK_port_register(jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size); | ||||
int JACK_port_unregister(jack_client_t *, jack_port_t*); | int JACK_port_unregister(jack_client_t *, jack_port_t*); | ||||
void* JACK_port_get_buffer(jack_port_t*, jack_nframes_t); | void* JACK_port_get_buffer(jack_port_t*, jack_nframes_t); | ||||
int JACK_port_set_alias(jack_port_t* port, const char* name); | |||||
jack_nframes_t JACK_get_sample_rate(jack_client_t *); | jack_nframes_t JACK_get_sample_rate(jack_client_t *); | ||||
jack_nframes_t JACK_frame_time(jack_client_t *); | jack_nframes_t JACK_frame_time(jack_client_t *); | ||||
@@ -45,6 +46,7 @@ jack_nframes_t JACK_last_frame_time(jack_client_t *); | |||||
#define jack_port_register JACK_port_register | #define jack_port_register JACK_port_register | ||||
#define jack_port_unregister JACK_port_unregister | #define jack_port_unregister JACK_port_unregister | ||||
#define jack_port_get_buffer JACK_port_get_buffer | #define jack_port_get_buffer JACK_port_get_buffer | ||||
#define jack_port_set_alias JACK_port_set_alias | |||||
#define jack_get_sample_rate JACK_get_sample_rate | #define jack_get_sample_rate JACK_get_sample_rate | ||||
#define jack_frame_time JACK_frame_time | #define jack_frame_time JACK_frame_time | ||||
@@ -44,6 +44,12 @@ void* JACK_port_get_buffer(jack_port_t *port, jack_nframes_t nframes) | |||||
return real->driver->port_get_buffer(real->port_id, nframes); | return real->driver->port_get_buffer(real->port_id, nframes); | ||||
} | } | ||||
int JACK_port_set_alias(jack_port_t *port, const char* name) | |||||
{ | |||||
fake_port_t* real = (fake_port_t*)port; | |||||
return real->driver->port_set_alias(real->port_id, name); | |||||
} | |||||
jack_nframes_t JACK_get_sample_rate(jack_client_t *client) | jack_nframes_t JACK_get_sample_rate(jack_client_t *client) | ||||
{ | { | ||||
return ((JackAlsaDriver*)client)->get_sample_rate(); | return ((JackAlsaDriver*)client)->get_sample_rate(); | ||||
@@ -176,6 +176,8 @@ struct alsa_rawmidi_t { | |||||
midi_stream_t in; | midi_stream_t in; | ||||
midi_stream_t out; | midi_stream_t out; | ||||
int midi_in_cnt; | |||||
int midi_out_cnt; | |||||
}; | }; | ||||
static int input_port_init(alsa_rawmidi_t *midi, midi_port_t *port); | static int input_port_init(alsa_rawmidi_t *midi, midi_port_t *port); | ||||
@@ -264,6 +266,8 @@ alsa_midi_t* alsa_rawmidi_new(jack_client_t *jack) | |||||
midi->ops.stop = alsa_rawmidi_stop; | midi->ops.stop = alsa_rawmidi_stop; | ||||
midi->ops.read = alsa_rawmidi_read; | midi->ops.read = alsa_rawmidi_read; | ||||
midi->ops.write = alsa_rawmidi_write; | midi->ops.write = alsa_rawmidi_write; | ||||
midi->midi_in_cnt = 0; | |||||
midi->midi_out_cnt = 0; | |||||
return &midi->ops; | return &midi->ops; | ||||
fail_3: | fail_3: | ||||
@@ -417,10 +421,20 @@ void midi_port_init(const alsa_rawmidi_t *midi, midi_port_t *port, snd_rawmidi_i | |||||
} | } | ||||
static | static | ||||
inline int midi_port_open_jack(const alsa_rawmidi_t *midi, midi_port_t *port, int type, const char *name) | |||||
inline int midi_port_open_jack(const alsa_rawmidi_t *midi, midi_port_t *port, int type, const char *alias) | |||||
{ | { | ||||
char name[64]; | |||||
if (type & JackPortIsOutput) | |||||
snprintf(name, sizeof(name) - 1, "system:midi_capture_%d", ++midi->midi_in_cnt); | |||||
else | |||||
snprintf(name, sizeof(name) - 1, "system:midi_playback_%d", ++midi->midi_out_cnt); | |||||
port->jack = jack_port_register(midi->client, name, JACK_DEFAULT_MIDI_TYPE, | port->jack = jack_port_register(midi->client, name, JACK_DEFAULT_MIDI_TYPE, | ||||
type | JackPortIsPhysical|JackPortIsTerminal, 0); | type | JackPortIsPhysical|JackPortIsTerminal, 0); | ||||
if (port->jack) | |||||
jack_port_set_alias(port->jack_port,alias); | |||||
return port->jack == NULL; | return port->jack == NULL; | ||||
} | } | ||||
@@ -106,6 +106,8 @@ typedef struct alsa_seqmidi { | |||||
stream_t stream[2]; | stream_t stream[2]; | ||||
char alsa_name[32]; | char alsa_name[32]; | ||||
int midi_in_cnt; | |||||
int midi_out_cnt; | |||||
} alsa_seqmidi_t; | } alsa_seqmidi_t; | ||||
struct alsa_midi_event { | struct alsa_midi_event { | ||||
@@ -225,6 +227,8 @@ alsa_midi_t* alsa_seqmidi_new(jack_client_t *client, const char* alsa_name) | |||||
stream_init(self, PORT_INPUT); | stream_init(self, PORT_INPUT); | ||||
stream_init(self, PORT_OUTPUT); | stream_init(self, PORT_OUTPUT); | ||||
self->midi_in_cnt = 0; | |||||
self->midi_out_cnt = 0; | |||||
self->ops.destroy = alsa_seqmidi_delete; | self->ops.destroy = alsa_seqmidi_delete; | ||||
self->ops.attach = alsa_seqmidi_attach; | self->ops.attach = alsa_seqmidi_attach; | ||||
self->ops.detach = alsa_seqmidi_detach; | self->ops.detach = alsa_seqmidi_detach; | ||||
@@ -455,25 +459,34 @@ port_t* port_create(alsa_seqmidi_t *self, int type, snd_seq_addr_t addr, const s | |||||
port_t *port; | port_t *port; | ||||
char *c; | char *c; | ||||
int err; | int err; | ||||
char name[64]; | |||||
port = calloc(1, sizeof(port_t)); | port = calloc(1, sizeof(port_t)); | ||||
if (!port) | if (!port) | ||||
return NULL; | return NULL; | ||||
port->remote = addr; | port->remote = addr; | ||||
if (port_type[type].jack_caps & JackPortIsOutput) | |||||
snprintf(name, sizeof(name) - 1, "system:midi_capture_%d", ++self->midi_in_cnt); | |||||
else | |||||
snprintf(name, sizeof(name) - 1, "system:midi_playback_%d", ++self->midi_out_cnt); | |||||
snprintf(port->name, sizeof(port->name), "%s-%d-%d-%s", | snprintf(port->name, sizeof(port->name), "%s-%d-%d-%s", | ||||
port_type[type].name, addr.client, addr.port, snd_seq_port_info_get_name(info)); | port_type[type].name, addr.client, addr.port, snd_seq_port_info_get_name(info)); | ||||
// replace all offending characters by - | // replace all offending characters by - | ||||
for (c = port->name; *c; ++c) | for (c = port->name; *c; ++c) | ||||
if (!isalnum(*c)) | if (!isalnum(*c)) | ||||
*c = '-'; | *c = '-'; | ||||
port->jack_port = jack_port_register(self->jack, | port->jack_port = jack_port_register(self->jack, | ||||
port->name, JACK_DEFAULT_MIDI_TYPE, port_type[type].jack_caps, 0); | |||||
name, JACK_DEFAULT_MIDI_TYPE, port_type[type].jack_caps, 0); | |||||
if (!port->jack_port) | if (!port->jack_port) | ||||
goto failed; | goto failed; | ||||
jack_port_set_alias(port->jack_port, port->name); | |||||
if (type == PORT_INPUT) | if (type == PORT_INPUT) | ||||
err = alsa_connect_from(self, port->remote.client, port->remote.port); | err = alsa_connect_from(self, port->remote.client, port->remote.port); | ||||
@@ -951,7 +951,8 @@ int JackCoreAudioDriver::Attach() | |||||
UInt32 size; | UInt32 size; | ||||
Boolean isWritable; | Boolean isWritable; | ||||
char channel_name[64]; | char channel_name[64]; | ||||
char buf[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
char name[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
char alias[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; | |||||
unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | unsigned long port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | ||||
JackLog("JackCoreAudioDriver::Attach fBufferSize %ld fSampleRate %ld\n", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | JackLog("JackCoreAudioDriver::Attach fBufferSize %ld fSampleRate %ld\n", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | ||||
@@ -965,13 +966,15 @@ int JackCoreAudioDriver::Attach() | |||||
err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); | err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); | ||||
if (err != noErr) | if (err != noErr) | ||||
JackLog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); | JackLog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:out_%s%u", fClientControl->fName, fCaptureDriverName, channel_name, i + 1); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:out_%s%u", fClientControl->fName, fCaptureDriverName, channel_name, i + 1); | |||||
} else { | } else { | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:out%u", fClientControl->fName, fCaptureDriverName, i + 1); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:out%u", fClientControl->fName, fCaptureDriverName, i + 1); | |||||
} | } | ||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register port for %s", buf); | |||||
snprintf(name, sizeof(name) - 1, "system:capture_%d", i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register port for %s", name); | |||||
return -1; | return -1; | ||||
} | } | ||||
@@ -986,7 +989,7 @@ int JackCoreAudioDriver::Attach() | |||||
JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); | JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||
port->Rename("system:capture_%d", i + 1); | |||||
port->SetAlias(alias); | |||||
port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fCaptureLatency); | port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fCaptureLatency); | ||||
fCapturePortList[i] = port_index; | fCapturePortList[i] = port_index; | ||||
} | } | ||||
@@ -1002,13 +1005,15 @@ int JackCoreAudioDriver::Attach() | |||||
err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); | err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); | ||||
if (err != noErr) | if (err != noErr) | ||||
JackLog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); | JackLog("AudioDeviceGetProperty kAudioDevicePropertyChannelName error \n"); | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:in_%s%u", fClientControl->fName, fPlaybackDriverName, channel_name, i + 1); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:in_%s%u", fClientControl->fName, fPlaybackDriverName, channel_name, i + 1); | |||||
} else { | } else { | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:in%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
snprintf(alias, sizeof(alias) - 1, "%s:%s:in%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
} | } | ||||
snprintf(name, sizeof(name) - 1, "system:playback_%d", i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register port for %s", buf); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, (JackPortFlags)port_flags, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register port for %s", name); | |||||
return -1; | return -1; | ||||
} | } | ||||
@@ -1023,16 +1028,16 @@ int JackCoreAudioDriver::Attach() | |||||
JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); | JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||
port->Rename("system:playback_%d", i + 1); | |||||
port->SetAlias(alias); | |||||
port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fPlaybackLatency); | port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fPlaybackLatency); | ||||
fPlaybackPortList[i] = port_index; | fPlaybackPortList[i] = port_index; | ||||
// Monitor ports | // Monitor ports | ||||
if (fWithMonitorPorts) { | if (fWithMonitorPorts) { | ||||
JackLog("Create monitor port \n"); | JackLog("Create monitor port \n"); | ||||
snprintf(buf, sizeof(buf) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, buf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register monitor port for %s", buf); | |||||
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fClientControl->fName, fPlaybackDriverName, i + 1); | |||||
if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { | |||||
jack_error("Cannot register monitor port for %s", name); | |||||
return -1; | return -1; | ||||
} else { | } else { | ||||
port = fGraphManager->GetPort(port_index); | port = fGraphManager->GetPort(port_index); | ||||