aboutsummaryrefslogtreecommitdiff
path: root/audio/decoders/aiff.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2015-06-06 22:50:36 +0200
committerMartin Kiewitz2015-06-06 22:50:36 +0200
commit97813f89ecd2a06c74f776708a3d1852c96811a7 (patch)
tree8a9d4bc96dcad8b2cc87bb116199cbdd1465f337 /audio/decoders/aiff.cpp
parent2ac05321aab74a4fced53f402f1b0cd16a33cc23 (diff)
downloadscummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.tar.gz
scummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.tar.bz2
scummvm-rg350-97813f89ecd2a06c74f776708a3d1852c96811a7.zip
SHERLOCK: rework 3DO audio, add AIFC file support
- rework 3DO audio decoders to decode into buffer only - 3DO audio decoders also use streams without separate size arg now - add support for ADP4 + SDX2 inside AIFC files - add debug command "3do_playaudio" to play AIFC files - remove audio flags and replace with stereo bool
Diffstat (limited to 'audio/decoders/aiff.cpp')
-rw-r--r--audio/decoders/aiff.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp
index 1fc811973f..3a5849f6fd 100644
--- a/audio/decoders/aiff.cpp
+++ b/audio/decoders/aiff.cpp
@@ -35,6 +35,7 @@
#include "audio/decoders/aiff.h"
#include "audio/decoders/raw.h"
+#include "audio/decoders/3do.h"
namespace Audio {
@@ -70,7 +71,13 @@ static const uint32 kVersionAIFC = MKTAG('A', 'I', 'F', 'C');
// Codecs
static const uint32 kCodecPCM = MKTAG('N', 'O', 'N', 'E'); // very original
-SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) {
+// temporary Wrapper
+// TODO: adjust all calling code to use makeAIFFAudioStream() and dynamic_cast
+SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) {
+ return dynamic_cast<Audio::SeekableAudioStream *>(makeAIFFAudioStream(stream, disposeAfterUse));
+}
+
+AudioStream *makeAIFFAudioStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) {
if (stream->readUint32BE() != MKTAG('F', 'O', 'R', 'M')) {
warning("makeAIFFStream: No 'FORM' header");
@@ -185,6 +192,8 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA
return 0;
}
+ bool stereo = channels > 1 ? true : false;
+
switch (codec) {
case kCodecPCM:
case MKTAG('t', 'w', 'o', 's'):
@@ -193,7 +202,7 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA
byte rawFlags = 0;
if (bitsPerSample == 16)
rawFlags |= Audio::FLAG_16BITS;
- if (channels == 2)
+ if (stereo)
rawFlags |= Audio::FLAG_STEREO;
if (codec == MKTAG('s', 'o', 'w', 't'))
rawFlags |= Audio::FLAG_LITTLE_ENDIAN;
@@ -211,10 +220,16 @@ SeekableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, DisposeA
// (But hopefully never needed)
warning("Unhandled AIFF-C QDM2 compression");
break;
+ case MKTAG('A', 'D', 'P', '4'):
+ // ADP4 on 3DO
+ return make3DO_ADP4AudioStream(dataStream, rate, stereo);
+ case MKTAG('S', 'D', 'X', '2'):
+ // SDX2 on 3DO
+ return make3DO_SDX2AudioStream(dataStream, rate, stereo);
default:
warning("Unhandled AIFF-C compression tag '%s'", tag2str(codec));
}
-
+
delete dataStream;
return 0;
}