Update of /cvsroot/alsa/alsa-lib/src/pcm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17894
Modified Files:
pcm_rate.c
Log Message:
- fixed problem with start_threshold
- fixed rounding problem for period_size (mmap_commit assert invoked)
Index: pcm_rate.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm_rate.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- pcm_rate.c 23 Mar 2004 14:37:34 -0000 1.82
+++ pcm_rate.c 3 Apr 2004 08:27:58 -0000 1.83
@@ -631,6 +631,12 @@
rate->orig_avail_min = sparams->avail_min;
recalc(pcm, &sparams->xfer_align);
recalc(pcm, &sparams->start_threshold);
+ if (sparams->start_threshold <= slave->buffer_size) {
+ if (sparams->start_threshold > (slave->buffer_size /
sparams->avail_min) * sparams->avail_min)
+ sparams->start_threshold = (slave->buffer_size /
sparams->avail_min) * sparams->avail_min;
+ if (sparams->start_threshold > (slave->buffer_size /
sparams->xfer_align) * sparams->xfer_align)
+ sparams->start_threshold = (slave->buffer_size /
sparams->xfer_align) * sparams->xfer_align;
+ }
if (sparams->stop_threshold >= sparams->boundary) {
sparams->stop_threshold = sparams->boundary;
} else {
@@ -1167,7 +1173,7 @@
appl_offset = (rate->appl_ptr - xfer) % pcm->buffer_size;
xfer = pcm->period_size - xfer;
if (xfer >= size) {
- if (xfer == size) {
+ if (xfer == size && (snd_pcm_uframes_t)slave_size >=
rate->slave->period_size) {
err = snd_pcm_rate_commit_next_period(pcm, appl_offset);
if (err < 0)
return err;
@@ -1179,17 +1185,20 @@
snd_atomic_write_end(&rate->watom);
return size;
} else {
- size -= xfer;
- err = snd_pcm_rate_commit_next_period(pcm, appl_offset);
- if (err < 0)
- return err;
- if (err == 0)
- return 0;
+ if ((snd_pcm_uframes_t)slave_size >= rate->slave->period_size) {
+ err = snd_pcm_rate_commit_next_period(pcm, appl_offset);
+ if (err < 0)
+ return err;
+ if (err == 0)
+ return 0;
+ }
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;
+ size -= xfer;
+ slave_size -= rate->slave->period_size;
}
while ((snd_pcm_uframes_t)size >= pcm->period_size &&
(snd_pcm_uframes_t)slave_size >= rate->slave->period_size) {
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog