@@ -279,8 +279,7 @@ int JackAlsaDriver::Open(jack_nframes_t nframes, | |||
const char* playback_driver_name, | |||
jack_nframes_t capture_latency, | |||
jack_nframes_t playback_latency, | |||
const char* midi_driver_name, | |||
int hw_timestamping) | |||
const char* midi_driver_name) | |||
{ | |||
// Generic JackAudioDriver Open | |||
if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, | |||
@@ -340,8 +339,7 @@ int JackAlsaDriver::Open(jack_nframes_t nframes, | |||
shorts_first, | |||
capture_latency, | |||
playback_latency, | |||
midi, | |||
hw_timestamping); | |||
midi); | |||
if (fDriver) { | |||
// ALSA driver may have changed the in/out values | |||
fCaptureChannels = ((alsa_driver_t *)fDriver)->capture_nchannels; | |||
@@ -752,9 +750,6 @@ SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor () | |||
"ALSA MIDI driver", | |||
NULL); | |||
value.i = 0; | |||
jack_driver_descriptor_add_parameter(desc, &filler, "htstamps", 't', JackDriverParamBool, &value, NULL, "Enable htimestamping for the ALSA devices", NULL); | |||
return desc; | |||
} | |||
@@ -782,7 +777,6 @@ SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLocke | |||
const JSList * node; | |||
const jack_driver_param_t * param; | |||
const char *midi_driver = "none"; | |||
int hw_timestamping = FALSE; | |||
for (node = params; node; node = jack_slist_next (node)) { | |||
param = (const jack_driver_param_t *) node->data; | |||
@@ -881,10 +875,6 @@ SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLocke | |||
case 'X': | |||
midi_driver = strdup(param->value.str); | |||
break; | |||
case 't': | |||
hw_timestamping = param->value.i; | |||
break; | |||
} | |||
} | |||
@@ -899,7 +889,7 @@ SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLocke | |||
// Special open for ALSA driver... | |||
if (g_alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor, | |||
user_capture_nchnls, user_playback_nchnls, shorts_first, capture_pcm_name, playback_pcm_name, | |||
systemic_input_latency, systemic_output_latency, midi_driver, hw_timestamping) == 0) { | |||
systemic_input_latency, systemic_output_latency, midi_driver) == 0) { | |||
return threaded_driver; | |||
} else { | |||
delete threaded_driver; // Delete the decorated driver | |||
@@ -67,8 +67,7 @@ class JackAlsaDriver : public JackAudioDriver | |||
const char* playback_driver_name, | |||
jack_nframes_t capture_latency, | |||
jack_nframes_t playback_latency, | |||
const char* midi_driver_name, | |||
int hw_timestamping); | |||
const char* midi_driver_name); | |||
int Close(); | |||
int Attach(); | |||
@@ -589,19 +589,17 @@ alsa_driver_configure_stream (alsa_driver_t *driver, char *device_name, | |||
return -1; | |||
} | |||
if (driver->hw_timestamping) { | |||
err = snd_pcm_sw_params_set_tstamp_mode(handle, sw_params, | |||
SND_PCM_TSTAMP_ENABLE); | |||
if (err < 0) { | |||
jack_info("Could not enable ALSA time stamp mode for %s (err %d)", | |||
stream_name, err); | |||
} | |||
err = snd_pcm_sw_params_set_tstamp_type(handle, sw_params, | |||
SND_PCM_TSTAMP_TYPE_MONOTONIC); | |||
if (err < 0) { | |||
jack_info("Could not use monotonic ALSA time stamps for %s (err %d)", | |||
stream_name, err); | |||
} | |||
err = snd_pcm_sw_params_set_tstamp_mode(handle, sw_params, SND_PCM_TSTAMP_ENABLE); | |||
if (err < 0) { | |||
jack_info("Could not enable ALSA time stamp mode for %s (err %d)", | |||
stream_name, err); | |||
} | |||
// TODO check if SND_PCM_TSTAMP_TYPE_MONOTONIC is valid | |||
err = snd_pcm_sw_params_set_tstamp_type(handle, sw_params, SND_PCM_TSTAMP_TYPE_MONOTONIC); | |||
if (err < 0) { | |||
jack_info("Could not use monotonic ALSA time stamps for %s (err %d)", | |||
stream_name, err); | |||
} | |||
if ((err = snd_pcm_sw_params (handle, sw_params)) < 0) { | |||
@@ -1416,6 +1414,12 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, int *status, float | |||
return 0; | |||
} | |||
if (revents & POLLNVAL) { | |||
jack_error ("ALSA: playback device disconnected"); | |||
*status = -7; | |||
return 0; | |||
} | |||
if (revents & POLLERR) { | |||
xrun_detected = TRUE; | |||
} | |||
@@ -1439,6 +1443,12 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, int *status, float | |||
return 0; | |||
} | |||
if (revents & POLLNVAL) { | |||
jack_error ("ALSA: capture device disconnected"); | |||
*status = -7; | |||
return 0; | |||
} | |||
if (revents & POLLERR) { | |||
xrun_detected = TRUE; | |||
} | |||
@@ -1860,7 +1870,7 @@ discover_alsa_using_apps () | |||
while (dir) { | |||
char maybe[PATH_MAX+1]; | |||
snprintf (maybe, sizeof(maybe), "%s/lsof", dir); | |||
if (access (maybe, X_OK)) { | |||
if (access (maybe, X_OK) == 0) { | |||
break; | |||
} | |||
dir = strtok (NULL, ":"); | |||
@@ -1957,8 +1967,7 @@ alsa_driver_new (char *name, char *playback_alsa_device, | |||
int shorts_first, | |||
jack_nframes_t capture_latency, | |||
jack_nframes_t playback_latency, | |||
alsa_midi_t *midi_driver, | |||
int hw_timestamping | |||
alsa_midi_t *midi_driver | |||
) | |||
{ | |||
int err; | |||
@@ -2044,7 +2053,6 @@ alsa_driver_new (char *name, char *playback_alsa_device, | |||
driver->alsa_name_capture = strdup (capture_alsa_device); | |||
driver->midi = midi_driver; | |||
driver->hw_timestamping = hw_timestamping; | |||
driver->xrun_recovery = 0; | |||
if (alsa_driver_check_card_type (driver)) { | |||
@@ -124,7 +124,6 @@ typedef struct _alsa_driver { | |||
char has_hw_monitoring; | |||
char has_hw_metering; | |||
char quirk_bswap; | |||
char hw_timestamping; | |||
ReadCopyFunction read_via_copy; | |||
WriteCopyFunction write_via_copy; | |||
@@ -249,8 +248,7 @@ alsa_driver_new (char *name, char *playback_alsa_device, | |||
int shorts_first, | |||
jack_nframes_t capture_latency, | |||
jack_nframes_t playback_latency, | |||
alsa_midi_t *midi_driver, | |||
int hw_timestamping | |||
alsa_midi_t *midi_driver | |||
); | |||
void | |||
alsa_driver_delete (alsa_driver_t *driver); | |||