summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 12:15:31 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 12:15:31 +0200
commit8cf2226b05197a3003328c2cc960830bf4bc5f7a (patch)
tree90b21d8b256e78416021966da2d75c5e9e2ef39f
parent3a67d7b08da3d2d5333ac7b5a23fa2d9f303ee32 (diff)
Free resources in soundplayer
-rw-r--r--src/soundplayer.cc20
-rw-r--r--src/soundplayer.h3
2 files changed, 15 insertions, 8 deletions
diff --git a/src/soundplayer.cc b/src/soundplayer.cc
index 6aea2bf..9802d1b 100644
--- a/src/soundplayer.cc
+++ b/src/soundplayer.cc
@@ -33,6 +33,7 @@
#define BUFSZ 512
SoundPlayer::SoundPlayer()
+ : sem_write(1)
{
start();
}
@@ -63,7 +64,7 @@ void SoundPlayer::run()
short s[BUFSZ];
while(running) {
- sem.acquire();
+ sem_read.acquire();
char *pcm;
size_t size;
@@ -74,11 +75,13 @@ void SoundPlayer::run()
size = qi.size;
}
+ sem_write.release();
+
printf("."); fflush(stdout);
ao_play(dev, pcm, size);
- //free(pcm);
+ free(pcm);
/*
memset(s, 0, BUFSZ * sizeof(short));
@@ -113,11 +116,14 @@ void SoundPlayer::run()
void SoundPlayer::playSamples(const char *pcm, size_t size)
{
- QMutexLocker lock(&mutex);
+ sem_write.acquire();
- qi.pcm = (char*)malloc(size);
- memcpy(qi.pcm, pcm, size);
- qi.size = size;
+ {
+ QMutexLocker lock(&mutex);
+ qi.pcm = (char*)malloc(size);
+ memcpy(qi.pcm, pcm, size);
+ qi.size = size;
+ }
- sem.release();
+ sem_read.release();
}
diff --git a/src/soundplayer.h b/src/soundplayer.h
index 28c0cf8..9a1e811 100644
--- a/src/soundplayer.h
+++ b/src/soundplayer.h
@@ -54,7 +54,8 @@ public:
private:
volatile bool running;
QMutex mutex;
- QSemaphore sem;
+ QSemaphore sem_read;
+ QSemaphore sem_write;
QueueItem qi;