[alsa-devel] "Resource temporarily unavailable" while reading although poll returns POLLIN event

Stefan Schoenleitner dev.c0debabe at gmail.com
Mon Apr 26 10:19:36 CEST 2010


Raymond Yau wrote:
> Are you sure that you really need pulseaudio since your request latency is
> quite low ?

You mean the small period_size of 160 frames or rather the buffer size
of 2*period_size?

In fact at 8kHz sampling rate a period_size of 160 equals a full 20ms of
sound:

duration of one frame: 1000ms / 8000Hz = 0.125ms = 125 us
160 frames * 125us = 20000us = 20ms

This is by far more than a large period size holds at a higher sampling
rate (e.g. 44.1 kHz).

To the question whether pulseaudio is needed:
On the embedded target PA will not be used, but since development takes
place on a PC, I need a soundcard that supports the mentioned audio
format contraints.
And at the moment this is pulseaudio which is the reason why I really
need it for application development.


However, we should try to not drift away from the actual problem which
is that *poll() returns an event even if far less than avail_min frames
are available*.


> You have to ask PA developer whether PA support such low latecny ?
> 
> PA (tsched=0 ) configure your sound card 1792 frames per period but your
> application request for 160 frames per period
> 
> You will need the PA expert to answer how PA server capture 1792 frames from
> sound card and send it to your application
> 
> : module-alsa-source.c: Using 2 fragments of size 7168 bytes, buffer
> time is 81.27ms
> 
> D: alsa-util.c: Its setup is:
> D: alsa-util.c:   stream       : CAPTURE
> D: alsa-util.c:   access       : MMAP_INTERLEAVED
> D: alsa-util.c:   format       : S16_LE
> D: alsa-util.c:   subformat    : STD
> D: alsa-util.c:   channels     : 2
> D: alsa-util.c:   rate         : 44100
> D: alsa-util.c:   exact rate   : 44100 (44100/1)
> D: alsa-util.c:   msbits       : 16
> D: alsa-util.c:   buffer_size  : 3584
> D: alsa-util.c:   period_size  : 1792
> D: alsa-util.c:   period_time  : 40634
> D: alsa-util.c:   tstamp_mode  : ENABLE
> D: alsa-util.c:   period_step  : 1
> D: alsa-util.c:   avail_min    : 1792
> D: alsa-util.c:   period_event : 0
> D: alsa-util.c:   start_threshold  : -1
> D: alsa-util.c:   stop_threshold   : 8070450532247928832
> D: alsa-util.c:   silence_threshold: 0
> D: alsa-util.c:   silence_size : 0
> D: alsa-util.c:   boundary     : 8070450532247928832

This is how pulseaudio works *internally*.
Hence it opens my hardware sound card "hw" with the above format.
If sound it recorded/played back at a different sampling rate, PA
converts it.
If you play a prerecorded audio file that has been recorded at a
different sampling rate, you can see that behavior.

What happens is:

[sound application (e.g.. aplay)] ---(audio format of sound file)---> [
PA plugin] --> [PA daemon] ---(audio format of PA)--> [soundcard]

cheers,
stefan


More information about the Alsa-devel mailing list