diff options
Diffstat (limited to 'sound/audiostream.cpp')
-rw-r--r-- | sound/audiostream.cpp | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/sound/audiostream.cpp b/sound/audiostream.cpp index 168ca49e2d..d8d2533bc7 100644 --- a/sound/audiostream.cpp +++ b/sound/audiostream.cpp @@ -55,7 +55,7 @@ struct StreamFileFormat { * Pointer to a function which tries to open a file of type StreamFormat. * Return NULL in case of an error (invalid/nonexisting file). */ - SeekableAudioStream *(*openStreamFile)(Common::SeekableReadStream *stream, bool disposeAfterUse); + SeekableAudioStream *(*openStreamFile)(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse); }; static const StreamFileFormat STREAM_FILEFORMATS[] = { @@ -83,7 +83,7 @@ SeekableAudioStream *SeekableAudioStream::openStreamFile(const Common::String &b fileHandle->open(filename); if (fileHandle->isOpen()) { // Create the stream object - stream = STREAM_FILEFORMATS[i].openStreamFile(fileHandle, true); + stream = STREAM_FILEFORMATS[i].openStreamFile(fileHandle, DisposeAfterUse::YES); fileHandle = 0; break; } @@ -102,12 +102,12 @@ SeekableAudioStream *SeekableAudioStream::openStreamFile(const Common::String &b #pragma mark --- LoopingAudioStream --- #pragma mark - -LoopingAudioStream::LoopingAudioStream(RewindableAudioStream *stream, uint loops, bool disposeAfterUse) +LoopingAudioStream::LoopingAudioStream(RewindableAudioStream *stream, uint loops, DisposeAfterUse::Flag disposeAfterUse) : _parent(stream), _disposeAfterUse(disposeAfterUse), _loops(loops), _completeIterations(0) { } LoopingAudioStream::~LoopingAudioStream() { - if (_disposeAfterUse) + if (_disposeAfterUse == DisposeAfterUse::YES) delete _parent; } @@ -169,7 +169,7 @@ SubLoopingAudioStream::SubLoopingAudioStream(SeekableAudioStream *stream, uint loops, const Timestamp loopStart, const Timestamp loopEnd, - bool disposeAfterUse) + DisposeAfterUse::Flag disposeAfterUse) : _parent(stream), _disposeAfterUse(disposeAfterUse), _loops(loops), _pos(0, getRate() * (isStereo() ? 2 : 1)), _loopStart(loopStart.convertToFramerate(getRate() * (isStereo() ? 2 : 1))), @@ -180,7 +180,7 @@ SubLoopingAudioStream::SubLoopingAudioStream(SeekableAudioStream *stream, } SubLoopingAudioStream::~SubLoopingAudioStream() { - if (_disposeAfterUse) + if (_disposeAfterUse == DisposeAfterUse::YES) delete _parent; } @@ -218,7 +218,7 @@ int SubLoopingAudioStream::readBuffer(int16 *buffer, const int numSamples) { #pragma mark --- SubSeekableAudioStream --- #pragma mark - -SubSeekableAudioStream::SubSeekableAudioStream(SeekableAudioStream *parent, const Timestamp start, const Timestamp end, bool disposeAfterUse) +SubSeekableAudioStream::SubSeekableAudioStream(SeekableAudioStream *parent, const Timestamp start, const Timestamp end, DisposeAfterUse::Flag disposeAfterUse) : _parent(parent), _disposeAfterUse(disposeAfterUse), _start(start.convertToFramerate(getRate())), _pos(0, getRate() * (isStereo() ? 2 : 1)), @@ -279,18 +279,18 @@ protected: const byte *_end; const int _rate; const byte *_origPtr; - const bool _disposeAfterUse; + const DisposeAfterUse::Flag _disposeAfterUse; const Timestamp _playtime; public: - LinearMemoryStream(int rate, const byte *ptr, uint len, bool autoFreeMemory) + LinearMemoryStream(int rate, const byte *ptr, uint len, DisposeAfterUse::Flag autoFreeMemory) : _ptr(ptr), _end(ptr+len), _rate(rate), _origPtr(ptr), _disposeAfterUse(autoFreeMemory), _playtime(0, len / (is16Bit ? 2 : 1) / (stereo ? 2 : 1), rate) { } virtual ~LinearMemoryStream() { - if (_disposeAfterUse) + if (_disposeAfterUse == DisposeAfterUse::YES) free(const_cast<byte *>(_origPtr)); } @@ -364,13 +364,13 @@ protected: int32 _filePos; ///< Current position in stream int32 _diskLeft; ///< Samples left in stream in current block not yet read to buffer int32 _bufferLeft; ///< Samples left in buffer in current block - bool _disposeAfterUse; ///< If true, delete stream object when LinearDiskStream is destructed + const DisposeAfterUse::Flag _disposeAfterUse; ///< Indicates whether the stream object should be deleted when this LinearDiskStream is destructed LinearDiskStreamAudioBlock *_audioBlock; ///< Audio block list - int _audioBlockCount; ///< Number of blocks in _audioBlock + const int _audioBlockCount; ///< Number of blocks in _audioBlock int _currentBlock; ///< Current audio block number public: - LinearDiskStream(int rate, bool disposeStream, Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, uint numBlocks) + LinearDiskStream(int rate, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, uint numBlocks) : _rate(rate), _playtime(0, rate), _stream(stream), _disposeAfterUse(disposeStream), _audioBlockCount(numBlocks) { @@ -407,7 +407,7 @@ public: virtual ~LinearDiskStream() { - if (_disposeAfterUse) { + if (_disposeAfterUse == DisposeAfterUse::YES) { delete _stream; } @@ -543,7 +543,7 @@ SeekableAudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate const bool is16Bit = (flags & Mixer::FLAG_16BITS) != 0; const bool isUnsigned = (flags & Mixer::FLAG_UNSIGNED) != 0; const bool isLE = (flags & Mixer::FLAG_LITTLE_ENDIAN) != 0; - const bool autoFree = (flags & Mixer::FLAG_AUTOFREE) != 0; + const DisposeAfterUse::Flag autoFree = (flags & Mixer::FLAG_AUTOFREE) != 0 ? DisposeAfterUse::YES : DisposeAfterUse::NO; // Verify the buffer sizes are sane if (is16Bit && isStereo) { @@ -605,14 +605,15 @@ AudioStream *makeLinearInputStream(const byte *ptr, uint32 len, int rate, #define MAKE_LINEAR_DISK(STEREO, UNSIGNED) \ if (is16Bit) { \ if (isLE) \ - return new LinearDiskStream<STEREO, true, UNSIGNED, true>(rate, takeOwnership, stream, block, numBlocks); \ + return new LinearDiskStream<STEREO, true, UNSIGNED, true>(rate, disposeStream, stream, block, numBlocks); \ else \ - return new LinearDiskStream<STEREO, true, UNSIGNED, false>(rate, takeOwnership, stream, block, numBlocks); \ + return new LinearDiskStream<STEREO, true, UNSIGNED, false>(rate, disposeStream, stream, block, numBlocks); \ } else \ - return new LinearDiskStream<STEREO, false, UNSIGNED, false>(rate, takeOwnership, stream, block, numBlocks) + return new LinearDiskStream<STEREO, false, UNSIGNED, false>(rate, disposeStream, stream, block, numBlocks) -SeekableAudioStream *makeLinearDiskStream(Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, int numBlocks, int rate, byte flags, bool takeOwnership) { +SeekableAudioStream *makeLinearDiskStream(Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, int numBlocks, + int rate, byte flags, DisposeAfterUse::Flag disposeStream) { const bool isStereo = (flags & Mixer::FLAG_STEREO) != 0; const bool is16Bit = (flags & Mixer::FLAG_16BITS) != 0; const bool isUnsigned = (flags & Mixer::FLAG_UNSIGNED) != 0; @@ -634,7 +635,7 @@ SeekableAudioStream *makeLinearDiskStream(Common::SeekableReadStream *stream, Li } AudioStream *makeLinearDiskStream(Common::SeekableReadStream *stream, LinearDiskStreamAudioBlock *block, - int numBlocks, int rate, byte flags, bool disposeStream, uint loopStart, uint loopEnd) { + int numBlocks, int rate, byte flags, DisposeAfterUse::Flag disposeStream, uint loopStart, uint loopEnd) { SeekableAudioStream *s = makeLinearDiskStream(stream, block, numBlocks, rate, flags, disposeStream); const bool isStereo = (flags & Mixer::FLAG_STEREO) != 0; @@ -683,8 +684,8 @@ private: */ struct StreamHolder { AudioStream *_stream; - bool _disposeAfterUse; - StreamHolder(AudioStream *stream, bool disposeAfterUse) + DisposeAfterUse::Flag _disposeAfterUse; + StreamHolder(AudioStream *stream, DisposeAfterUse::Flag disposeAfterUse) : _stream(stream), _disposeAfterUse(disposeAfterUse) {} }; @@ -731,7 +732,7 @@ public: virtual bool endOfStream() const { return _finished && _queue.empty(); } // Implement the QueuingAudioStream API - virtual void queueAudioStream(AudioStream *stream, bool disposeAfterUse); + virtual void queueAudioStream(AudioStream *stream, DisposeAfterUse::Flag disposeAfterUse); virtual void finish() { _finished = true; } uint32 numQueuedStreams() const { @@ -743,12 +744,12 @@ public: QueuingAudioStreamImpl::~QueuingAudioStreamImpl() { while (!_queue.empty()) { StreamHolder tmp = _queue.pop(); - if (tmp._disposeAfterUse) + if (tmp._disposeAfterUse == DisposeAfterUse::YES) delete tmp._stream; } } -void QueuingAudioStreamImpl::queueAudioStream(AudioStream *stream, bool disposeAfterUse) { +void QueuingAudioStreamImpl::queueAudioStream(AudioStream *stream, DisposeAfterUse::Flag disposeAfterUse) { if ((stream->getRate() != getRate()) || (stream->isStereo() != isStereo())) error("QueuingAudioStreamImpl::queueAudioStream: stream has mismatched parameters"); @@ -766,7 +767,7 @@ int QueuingAudioStreamImpl::readBuffer(int16 *buffer, const int numSamples) { if (stream->endOfData() ) { StreamHolder tmp = _queue.pop(); - if (tmp._disposeAfterUse) + if (tmp._disposeAfterUse == DisposeAfterUse::YES) delete stream; } } |