]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fixed longstanding avail compute bug. Cosmetic fixes
authorAbramo Bagnara <abramo@alsa-project.org>
Wed, 14 Feb 2001 09:36:00 +0000 (09:36 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Wed, 14 Feb 2001 09:36:00 +0000 (09:36 +0000)
src/pcm/pcm_hw.c
src/pcm/pcm_local.h

index 1720aaaad61e5387646af860e3af5dc893da5c5e..d38e53b108d98bbb20234a524bf44cd84af699ce 100644 (file)
@@ -496,9 +496,10 @@ static void snd_pcm_hw_dump(snd_pcm_t *pcm, snd_output_t *out)
 {
        snd_pcm_hw_t *hw = pcm->private_data;
        char *name = "Unknown";
-       snd_card_get_name(hw->card, &name);
+       int err = snd_card_get_name(hw->card, &name);
+       assert(err >= 0);
        snd_output_printf(out, "Hardware PCM card %d '%s' device %d subdevice %d\n",
-               hw->card, name, hw->device, hw->subdevice);
+                         hw->card, name, hw->device, hw->subdevice);
        free(name);
        if (pcm->setup) {
                snd_output_printf(out, "\nIts setup is:\n");
index ec2ecd5fb28d29b7358813d80f28b891a8b78f31..0bcd15b1e91589d2f8d60f4696d1109d3b366977 100644 (file)
@@ -208,7 +208,9 @@ static inline snd_pcm_uframes_t snd_pcm_mmap_playback_avail(snd_pcm_t *pcm)
 {
        snd_pcm_sframes_t avail;
        avail = *pcm->hw_ptr + pcm->buffer_size - *pcm->appl_ptr;
-       if (avail < 0)
+       if (avail >= pcm->boundary)
+               avail -= pcm->boundary;
+       else if (avail < 0)
                avail += pcm->boundary;
        return avail;
 }
@@ -226,8 +228,11 @@ static inline snd_pcm_uframes_t snd_pcm_mmap_avail(snd_pcm_t *pcm)
 {
        snd_pcm_sframes_t avail;
        avail = *pcm->hw_ptr - *pcm->appl_ptr;
-       if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
+       if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
                avail += pcm->buffer_size;
+               if (avail >= pcm->boundary)
+                       avail -= pcm->boundary;
+       }
        if (avail < 0)
                avail += pcm->boundary;
        return avail;