diff options
author | Matthew Hoops | 2015-08-11 22:27:08 -0400 |
---|---|---|
committer | Matthew Hoops | 2015-08-30 19:53:54 -0400 |
commit | a64aff02878eaaeda3a014cbfc71daf760000136 (patch) | |
tree | 268abb8b501ad6e7738168bc6ecde634d04343db | |
parent | de2f4e698270937251f0655c19555fb9099df55f (diff) | |
download | scummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.tar.gz scummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.tar.bz2 scummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.zip |
AUDIO: Add a class to easily make stateless PacketizedAudioStreams
-rw-r--r-- | audio/audiostream.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/audio/audiostream.h b/audio/audiostream.h index c3dbdcf736..6019acaf5a 100644 --- a/audio/audiostream.h +++ b/audio/audiostream.h @@ -395,6 +395,44 @@ public: virtual void finish() = 0; }; +/** + * A PacketizedAudioStream that works closer to a QueuingAudioStream. + * It queues individual packets as whole AudioStream to an internal + * QueuingAudioStream. This is used for writing quick wrappers against + * e.g. RawStream, which can be made into PacketizedAudioStreams with + * little effort. + */ +class StatelessPacketizedAudioStream : public PacketizedAudioStream { +public: + StatelessPacketizedAudioStream(uint rate, uint channels) : + _rate(rate), _channels(channels), _stream(makeQueuingAudioStream(rate, channels == 2)) {} + virtual ~StatelessPacketizedAudioStream() {} + + // AudioStream API + bool isStereo() const { return _channels == 2; } + int getRate() const { return _rate; } + int readBuffer(int16 *data, const int numSamples) { return _stream->readBuffer(data, numSamples); } + bool endOfData() const { return _stream->endOfData(); } + bool endOfStream() const { return _stream->endOfStream(); } + + // PacketizedAudioStream API + void queuePacket(Common::SeekableReadStream *data) { _stream->queueAudioStream(makeStream(data)); } + void finish() { _stream->finish(); } + + uint getChannels() const { return _channels; } + +protected: + /** + * Make the AudioStream for a given packet + */ + virtual AudioStream *makeStream(Common::SeekableReadStream *data) = 0; + +private: + uint _rate; + uint _channels; + Common::ScopedPtr<QueuingAudioStream> _stream; +}; + } // End of namespace Audio #endif |