[Scummvm-git-logs] scummvm master -> b0d7a12478496d0ebe26abf770c0c2d2db48f077

sev- noreply at scummvm.org
Tue Mar 4 23:55:24 UTC 2025


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

Summary:
b623a9e728 DIRECTOR: Do not crash when video is not loaded in DigitalVideo cast
895d6f5b65 VIDEO: AVI: Silently skip zero size files
bebaf73791 COMMON: Implement hasDataFork() method
2c3b342dbf DIRECTOR: Do not complain when Digital Video castmember is empty
b0d7a12478 DIRECTOR: Produce less noise for empty Digital Video castmembers


Commit: b623a9e7284ec50b61a853e94e9d58fcbc7829de
    https://github.com/scummvm/scummvm/commit/b623a9e7284ec50b61a853e94e9d58fcbc7829de
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-05T00:16:23+01:00

Commit Message:
DIRECTOR: Do not crash when video is not loaded in DigitalVideo cast

Changed paths:
    engines/director/castmember/digitalvideo.cpp


diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 3c0e9941ed1..3494d9b2d32 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -159,7 +159,7 @@ bool DigitalVideoCastMember::loadVideo(Common::String path) {
 		_video = new Video::AVIDecoder();
 		result = _video->loadFile(location);
 		if (!result) {
-		    warning("DigitalVideoCastMember::loadVideo(): format not supported, skipping");
+		    warning("DigitalVideoCastMember::loadVideo(): format not supported, skipping video '%s'", path.c_str());
 		    delete _video;
 		    _video = nullptr;
 		} else {
@@ -179,9 +179,11 @@ bool DigitalVideoCastMember::loadVideo(Common::String path) {
 
 	_duration = getMovieTotalTime();
 
-	// Setting the initial rect to the actual movie dimensions
-	_initialRect.setWidth(_video->getWidth());
-	_initialRect.setHeight(_video->getHeight());
+	if (_video) {
+		// Setting the initial rect to the actual movie dimensions
+		_initialRect.setWidth(_video->getWidth());
+		_initialRect.setHeight(_video->getHeight());
+	}
 
 	return result;
 }


Commit: 895d6f5b65d2880a9fdc2a9310f5f78e433d96f8
    https://github.com/scummvm/scummvm/commit/895d6f5b65d2880a9fdc2a9310f5f78e433d96f8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-05T00:27:52+01:00

Commit Message:
VIDEO: AVI: Silently skip zero size files

Changed paths:
    video/avi_decoder.cpp


diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp
index 475f32945d8..61d4c1595ed 100644
--- a/video/avi_decoder.cpp
+++ b/video/avi_decoder.cpp
@@ -425,6 +425,11 @@ void AVIDecoder::readPalette8(uint32 size) {
 bool AVIDecoder::loadStream(Common::SeekableReadStream *stream) {
 	close();
 
+	if (!stream->size()) {
+		debugC(8, kDebugLevelGVideo, "AVIDecoder::loadStream(): skipping empty stream");
+		return false;
+	}
+
 	uint32 riffTag = stream->readUint32BE();
 	if (riffTag != ID_RIFF) {
 		warning("Failed to find RIFF header");


Commit: bebaf73791083b21e6c0d84262f39b8d83dbff14
    https://github.com/scummvm/scummvm/commit/bebaf73791083b21e6c0d84262f39b8d83dbff14
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-05T00:45:21+01:00

Commit Message:
COMMON: Implement hasDataFork() method

Changed paths:
    common/macresman.cpp
    common/macresman.h


diff --git a/common/macresman.cpp b/common/macresman.cpp
index 2443af82d75..d5c3b449f53 100644
--- a/common/macresman.cpp
+++ b/common/macresman.cpp
@@ -139,6 +139,10 @@ bool MacResManager::hasResFork() const {
 	return !_baseFileName.empty() && _mode != kResForkNone && _resForkSize != 0;
 }
 
+bool MacResManager::hasDataFork() const {
+	return !_baseFileName.empty() && _mode != kResForkNone && _dataLength != 0;
+}
+
 uint32 MacResManager::getResForkDataSize() const {
 	if (!hasResFork())
 		return 0;
diff --git a/common/macresman.h b/common/macresman.h
index 8fe49e45492..5fa3a0f9049 100644
--- a/common/macresman.h
+++ b/common/macresman.h
@@ -201,11 +201,17 @@ public:
 	void close();
 
 	/**
-	 * Query whether or not we have a data fork present.
+	 * Query whether or not we have a resource fork present.
 	 * @return True if the resource fork is present
 	 */
 	bool hasResFork() const;
 
+	/**
+	 * Query whether or not we have a resource fork present.
+	 * @return True if the resource fork is present
+	 */
+	bool hasDataFork() const;
+
 	/**
 	 * Read resource from the MacBinary file
 	 * @param typeID FourCC of the type


Commit: 2c3b342dbf8046c7825f313cbbd3261acf45b235
    https://github.com/scummvm/scummvm/commit/2c3b342dbf8046c7825f313cbbd3261acf45b235
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-05T00:45:45+01:00

Commit Message:
DIRECTOR: Do not complain when Digital Video castmember is empty

BlankQT.mov in trektech-mac contains only resource fork, thus, it is
empty

Changed paths:
    engines/director/castmember/digitalvideo.cpp


diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 3494d9b2d32..81bbb2f452f 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -19,6 +19,8 @@
  *
  */
 
+#include "common/macresman.h"
+
 #include "graphics/paletteman.h"
 #include "graphics/surface.h"
 #include "graphics/macgui/macwidget.h"
@@ -156,6 +158,16 @@ bool DigitalVideoCastMember::loadVideo(Common::String path) {
 	bool result = _video->loadFile(location);
 	if (!result) {
 		delete _video;
+		_video = nullptr;
+
+		// Probe for empty file
+		Common::MacResManager mgr;
+		if (mgr.open(location)) {
+			if (!mgr.hasDataFork())
+			debugC(8, kDebugLevelGVideo, "AVIDecoder::loadStream(): skipping empty stream");
+			return false;
+		}
+
 		_video = new Video::AVIDecoder();
 		result = _video->loadFile(location);
 		if (!result) {


Commit: b0d7a12478496d0ebe26abf770c0c2d2db48f077
    https://github.com/scummvm/scummvm/commit/b0d7a12478496d0ebe26abf770c0c2d2db48f077
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-05T00:54:51+01:00

Commit Message:
DIRECTOR: Produce less noise for empty Digital Video castmembers

Changed paths:
    engines/director/castmember/digitalvideo.cpp
    engines/director/castmember/digitalvideo.h


diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 81bbb2f452f..3878bc102e1 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -70,6 +70,7 @@ DigitalVideoCastMember::DigitalVideoCastMember(Cast *cast, uint16 castId, Common
 	_crop = !(_vflags & 0x02);
 	_center = _vflags & 0x01;
 	_dirty = false;
+	_emptyFile = false;
 
 	if (debugChannelSet(2, kDebugLoading))
 		_initialRect.debugPrint(2, "DigitalVideoCastMember(): rect:");
@@ -163,8 +164,11 @@ bool DigitalVideoCastMember::loadVideo(Common::String path) {
 		// Probe for empty file
 		Common::MacResManager mgr;
 		if (mgr.open(location)) {
-			if (!mgr.hasDataFork())
-			debugC(8, kDebugLevelGVideo, "AVIDecoder::loadStream(): skipping empty stream");
+			if (!mgr.hasDataFork()) {
+				debugC(8, kDebugLevelGVideo, "DigitalVideoCastMember::loadVideo(): skipping empty stream");
+				_emptyFile = true;
+			}
+
 			return false;
 		}
 
@@ -255,7 +259,8 @@ void DigitalVideoCastMember::startVideo() {
 
 void DigitalVideoCastMember::stopVideo() {
 	if (!_video || !_video->isVideoLoaded()) {
-		warning("DigitalVideoCastMember::stopVideo: No video decoder");
+		if (!_emptyFile)
+			warning("DigitalVideoCastMember::stopVideo: No video decoder");
 		return;
 	}
 
@@ -266,7 +271,8 @@ void DigitalVideoCastMember::stopVideo() {
 
 void DigitalVideoCastMember::rewindVideo() {
 	if (!_video || !_video->isVideoLoaded()) {
-		warning("DigitalVideoCastMember::rewindVideo: No video decoder");
+		if (!_emptyFile)
+			warning("DigitalVideoCastMember::rewindVideo: No video decoder");
 		return;
 	}
 
@@ -276,6 +282,9 @@ void DigitalVideoCastMember::rewindVideo() {
 }
 
 Graphics::MacWidget *DigitalVideoCastMember::createWidget(Common::Rect &bbox, Channel *channel, SpriteType spriteType) {
+	if (_emptyFile)
+		return nullptr;
+
 	Graphics::MacWidget *widget = new Graphics::MacWidget(g_director->getCurrentWindow(), bbox.left, bbox.top, bbox.width(), bbox.height(), g_director->_wm, false);
 
 	_channel = channel;
diff --git a/engines/director/castmember/digitalvideo.h b/engines/director/castmember/digitalvideo.h
index 64651b3b46d..4e545dfbd02 100644
--- a/engines/director/castmember/digitalvideo.h
+++ b/engines/director/castmember/digitalvideo.h
@@ -83,6 +83,7 @@ public:
 	bool _directToStage;
 	bool _avimovie, _qtmovie;
 	bool _dirty;
+	bool _emptyFile;
 	FrameRateType _frameRateType;
 	DigitalVideoType _videoType;
 




More information about the Scummvm-git-logs mailing list