aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood/diskplayerscene.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2013-06-10 03:41:55 +0300
committerFilippos Karapetis2013-06-10 03:42:44 +0300
commita01b8a517435fcc943b98ddf169eb8b980a8237e (patch)
tree263d665a9b85d43e8b1b82a12e4807e6c9592816 /engines/neverhood/diskplayerscene.cpp
parent4d56fe773da29f84639fa79ddd84998a1a2f4ca1 (diff)
downloadscummvm-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/diskplayerscene.cpp')
-rw-r--r--engines/neverhood/diskplayerscene.cpp15
1 files changed, 11 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 &param,
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();