[Scummvm-git-logs] scummvm master -> 3e5515cc21d8e898fd69464643255d135c5b942d
dreammaster
dreammaster at scummvm.org
Sat Sep 16 21:23:52 CEST 2017
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
3e5515cc21 TITANIC: Improve audio buffer critial section handling
Commit: 3e5515cc21d8e898fd69464643255d135c5b942d
https://github.com/scummvm/scummvm/commit/3e5515cc21d8e898fd69464643255d135c5b942d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-09-16T15:23:43-04:00
Commit Message:
TITANIC: Improve audio buffer critial section handling
Changed paths:
engines/titanic/sound/audio_buffer.cpp
engines/titanic/sound/audio_buffer.h
engines/titanic/sound/music_room_handler.cpp
engines/titanic/sound/wave_file.cpp
diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp
index 0b0b6a5..0e1abc4 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() {
diff --git a/engines/titanic/sound/audio_buffer.h b/engines/titanic/sound/audio_buffer.h
index ad8c3e4..c775c5b 100644
--- a/engines/titanic/sound/audio_buffer.h
+++ b/engines/titanic/sound/audio_buffer.h
@@ -34,6 +34,16 @@ class CAudioBuffer {
private:
Common::Mutex _mutex;
FixedQueue<int16, AUDIO_SAMPLING_RATE * 4> _data;
+private:
+ /**
+ * Enters a critical section
+ */
+ void enterCriticalSection();
+
+ /**
+ * Leave a critical section
+ */
+ void leaveCriticalSection();
public:
bool _finished;
public:
@@ -80,14 +90,9 @@ public:
int16 pop();
/**
- * Enters a critical section
- */
- void enterCriticalSection();
-
- /**
- * Leave a critical section
+ * Reads out a specified number of samples
*/
- void leaveCriticalSection();
+ int read(int16 *values, int count);
};
} // End of namespace Titanic
diff --git a/engines/titanic/sound/music_room_handler.cpp b/engines/titanic/sound/music_room_handler.cpp
index dbbe4e4..ffc90ff 100644
--- a/engines/titanic/sound/music_room_handler.cpp
+++ b/engines/titanic/sound/music_room_handler.cpp
@@ -202,8 +202,6 @@ bool CMusicRoomHandler::update() {
}
void CMusicRoomHandler::updateAudio() {
- _audioBuffer->enterCriticalSection();
-
int size = _audioBuffer->freeSize();
int count;
int16 *ptr;
@@ -234,8 +232,6 @@ void CMusicRoomHandler::updateAudio() {
_audioBuffer->push(audioData, size);
delete[] audioData;
}
-
- _audioBuffer->leaveCriticalSection();
}
void CMusicRoomHandler::updateInstruments() {
diff --git a/engines/titanic/sound/wave_file.cpp b/engines/titanic/sound/wave_file.cpp
index e57e9f0..ba89508 100644
--- a/engines/titanic/sound/wave_file.cpp
+++ b/engines/titanic/sound/wave_file.cpp
@@ -48,14 +48,7 @@ public:
};
int AudioBufferStream::readBuffer(int16 *buffer, const int numSamples) {
- _audioBuffer->enterCriticalSection();
- int samplesToRead = MIN((const int)numSamples, (const int)_audioBuffer->size());
-
- for (int idx = 0; idx < samplesToRead; ++idx)
- *buffer++ = _audioBuffer->pop();
-
- _audioBuffer->leaveCriticalSection();
- return samplesToRead;
+ return _audioBuffer->read(buffer, numSamples);
}
bool AudioBufferStream::endOfData() const {
More information about the Scummvm-git-logs
mailing list