pulseaudio: process 1/4 buffer max at once
authorGerd Hoffmann <kraxel@redhat.com>
Mon, 24 Jan 2011 21:07:44 +0000 (22:07 +0100)
committermalc <av1474@comtv.ru>
Tue, 25 Jan 2011 16:56:35 +0000 (19:56 +0300)
commit6315633b2535dc82dc1b3403f884b81e26b4c72c
treebf7f0f863058829cc9f973d29cca2efa37adf7b9
parentd00b261816872d3e48adca584fca80ca21985f3b
pulseaudio: process 1/4 buffer max at once

Limit the size of data pieces processed by the pulseaudio worker
threads.  Never ever process more than 1/4 of the buffer at once.

Background: The buffer area currently processed by the pulseaudio thread
is blocked, i.e. the main thread (or iothread) can't fill in more data
there.  The buffer processing time is roughly real-time due to the
pa_simple_write() call blocking when the output queue to the pulse
server is full.  Thus processing big chunks at once means blocking
a large part of the buffer for a long time.  This brings high latency
and can lead to dropouts.

When processing the buffer in smaller chunks the rpos handling becomes a
problem though.  The thread reads hw->rpos without knowing whenever
qpa_run_out has already seen the last (small) chunk processed and
updated rpos accordingly.  There is no point in reading hw->rpos though,
pa->rpos can be used instead.  We just need to take care to initialize
pa->rpos before kicking the thread.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: malc <av1474@comtv.ru>
audio/paaudio.c