diff options
author | Colin Snover | 2017-01-08 23:12:05 -0600 |
---|---|---|
committer | Colin Snover | 2017-01-11 10:59:55 -0600 |
commit | 7b90f0693ab04dd2d03c097a4a49858f3685a75f (patch) | |
tree | c334b8839d2004cc5982dcf84b9d20411b00b46b /image/codecs | |
parent | 68de00b36727424c2ea6c1a2d078288659492ab3 (diff) | |
download | scummvm-rg350-7b90f0693ab04dd2d03c097a4a49858f3685a75f.tar.gz scummvm-rg350-7b90f0693ab04dd2d03c097a4a49858f3685a75f.tar.bz2 scummvm-rg350-7b90f0693ab04dd2d03c097a4a49858f3685a75f.zip |
IMAGE: Return correct pixel format for Indeo3
This gives Indeo3 the same behavior as other codecs when
encapsulated in a container that provides bit depth information
(e.g. AVI).
Closes #888.
Diffstat (limited to 'image/codecs')
-rw-r--r-- | image/codecs/codec.cpp | 2 | ||||
-rw-r--r-- | image/codecs/indeo3.cpp | 17 | ||||
-rw-r--r-- | image/codecs/indeo3.h | 2 |
3 files changed, 17 insertions, 4 deletions
diff --git a/image/codecs/codec.cpp b/image/codecs/codec.cpp index 7d6d3cbe9b..048d52dc86 100644 --- a/image/codecs/codec.cpp +++ b/image/codecs/codec.cpp @@ -210,7 +210,7 @@ Codec *createBitmapCodec(uint32 tag, int width, int height, int bitsPerPixel) { case MKTAG('c','v','i','d'): return new CinepakDecoder(bitsPerPixel); case MKTAG('I','V','3','2'): - return new Indeo3Decoder(width, height); + return new Indeo3Decoder(width, height, bitsPerPixel); case MKTAG('I', 'V', '4', '1'): case MKTAG('I', 'V', '4', '2'): return new Indeo4Decoder(width, height, bitsPerPixel); diff --git a/image/codecs/indeo3.cpp b/image/codecs/indeo3.cpp index 560658d1f5..d862d5352b 100644 --- a/image/codecs/indeo3.cpp +++ b/image/codecs/indeo3.cpp @@ -40,11 +40,24 @@ namespace Image { -Indeo3Decoder::Indeo3Decoder(uint16 width, uint16 height) : _ModPred(0), _corrector_type(0) { +Indeo3Decoder::Indeo3Decoder(uint16 width, uint16 height, uint bitsPerPixel) : _ModPred(0), _corrector_type(0) { _iv_frame[0].the_buf = 0; _iv_frame[1].the_buf = 0; - _pixelFormat = g_system->getScreenFormat(); + switch (bitsPerPixel) { + case 16: + _pixelFormat = Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0); + break; + case 24: + _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 0, 16, 8, 0, 0); + break; + case 32: + _pixelFormat = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); + break; + default: + error("Invalid color depth"); + break; + } _surface = new Graphics::Surface; _surface->create(width, height, _pixelFormat); diff --git a/image/codecs/indeo3.h b/image/codecs/indeo3.h index 0ff0265250..ad12bb7825 100644 --- a/image/codecs/indeo3.h +++ b/image/codecs/indeo3.h @@ -46,7 +46,7 @@ namespace Image { */ class Indeo3Decoder : public Codec { public: - Indeo3Decoder(uint16 width, uint16 height); + Indeo3Decoder(uint16 width, uint16 height, uint bitsPerPixel = 24); ~Indeo3Decoder(); const Graphics::Surface *decodeFrame(Common::SeekableReadStream &stream); |