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