]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fixed residual transfers
authorAbramo Bagnara <abramo@alsa-project.org>
Tue, 26 Dec 2000 09:30:48 +0000 (09:30 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Tue, 26 Dec 2000 09:30:48 +0000 (09:30 +0000)
src/pcm/pcm_rate.c

index 2e091416681768a3d1fc3b8df410ed3174067168..e82ee1ad52aaefc3d4378bbae2f61774daf2ff65 100644 (file)
@@ -418,14 +418,20 @@ static ssize_t snd_pcm_rate_write_areas(snd_pcm_t *pcm,
                                        pcm->channels,
                                        rate->get_idx, rate->put_idx,
                                        rate->pitch, rate->states);
-               err = snd_pcm_mmap_forward(slave, dst_frames);
-               if (err < 0)
-                       break;
-               assert((size_t)err == dst_frames);
-               client_offset += src_frames;
-               client_xfer += src_frames;
-               snd_pcm_mmap_hw_forward(pcm, src_frames);
-               slave_xfer += dst_frames;
+               assert(src_frames || dst_frames);
+               if (dst_frames > 0) {
+                       err = snd_pcm_mmap_forward(slave, dst_frames);
+                       if (err < 0)
+                               break;
+                       assert((size_t)err == dst_frames);
+                       slave_xfer += dst_frames;
+               }
+
+               if (src_frames > 0) {
+                       client_offset += src_frames;
+                       client_xfer += src_frames;
+                       snd_pcm_mmap_hw_forward(pcm, src_frames);
+               }
        }
        if (client_xfer > 0 || slave_xfer > 0) {
                if (slave_sizep)
@@ -464,14 +470,19 @@ static ssize_t snd_pcm_rate_read_areas(snd_pcm_t *pcm,
                                        pcm->channels,
                                        rate->get_idx, rate->put_idx,
                                        rate->pitch, rate->states);
-               err = snd_pcm_mmap_forward(slave, src_frames);
-               if (err < 0)
-                       break;
-               assert((size_t)err == src_frames);
-               client_offset += dst_frames;
-               client_xfer += dst_frames;
-               snd_pcm_mmap_hw_forward(pcm, dst_frames);
-               slave_xfer += src_frames;
+               assert(src_frames || dst_frames);
+               if (src_frames > 0) {
+                       err = snd_pcm_mmap_forward(slave, src_frames);
+                       if (err < 0)
+                               break;
+                       assert((size_t)err == src_frames);
+                       slave_xfer += src_frames;
+               }
+               if (dst_frames > 0) {
+                       client_offset += dst_frames;
+                       client_xfer += dst_frames;
+                       snd_pcm_mmap_hw_forward(pcm, dst_frames);
+               }
        }
        if (client_xfer > 0 || slave_xfer > 0) {
                if (slave_sizep)