diff options
| -rw-r--r-- | engines/gob/videoplayer.cpp | 7 | ||||
| -rw-r--r-- | graphics/video/coktel_decoder.cpp | 20 | 
2 files changed, 19 insertions, 8 deletions
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp index 0d72751c87..9e49bfc092 100644 --- a/engines/gob/videoplayer.cpp +++ b/engines/gob/videoplayer.cpp @@ -749,8 +749,11 @@ void VideoPlayer::copyPalette(const Video &video, int16 palStart, int16 palEnd)  	if (palEnd < 0)  		palEnd = 255; -	memcpy(((char *)(_vm->_global->_pPaletteDesc->vgaPal)) + palStart * 3, -			video.decoder->getPalette() + palStart * 3, (palEnd - palStart + 1) * 3); +	palStart =  palStart      * 3; +	palEnd   = (palEnd   + 1) * 3; + +	for (int i = palStart; i <= palEnd; i++) +		((char *)(_vm->_global->_pPaletteDesc->vgaPal))[i] = video.decoder->getPalette()[i] >> 2;  }  } // End of namespace Gob diff --git a/graphics/video/coktel_decoder.cpp b/graphics/video/coktel_decoder.cpp index ac0622f739..30ca157406 100644 --- a/graphics/video/coktel_decoder.cpp +++ b/graphics/video/coktel_decoder.cpp @@ -916,7 +916,8 @@ bool IMDDecoder::load(Common::SeekableReadStream *stream) {  	_features |= kFeaturesPalette;  	// Palette -	_stream->read((byte *)_palette, 768); +	for (int i = 0; i < 768; i++) +		_palette[i] = _stream->readByte() << 2;  	_paletteDirty = true; @@ -1194,7 +1195,9 @@ void IMDDecoder::processFrame() {  			_paletteDirty = true; -			_stream->read(_palette, 768); +			for (int i = 0; i < 768; i++) +				_palette[i] = _stream->readByte() << 2; +  			cmd = _stream->readUint16LE();  		} @@ -1307,8 +1310,10 @@ bool IMDDecoder::renderFrame(Common::Rect &rect) {  		// One byte index  		int index = *dataPtr++; -		// 16 entries with each 3 bytes (RGB) -		memcpy(_palette + index * 3, dataPtr, MIN((255 - index) * 3, 48)); + +		int count = MIN((255 - index) * 3, 48); +		for (int i = 0; i < count; i++) +			_palette[index * 3 + i] = dataPtr[i] << 2;  		dataPtr += 48;  		type ^= 0x10; @@ -1605,7 +1610,8 @@ bool VMDDecoder::load(Common::SeekableReadStream *stream) {  	_videoCodec = _stream->readUint32BE();  	if (_features & kFeaturesPalette) { -		_stream->read((byte *)_palette, 768); +		for (int i = 0; i < 768; i++) +			_palette[i] = _stream->readByte() << 2;  		_paletteDirty = true;  	} @@ -2011,7 +2017,9 @@ void VMDDecoder::processFrame() {  				uint8 index = _stream->readByte();  				uint8 count = _stream->readByte(); -				_stream->read(_palette + index * 3, (count + 1) * 3); +				for (int j = 0; j < ((count + 1) * 3); j++) +					_palette[index * 3 + j] = _stream->readByte() << 2; +  				_stream->skip((255 - count) * 3);  				_paletteDirty = true;  | 
