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