diff --git a/engines/ags/engine/ac/global_video.cpp b/engines/ags/engine/ac/global_video.cpp index 63907a64214..1d47593d9ce 100644 --- a/engines/ags/engine/ac/global_video.cpp +++ b/engines/ags/engine/ac/global_video.cpp @@ -48,9 +48,6 @@ void scrPlayVideo(const char *name, int skip, int flags) { return; if (_G(debug_flags) & DBG_NOVIDEO) return; - // FIXME: Stargate Adventure videos used unsupported ix00 & ix01 audio tracks - if (::AGS::g_vm->getGameId() == "stargateadv") - return; if ((flags < 10) && (_GP(usetup).audio_backend == 0)) { // if game audio is disabled in Setup, then don't diff --git a/engines/ags/engine/media/video/video.cpp b/engines/ags/engine/media/video/video.cpp index bef24afb84c..cae6f831f8d 100644 --- a/engines/ags/engine/media/video/video.cpp +++ b/engines/ags/engine/media/video/video.cpp @@ -64,9 +64,7 @@ static bool play_video(Video::VideoDecoder *decoder, const char *name, int skip, AGS::Shared::ScummVMReadStream *stream = new AGS::Shared::ScummVMReadStream(video_stream.get(), DisposeAfterUse::NO); if (!decoder->loadStream(stream)) { - delete stream; - if (showError) - Display("Unable to decode video '%s'", name); + warning("Unable to decode video '%s'", name); return false; } diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp index 0266f8bbe52..ae86821a229 100644 --- a/video/avi_decoder.cpp +++ b/video/avi_decoder.cpp @@ -347,7 +347,11 @@ void AVIDecoder::handleStreamHeader(uint32 size) { } } - addTrack(new AVIVideoTrack(_header.totalFrames, sHeader, bmInfo, initialPalette)); + AVIVideoTrack *track = new AVIVideoTrack(_header.totalFrames, sHeader, bmInfo, initialPalette); + if (track->isValid()) + addTrack(track); + else + delete track; } else if (sHeader.streamType == ID_AUDS) { PCMWaveFormat wvInfo; wvInfo.tag = _fileStream->readUint16LE(); @@ -443,6 +447,11 @@ bool AVIDecoder::loadStream(Common::SeekableReadStream *stream) { while (_fileStream->pos() < fileSize && parseNextChunk()) ; + if (_decodedHeader) { + // Ensure there's at least a supported video track + _decodedHeader = findNextVideoTrack() != nullptr; + } + if (!_decodedHeader) { warning("Failed to parse AVI header"); close(); diff --git a/video/avi_decoder.h b/video/avi_decoder.h index 6ec0d285b52..95ba787c392 100644 --- a/video/avi_decoder.h +++ b/video/avi_decoder.h @@ -225,6 +225,7 @@ protected: void useInitialPalette(); bool canDither() const; void setDither(const byte *palette); + bool isValid() const { return _videoCodec != nullptr; } bool isTruemotion1() const; void forceDimensions(uint16 width, uint16 height);