At Wed, 11 Nov 2009 17:50:12 +0100, Mads Kiilerich wrote: > > > Returns: a positive number of frames actually written otherwise a negative error code > > ... > > Return values: > > ... > > -EPIPE an underrun occurred > > ... > > The count of bytes can be less only if a signal or underrun occurred. > > So what is returned in case of underrun? Error code or count of bytes? First it returns the actually written frames, then -EPIPE. But, it might return -EPIPE first, depending on the plugin, I guess. > Should snd_pcm_recover always be used to get the byte count after > -EPIPE? snd_pcm_recover is neither mentioned in the link above nor in > http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html , so I don't feel > confident about that. Yes, snd_pcm_recover() is *recommended*. You can write the recovery routine by yourself. The function isn't referred here just because it's relatively new. Better to be documented, indeed. > And is it measured in "positive number of frames actually written" or > "count of bytes"? Frames. Should be corrected. For both fixes, a patch from contributors is always welcome ;) > It surprises me that snd_pcm_writei shows non-blocking behaviour in case > of underruns and don't use all the offered data. I would guess that it > either blocked and enjoyed the data it finally got, or that it gave an > error and didn't take any data at all. But if this is how it is, then > ... that is how it is ;-) It's because the XRUN isn't recovered automatically but the operation stops. It's analogous to a disk-full error. thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel