[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