Paul Davis wrote:
>
> solved. it turned out that "trusting" the driver was key:
>
> >> if (snd_pcm_avail_update(pcm) < period_size)
> >> break;
> >> count = period_size;
>
> this was the key point. sometimes when we returned from poll(2),
> snd_pcm_avail_update() would indicate period_size+1 frames
> available. needless to say, using the value causes things to get wacky
> pretty quickly.
>
> the code above is not quite right, but its close.
>
> count = (avail / period_size) * period_size;
count = avail - avail % period_size;
is more efficient (at least on i386 and gcc).
>
> since its possible to have been delayed in scheduling and there may in
> fact be N periods waiting. this is more efficient than going back into
> poll after handling 1 period.
>
> thanks very much for pointing me in the right direction. this is
> great. for those not on jack-devel, we now have an N-channel capture
> client (it records from any set of JACK ports) plus alsaplayer working
> via JACK now.
--
Abramo Bagnara mailto:[EMAIL PROTECTED]
Opera Unica Phone: +39.546.656023
Via Emilia Interna, 140
48014 Castel Bolognese (RA) - Italy
ALSA project http://www.alsa-project.org
It sounds good!
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel