From d93ecabc7ae5a24dabc4e21a6fcb5ec37e74566d Mon Sep 17 00:00:00 2001 From: Thomas Fach-Pedersen Date: Fri, 30 May 2014 13:53:42 -0700 Subject: BLADERUNNER: Fix memory leaks in VQADecoder --- engines/bladerunner/vqa_decoder.cpp | 11 ++++++++--- engines/bladerunner/vqa_decoder.h | 6 +++++- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'engines/bladerunner') diff --git a/engines/bladerunner/vqa_decoder.cpp b/engines/bladerunner/vqa_decoder.cpp index ba30e73ee4..f2aee5dd33 100644 --- a/engines/bladerunner/vqa_decoder.cpp +++ b/engines/bladerunner/vqa_decoder.cpp @@ -118,6 +118,9 @@ const char *strTag(uint32 tag) VQADecoder::VQADecoder() : _s(nullptr), + _frameInfo(nullptr), + _videoTrack(nullptr), + _audioTrack(nullptr), _maxVIEWChunkSize(0), _maxZBUFChunkSize(0), _maxAESCChunkSize(0) @@ -125,6 +128,9 @@ VQADecoder::VQADecoder() } VQADecoder::~VQADecoder() { + delete _audioTrack; + delete _videoTrack; + delete[] _frameInfo; } bool VQADecoder::loadStream(Common::SeekableReadStream *s) { @@ -172,10 +178,7 @@ bool VQADecoder::loadStream(Common::SeekableReadStream *s) { } while (chd.id != kFINF); _videoTrack = new VQAVideoTrack(this); - // addTrack(_videoTrack); - _audioTrack = new VQAAudioTrack(this); - // addTrack(_audioTrack); /* for (int i = 0; i != _loopInfo.loopCount; ++i) { @@ -559,6 +562,8 @@ VQADecoder::VQAVideoTrack::~VQAVideoTrack() { delete[] _zbufChunk; delete[] _vpointer; + if (_surface) + _surface->free(); delete _surface; } diff --git a/engines/bladerunner/vqa_decoder.h b/engines/bladerunner/vqa_decoder.h index 110ca704c5..ca7e067305 100644 --- a/engines/bladerunner/vqa_decoder.h +++ b/engines/bladerunner/vqa_decoder.h @@ -107,8 +107,12 @@ private: Loop *loops; LoopInfo() - : loopCount(0) + : loopCount(0), + loops(nullptr) {} + ~LoopInfo() { + delete[] loops; + } }; struct ClipInfo -- cgit v1.2.3