diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-10-02 07:21:47 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2014-10-02 07:21:47 +0200 |
commit | eb429ea24a415f25d9a9227b75e1a2c30c02cd70 (patch) | |
tree | d15493374e2fc91a5c5ab0b6c7baffbe9d22f709 | |
parent | ac1ad643ee592ee7ca847e9eb2cc692d91c90a82 (diff) |
Pulse audio read ring buffer overflow fix.
-rw-r--r-- | src/audiobackend-pulse.cc | 8 | ||||
-rw-r--r-- | src/audiobackend-pulse.h | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/audiobackend-pulse.cc b/src/audiobackend-pulse.cc index 3b39d22..226ab35 100644 --- a/src/audiobackend-pulse.cc +++ b/src/audiobackend-pulse.cc @@ -54,6 +54,9 @@ AudioBackendPulse::AudioBackendPulse(const char *device) memset(read_buffer, 0, sizeof(read_buffer)); + pread = 0; + pwrite = 0; + running = true; start(); } @@ -94,6 +97,11 @@ void AudioBackendPulse::run() int AudioBackendPulse::read(char *pcm, size_t maxsize) { + // Wait until enough audio data has been read by the thread. + while((pread + maxsize) < pwrite) { + usleep(1000); + } + for(int i = 0; i < maxsize; i++) { pcm[i] = read_buffer[pread % sizeof(read_buffer)]; pread++; diff --git a/src/audiobackend-pulse.h b/src/audiobackend-pulse.h index 36f2eb8..b375a4f 100644 --- a/src/audiobackend-pulse.h +++ b/src/audiobackend-pulse.h @@ -51,8 +51,8 @@ private: volatile bool running; char read_buffer[4096]; - int pread; - int pwrite; + volatile unsigned int pread; + volatile unsigned int pwrite; }; #endif/*WITH_PULSE*/ |