From a64aff02878eaaeda3a014cbfc71daf760000136 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 11 Aug 2015 22:27:08 -0400 Subject: AUDIO: Add a class to easily make stateless PacketizedAudioStreams --- audio/audiostream.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'audio') 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 _stream; +}; + } // End of namespace Audio #endif -- cgit v1.2.3