diff --git a/drivers/alsa/alsa_driver.c b/drivers/alsa/alsa_driver.c index 14a7c26..fb35d7f 100644 --- a/drivers/alsa/alsa_driver.c +++ b/drivers/alsa/alsa_driver.c @@ -674,7 +674,8 @@ alsa_driver_audio_start (alsa_driver_t *driver) } } - if (driver->capture_handle && driver->capture_and_playback_not_synced) { + if ((driver->capture_handle && driver->capture_and_playback_not_synced) || + !driver->playback_handle) { if ((err = snd_pcm_prepare (driver->capture_handle)) < 0) { jack_error ("ALSA: prepare error for capture on \"%s\" (%s)", driver->alsa_name_capture, snd_strerror(err)); return -1; @@ -720,7 +721,8 @@ alsa_driver_audio_start (alsa_driver_t *driver) } } - if (driver->capture_handle && driver->capture_and_playback_not_synced) { + if (driver->capture_handle && driver->capture_and_playback_not_synced || + !driver->playback_handle) { if ((err = snd_pcm_start (driver->capture_handle)) < 0) { jack_error ("could not start capture (%s)", snd_strerror (err)); return -1; @@ -809,7 +811,7 @@ alsa_driver_xrun_recovery (alsa_driver_t *driver) gettimeofday(&now, 0); snd_pcm_status_get_trigger_tstamp(status, &tstamp); timersub(&now, &tstamp, &diff); - fprintf(stderr, "\n\n**** alsa_pcm: xrun of at least %.3f msecs\n\n", diff.tv_sec * 1000 + diff.tv_usec / 1000.0); + fprintf(stderr, "\n\n**** alsa_pcm: xrun of at least %.3f msecs, iter=%d\n\n", diff.tv_sec * 1000 + diff.tv_usec / 1000.0, frame_ith); } if (alsa_driver_audio_stop (driver) || alsa_driver_audio_start (driver)) { @@ -1041,6 +1043,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, int *status, float *delay playback_avail = INT_MAX; /* odd, but see min() computation below */ } + frame_ith++; + if (xrun_detected) { *status = alsa_driver_xrun_recovery (driver); return 0; @@ -1821,7 +1825,7 @@ driver_initialize (jack_client_t *client, int argc, char **argv) { "period", 1, NULL, 'p' }, { "rate", 1, NULL, 'r' }, { "nperiods", 1, NULL, 'n' }, - { "softmode", 1, NULL, 's' }, + { "softmode", 0, NULL, 's' }, { "dither", 2, NULL, 'z' }, { "monitor", 0, NULL, 'm' }, { 0, 0, 0, 0 }