aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/sound/audio_buffer.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2017-09-16 15:23:43 -0400
committerPaul Gilbert2017-09-16 15:23:43 -0400
commit3e5515cc21d8e898fd69464643255d135c5b942d (patch)
tree2f0c9351f8fdfb517d4e743d54f7d7e60f5e6aa4 /engines/titanic/sound/audio_buffer.cpp
parent09931ae0aa11aafa8ad6324a92fafd1fbcd678af (diff)
downloadscummvm-rg350-3e5515cc21d8e898fd69464643255d135c5b942d.tar.gz
scummvm-rg350-3e5515cc21d8e898fd69464643255d135c5b942d.tar.bz2
scummvm-rg350-3e5515cc21d8e898fd69464643255d135c5b942d.zip
TITANIC: Improve audio buffer critial section handling
Diffstat (limited to 'engines/titanic/sound/audio_buffer.cpp')
-rw-r--r--engines/titanic/sound/audio_buffer.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp
index 0b0b6a53ad..0e1abc4213 100644
--- a/engines/titanic/sound/audio_buffer.cpp
+++ b/engines/titanic/sound/audio_buffer.cpp
@@ -34,16 +34,37 @@ void CAudioBuffer::reset() {
}
void CAudioBuffer::push(int16 value) {
+ enterCriticalSection();
_data.push(value);
+ leaveCriticalSection();
}
void CAudioBuffer::push(const int16 *values, int count) {
+ enterCriticalSection();
+
for (; count > 0; --count, ++values)
_data.push(*values);
+
+ leaveCriticalSection();
}
int16 CAudioBuffer::pop() {
- return _data.pop();
+ enterCriticalSection();
+ int16 value = _data.pop();
+ leaveCriticalSection();
+
+ return value;
+}
+
+int CAudioBuffer::read(int16 *values, int count) {
+ enterCriticalSection();
+
+ int bytesRead = 0;
+ for (; count > 0 && !_data.empty(); --count, ++bytesRead)
+ *values++ = _data.pop();
+
+ leaveCriticalSection();
+ return bytesRead;
}
void CAudioBuffer::enterCriticalSection() {