mirror of https://github.com/xemu-project/xemu.git
![]() 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> |
||
---|---|---|
.. | ||
alsaaudio.c | ||
audio.c | ||
audio.h | ||
audio_int.h | ||
audio_pt_int.c | ||
audio_pt_int.h | ||
audio_template.h | ||
audio_win_int.c | ||
audio_win_int.h | ||
coreaudio.c | ||
dsound_template.h | ||
dsoundaudio.c | ||
esdaudio.c | ||
fmodaudio.c | ||
mixeng.c | ||
mixeng.h | ||
mixeng_template.h | ||
noaudio.c | ||
ossaudio.c | ||
paaudio.c | ||
rate_template.h | ||
sdlaudio.c | ||
spiceaudio.c | ||
wavaudio.c | ||
wavcapture.c | ||
winwaveaudio.c |