aboutsummaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorMatthew Hoops2015-08-11 22:27:08 -0400
committerMatthew Hoops2015-08-30 19:53:54 -0400
commita64aff02878eaaeda3a014cbfc71daf760000136 (patch)
tree268abb8b501ad6e7738168bc6ecde634d04343db /audio
parentde2f4e698270937251f0655c19555fb9099df55f (diff)
downloadscummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.tar.gz
scummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.tar.bz2
scummvm-rg350-a64aff02878eaaeda3a014cbfc71daf760000136.zip
AUDIO: Add a class to easily make stateless PacketizedAudioStreams
Diffstat (limited to 'audio')
-rw-r--r--audio/audiostream.h38
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