aboutsummaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
authorMatthew Hoops2010-12-16 13:25:29 +0000
committerMatthew Hoops2010-12-16 13:25:29 +0000
commitebf2dd8d3805988c8a527c7c4518ffa23fc155f8 (patch)
treee98ba1c2d3520a452a1ddf1836aa17a759370130 /graphics
parent1b267f52819f9e5d173e78dd4a732cdf12e26301 (diff)
downloadscummvm-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.h4
-rw-r--r--graphics/video/qt_decoder.cpp19
-rw-r--r--graphics/video/qt_decoder.h2
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;