diff options
author | Sven Hesse | 2010-08-08 01:02:19 +0000 |
---|---|---|
committer | Sven Hesse | 2010-08-08 01:02:19 +0000 |
commit | 945103a43c9a15a4a9a07765197b0551593b4236 (patch) | |
tree | f92e247c8f44b15e642e5f03bb10c257759e3482 | |
parent | eed41aa22337571c18e08abfdf00d19fd2a5121d (diff) | |
download | scummvm-rg350-945103a43c9a15a4a9a07765197b0551593b4236.tar.gz scummvm-rg350-945103a43c9a15a4a9a07765197b0551593b4236.tar.bz2 scummvm-rg350-945103a43c9a15a4a9a07765197b0551593b4236.zip |
VIDEO/GOB: Implement and use CoktelDecoder::getFrameCoords()
svn-id: r51909
-rw-r--r-- | engines/gob/videoplayer.cpp | 2 | ||||
-rw-r--r-- | graphics/video/coktel_decoder.cpp | 36 | ||||
-rw-r--r-- | graphics/video/coktel_decoder.h | 7 |
3 files changed, 43 insertions, 2 deletions
diff --git a/engines/gob/videoplayer.cpp b/engines/gob/videoplayer.cpp index 16d3a7c6fd..83a70a648b 100644 --- a/engines/gob/videoplayer.cpp +++ b/engines/gob/videoplayer.cpp @@ -494,10 +494,8 @@ void VideoPlayer::writeVideoInfo(const Common::String &file, int16 varX, int16 v width = video.decoder->getWidth(); width = video.decoder->getHeight(); - /* if (VAR_OFFSET(varX) == 0xFFFFFFFF) video.decoder->getFrameCoords(1, x, y, width, height); - */ WRITE_VAR_OFFSET(varX , x); WRITE_VAR_OFFSET(varY , y); diff --git a/graphics/video/coktel_decoder.cpp b/graphics/video/coktel_decoder.cpp index 4af11c3f1a..9d056da48d 100644 --- a/graphics/video/coktel_decoder.cpp +++ b/graphics/video/coktel_decoder.cpp @@ -205,6 +205,10 @@ void CoktelDecoder::disableSound() { _audioStream = 0; } +bool CoktelDecoder::getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height) { + return false; +} + bool CoktelDecoder::hasEmbeddedFiles() const { return false; } @@ -2332,6 +2336,38 @@ PixelFormat VMDDecoder::getPixelFormat() const { return PixelFormat::createFormatCLUT8(); } +bool VMDDecoder::getPartCoords(int16 frame, PartType type, int16 &x, int16 &y, int16 &width, int16 &height) { + if (frame >= ((int32) _frameCount)) + return false; + + Frame &f = _frames[frame]; + + // Look for a part matching the requested type, stopping at a separator + Part *part = 0; + for (int i = 0; i < _partsPerFrame; i++) { + Part &p = f.parts[i]; + + if ((p.type == kPartTypeSeparator) || (p.type == type)) { + part = &p; + break; + } + } + + if (!part) + return false; + + x = part->left; + y = part->top; + width = part->right - part->left + 1; + height = part->bottom - part->top + 1; + + return true; +} + +bool VMDDecoder::getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height) { + return getPartCoords(frame, kPartTypeVideo, x, y, width, height); +} + bool VMDDecoder::hasEmbeddedFiles() const { return !_files.empty(); } diff --git a/graphics/video/coktel_decoder.h b/graphics/video/coktel_decoder.h index 408523ff48..60fdb57123 100644 --- a/graphics/video/coktel_decoder.h +++ b/graphics/video/coktel_decoder.h @@ -98,6 +98,9 @@ public: void enableSound(); void disableSound(); + /** Return the coordinates of the specified frame. */ + bool getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height); + /** Return whether that video has any embedded files. */ virtual bool hasEmbeddedFiles() const; @@ -340,6 +343,8 @@ public: bool seek(int32 frame, int whence = SEEK_SET, bool restart = false); + bool getFrameCoords(int16 frame, int16 &x, int16 &y, int16 &width, int16 &height); + bool hasEmbeddedFiles() const; bool hasEmbeddedFile(const Common::String &fileName) const; Common::MemoryReadStream *getEmbeddedFile(const Common::String &fileName) const; @@ -480,6 +485,8 @@ private: // Sound decompression byte *deDPCM (const byte *data, uint32 &size, int32 init[2]); byte *deADPCM(const byte *data, uint32 &size, int32 init, int32 index); + + bool getPartCoords(int16 frame, PartType type, int16 &x, int16 &y, int16 &width, int16 &height); }; } // End of namespace Graphics |