diff options
Diffstat (limited to 'graphics')
| -rw-r--r-- | graphics/decoders/iff.cpp | 241 | ||||
| -rw-r--r-- | graphics/decoders/iff.h | 119 | ||||
| -rw-r--r-- | graphics/iff.cpp | 289 | ||||
| -rw-r--r-- | graphics/iff.h | 137 | ||||
| -rw-r--r-- | graphics/module.mk | 2 | 
5 files changed, 361 insertions, 427 deletions
| diff --git a/graphics/decoders/iff.cpp b/graphics/decoders/iff.cpp new file mode 100644 index 0000000000..50c7b4f7de --- /dev/null +++ b/graphics/decoders/iff.cpp @@ -0,0 +1,241 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "common/iff_container.h" +#include "common/stream.h" +#include "common/util.h" + +#include "graphics/decoders/iff.h" + +namespace Graphics { + +IFFDecoder::IFFDecoder() { +	_surface = 0; +	_palette = 0; + +	destroy(); +} + +IFFDecoder::~IFFDecoder() { +	destroy(); +} + +void IFFDecoder::destroy() { +	if (_surface) { +		_surface->free(); +		delete _surface; +		_surface = 0; +	} + +	if (_palette) { +		delete[] _palette; +		_palette = 0; +	} + +	memset(&_header, 0, sizeof(Header)); +	_paletteRanges.clear(); +	_type = TYPE_UNKNOWN; +	_paletteColorCount = 0; +	_numRelevantPlanes = 8; +	_pixelPacking = false; +} + +bool IFFDecoder::loadStream(Common::SeekableReadStream &stream) { +	destroy(); + +	const uint32 form = stream.readUint32BE(); + +	if (form != ID_FORM) { +		warning("Failed reading IFF-file"); +		return false; +	} + +	stream.skip(4); + +	const uint32 type = stream.readUint32BE(); + +	switch (type) { +		case ID_ILBM: +			_type = TYPE_ILBM; +			break; +		case ID_PBM: +			_type = TYPE_PBM; +			break; +	} + +	if (type == TYPE_UNKNOWN) { +		warning("Failed reading IFF-file"); +		return false; +	} + +	while (1) { +		const uint32 chunkType = stream.readUint32BE(); +		const uint32 chunkSize = stream.readUint32BE(); + +		if (stream.eos()) +			break; + +		switch (chunkType) { +		case ID_BMHD: +			loadHeader(stream); +			break; +		case ID_CMAP: +			loadPalette(stream, chunkSize); +			break; +		case ID_CRNG: +			loadPaletteRange(stream, chunkSize); +			break; +		case ID_BODY: +			loadBitmap(stream); +			break; +		default: +			stream.skip(chunkSize); +		} +	} + +	return true; +} + +void IFFDecoder::loadHeader(Common::SeekableReadStream &stream) { +	_header.width = stream.readUint16BE(); +	_header.height = stream.readUint16BE(); +	_header.x = stream.readUint16BE(); +	_header.y = stream.readUint16BE(); +	_header.numPlanes = stream.readByte(); +	_header.masking = stream.readByte(); +	_header.compression = stream.readByte(); +	_header.flags = stream.readByte(); +	_header.transparentColor = stream.readUint16BE(); +	_header.xAspect = stream.readByte(); +	_header.yAspect = stream.readByte(); +	_header.pageWidth = stream.readUint16BE(); +	_header.pageHeight = stream.readUint16BE(); + +	assert(_header.width >= 1); +	assert(_header.height >= 1); +	assert(_header.numPlanes >= 1 && _header.numPlanes <= 8 && _header.numPlanes != 7); +} + +void IFFDecoder::loadPalette(Common::SeekableReadStream &stream, const uint32 size) { +	_palette = new byte[size]; +	stream.read(_palette, size); +	_paletteColorCount = size / 3; +} + +void IFFDecoder::loadPaletteRange(Common::SeekableReadStream &stream, const uint32 size) { +	PaletteRange range; + +	range.timer = stream.readSint16BE(); +	range.step = stream.readSint16BE(); +	range.flags = stream.readSint16BE(); +	range.first = stream.readByte(); +	range.last = stream.readByte(); + +	_paletteRanges.push_back(range); +} + +void IFFDecoder::loadBitmap(Common::SeekableReadStream &stream) { +	_numRelevantPlanes = MIN(_numRelevantPlanes, _header.numPlanes); + +	if (_numRelevantPlanes != 1 && _numRelevantPlanes != 2 && _numRelevantPlanes != 4) +		_pixelPacking = false; + +	uint16 outPitch = _header.width; + +	if (_pixelPacking) +		outPitch /= (8 / _numRelevantPlanes); + +	// FIXME: CLUT8 is not a proper format for packed bitmaps but there is no way to tell it to use 1, 2 or 4 bits per pixel +	_surface = new Graphics::Surface(); +	_surface->create(outPitch, _header.height, Graphics::PixelFormat::createFormatCLUT8()); + +	if (_type == TYPE_ILBM) { +		uint32 scanlinePitch = ((_header.width + 15) >> 4) << 1; +		byte *scanlines = new byte[scanlinePitch * _header.numPlanes]; +		byte *data = (byte *)_surface->pixels; + +		for (uint16 i = 0; i < _header.height; ++i) { +			byte *scanline = scanlines; + +			for (uint16 j = 0; j < _header.numPlanes; ++j) { +				uint16 outSize = scanlinePitch; + +				if (_header.compression) { +					Common::PackBitsReadStream packStream(stream); +					packStream.read(scanline, outSize); +				} else { +					stream.read(scanline, outSize); +				} + +				scanline += outSize; +			} + +			packPixels(scanlines, data, scanlinePitch, outPitch); +			data += outPitch; +		} + +		delete[] scanlines; +	} else if (_type == TYPE_PBM) { +		byte *data = (byte *)_surface->pixels; +		uint32 outSize = _header.width * _header.height; + +		if (_header.compression) { +			Common::PackBitsReadStream packStream(stream); +			packStream.read(data, outSize); +		} else { +			stream.read(data, outSize); +		} +	} +} + +void IFFDecoder::packPixels(byte *scanlines, byte *data, const uint16 scanlinePitch, const uint16 outPitch) { +	uint32 numPixels = _header.width; + +	if (_pixelPacking) +		numPixels = outPitch * (8 / _numRelevantPlanes); + +	for (uint32 x = 0; x < numPixels; ++x) { +		byte *scanline = scanlines; +		byte pixel = 0; +		byte offset = x >> 3; +		byte bit = 0x80 >> (x & 7); + +		// first build a pixel by scanning all the usable planes in the input +		for (uint32 plane = 0; plane < _numRelevantPlanes; ++plane) { +			if (scanline[offset] & bit) +				pixel |= (1 << plane); + +			scanline += scanlinePitch; +		} + +		// then output the pixel according to the requested packing +		if (!_pixelPacking) +			data[x] = pixel; +		else if (_numRelevantPlanes == 1) +			data[x / 8] |= (pixel << (x & 7)); +		else if (_numRelevantPlanes == 2) +			data[x / 4] |= (pixel << ((x & 3) << 1)); +		else if (_numRelevantPlanes == 4) +			data[x / 2] |= (pixel << ((x & 1) << 2)); +	} +} + +} // End of namespace Graphics diff --git a/graphics/decoders/iff.h b/graphics/decoders/iff.h new file mode 100644 index 0000000000..beac62e519 --- /dev/null +++ b/graphics/decoders/iff.h @@ -0,0 +1,119 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** + * @file + * Image decoder used in engines: + *  - gob + *  - parallaction + *  - queen + *  - saga + */ + +#ifndef GRAPHICS_DECODERS_IFF_H +#define GRAPHICS_DECODERS_IFF_H + +#include "common/array.h" +#include "common/endian.h" + +#include "graphics/surface.h" +#include "graphics/decoders/image_decoder.h" + +namespace Common { +class SeekableReadStream; +} + +namespace Graphics { + +struct Surface; + +class IFFDecoder : public ImageDecoder { +public: +	struct Header { +		uint16 width, height; +		uint16 x, y; +		byte numPlanes; +		byte masking; +		byte compression; +		byte flags; +		uint16 transparentColor; +		byte xAspect, yAspect; +		uint16 pageWidth, pageHeight; +	}; + +	struct PaletteRange { +		int16  timer, step, flags; +		byte first, last; +	}; + +	enum Type { +		TYPE_UNKNOWN = 0, +		TYPE_ILBM, +		TYPE_PBM +	}; + +	IFFDecoder(); +	virtual ~IFFDecoder(); + +	// ImageDecoder API +	void destroy(); +	bool loadStream(Common::SeekableReadStream &stream); +	const Header *getHeader() const { return &_header; } +	const Surface *getSurface() const { return _surface; } +	const byte *getPalette() const { return _palette; } +	const Common::Array<PaletteRange> &getPaletteRanges() const { return _paletteRanges; } +	uint16 getPaletteColorCount() const { return _paletteColorCount; } + +	/** +	* The number of planes to decode, also determines the pixel packing if _packPixels is true. +	* 8 == decode all planes, map 1 pixel in 1 byte. (default, no packing even if _packPixels is true) +	*/ +	void setNumRelevantPlanes(const uint8 numRelevantPlanes) { _numRelevantPlanes = numRelevantPlanes; } + +	/** +	* Enables pixel packing, the amount of packing is determined by _numRelevantPlanes +	* 1 == decode first plane, pack 8 pixels in 1 byte. This makes _surface->w 1/8th of _header.width +	* 2 == decode first 2 planes, pack 4 pixels in 1 byte. This makes _surface->w 1/4th of _header.width +	* 4 == decode first 4 planes, pack 2 pixels in 1 byte. This makes _surface->w half of _header.width +	* Packed bitmaps won't have a proper surface format since there is no way to tell it to use 1, 2 or 4 bits per pixel +	*/ +	void setPixelPacking(const bool pixelPacking) { _pixelPacking = pixelPacking; } +private: + +	Header _header; +	Surface *_surface; +	byte *_palette; +	Common::Array<PaletteRange> _paletteRanges; +	Type _type; +	uint16 _paletteColorCount; +	uint8 _numRelevantPlanes; +	bool _pixelPacking; + +	void loadHeader(Common::SeekableReadStream &stream); +	void loadPalette(Common::SeekableReadStream &stream, const uint32 size); +	void loadPaletteRange(Common::SeekableReadStream &stream, const uint32 size); +	void loadBitmap(Common::SeekableReadStream &stream); +	void packPixels(byte *scanlines, byte *data, const uint16 scanlinePitch, const uint16 outPitch); +}; + +} // End of namespace Graphics + +#endif // GRAPHICS_DECODERS_IFF_H diff --git a/graphics/iff.cpp b/graphics/iff.cpp deleted file mode 100644 index 395d8d803b..0000000000 --- a/graphics/iff.cpp +++ /dev/null @@ -1,289 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "graphics/iff.h" -#include "graphics/surface.h" - -#include "common/endian.h" -#include "common/func.h" -#include "common/iff_container.h" -#include "common/textconsole.h" -#include "common/util.h" - -namespace Graphics { - -void BMHD::load(Common::ReadStream *stream) { -	assert(stream); -	stream->read(this, sizeof(BMHD)); -	width = FROM_BE_16(width); -	height = FROM_BE_16(height); -	x = FROM_BE_16(x); -	y = FROM_BE_16(y); -	transparentColor = FROM_BE_16(transparentColor); -	pageWidth = FROM_BE_16(pageWidth); -	pageHeight = FROM_BE_16(pageHeight); -} - - -void ILBMDecoder::loadHeader(Common::ReadStream *stream) { -	_header.load(stream); -} - -void ILBMDecoder::loadBitmap(uint32 mode, byte *buffer, Common::ReadStream *stream, uint32 outPitch) { -	assert(stream); -	uint32 numPlanes = MIN(mode & ILBM_UNPACK_PLANES, (uint32)_header.depth); -	assert(numPlanes >= 1 && numPlanes <= 8 && numPlanes != 7); - -	bool packPixels = (mode & ILBM_PACK_PLANES) != 0; -	if (numPlanes != 1 && numPlanes != 2 && numPlanes != 4) { -		packPixels = false; -	} - -	if (outPitch == 0) -		outPitch = _header.width; -	if (packPixels) { -		outPitch /= (8 / numPlanes); -	} -	byte *out = buffer; - -	switch (_header.pack) { -	case 0: {	// non-compressed bitmap -		// setup a buffer to hold enough data to build a line in the output -		uint32 scanlineWidth = ((_header.width + 15) / 16) << 1; -		byte *scanline = new byte[scanlineWidth * _header.depth]; - -		for (uint i = 0; i < _header.height; ++i) { -			byte *s = scanline; -			for (uint32 j = 0; j < _header.depth; ++j) { -				stream->read(s, scanlineWidth); -				s += scanlineWidth; -			} - -			planarToChunky(out, outPitch, scanline, scanlineWidth, numPlanes, packPixels); -			out += outPitch; -		} - -		delete[] scanline; -		break; -	} - -	case 1: {	// PackBits compressed bitmap -		Graphics::PackBitsReadStream packStream(*stream); - -		// setup a buffer to hold enough data to build a line in the output -		uint32 scanlineWidth = ((_header.width + 15) / 16) << 1; -		byte *scanline = new byte[scanlineWidth * _header.depth]; - -		for (uint i = 0; i < _header.height; ++i) { -			byte *s = scanline; -			for (uint32 j = 0; j < _header.depth; ++j) { -				packStream.read(s, scanlineWidth); -				s += scanlineWidth; -			} - -			planarToChunky(out, outPitch, scanline, scanlineWidth, numPlanes, packPixels); -			out += outPitch; -		} - -		delete[] scanline; -		break; -	} - -	default: -		// implement other compression types here! -		error("only uncompressed and RLE compressed ILBM files are supported"); -		break; -	} -} - -void ILBMDecoder::planarToChunky(byte *out, uint32 outPitch, byte *in, uint32 inWidth, uint32 nPlanes, bool packPlanes) { -	byte pix, ofs, bit; -	byte *s; - -	uint32 pixels = outPitch; -	if (packPlanes) { -		pixels *= (8 / nPlanes); -	} - -	for (uint32 x = 0; x < pixels; ++x) { - -		pix = 0; -		ofs = x >> 3; -		bit = 0x80 >> (x & 7); - -		// first build a pixel by scanning all the usable planes in the input -		s = in; -		for (uint32 plane = 0; plane < nPlanes; ++plane) { -			if (s[ofs] & bit) { -				pix |= (1 << plane); -			} -			s += inWidth; -		} - - -		// then output the pixel according to the requested packing -		if (!packPlanes) { -			out[x] = pix; -		} else if (nPlanes == 1) { -			out[x / 8] |= (pix << (x & 7)); -		} else if (nPlanes == 2) { -			out[x / 4] |= (pix << ((x & 3) << 1)); -		} else if (nPlanes == 4) { -			out[x / 2] |= (pix << ((x & 1) << 2)); -		} -	} - -} - - -//	handles PBM subtype of IFF FORM files -// -struct PBMDecoder { -	/** -	 * PBM header data, necessary for loadBitmap() -	 */ -	Graphics::BMHD	_header; - -	/** -	 * Fills the _header member from the given stream. -	 */ -	void loadHeader(Common::ReadStream *stream); - -	/** -	 * Loads and unpacks the PBM bitmap data from the stream into the buffer. -	 * The functions assumes the buffer is large enough to contain all data. -	 */ -	void loadBitmap(byte *buffer, Common::ReadStream *stream); -}; - -void PBMDecoder::loadHeader(Common::ReadStream *stream) { -	_header.load(stream); -} - - -void PBMDecoder::loadBitmap(byte *buffer, Common::ReadStream *stream) { -	uint32 outSize = _header.width * _header.height; - -	switch (_header.pack) { -	case 0: -		stream->read(buffer, outSize); -		break; - -	case 1: { -		PackBitsReadStream packStream(*stream); -		packStream.read(buffer, outSize); -		break; -		} -	} -} - - -struct PBMLoader { -	PBMDecoder _decoder; -	Surface *_surface; -	byte *_colors; - -	void load(Common::ReadStream &input, Surface &surface, byte *&colors) { -		_surface = &surface; -		_colors = colors; -		Common::IFFParser parser(&input); -		Common::Functor1Mem<Common::IFFChunk &, bool, PBMLoader> c(this, &PBMLoader::callback); -		parser.parse(c); -	} - -	bool callback(Common::IFFChunk &chunk) { -		switch (chunk._type) { -		case ID_BMHD: -			_decoder.loadHeader(chunk._stream); -			break; - -		case ID_CMAP: -			if (_colors) { -				chunk._stream->read(_colors, chunk._size); -			} -			break; - -		case ID_BODY: -			if (_surface) { -				_surface->create(_decoder._header.width, _decoder._header.height, PixelFormat::createFormatCLUT8()); -				_decoder.loadBitmap((byte *)_surface->pixels, chunk._stream); -			} -			return true;	// stop the parser -		} - -		return false; -	} -}; - -void decodePBM(Common::ReadStream &input, Surface &surface, byte *colors) { -	PBMLoader loader; -	loader.load(input, surface, colors); -} - - - - -PackBitsReadStream::PackBitsReadStream(Common::ReadStream &input) : _input(&input) { -} - -PackBitsReadStream::~PackBitsReadStream() { -} - -bool PackBitsReadStream::eos() const { -	return _input->eos(); -} - -uint32 PackBitsReadStream::read(void *dataPtr, uint32 dataSize) { -	byte *out = (byte *)dataPtr; -	uint32 left = dataSize; - -	uint32 lenR = 0, lenW = 0; -	while (left > 0 && !_input->eos()) { -		lenR = _input->readByte(); - -		if (lenR == 128) { -			// no-op -			lenW = 0; -		} else if (lenR <= 127) { -			// literal run -			lenR++; -			lenW = MIN(lenR, left); -			for (uint32 j = 0; j < lenW; j++) { -				*out++ = _input->readByte(); -			} -			for (; lenR > lenW; lenR--) { -				_input->readByte(); -			} -		} else {  // len > 128 -			// expand run -			lenW = MIN((256 - lenR) + 1, left); -			byte val = _input->readByte(); -			memset(out, val, lenW); -			out += lenW; -		} - -		left -= lenW; -	} - -	return dataSize - left; -} - -} // End of namespace Graphics diff --git a/graphics/iff.h b/graphics/iff.h deleted file mode 100644 index 651867fa52..0000000000 --- a/graphics/iff.h +++ /dev/null @@ -1,137 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/* - * Bitmap decoder used in engines: - *  - parallaction - *  - saga - */ - -#ifndef GRAPHICS_IFF_H -#define GRAPHICS_IFF_H - -#include "common/stream.h" - -namespace Graphics { - -struct Surface; - - -struct BMHD { -	uint16 width, height; -	uint16 x, y; -	byte depth; -	byte masking; -	byte pack; -	byte flags; -	uint16 transparentColor; -	byte xAspect, yAspect; -	uint16 pageWidth, pageHeight; - -	BMHD() { -		memset(this, 0, sizeof(*this)); -	} - -	void load(Common::ReadStream *stream); -}; - - -struct ILBMDecoder { -	/** -	 * ILBM header data, necessary for loadBitmap() -	 */ -	Graphics::BMHD	_header; - -	/** -	 * Available decoding modes for loadBitmap(). -	 */ -	enum { -		ILBM_UNPACK_PLANES = 0xFF,		///< Decode all bitplanes, and map 1 pixel to 1 byte. -		ILBM_PACK_PLANES   = 0x100,		///< Request unpacking, used as a mask with below options. - -		ILBM_1_PLANES      = 1,									///< Decode only the first bitplane, don't pack. -		ILBM_1_PACK_PLANES = ILBM_1_PLANES | ILBM_PACK_PLANES, 	///< Decode only the first bitplane, pack 8 pixels in 1 byte. -		ILBM_2_PLANES      = 2,									///< Decode first 2 bitplanes, don't pack. -		ILBM_2_PACK_PLANES = ILBM_2_PLANES | ILBM_PACK_PLANES,	///< Decode first 2 bitplanes, pack 4 pixels in 1 byte. -		ILBM_3_PLANES      = 3,									///< Decode first 3 bitplanes, don't pack. -		ILBM_4_PLANES      = 4,									///< Decode first 4 bitplanes, don't pack. -		ILBM_4_PACK_PLANES = ILBM_4_PLANES | ILBM_PACK_PLANES,	///< Decode first 4 bitplanes, pack 2 pixels in 1 byte. -		ILBM_5_PLANES      = 5,									///< Decode first 5 bitplanes, don't pack. -		ILBM_8_PLANES      = 8									///< Decode all 8 bitplanes. -	}; - -	/** -	 * Fills the _header member from the given stream. -	 */ -	void loadHeader(Common::ReadStream *stream); - -	/** -	 * Loads and unpacks the ILBM bitmap data from the stream into the buffer. -	 * The functions assumes the buffer is large enough to contain all data. -	 * The caller controls how data should be packed by choosing mode from -	 * the enum above. -	 */ -	void loadBitmap(uint32 mode, byte *buffer, Common::ReadStream *stream, uint32 outPitch = 0); - -	/** -	 * Converts from bitplanar to chunky representation. Intended for internal -	 * usage, but you can be (ab)use it from client code if you know what you -	 * are doing. -	 */ -	void planarToChunky(byte *out, uint32 width, byte *in, uint32 planeWidth, uint32 nPlanes, bool packPlanes); -}; - - - -/** - * Handles PBM subtype of IFF FORM files - */ -void decodePBM(Common::ReadStream &input, Surface &surface, byte *colors); - - -/** - * Decode a given PackBits encoded stream. - * - * PackBits is an RLE compression algorithm introduced by Apple. It is also - * used to encode ILBM and PBM subtypes of IFF files, and some flavors of - * TIFF. - * - * As there is no compression across row boundaries in the above formats, - * read() will extract a *new* line on each call, discarding any alignment - * or padding. - */ -class PackBitsReadStream : public Common::ReadStream { - -protected: -	Common::ReadStream *_input; - -public: -	PackBitsReadStream(Common::ReadStream &input); -	~PackBitsReadStream(); - -	virtual bool eos() const; - -	uint32 read(void *dataPtr, uint32 dataSize); -}; - -} // End of namespace Graphics - -#endif diff --git a/graphics/module.mk b/graphics/module.mk index f560d9dc97..8b63435905 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -11,7 +11,6 @@ MODULE_OBJS := \  	fonts/newfont.o \  	fonts/ttf.o \  	fonts/winfont.o \ -	iff.o \  	maccursor.o \  	primitives.o \  	scaler.o \ @@ -24,6 +23,7 @@ MODULE_OBJS := \  	wincursor.o \  	yuv_to_rgb.o \  	decoders/bmp.o \ +	decoders/iff.o \  	decoders/jpeg.o \  	decoders/pcx.o \  	decoders/pict.o \ | 
