From a01b8a517435fcc943b98ddf169eb8b980a8237e Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 10 Jun 2013 03:41:55 +0300 Subject: NEVERHOOD: Fix crash when viewing videos in the video viewer The crash was caused by stale pointers, exactly the same as in commit 2e4f64066da7c08edcd17b5c66c6463887b836b4 --- engines/neverhood/diskplayerscene.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'engines/neverhood/diskplayerscene.cpp') diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp index d972943759..da1ec984a5 100644 --- a/engines/neverhood/diskplayerscene.cpp +++ b/engines/neverhood/diskplayerscene.cpp @@ -473,8 +473,15 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m, return 0; } +void DiskplayerScene::openSmacker(uint32 fileHash, bool keepLastFrame) { + // The old Smacker surface is deleted when a new Smacker is opened. + removeSurface(_diskSmackerPlayer->getSurface()); + _diskSmackerPlayer->open(fileHash, keepLastFrame); + addSurface(_diskSmackerPlayer->getSurface()); +} + void DiskplayerScene::stop() { - _diskSmackerPlayer->open(0x08288103, true); + openSmacker(0x08288103, true); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); @@ -483,7 +490,7 @@ void DiskplayerScene::stop() { } void DiskplayerScene::tuneIn() { - _diskSmackerPlayer->open(0x900001C1, false); + openSmacker(0x900001C1, false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); @@ -492,7 +499,7 @@ void DiskplayerScene::tuneIn() { } void DiskplayerScene::playDisk() { - _diskSmackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false); + openSmacker(kDiskplayerSmackerFileHashes[_diskIndex], false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _updateStatus = kUSPlaying; @@ -500,7 +507,7 @@ void DiskplayerScene::playDisk() { } void DiskplayerScene::playStatic() { - _diskSmackerPlayer->open(0x90000101, false); + openSmacker(0x90000101, false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); -- cgit v1.2.3