aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/cel_decoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pink/cel_decoder.cpp')
-rw-r--r--engines/pink/cel_decoder.cpp256
1 files changed, 128 insertions, 128 deletions
diff --git a/engines/pink/cel_decoder.cpp b/engines/pink/cel_decoder.cpp
index 044a8d00b2..0387873618 100644
--- a/engines/pink/cel_decoder.cpp
+++ b/engines/pink/cel_decoder.cpp
@@ -29,224 +29,224 @@
namespace Pink {
bool CelDecoder::loadStream(Common::SeekableReadStream *stream) {
- close();
+ close();
- /* uint32 frameSize = */ stream->readUint32LE();
- uint16 frameType = stream->readUint16LE();
+ /* uint32 frameSize = */ stream->readUint32LE();
+ uint16 frameType = stream->readUint16LE();
- // Check FLC magic number
- if (frameType != 0xAF12) {
- warning("FlicDecoder::loadStream(): attempted to load non-FLC data (type = 0x%04X)", frameType);
- return false;
- }
+ // Check FLC magic number
+ if (frameType != 0xAF12) {
+ warning("FlicDecoder::loadStream(): attempted to load non-FLC data (type = 0x%04X)", frameType);
+ return false;
+ }
- uint16 frameCount = stream->readUint16LE();
- uint16 width = stream->readUint16LE();
- uint16 height = stream->readUint16LE();
- uint16 colorDepth = stream->readUint16LE();
- if (colorDepth != 8) {
- warning("FlicDecoder::loadStream(): attempted to load an FLC with a palette of color depth %d. Only 8-bit color palettes are supported", colorDepth);
- return false;
- }
+ uint16 frameCount = stream->readUint16LE();
+ uint16 width = stream->readUint16LE();
+ uint16 height = stream->readUint16LE();
+ uint16 colorDepth = stream->readUint16LE();
+ if (colorDepth != 8) {
+ warning("FlicDecoder::loadStream(): attempted to load an FLC with a palette of color depth %d. Only 8-bit color palettes are supported", colorDepth);
+ return false;
+ }
- addTrack(new CelVideoTrack(stream, frameCount, width, height));
- return true;
+ addTrack(new CelVideoTrack(stream, frameCount, width, height));
+ return true;
}
int32 CelDecoder::getX(){
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- if (!track)
- return -1;
- return track->getX();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ if (!track)
+ return -1;
+ return track->getX();
}
int32 CelDecoder::getY() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- if (!track)
- return -1;
- return track->getY();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ if (!track)
+ return -1;
+ return track->getY();
}
uint16 CelDecoder::getTransparentColourIndex() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- if (!track)
- return 0;
- return track->getTransparentColourIndex();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ if (!track)
+ return 0;
+ return track->getTransparentColourIndex();
}
const Graphics::Surface *CelDecoder::getCurrentFrame() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- if (!track)
- return 0;
- return track->getCurrentFrame();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ if (!track)
+ return 0;
+ return track->getCurrentFrame();
}
Common::Point CelDecoder::getCenter() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- if (!track)
- return {0,0};
- return track->getCenter();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ if (!track)
+ return {0,0};
+ return track->getCenter();
}
Common::Rect &CelDecoder::getRectangle() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- return track->getRect();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ return track->getRect();
}
void CelDecoder::setX(int32 x) {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- track->setX(x);
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ track->setX(x);
}
void CelDecoder::setY(int32 y) {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- track->setY(y);
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ track->setY(y);
}
void CelDecoder::skipFrame() {
- CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
- track->skipFrame();
+ CelVideoTrack *track = (CelVideoTrack*) getTrack(0);
+ track->skipFrame();
}
CelDecoder::CelVideoTrack::CelVideoTrack(Common::SeekableReadStream *stream, uint16 frameCount, uint16 width, uint16 height, bool skipHeader)
- : FlicVideoTrack(stream, frameCount, width, height, 1), _center(0,0), _transparentColourIndex(0){
- readHeader();
+ : FlicVideoTrack(stream, frameCount, width, height, 1), _center(0,0), _transparentColourIndex(0){
+ readHeader();
}
#define PREFIX_TYPE 0xF100
#define CEL_DATA 3
void CelDecoder::CelVideoTrack::readPrefixChunk() {
- _fileStream->seek(0x80);
- uint32 chunkSize = _fileStream->readUint32LE();
- uint16 chunkType = _fileStream->readUint16LE();
- if (chunkType != PREFIX_TYPE)
- return;
- uint32 offset = 6;
-
- uint32 subchunkSize = _fileStream->readUint32LE();
- uint16 subchunkType = _fileStream->readUint16LE();
-
- switch (subchunkType) {
- case CEL_DATA:
- _fileStream->readUint16LE();
- _center.x = _fileStream->readUint16LE();
- _center.y = _fileStream->readUint16LE();
- break;
- default:
- error("Unknown subchunk type");
- _fileStream->skip(subchunkSize - 6);
- break;
- }
- _rect = Common::Rect::center(_center.x, _center.y, _surface->w, _surface->h);
+ _fileStream->seek(0x80);
+ uint32 chunkSize = _fileStream->readUint32LE();
+ uint16 chunkType = _fileStream->readUint16LE();
+ if (chunkType != PREFIX_TYPE)
+ return;
+ uint32 offset = 6;
+
+ uint32 subchunkSize = _fileStream->readUint32LE();
+ uint16 subchunkType = _fileStream->readUint16LE();
+
+ switch (subchunkType) {
+ case CEL_DATA:
+ _fileStream->readUint16LE();
+ _center.x = _fileStream->readUint16LE();
+ _center.y = _fileStream->readUint16LE();
+ break;
+ default:
+ error("Unknown subchunk type");
+ _fileStream->skip(subchunkSize - 6);
+ break;
+ }
+ _rect = Common::Rect::center(_center.x, _center.y, _surface->w, _surface->h);
}
void CelDecoder::CelVideoTrack::readHeader() {
- _fileStream->readUint16LE();
+ _fileStream->readUint16LE();
- _frameDelay = _startFrameDelay = _fileStream->readUint32LE();
+ _frameDelay = _startFrameDelay = _fileStream->readUint32LE();
- _fileStream->seek(80);
- _offsetFrame1 = _fileStream->readUint32LE();
- _offsetFrame2 = _fileStream->readUint32LE();
+ _fileStream->seek(80);
+ _offsetFrame1 = _fileStream->readUint32LE();
+ _offsetFrame2 = _fileStream->readUint32LE();
- if (_offsetFrame1 > 0x80) {
- readPrefixChunk();
- }
+ if (_offsetFrame1 > 0x80) {
+ readPrefixChunk();
+ }
- _fileStream->seek(_offsetFrame1);
+ _fileStream->seek(_offsetFrame1);
}
int32 CelDecoder::CelVideoTrack::getX() const {
- return (_center.x - getWidth() / 2) < 0 ? 0 : _center.x - getWidth() / 2;
+ return (_center.x - getWidth() / 2) < 0 ? 0 : _center.x - getWidth() / 2;
}
int32 CelDecoder::CelVideoTrack::getY() const {
- return (_center.y - getHeight() / 2) < 0 ? 0 : _center.y - getHeight() / 2;
+ return (_center.y - getHeight() / 2) < 0 ? 0 : _center.y - getHeight() / 2;
}
uint16 CelDecoder::CelVideoTrack::getTransparentColourIndex() {
- return _transparentColourIndex;
+ return _transparentColourIndex;
}
const Graphics::Surface *CelDecoder::CelVideoTrack::getCurrentFrame() {
- return _surface;
+ return _surface;
}
Common::Point CelDecoder::CelVideoTrack::getCenter() {
- return _center;
+ return _center;
}
Common::Rect &CelDecoder::CelVideoTrack::getRect() {
- return _rect;
+ return _rect;
}
#define FRAME_TYPE 0xF1FA
void CelDecoder::CelVideoTrack::skipFrame() {
- // Read chunk
- /*uint32 frameSize = */ _fileStream->readUint32LE();
- uint16 frameType = _fileStream->readUint16LE();
+ // Read chunk
+ /*uint32 frameSize = */ _fileStream->readUint32LE();
+ uint16 frameType = _fileStream->readUint16LE();
- switch (frameType) {
- case FRAME_TYPE:
- handleFrame();
- break;
- default:
- error("FlicDecoder::decodeFrame(): unknown main chunk type (type = 0x%02X)", frameType);
- break;
- }
+ switch (frameType) {
+ case FRAME_TYPE:
+ handleFrame();
+ break;
+ default:
+ error("FlicDecoder::decodeFrame(): unknown main chunk type (type = 0x%02X)", frameType);
+ break;
+ }
- _curFrame++;
- //_nextFrameStartTime += _frameDelay;
+ _curFrame++;
+ //_nextFrameStartTime += _frameDelay;
- if (_atRingFrame) {
- // If we decoded the ring frame, seek to the second frame
- _atRingFrame = false;
- _fileStream->seek(_offsetFrame2);
- }
+ if (_atRingFrame) {
+ // If we decoded the ring frame, seek to the second frame
+ _atRingFrame = false;
+ _fileStream->seek(_offsetFrame2);
+ }
- if (_curFrame == 0)
- _transparentColourIndex = *(byte*)_surface->getBasePtr(0,0);
+ if (_curFrame == 0)
+ _transparentColourIndex = *(byte*)_surface->getBasePtr(0,0);
}
const Graphics::Surface *CelDecoder::CelVideoTrack::decodeNextFrame() {
- // Read chunk
- /*uint32 frameSize = */ _fileStream->readUint32LE();
- uint16 frameType = _fileStream->readUint16LE();
+ // Read chunk
+ /*uint32 frameSize = */ _fileStream->readUint32LE();
+ uint16 frameType = _fileStream->readUint16LE();
- switch (frameType) {
- case FRAME_TYPE:
- handleFrame();
- break;
- default:
- error("FlicDecoder::decodeFrame(): unknown main chunk type (type = 0x%02X)", frameType);
- break;
- }
+ switch (frameType) {
+ case FRAME_TYPE:
+ handleFrame();
+ break;
+ default:
+ error("FlicDecoder::decodeFrame(): unknown main chunk type (type = 0x%02X)", frameType);
+ break;
+ }
- _curFrame++;
- _nextFrameStartTime += _frameDelay;
+ _curFrame++;
+ _nextFrameStartTime += _frameDelay;
- if (_atRingFrame) {
- // If we decoded the ring frame, seek to the second frame
- _atRingFrame = false;
- _fileStream->seek(_offsetFrame2);
- }
+ if (_atRingFrame) {
+ // If we decoded the ring frame, seek to the second frame
+ _atRingFrame = false;
+ _fileStream->seek(_offsetFrame2);
+ }
- if (_curFrame == 0)
- _transparentColourIndex = *(byte*)_surface->getBasePtr(0,0);
+ if (_curFrame == 0)
+ _transparentColourIndex = *(byte*)_surface->getBasePtr(0,0);
- return _surface;
+ return _surface;
}
void CelDecoder::CelVideoTrack::setX(int32 x) {
- _center.x = x ;//+ getWidth() / 2;
+ _center.x = x ;//+ getWidth() / 2;
}
void CelDecoder::CelVideoTrack::setY(int32 y) {
- _center.y = y;//+ getHeight() / 2;
+ _center.y = y;//+ getHeight() / 2;
}
} // End of namepsace Pink