Browse Source

Merge remote-tracking branch 'cz/newer-midi'

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4291 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
3787c33c21
2 changed files with 30 additions and 12 deletions
  1. +13
    -2
      linux/alsarawmidi/JackALSARawMidiDriver.cpp
  2. +17
    -10
      linux/alsarawmidi/JackALSARawMidiPort.cpp

+ 13
- 2
linux/alsarawmidi/JackALSARawMidiDriver.cpp View File

@@ -54,6 +54,7 @@ JackALSARawMidiDriver::~JackALSARawMidiDriver()
int int
JackALSARawMidiDriver::Attach() JackALSARawMidiDriver::Attach()
{ {
const char *alias;
jack_nframes_t buffer_size = fEngineControl->fBufferSize; jack_nframes_t buffer_size = fEngineControl->fBufferSize;
jack_port_id_t index; jack_port_id_t index;
jack_nframes_t latency = buffer_size; jack_nframes_t latency = buffer_size;
@@ -74,10 +75,15 @@ JackALSARawMidiDriver::Attach()
// X: Do we need to deallocate ports? // X: Do we need to deallocate ports?
return -1; return -1;
} }
alias = input_port->GetAlias();
port = fGraphManager->GetPort(index); port = fGraphManager->GetPort(index);
port->SetAlias(input_port->GetAlias());
port->SetAlias(alias);
port->SetLatencyRange(JackCaptureLatency, &latency_range); port->SetLatencyRange(JackCaptureLatency, &latency_range);
fCapturePortList[i] = index; fCapturePortList[i] = index;

jack_info("JackALSARawMidiDriver::Attach - input port registered "
"(name='%s', alias='%s').", name, alias);

} }
if (! fEngineControl->fSyncMode) { if (! fEngineControl->fSyncMode) {
latency += buffer_size; latency += buffer_size;
@@ -96,10 +102,15 @@ JackALSARawMidiDriver::Attach()
// X: Do we need to deallocate ports? // X: Do we need to deallocate ports?
return -1; return -1;
} }
alias = output_port->GetAlias();
port = fGraphManager->GetPort(index); port = fGraphManager->GetPort(index);
port->SetAlias(output_port->GetAlias());
port->SetAlias(alias);
port->SetLatencyRange(JackPlaybackLatency, &latency_range); port->SetLatencyRange(JackPlaybackLatency, &latency_range);
fPlaybackPortList[i] = index; fPlaybackPortList[i] = index;

jack_info("JackALSARawMidiDriver::Attach - output port registered "
"(name='%s', alias='%s').", name, alias);

} }
return 0; return 0;
} }


+ 17
- 10
linux/alsarawmidi/JackALSARawMidiPort.cpp View File

@@ -28,11 +28,12 @@ using Jack::JackALSARawMidiPort;
JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info, JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info,
size_t index) size_t index)
{ {
int card = snd_rawmidi_info_get_card(info);
unsigned int device = snd_rawmidi_info_get_device(info);
unsigned int subdevice = snd_rawmidi_info_get_subdevice(info);
char device_id[32]; char device_id[32];
snprintf(device_id, sizeof(device_id), "hw:%d,%d,%d",
snd_rawmidi_info_get_card(info),
snd_rawmidi_info_get_device(info),
snd_rawmidi_info_get_subdevice(info));
snprintf(device_id, sizeof(device_id), "hw:%d,%d,%d", card, device,
subdevice);
const char *alias_prefix; const char *alias_prefix;
const char *error_message; const char *error_message;
snd_rawmidi_t **in; snd_rawmidi_t **in;
@@ -76,6 +77,15 @@ JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info,
func = "snd_rawmidi_params_set_avail_min"; func = "snd_rawmidi_params_set_avail_min";
goto free_params; goto free_params;
} }

// Smallest valid buffer size.
code = snd_rawmidi_params_set_buffer_size(rawmidi, params, 32);
if (code) {
error_message = snd_strerror(code);
func = "snd_rawmidi_params_set_buffer_size";
goto free_params;
}

code = snd_rawmidi_params_set_no_active_sensing(rawmidi, params, 1); code = snd_rawmidi_params_set_no_active_sensing(rawmidi, params, 1);
if (code) { if (code) {
error_message = snd_strerror(code); error_message = snd_strerror(code);
@@ -95,12 +105,9 @@ JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info,
func = "snd_rawmidi_poll_descriptors_count"; func = "snd_rawmidi_poll_descriptors_count";
goto close; goto close;
} }
snprintf(alias, sizeof(alias), "%s%d", alias_prefix, index);
device_name = snd_rawmidi_info_get_subdevice_name(info);
if (! strlen(device_name)) {
device_name = snd_rawmidi_info_get_name(info);
}
snprintf(name, sizeof(name), "system:%s %s", device_name, name_suffix);
snprintf(alias, sizeof(alias), "%s%d", alias_prefix, index + 1);
snprintf(name, sizeof(name), "system:%d-%d %s %d %s", card + 1, device + 1,
snd_rawmidi_info_get_name(info), subdevice + 1, name_suffix);
return; return;
free_params: free_params:
snd_rawmidi_params_free(params); snd_rawmidi_params_free(params);


Loading…
Cancel
Save