aboutsummaryrefslogtreecommitdiff
path: root/audio/decoders
diff options
context:
space:
mode:
authorMatthew Hoops2015-08-11 22:34:10 -0400
committerMatthew Hoops2015-08-30 19:53:54 -0400
commit331d8ece21948bb07f43be512ab686bb41cf01fa (patch)
tree4ce872070e6160576f4c9de6ab22c5e1b52d97be /audio/decoders
parent3aa9e2c5816aad20aa18e04d3a6644a8f79a4e29 (diff)
downloadscummvm-rg350-331d8ece21948bb07f43be512ab686bb41cf01fa.tar.gz
scummvm-rg350-331d8ece21948bb07f43be512ab686bb41cf01fa.tar.bz2
scummvm-rg350-331d8ece21948bb07f43be512ab686bb41cf01fa.zip
AUDIO: Add a packetized version of ADPCM streams
Diffstat (limited to 'audio/decoders')
-rw-r--r--audio/decoders/adpcm.cpp30
-rw-r--r--audio/decoders/adpcm.h21
2 files changed, 51 insertions, 0 deletions
diff --git a/audio/decoders/adpcm.cpp b/audio/decoders/adpcm.cpp
index 2f710f759d..fe5eec5dcc 100644
--- a/audio/decoders/adpcm.cpp
+++ b/audio/decoders/adpcm.cpp
@@ -457,4 +457,34 @@ RewindableAudioStream *makeADPCMStream(Common::SeekableReadStream *stream, Dispo
}
}
+class PacketizedADPCMStream : public StatelessPacketizedAudioStream {
+public:
+ PacketizedADPCMStream(ADPCMType type, int rate, int channels, uint32 blockAlign) :
+ StatelessPacketizedAudioStream(rate, channels), _type(type), _blockAlign(blockAlign) {}
+
+protected:
+ AudioStream *makeStream(Common::SeekableReadStream *data);
+
+private:
+ ADPCMType _type;
+ uint32 _blockAlign;
+};
+
+AudioStream *PacketizedADPCMStream::makeStream(Common::SeekableReadStream *data) {
+ return makeADPCMStream(data, DisposeAfterUse::YES, data->size(), _type, getRate(), getChannels(), _blockAlign);
+}
+
+PacketizedAudioStream *makePacketizedADPCMStream(ADPCMType type, int rate, int channels, uint32 blockAlign) {
+ // Filter out types we can't support (they're not fully stateless)
+ switch (type) {
+ case kADPCMOki:
+ case kADPCMDVI:
+ return 0;
+ default:
+ break;
+ }
+
+ return new PacketizedADPCMStream(type, rate, channels, blockAlign);
+}
+
} // End of namespace Audio
diff --git a/audio/decoders/adpcm.h b/audio/decoders/adpcm.h
index bf6e7f759d..650bc341b3 100644
--- a/audio/decoders/adpcm.h
+++ b/audio/decoders/adpcm.h
@@ -44,6 +44,7 @@ class SeekableReadStream;
namespace Audio {
+class PacketizedAudioStream;
class RewindableAudioStream;
// There are several types of ADPCM encoding, only some are supported here
@@ -81,6 +82,26 @@ RewindableAudioStream *makeADPCMStream(
int channels,
uint32 blockAlign = 0);
+/**
+ * Creates a PacketizedAudioStream that will automatically queue
+ * packets as individual AudioStreams like returned by makeADPCMStream.
+ *
+ * Due to the ADPCM types not necessarily supporting stateless
+ * streaming, OKI and DVI are not supported by this function
+ * and will return NULL.
+ *
+ * @param type the compression type used
+ * @param rate the sampling rate
+ * @param channels the number of channels
+ * @param blockAlign block alignment ???
+ * @return The new PacketizedAudioStream or NULL, if the type isn't supported.
+ */
+PacketizedAudioStream *makePacketizedADPCMStream(
+ ADPCMType type,
+ int rate,
+ int channels,
+ uint32 blockAlign = 0);
+
} // End of namespace Audio
#endif