diff options
Diffstat (limited to 'image')
-rw-r--r-- | image/codecs/codec.cpp | 2 | ||||
-rw-r--r-- | image/codecs/truemotion1.cpp | 19 | ||||
-rw-r--r-- | image/codecs/truemotion1.h | 2 |
3 files changed, 14 insertions, 9 deletions
diff --git a/image/codecs/codec.cpp b/image/codecs/codec.cpp index 64acf3f169..6b0c7ebcfb 100644 --- a/image/codecs/codec.cpp +++ b/image/codecs/codec.cpp @@ -61,7 +61,7 @@ Codec *createBitmapCodec(uint32 tag, int width, int height, int bitsPerPixel) { #ifdef IMAGE_CODECS_TRUEMOTION1_H case MKTAG('D','U','C','K'): case MKTAG('d','u','c','k'): - return new TrueMotion1Decoder(width, height); + return new TrueMotion1Decoder(); #endif #ifdef USE_MPEG2 case MKTAG('m','p','g','2'): diff --git a/image/codecs/truemotion1.cpp b/image/codecs/truemotion1.cpp index 741b9d51eb..e60ec6c72e 100644 --- a/image/codecs/truemotion1.cpp +++ b/image/codecs/truemotion1.cpp @@ -89,11 +89,8 @@ static const CompressionType compressionTypes[17] = { { ALGO_RGB24H, 2, 2, BLOCK_2x2 } }; -TrueMotion1Decoder::TrueMotion1Decoder(uint16 width, uint16 height) { - _surface = new Graphics::Surface(); - _surface->create(width, height, getPixelFormat()); - _surface->fillRect(Common::Rect(width, height), getPixelFormat().RGBToColor(0, 0, 0)); - +TrueMotion1Decoder::TrueMotion1Decoder() { + _surface = 0; _vertPred = 0; _buf = _mbChangeBits = _indexStream = 0; @@ -101,8 +98,11 @@ TrueMotion1Decoder::TrueMotion1Decoder(uint16 width, uint16 height) { } TrueMotion1Decoder::~TrueMotion1Decoder() { - _surface->free(); - delete _surface; + if (_surface) { + _surface->free(); + delete _surface; + } + delete[] _vertPred; } @@ -194,6 +194,11 @@ void TrueMotion1Decoder::decodeHeader(Common::SeekableReadStream &stream) { _vertPred = new uint32[_header.xsize]; } + if (!_surface) { + _surface = new Graphics::Surface(); + _surface->create(_header.xsize, _header.ysize, getPixelFormat()); + } + // There is 1 change bit per 4 pixels, so each change byte represents // 32 pixels; divide width by 4 to obtain the number of change bits and // then round up to the nearest byte. diff --git a/image/codecs/truemotion1.h b/image/codecs/truemotion1.h index bbbcd6d6be..51daf607d2 100644 --- a/image/codecs/truemotion1.h +++ b/image/codecs/truemotion1.h @@ -39,7 +39,7 @@ namespace Image { */ class TrueMotion1Decoder : public Codec { public: - TrueMotion1Decoder(uint16 width, uint16 height); + TrueMotion1Decoder(); ~TrueMotion1Decoder(); const Graphics::Surface *decodeFrame(Common::SeekableReadStream &stream); |