aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/video/smk_decoder.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/graphics/video/smk_decoder.cpp b/graphics/video/smk_decoder.cpp
index f27a70f78c..adc96a7820 100644
--- a/graphics/video/smk_decoder.cpp
+++ b/graphics/video/smk_decoder.cpp
@@ -361,7 +361,7 @@ SmackerDecoder::~SmackerDecoder() {
}
uint32 SmackerDecoder::getElapsedTime() const {
- if (_audioStream)
+ if (_audioStream && _audioStarted)
return _mixer->getSoundElapsedTime(_audioHandle);
return VideoDecoder::getElapsedTime();
@@ -438,6 +438,9 @@ bool SmackerDecoder::load(Common::SeekableReadStream &stream) {
!(audioInfo & 0x4000000);
_header.audioInfo[i].sampleRate = audioInfo & 0xFFFFFF;
+ if (_header.audioInfo[i].hasV2Compression)
+ warning("Unhandled Smacker v2 audio compression");
+
if (_header.audioInfo[i].hasAudio && i == 0)
_audioStream = Audio::makeQueuingAudioStream(_header.audioInfo[0].sampleRate, _header.audioInfo[0].isStereo);
}
@@ -541,7 +544,11 @@ Surface *SmackerDecoder::decodeNextFrame() {
_fileStream->read(soundBuffer, chunkSize);
- if (_header.audioInfo[i].isCompressed) {
+ if (_header.audioInfo[i].hasV2Compression) {
+ // TODO: Compressed audio (Bink RDFT encoded)
+ free(soundBuffer);
+ continue;
+ } else if (_header.audioInfo[i].isCompressed) {
// Compressed audio (Huffman DPCM encoded)
queueCompressedBuffer(soundBuffer, chunkSize, dataSizeUnpacked, i);
free(soundBuffer);