Update of /cvsroot/alsa/alsa-lib/src/pcm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23631/pcm

Modified Files:
        pcm_rate.c 
Log Message:
Fixed stupid bug in rate plugin: appl|hw_offset variables were not updated

Index: pcm_rate.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_rate.c,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- pcm_rate.c  7 Feb 2004 15:01:31 -0000       1.79
+++ pcm_rate.c  8 Feb 2004 14:18:06 -0000       1.80
@@ -944,14 +944,14 @@
                        return 0;
                }
        } else {
-               snd_pcm_areas_copy(rate->pareas, cont,
-                                  areas, 0,
-                                  pcm->channels, pcm->period_size - cont,
-                                  pcm->format);
                snd_pcm_areas_copy(rate->pareas, 0,
                                   areas, appl_offset,
                                   pcm->channels, cont,
                                   pcm->format);
+               snd_pcm_areas_copy(rate->pareas, cont,
+                                  areas, 0,
+                                  pcm->channels, pcm->period_size - cont,
+                                  pcm->format);
 
                snd_pcm_rate_write_areas1(pcm, rate->pareas, 0, rate->sareas, 0);
 
@@ -1060,6 +1060,9 @@
                }
                xfer = cont;
 
+               if (xfer == rate->slave->period_size)
+                       goto __transfer;
+
                /* grab second fragment */
                cont = rate->slave->period_size - cont;
                slave_frames = cont;
@@ -1081,6 +1084,7 @@
                        return 0;
                }
 
+             __transfer:
                cont = pcm->buffer_size - hw_offset;
                if (cont >= pcm->period_size) {
                        snd_pcm_rate_read_areas1(pcm, areas, hw_offset,
@@ -1148,6 +1152,8 @@
                snd_atomic_write_begin(&rate->watom);
                snd_pcm_mmap_appl_forward(pcm, xfer);
                snd_atomic_write_end(&rate->watom);
+               appl_offset += pcm->period_size;
+               appl_offset %= pcm->buffer_size;
        }
        while ((snd_pcm_uframes_t)size >= pcm->period_size &&
               (snd_pcm_uframes_t)slave_size >= rate->slave->period_size) {
@@ -1159,6 +1165,8 @@
                xfer += pcm->period_size;
                size -= pcm->period_size;
                slave_size -= rate->slave->period_size;
+               appl_offset += pcm->period_size;
+               appl_offset %= pcm->buffer_size;
                snd_atomic_write_begin(&rate->watom);
                snd_pcm_mmap_appl_forward(pcm, pcm->period_size);
                snd_atomic_write_end(&rate->watom);
@@ -1202,6 +1210,8 @@
                xfer += pcm->period_size;
                size -= pcm->period_size;
                slave_size -= rate->slave->period_size;
+               hw_offset += pcm->period_size;
+               hw_offset %= pcm->buffer_size;
                snd_pcm_mmap_hw_forward(pcm, pcm->period_size);
        }
        return (snd_pcm_sframes_t)xfer;



-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to