diff options
-rw-r--r-- | graphics/video/codecs/codec.h | 4 | ||||
-rw-r--r-- | graphics/video/qt_decoder.cpp | 19 | ||||
-rw-r--r-- | graphics/video/qt_decoder.h | 2 |
3 files changed, 19 insertions, 6 deletions
diff --git a/graphics/video/codecs/codec.h b/graphics/video/codecs/codec.h index 565faf8442..4fa1a041a2 100644 --- a/graphics/video/codecs/codec.h +++ b/graphics/video/codecs/codec.h @@ -42,6 +42,10 @@ public: virtual const Surface *decodeImage(Common::SeekableReadStream *stream) = 0; virtual PixelFormat getPixelFormat() const = 0; + + virtual bool containsPalette() const { return false; } + virtual const byte *getPalette() { return 0; } + virtual bool hasDirtyPalette() const { return false; } }; } // End of namespace Graphics diff --git a/graphics/video/qt_decoder.cpp b/graphics/video/qt_decoder.cpp index 2e18050db1..9b9c7455ed 100644 --- a/graphics/video/qt_decoder.cpp +++ b/graphics/video/qt_decoder.cpp @@ -245,12 +245,21 @@ const Surface *QuickTimeDecoder::decodeNextFrame() { const Surface *frame = entry->videoCodec->decodeImage(frameData); delete frameData; - // Update the palette in case it changes between video descriptions - byte *palette = entry->palette; + // Update the palette + if (entry->videoCodec->containsPalette()) { + // The codec itself contains a palette + if (entry->videoCodec->hasDirtyPalette()) { + _palette = entry->videoCodec->getPalette(); + _dirtyPalette = true; + } + } else { + // Check if the video description has been updated + byte *palette = entry->palette; - if (palette != _palette) { - _palette = palette; - _dirtyPalette = true; + if (palette != _palette) { + _palette = palette; + _dirtyPalette = true; + } } return scaleSurface(frame); diff --git a/graphics/video/qt_decoder.h b/graphics/video/qt_decoder.h index b56aaebdeb..144340d6a7 100644 --- a/graphics/video/qt_decoder.h +++ b/graphics/video/qt_decoder.h @@ -224,7 +224,7 @@ private: Common::Rational _scaleFactorX; Common::Rational _scaleFactorY; MOVStreamContext *_streams[20]; - byte *_palette; + const byte *_palette; bool _dirtyPalette; uint32 _beginOffset; Common::MacResManager *_resFork; |