aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Hoops2011-01-11 20:35:30 +0000
committerMatthew Hoops2011-01-11 20:35:30 +0000
commit55c0658c8d00568ee4c87fefadd695bc560b01b6 (patch)
treee466e5db28d9e0000476151d7b9953ff22b56e34
parentf3f3b3bd62992a058891e22b7feee0109aab937e (diff)
downloadscummvm-rg350-55c0658c8d00568ee4c87fefadd695bc560b01b6.tar.gz
scummvm-rg350-55c0658c8d00568ee4c87fefadd695bc560b01b6.tar.bz2
scummvm-rg350-55c0658c8d00568ee4c87fefadd695bc560b01b6.zip
MOHAWK: Set the system palette on 8bpp videos when in 8bpp mode
svn-id: r55210
-rw-r--r--engines/mohawk/video.cpp43
1 files changed, 24 insertions, 19 deletions
diff --git a/engines/mohawk/video.cpp b/engines/mohawk/video.cpp
index 87fef72773..6abc817128 100644
--- a/engines/mohawk/video.cpp
+++ b/engines/mohawk/video.cpp
@@ -203,27 +203,32 @@ bool VideoManager::updateBackgroundMovies() {
// Convert from 8bpp to the current screen format if necessary
Graphics::PixelFormat pixelFormat = _vm->_system->getScreenFormat();
- if (frame->bytesPerPixel == 1 && pixelFormat.bytesPerPixel != 1) {
- convertedFrame = new Graphics::Surface();
- const byte *palette = _videoStreams[i]->getPalette();
- assert(palette);
-
- convertedFrame->create(frame->w, frame->h, pixelFormat.bytesPerPixel);
-
- for (uint16 j = 0; j < frame->h; j++) {
- for (uint16 k = 0; k < frame->w; k++) {
- byte palIndex = *((byte *)frame->getBasePtr(k, j));
- byte r = palette[palIndex * 3];
- byte g = palette[palIndex * 3 + 1];
- byte b = palette[palIndex * 3 + 2];
- if (pixelFormat.bytesPerPixel == 2)
- *((uint16 *)convertedFrame->getBasePtr(k, j)) = pixelFormat.RGBToColor(r, g, b);
- else
- *((uint32 *)convertedFrame->getBasePtr(k, j)) = pixelFormat.RGBToColor(r, g, b);
+ if (frame->bytesPerPixel == 1) {
+ if (pixelFormat.bytesPerPixel == 1) {
+ if (_videoStreams[i]->hasDirtyPalette())
+ _videoStreams[i]->setSystemPalette();
+ } else {
+ convertedFrame = new Graphics::Surface();
+ const byte *palette = _videoStreams[i]->getPalette();
+ assert(palette);
+
+ convertedFrame->create(frame->w, frame->h, pixelFormat.bytesPerPixel);
+
+ for (uint16 j = 0; j < frame->h; j++) {
+ for (uint16 k = 0; k < frame->w; k++) {
+ byte palIndex = *((byte *)frame->getBasePtr(k, j));
+ byte r = palette[palIndex * 3];
+ byte g = palette[palIndex * 3 + 1];
+ byte b = palette[palIndex * 3 + 2];
+ if (pixelFormat.bytesPerPixel == 2)
+ *((uint16 *)convertedFrame->getBasePtr(k, j)) = pixelFormat.RGBToColor(r, g, b);
+ else
+ *((uint32 *)convertedFrame->getBasePtr(k, j)) = pixelFormat.RGBToColor(r, g, b);
+ }
}
- }
- frame = convertedFrame;
+ frame = convertedFrame;
+ }
}
// Clip the width/height to make sure we stay on the screen (Myst does this a few times)