diff options
author | Paul Gilbert | 2017-09-16 15:23:43 -0400 |
---|---|---|
committer | Paul Gilbert | 2017-09-16 15:23:43 -0400 |
commit | 3e5515cc21d8e898fd69464643255d135c5b942d (patch) | |
tree | 2f0c9351f8fdfb517d4e743d54f7d7e60f5e6aa4 /engines/titanic/sound/audio_buffer.cpp | |
parent | 09931ae0aa11aafa8ad6324a92fafd1fbcd678af (diff) | |
download | scummvm-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.cpp | 23 |
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() { |