[pulseaudio-discuss] Polling problem with a PCM device

Loris lb at 2m.dk
Mon Dec 8 01:21:36 PST 2008


I would like to use pulseaudio on a PCM device (no ALSA, no OSS). For this, I 
made some modifications to module-pipe-sink so that it writes to the PCM 
device instead of the FIFO. (below is a minimal patch that shows how I did it 
(I am working on the 0.9.10 version)):

The problem is in the thread_func main loop (line 137):
if (u->sink->thread_info.state == PA_SINK_RUNNING && pollfd->revents) {

pollfd->revents is never set, so nothing is ever written to the device. I will 
get sound if I void the check:
if (u->sink->thread_info.state == PA_SINK_RUNNING) {

But then of course I get a very high CPU usage.

I get a similar behaviour if I use module-oss.c as a basis for the 

I added some debug info to rtpoll.c and it seems that inside pa_rtpoll_run 
events are always set to POLLIN, even though it is explitly set to POLLOUT 

Anyhow, I am not sure of what exactly the problem is and running out of ideas 
on what to try.

Does anyone have an idea ?




$ diff module-pipe-sink.c module-pcm-sink.c
< #define DEFAULT_FILE_NAME "/tmp/music.output"
> #define DEFAULT_FILE_NAME "/dev/aud_pcm"
<     mkfifo(u->filename, 0666);
<     if ((u->fd = open(u->filename, O_RDWR|O_NOCTTY)) < 0) {
>     if ((u->fd = open(u->filename, O_WRONLY|O_NOCTTY)) < 0) {
<     if (!S_ISFIFO(st.st_mode)) {
<         pa_log("'%s' is not a FIFO.", u->filename);
<         goto fail;
<     }
<     if (u->filename) {
<         unlink(u->filename);
<         pa_xfree(u->filename);
<     }

More information about the pulseaudio-discuss mailing list