Browse Source

QTISA-183 alsa: remove recovery from alsa_driver_wait

upper layer will be responsible for handling recovery

Change-Id: I507df2976ae569b4953a16e6e334ae5f9c78b59f
Signed-off-by: Adam Miartus <external.Adam.Miartus@de.bosch.com>
(cherry picked from commit aff8dd6e21)
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
pull/608/head
Adam Miartus Timo Wischer 6 years ago
parent
commit
604c4859ef
1 changed files with 16 additions and 25 deletions
  1. +16
    -25
      linux/alsa/alsa_driver.c

+ 16
- 25
linux/alsa/alsa_driver.c View File

@@ -56,8 +56,6 @@ char* strcasestr(const char* haystack, const char* needle);

/* Delay (in process calls) before jackd will report an xrun */
#define XRUN_REPORT_DELAY 0
/* Max re-try count for Alsa poll timeout handling */
#define MAX_RETRY_COUNT 5

#ifdef __QNXNTO__

@@ -2108,7 +2106,6 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
snd_pcm_sframes_t avail = 0;
snd_pcm_sframes_t capture_avail = 0;
snd_pcm_sframes_t playback_avail = 0;
int retry_cnt = 0;
jack_time_t poll_enter;
jack_time_t poll_ret = 0;

@@ -2177,7 +2174,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
/* In case of xrun -EPIPE is returned perform xrun recovery*/
if (pfd_cap_count[i] == -EPIPE) {
jack_error("poll descriptors xrun C: %s pfd_cap_count[%d]=%d", device->capture_name, i, pfd_cap_count[i]);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
}
/* for any other error return negative wait status to caller */
jack_error("poll descriptors error C: %s pfd_cap_count[%d]=%d", device->capture_name, i, pfd_cap_count[i]);
@@ -2212,7 +2210,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
/* In case of xrun -EPIPE is returned perform xrun recovery*/
if (pfd_cap_count[i] == -EPIPE) {
jack_error("poll descriptors xrun P: %s pfd_cap_count[%d]=%d", device->playback_name, i, pfd_play_count[i]);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
}
/* for any other error return negative wait status to caller */
jack_error("poll descriptors error P: %s pfd_cap_count[%d]=%d", device->playback_name, i, pfd_play_count[i]);
@@ -2272,18 +2271,9 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
poll_ret = jack_get_microseconds ();

if (poll_result == 0) {
retry_cnt++;
if(retry_cnt > MAX_RETRY_COUNT) {
jack_error ("ALSA: poll time out, polled for %" PRIu64
" usecs, Reached max retry cnt = %d, Exiting",
poll_ret - poll_enter, MAX_RETRY_COUNT);
*status = ALSA_DRIVER_WAIT_ERROR;
return 0;
}

jack_error ("ALSA: poll time out, polled for %" PRIu64
" usecs, Retrying with a recovery, retry cnt = %d",
poll_ret - poll_enter, retry_cnt);
" usecs, Retrying with a recovery",
poll_ret - poll_enter);
for (int i = 0; i < driver->devices_count; ++i) {
if (driver->devices[i].capture_handle && i < driver->devices_c_count && cap_revents[i] == 0) {
jack_log("device C: %s poll was requested", driver->devices[i].capture_name);
@@ -2292,7 +2282,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
jack_log("device P: %s poll was requested", driver->devices[i].playback_name);
}
}
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
}

// JACK2
@@ -2353,7 +2344,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
if (collect_revs & POLLERR) {
/* optimization, no point in polling more if we already have xrun on one device */
jack_error ("xrun C: '%s'", device->capture_name);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
}
if (collect_revs & POLLIN) {
}
@@ -2391,7 +2383,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
if (collect_revs & POLLERR) {
/* optimization, no point in polling more if we already have xrun on one device */
jack_error ("xrun P: '%s'", device->playback_name);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
}
if (collect_revs & POLLNVAL) {
jack_error ("ALSA: playback device disconnected");
@@ -2429,7 +2422,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
if ((avail = alsa_driver_avail (driver, device->capture_handle, SND_PCM_STREAM_CAPTURE)) < 0) {
if (avail == -EPIPE) {
jack_error ("ALSA: avail_update xrun on capture dev '%s'", device->capture_name);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
} else {
jack_error ("unknown ALSA avail_update return value (%u)", capture_avail);
}
@@ -2454,7 +2448,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
if ((avail = alsa_driver_avail (driver, device->playback_handle, SND_PCM_STREAM_PLAYBACK)) < 0) {
if (avail == -EPIPE) {
jack_error ("ALSA: avail_update xrun on playback dev '%s'", device->playback_name);
goto xrun;
*status = ALSA_DRIVER_WAIT_XRUN;
return 0;
} else {
jack_error ("unknown ALSA avail_update return value (%u)", playback_avail);
}
@@ -2492,10 +2487,6 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t
*/

return avail - (avail % driver->frames_per_cycle);

xrun:
*status = (alsa_driver_xrun_recovery (driver, delayed_usecs) == 0) ? ALSA_DRIVER_WAIT_XRUN : ALSA_DRIVER_WAIT_ERROR;
return 0;
}

int


Loading…
Cancel
Save