diff options
author | Filippos Karapetis | 2013-06-10 03:41:55 +0300 |
---|---|---|
committer | Filippos Karapetis | 2013-06-10 03:42:44 +0300 |
commit | a01b8a517435fcc943b98ddf169eb8b980a8237e (patch) | |
tree | 263d665a9b85d43e8b1b82a12e4807e6c9592816 /engines/neverhood | |
parent | 4d56fe773da29f84639fa79ddd84998a1a2f4ca1 (diff) | |
download | scummvm-rg350-a01b8a517435fcc943b98ddf169eb8b980a8237e.tar.gz scummvm-rg350-a01b8a517435fcc943b98ddf169eb8b980a8237e.tar.bz2 scummvm-rg350-a01b8a517435fcc943b98ddf169eb8b980a8237e.zip |
NEVERHOOD: Fix crash when viewing videos in the video viewer
The crash was caused by stale pointers, exactly the same as in commit
2e4f64066da7c08edcd17b5c66c6463887b836b4
Diffstat (limited to 'engines/neverhood')
-rw-r--r-- | engines/neverhood/diskplayerscene.cpp | 15 | ||||
-rw-r--r-- | engines/neverhood/diskplayerscene.h | 1 |
2 files changed, 12 insertions, 4 deletions
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(); diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h index f3fd9ea874..4afaf8af9f 100644 --- a/engines/neverhood/diskplayerscene.h +++ b/engines/neverhood/diskplayerscene.h @@ -99,6 +99,7 @@ protected: bool _dropKey; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); + void openSmacker(uint32 fileHash, bool keepLastFrame); void stop(); void tuneIn(); void playDisk(); |