[Scummvm-git-logs] scummvm master -> 4b675ff44695adb34bcc1ac2d051a666a13cc3db
moralrecordings
noreply at scummvm.org
Sat Jun 22 09:31:09 UTC 2024
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:
a25c0e2cdd DIRECTOR: Fix rendering of videos in 32-bit mode
4b675ff446 DIRECTOR: Clean up logic in b_move
Commit: a25c0e2cdd2af88bc56c135ebd5ece7d0da72897
https://github.com/scummvm/scummvm/commit/a25c0e2cdd2af88bc56c135ebd5ece7d0da72897
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T17:27:02+08:00
Commit Message:
DIRECTOR: Fix rendering of videos in 32-bit mode
Changed paths:
engines/director/castmember/digitalvideo.cpp
diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 8f1de79bb76..5b50764de94 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -287,7 +287,13 @@ Graphics::MacWidget *DigitalVideoCastMember::createWidget(Common::Rect &bbox, Ch
}
if (frame->getPixels()) {
- _lastFrame = frame->convertTo(g_director->_pixelformat, g_director->getPalette());
+ if (g_director->_pixelformat.bytesPerPixel == 1) {
+ // Video should have the dithering palette set, decode using whatever palette we have now
+ _lastFrame = frame->convertTo(g_director->_pixelformat, g_director->getPalette());
+ } else {
+ // 32-bit mode, use the palette bundled with the movie
+ _lastFrame = frame->convertTo(g_director->_pixelformat, _video->getPalette());
+ }
} else {
warning("DigitalVideoCastMember::createWidget(): frame has no pixel data");
}
Commit: 4b675ff44695adb34bcc1ac2d051a666a13cc3db
https://github.com/scummvm/scummvm/commit/4b675ff44695adb34bcc1ac2d051a666a13cc3db
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T17:27:02+08:00
Commit Message:
DIRECTOR: Clean up logic in b_move
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index ce25efed225..725a55341d5 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2461,36 +2461,31 @@ void LB::b_move(int nargs) {
if (nargs == 1) {
int id = (int) g_director->getCurrentMovie()->getCast()->_castArrayStart;
- CastMemberID *castId = new CastMemberID(id, DEFAULT_CAST_LIB);
- Datum d = Datum(*castId);
- delete castId;
+ CastMemberID castId(id, DEFAULT_CAST_LIB);
+ Datum d = Datum(castId);
g_lingo->push(d);
b_findEmpty(1);
- dest = g_lingo->pop();
- src = g_lingo->pop();
} else if (nargs == 2) {
- dest = g_lingo->pop();
- src = g_lingo->pop();
+ // pass
+ } else {
+ ARGNUMCHECK(2);
+ g_lingo->dropStack(nargs);
+ return;
}
+ dest = g_lingo->pop();
+ src = g_lingo->pop();
- //Convert dest datum to type CASTREF if it is INT
- //As CastMemberID constructor changes all the values, datum_int is used to preserve int
+ // Convert dest datum to type CASTREF if it is INT.
+ // Confirmed to always move to DEFAULT_CAST_LIB in D5
if (dest.type == INT) {
- dest.type = CASTREF;
- int datum_int = dest.u.i;
- dest.u.cast = new CastMemberID();
- dest.u.cast->member = datum_int;
+ dest = Datum(CastMemberID(dest.asInt(), DEFAULT_CAST_LIB));
}
- //No need to move if src and dest are same
- if (src.u.cast->member == dest.u.cast->member) {
+ // No need to move if src and dest are same
+ if (src == dest) {
return;
}
- if (src.u.cast->castLib != DEFAULT_CAST_LIB) {
- warning("b_move: wrong castLib '%d' in src CastMemberID", src.u.cast->castLib);
- }
-
Movie *movie = g_director->getCurrentMovie();
CastMember *toMove = movie->getCastMember(src.asMemberID());
@@ -2500,19 +2495,16 @@ void LB::b_move(int nargs) {
}
g_lingo->push(dest);
- // Room for improvement, b_erase already marks the sprites as dirty
- b_erase(1);
Score *score = movie->getScore();
uint16 frame = score->getCurrentFrameNum();
score->renderFrame(frame, kRenderForceUpdate);
- movie->eraseCastMember(dest.asMemberID());
- CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
- movie->createOrReplaceCastMember(dest.asMemberID(), toReplace);
+ movie->duplicateCastMember(src.asMemberID(), dest.asMemberID());
movie->eraseCastMember(src.asMemberID());
score->refreshPointersForCastMemberID(dest.asMemberID());
+ score->refreshPointersForCastMemberID(src.asMemberID());
score->renderFrame(frame, kRenderForceUpdate);
}
More information about the Scummvm-git-logs
mailing list