diff options
author | Matthew Hoops | 2010-12-16 13:25:29 +0000 |
---|---|---|
committer | Matthew Hoops | 2010-12-16 13:25:29 +0000 |
commit | ebf2dd8d3805988c8a527c7c4518ffa23fc155f8 (patch) | |
tree | e98ba1c2d3520a452a1ddf1836aa17a759370130 /graphics | |
parent | 1b267f52819f9e5d173e78dd4a732cdf12e26301 (diff) | |
download | scummvm-rg350-ebf2dd8d3805988c8a527c7c4518ffa23fc155f8.tar.gz scummvm-rg350-ebf2dd8d3805988c8a527c7c4518ffa23fc155f8.tar.bz2 scummvm-rg350-ebf2dd8d3805988c8a527c7c4518ffa23fc155f8.zip |
VIDEO: Extend Codec to support internal palettes
svn-id: r54932
Diffstat (limited to 'graphics')
-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; |