[Scummvm-cvs-logs] scummvm master -> a01b8a517435fcc943b98ddf169eb8b980a8237e

bluegr bluegr at gmail.com
Mon Jun 10 02:43:49 CEST 2013


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a01b8a5174 NEVERHOOD: Fix crash when viewing videos in the video viewer


Commit: a01b8a517435fcc943b98ddf169eb8b980a8237e
    https://github.com/scummvm/scummvm/commit/a01b8a517435fcc943b98ddf169eb8b980a8237e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2013-06-09T17:42:44-07:00

Commit Message:
NEVERHOOD: Fix crash when viewing videos in the video viewer

The crash was caused by stale pointers, exactly the same as in commit
2e4f64066da7c08edcd17b5c66c6463887b836b4

Changed paths:
    engines/neverhood/diskplayerscene.cpp
    engines/neverhood/diskplayerscene.h



diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp
index d972943..da1ec98 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();
diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h
index f3fd9ea..4afaf8a 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 &param, Entity *sender);
+	void openSmacker(uint32 fileHash, bool keepLastFrame);
 	void stop();
 	void tuneIn();
 	void playDisk();






More information about the Scummvm-git-logs mailing list