summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander E. Patrakov <patrakov@gmail.com>2014-09-14 00:30:18 +0600
committerJaroslav Kysela <perex@perex.cz>2014-09-13 21:05:04 +0200
commitff9d213ff80f6fe0456565d4f524366443217174 (patch)
treef501f41f2f0ae03de9ac173860dabc8d08136a42
parent4fafa468d4bb4618cfde7183f820d8fdd373dcb1 (diff)
downloadalsa-lib-ff9d213ff80f6fe0456565d4f524366443217174.tar.gz
rate: handle negative values from snd_pcm_mmap_playback_hw_avail
Such negative returns are possible during an underrun if xrun detection is disabled. So, don't store the result in an unsigned variable (where it will overflow), and postpone the trigger in such case, too. Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--src/pcm/pcm_rate.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
index b436a8ea..736d5583 100644
--- a/src/pcm/pcm_rate.c
+++ b/src/pcm/pcm_rate.c
@@ -1058,7 +1058,7 @@ static snd_pcm_state_t snd_pcm_rate_state(snd_pcm_t *pcm)
static int snd_pcm_rate_start(snd_pcm_t *pcm)
{
snd_pcm_rate_t *rate = pcm->private_data;
- snd_pcm_uframes_t avail;
+ snd_pcm_sframes_t avail;
if (pcm->stream == SND_PCM_STREAM_CAPTURE)
return snd_pcm_start(rate->gen.slave);
@@ -1069,7 +1069,7 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm)
gettimestamp(&rate->trigger_tstamp, pcm->tstamp_type);
avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave);
- if (avail == 0) {
+ if (avail <= 0) {
/* postpone the trigger since we have no data committed yet */
rate->start_pending = 1;
return 0;