From f18d6d3825c1a802c11fb66556b8bdd02f62e709 Mon Sep 17 00:00:00 2001 From: Christian Schaller Date: Thu, 16 Jan 2003 11:25:15 +0000 Subject: [PATCH] commit Leif's alsa patch, it actually makes Alsa work better Original commit message from CVS: commit Leif's alsa patch, it actually makes Alsa work better --- ext/alsa/gstalsa.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c index 701d049142..665375c890 100644 --- a/ext/alsa/gstalsa.c +++ b/ext/alsa/gstalsa.c @@ -818,6 +818,8 @@ gst_alsa_loop (GstElement *element) } do { + xrun_detected = FALSE; + if (poll (&pfd, 1, 1000) < 0) { if (errno == EINTR) { /* this happens mostly when run @@ -831,8 +833,7 @@ gst_alsa_loop (GstElement *element) } if (pfd.revents & POLLERR) { - g_warning("alsa: poll reports error."); - return; + xrun_detected = TRUE; } if (pfd.revents == 0) { @@ -843,15 +844,12 @@ gst_alsa_loop (GstElement *element) continue; } - xrun_detected = FALSE; - this->avail = snd_pcm_avail_update (this->handle); DEBUG ("snd_pcm_avail_update() = %d", (int)this->avail); if (this->avail < 0) { if (this->avail == -EPIPE) { - gst_alsa_xrun_recovery (this); - this->avail = 0; + xrun_detected = TRUE; } else { g_warning("unknown ALSA avail_update return value (%d)", (int)this->avail); @@ -859,6 +857,11 @@ gst_alsa_loop (GstElement *element) } } + if (xrun_detected) { + gst_alsa_xrun_recovery (this); + this->avail = 0; + } + /* round down to nearest period_frames avail */ this->avail -= this->avail % this->period_frames;