summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audiobackend-pulse.cc8
-rw-r--r--src/audiobackend-pulse.h4
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*/