On Wed, 28 Nov 2001, Jaroslav Kysela wrote:
> On Tue, 27 Nov 2001, Paul Davis wrote:
>
> > enclosed below what happens when using ALSA, mmap mode and poll(2) on my
> > trident card at 44100. the value of contiguous is the value returned
> > by snd_pcm_mmap_begin() having been passed a value of 2048 as the
> > "upper limit". the period size is 2048 frames, the buffer size is 2 *
> > period size. the figures shown are for the capture stream; both
> > capture and playback are open at the same time and are both in active use.
> >
> > needless to say, this is basically unworkable as is. any suggestions
> > as to why this happening? it happens much, much less frequently at
> > 48kHz, and almost never on the Hammerfall. i tried it on the
> > (admittedly known to be broken) tropez+ and it crashed my machine :)
> >
> > is this an application design problem, or an alsa low level driver
> > implementation problem (i.e. with the hw pointer routines?)
>
> Can you send me output from 'snd_pcm_dump()', too? It might be caused by
> a wrong sw_params settings.
I looked to this problem. The default sw_params should be ok - they set
avail_min and xfer_align to period_size. The question is, if the direct
access function - snd_pcm_mmap_begin - should take care about these
values. Also, it would be problematic to include the test for
non-continous transfers. The right loop, based on the period_size
transfers, should be like this:
poll();
if ((pfd->revents & POLLIN) {
while (1) {
if (snd_pcm_avail_update(pcm) < period_size)
break;
count = period_size;
// transfer whole period (can be composed from more
// non-continuous parts)
while (avail > 0) {
frames = count;
snd_pcm_mmap_begin(pcm, areas, &offset, &frames);
....
snd_pcm_mmap_commit(pcm, offset, frames);
count -= frames;
}
}
}
Jaroslav
-----
Jaroslav Kysela <[EMAIL PROTECTED]>
SuSE Linux http://www.suse.com
ALSA Project http://www.alsa-project.org
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel