[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