aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/sound/audio_buffer.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2017-02-12 08:05:33 -0500
committerPaul Gilbert2017-02-12 08:05:33 -0500
commit0e2c667fa86dceef5ec263949e5464d12cf6c4ec (patch)
treeba26c2ccc740ff4dc13c05f74d72d038c18a4e29 /engines/titanic/sound/audio_buffer.cpp
parentd4a718bf8407e92b3866343a12035891d92d78b8 (diff)
downloadscummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.gz
scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.tar.bz2
scummvm-rg350-0e2c667fa86dceef5ec263949e5464d12cf6c4ec.zip
TITANIC: Simplify implementation of CAudioBuffer
Diffstat (limited to 'engines/titanic/sound/audio_buffer.cpp')
-rw-r--r--engines/titanic/sound/audio_buffer.cpp61
1 files changed, 24 insertions, 37 deletions
diff --git a/engines/titanic/sound/audio_buffer.cpp b/engines/titanic/sound/audio_buffer.cpp
index 029e7f0d9c..1f0693181a 100644
--- a/engines/titanic/sound/audio_buffer.cpp
+++ b/engines/titanic/sound/audio_buffer.cpp
@@ -21,62 +21,49 @@
*/
#include "titanic/sound/audio_buffer.h"
+#include "common/algorithm.h"
namespace Titanic {
-CAudioBuffer::CAudioBuffer(int bufferSize) : _flag(true), _disabled(false) {
- _buffer.resize(bufferSize);
- reset();
-}
-
-CAudioBuffer::~CAudioBuffer() {
- _buffer.clear();
+CAudioBuffer::CAudioBuffer(int maxSize) : _finished(false) {
+ _data.resize(maxSize);
}
void CAudioBuffer::reset() {
- _flag = true;
- _readBytesLeft = _writeBytesLeft = _buffer.size() / 2;
+ _frontP = _backP = &_data[0];
}
-byte *CAudioBuffer::getBegin() {
- return _flag ? &_buffer[_buffer.size() / 2] : &_buffer[0];
-}
+void CAudioBuffer::push(int16 value) {
+ assert(!full());
+ compact();
-byte *CAudioBuffer::getEnd() {
- return _flag ? &_buffer[0] : &_buffer[_buffer.size() / 2];
+ *_backP++ = value;
}
-int16 *CAudioBuffer::getReadPtr() {
- byte *ptr = getBegin();
- return (int16 *)(ptr + (_buffer.size() / 2 - _readBytesLeft));
-}
+void CAudioBuffer::push(int16 *values, int count) {
+ compact();
+ assert(freeSize() >= count);
-int16 *CAudioBuffer::getWritePtr() {
- byte *ptr = getEnd();
- return (int16 *)(ptr + (_buffer.size() / 2 - _writeBytesLeft));
+ Common::copy(values, values + count, _backP);
+ _backP += count;
}
-void CAudioBuffer::advanceRead(int size) {
- _readBytesLeft -= size;
- if (_readBytesLeft < 0) {
- _readBytesLeft = 0;
- } else if (size && !_writeBytesLeft) {
- reverse();
- }
+int16 CAudioBuffer::pop() {
+ assert(!empty());
+ return *_frontP++;
}
-void CAudioBuffer::advanceWrite(int size) {
- _writeBytesLeft -= size;
- if (_writeBytesLeft < 0) {
- _writeBytesLeft = 0;
- } else if (size && !_readBytesLeft) {
- reverse();
+void CAudioBuffer::compact() {
+ if (_frontP != &_data[0]) {
+ Common::copy(_frontP, _backP, &_data[0]);
+ _backP -= _frontP - &_data[0];
+ _frontP = &_data[0];
}
}
-void CAudioBuffer::reverse() {
- _flag = !_flag;
- _readBytesLeft = _writeBytesLeft = _buffer.size() / 2;
+int CAudioBuffer::freeSize() {
+ compact();
+ return &_data[0] + _data.size() - _backP;
}
void CAudioBuffer::enterCriticalSection() {