[Scummvm-git-logs] scummvm master -> 000efc160da5b11ed1df0eeeb56da68eacb0e0ae

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Fri Aug 13 10:03:45 UTC 2021


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

Summary:
c777d7452f DIRECTOR: fix getting duration.
000efc160d DIRECTOR: update video time when render sprites.


Commit: c777d7452f36209731d5e87d8ca56e844410f3a8
    https://github.com/scummvm/scummvm/commit/c777d7452f36209731d5e87d8ca56e844410f3a8
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-13T18:03:19+08:00

Commit Message:
DIRECTOR: fix getting duration.

Changed paths:
    engines/director/castmember.cpp
    engines/director/castmember.h
    engines/director/lingo/lingo-object.cpp


diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index c0affd54f7..f6f6e3ef06 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -474,6 +474,17 @@ Graphics::MacWidget *DigitalVideoCastMember::createWidget(Common::Rect &bbox, Ch
 	return widget;
 }
 
+uint DigitalVideoCastMember::getDuration() {
+	if (!_video || !_video->isVideoLoaded()) {
+		Common::String path = getCast()->getVideoPath(_castId);
+		if (!path.empty())
+			loadVideo(pathMakeRelative(path));
+
+		_duration = getMovieTotalTime();
+	}
+	return _duration;
+}
+
 uint DigitalVideoCastMember::getMovieCurrentTime() {
 	if (!_video)
 		return 0;
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index c0fa645d9f..aae0c20e39 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -153,6 +153,7 @@ public:
 	void stopVideo(Channel *channel);
 
 	uint getMovieCurrentTime();
+	uint getDuration();
 	uint getMovieTotalTime();
 	void seekMovie(int stamp);
 	void setStopTime(int stamp);
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index e059125f13..63ae9b2f36 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -769,7 +769,10 @@ Datum DigitalVideoCastMember::getField(int field) {
 		d = _directToStage;
 		break;
 	case kTheDuration:
-		d = _duration;
+		// sometimes, we will get duration before we start video.
+		// _duration is initialized in startVideo, thus we will not get the correct number.
+		d.type = INT;
+		d.u.i = getDuration();
 		break;
 	case kTheFrameRate:
 		d = _frameRate;


Commit: 000efc160da5b11ed1df0eeeb56da68eacb0e0ae
    https://github.com/scummvm/scummvm/commit/000efc160da5b11ed1df0eeeb56da68eacb0e0ae
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-13T18:03:19+08:00

Commit Message:
DIRECTOR: update video time when render sprites.

Changed paths:
    engines/director/channel.cpp
    engines/director/channel.h
    engines/director/score.cpp


diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 66965ff6f6..a5098cb2fb 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -281,6 +281,10 @@ bool Channel::isActiveVideo() {
 	return true;
 }
 
+void Channel::updateVideoTime() {
+	_movieTime = ((DigitalVideoCastMember *)_sprite->_cast)->getMovieCurrentTime();
+}
+
 bool Channel::isVideoDirectToStage() {
 	if (!_sprite->_cast || _sprite->_cast->_type != kCastDigitalVideo)
 		return false;
diff --git a/engines/director/channel.h b/engines/director/channel.h
index 1af3121171..cd81175b50 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -79,6 +79,8 @@ public:
 	int getMouseItem(int x, int y);
 	int getMouseLine(int x, int y);
 
+	void updateVideoTime();
+
 public:
 	Sprite *_sprite;
 	Cursor _cursor;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 7c54915e97..b6ffa527fe 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -547,8 +547,10 @@ void Score::renderSprites(uint16 frameId, RenderMode mode) {
 		// this doesn't include changes in dimension or position!
 		bool widgetRedrawn = channel->updateWidget();
 
-		if (channel->isActiveVideo())
+		if (channel->isActiveVideo()) {
+			channel->updateVideoTime();
 			_movie->_videoPlayback = true;
+		}
 
 		if (channel->isDirty(nextSprite) || widgetRedrawn || mode == kRenderForceUpdate) {
 			if (!currentSprite->_trails)




More information about the Scummvm-git-logs mailing list