diff options
Diffstat (limited to 'engines/gob/coktelvideo.h')
-rw-r--r-- | engines/gob/coktelvideo.h | 417 |
1 files changed, 0 insertions, 417 deletions
diff --git a/engines/gob/coktelvideo.h b/engines/gob/coktelvideo.h deleted file mode 100644 index c2590dc503..0000000000 --- a/engines/gob/coktelvideo.h +++ /dev/null @@ -1,417 +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. - * - * $URL$ - * $Id$ - * - */ - -#ifndef GOB_COKTELVIDEO_H -#define GOB_COKTELVIDEO_H - -#include "common/stream.h" -#include "common/array.h" -#include "graphics/dither.h" -#include "sound/mixer.h" -#include "sound/audiostream.h" - -namespace Gob { - -class Indeo3; - -/** Common interface for handling Coktel Vision videos and derivated formats. */ -class CoktelVideo { -public: - enum Features { - kFeaturesNone = 0, - /** Has an own palette. */ - kFeaturesPalette = 8, - /** Suggests a data size. */ - kFeaturesDataSize = 0x20, - /** Has sound. */ - kFeaturesSound = 0x40, - /** Has specific frame coordinates. */ - kFeaturesFrameCoords = 0x80, - /** Has general standard coordinates. */ - kFeaturesStdCoords = 0x100, - /** Has a frame positions table. */ - kFeaturesFramesPos = 0x200, - /** Has video. */ - kFeaturesVideo = 0x400, - /** Is a full color (non-paletted) video. */ - kFeaturesFullColor = 0x4000, - /** Supports automatic doubling. */ - kFeaturesSupportsDouble = 0x40000000 - }; - - enum StateFlags { - kStateNone = 0, - /** Changed the palette. */ - kStatePalette = 0x10, - /** Performed a jump to another frame. */ - kStateJump = 0x200, - /** Updated according to the specific frame coordinates. */ - kStateFrameCoords = 0x400, - /** Got no frame data. */ - kStateNoVideoData = 0x800, - /** Updated according to the general standard coordinates. */ - kStateStdCoords = 0x1000, - /** Had to explicitely seek to the frame. */ - kStateSeeked = 0x2000, - /** Reached a break-point. */ - kStateBreak = 0x8000 - }; - - struct State { - /** Left-most value of the updated rectangle. */ - int16 left; - /** Top-most value of the updated rectangle. */ - int16 top; - /** Right-most value of the updated rectangle. */ - int16 right; - /** Bottom-most value of the updated rectangle. */ - int16 bottom; - /** Set accordingly to what was done. */ - uint32 flags; - - State() : left(0), top(0), right(0), bottom(0), flags(0) { } - }; - - virtual ~CoktelVideo() { } - - /** Returns the features the loaded video possesses. */ - virtual uint32 getFeatures() const = 0; - /** Returns the flags the loaded video possesses. */ - virtual uint16 getFlags() const = 0; - /** Returns the x coordinate of the video. */ - virtual int16 getX() const = 0; - /** Returns the y coordinate of the video. */ - virtual int16 getY() const = 0; - /** Returns the width of the video. */ - virtual int16 getWidth() const = 0; - /** Returns the height of the video. */ - virtual int16 getHeight() const = 0; - /** Returns the number of frames the loaded video has. */ - virtual uint16 getFramesCount() const = 0; - /** Returns the current frame number. - * - * This is the current frame after the last nextFrame()-call, - * i.e. it's 0 after loading, 1 after the first nextFrame()-call, etc.. - */ - virtual uint16 getCurrentFrame() const = 0; - /** Returns the frame rate. */ - virtual int16 getFrameRate() const = 0; - /** Returns the number of frames the video lags behind the audio. */ - virtual uint32 getSyncLag() const = 0; - /** Returns the current frame's palette. */ - virtual const byte *getPalette() const = 0; - - /** Reads the video's anchor pointer */ - virtual bool getAnchor(int16 frame, uint16 partType, - int16 &x, int16 &y, int16 &width, int16 &height) = 0; - - /** Returns whether that extra data file exists */ - virtual bool hasExtraData(const char *fileName) const = 0; - /** Returns an extra data file */ - virtual Common::MemoryReadStream *getExtraData(const char *fileName) = 0; - - /** Load a video out of a stream. */ - virtual bool load(Common::SeekableReadStream &stream) = 0; - /** Unload the currently loaded video. */ - virtual void unload() = 0; - - /** Set the frame rate. */ - virtual void setFrameRate(int16 frameRate) = 0; - - /** Set the coordinations where to draw the video. */ - virtual void setXY(int16 x, int16 y) = 0; - /** Use a specific memory block as video memory. */ - virtual void setVideoMemory(byte *vidMem, uint16 width, uint16 height) = 0; - /** Use an own memory block as video memory. */ - virtual void setVideoMemory() = 0; - - /** Double the video's resolution. */ - virtual void setDoubleMode(bool doubleMode) = 0; - - /** Play sound (if the video has sound). */ - virtual void enableSound(Audio::Mixer &mixer) = 0; - /** Don't play sound or stop currently playing sound. */ - virtual void disableSound() = 0; - - /** Is sound currently playing? */ - virtual bool isSoundPlaying() const = 0; - - /** Seek to a specific frame. - * - * @param frame The frame to which to seek. - * @param whence The offset from whence the frame is given. - * @param restart Restart the video to reach an otherwise inaccessible frame? - */ - virtual void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false) = 0; - - /** Render the next frame. */ - virtual State nextFrame() = 0; - /** Wait for the frame to end. */ - virtual void waitEndFrame() = 0; - - /** Notifies the video that it was paused for duration ms. */ - virtual void notifyPaused(uint32 duration) = 0; - - /** Copy the current frame. - * - * @param dest The memory to which to copy the current frame. - * @param left The x position within the frame. - * @param top The y position within the frame. - * @param width The width of the area to copy. - * @param height The height of the area to copy. - * @param x The x position to where to copy. - * @param y The y position to where to copy. - * @param pitch The buffer's width. - * @param transp Which color should be seen as transparent? - */ - virtual void copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1) = 0; -}; - -/** Coktel Vision's IMD files. - */ -class Imd : public CoktelVideo { -public: - Imd(); - ~Imd(); - - uint32 getFeatures() const { return _features; } - uint16 getFlags() const { return _flags; } - int16 getX() const { return _x; } - int16 getY() const { return _y; } - int16 getWidth() const { return _width; } - int16 getHeight() const { return _height; } - uint16 getFramesCount() const { return _framesCount; } - uint16 getCurrentFrame() const { return _curFrame; } - int16 getFrameRate() const { - if (_hasSound) - return 1000 / (_soundSliceLength >> 16); - return _frameRate; - } - uint32 getSyncLag() const { return _skipFrames; } - const byte *getPalette() const { return _palette; } - - bool getAnchor(int16 frame, uint16 partType, - int16 &x, int16 &y, int16 &width, int16 &height) { return false; } - - bool hasExtraData(const char *fileName) const { return false; } - Common::MemoryReadStream *getExtraData(const char *fileName) { return 0; } - - void notifyPaused(uint32 duration) { } - - void setFrameRate(int16 frameRate); - - bool load(Common::SeekableReadStream &stream); - void unload(); - - void setXY(int16 x, int16 y); - void setVideoMemory(byte *vidMem, uint16 width, uint16 height); - void setVideoMemory(); - - void setDoubleMode(bool doubleMode) { } - - void enableSound(Audio::Mixer &mixer); - void disableSound(); - - bool isSoundPlaying() const; - - void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false); - - State nextFrame(); - void waitEndFrame(); - - void copyCurrentFrame(byte *dest, - uint16 left, uint16 top, uint16 width, uint16 height, - uint16 x, uint16 y, uint16 pitch, int16 transp = -1); - -protected: - struct Coord { - int16 left; - int16 top; - int16 right; - int16 bottom; - } PACKED_STRUCT; - - Common::SeekableReadStream *_stream; - uint16 _version; - uint32 _features; - uint16 _flags; - int16 _x, _y, _width, _height; - int16 _stdX, _stdY, _stdWidth, _stdHeight; - uint16 _framesCount, _curFrame; - uint32 *_framesPos; - uint32 _firstFramePos; - Coord *_frameCoords; - - uint32 _frameDataSize, _vidBufferSize; - byte *_frameData, *_vidBuffer; - uint32 _frameDataLen; - - byte _palette[768]; - - bool _hasOwnVidMem; - byte *_vidMem; - uint16 _vidMemWidth, _vidMemHeight; - - bool _hasSound; - bool _soundEnabled; - uint8 _soundStage; // (0: no sound, 1: loaded, 2: playing) - uint32 _skipFrames; - - uint16 _soundFlags; - int16 _soundFreq; - int16 _soundSliceSize; - int16 _soundSlicesCount; - uint32 _soundSliceLength; - - Audio::AppendableAudioStream *_audioStream; - Audio::SoundHandle _audioHandle; - - int16 _frameRate; - uint32 _frameLength; - uint32 _lastFrameTime; - - Audio::Mixer *_mixer; - - void unsignedToSigned(byte *buffer, int length) { - while (length-- > 0) *buffer++ ^= 0x80; - } - - void deleteVidMem(bool del = true); - void clear(bool del = true); - - State processFrame(uint16 frame); - uint32 renderFrame(int16 left, int16 top, int16 right, int16 bottom); - void deLZ77(byte *dest, byte *src); -}; - -class Vmd : public Imd { -public: - Vmd(Graphics::PaletteLUT *palLUT = 0); - ~Vmd(); - - bool getAnchor(int16 frame, uint16 partType, - int16 &x, int16 &y, int16 &width, int16 &height); - - bool hasExtraData(const char *fileName) const; - Common::MemoryReadStream *getExtraData(const char *fileName); - - bool load(Common::SeekableReadStream &stream); - void unload(); - - int16 getWidth() const; - - void setXY(int16 x, int16 y); - - void setDoubleMode(bool doubleMode); - - void seekFrame(int32 frame, int16 whence = SEEK_SET, bool restart = false); - - State nextFrame(); - -protected: - enum PartType { - kPartTypeSeparator = 0, - kPartTypeAudio = 1, - kPartTypeVideo = 2, - kPartTypeExtraData = 3 - }; - struct ExtraData { - char name[16]; - uint32 offset; - uint32 size; - uint32 realSize; - } PACKED_STRUCT; - struct Part { - PartType type; - byte field_1; - byte field_E; - uint32 size; - int16 left; - int16 top; - int16 right; - int16 bottom; - byte flags; - } PACKED_STRUCT; - struct Frame { - uint32 offset; - Part *parts; - - Frame() : parts(0) { } - ~Frame() { delete[] parts; } - } PACKED_STRUCT; - - static const uint16 _tableADPCM[128]; - - bool _hasVideo; - - uint32 _frameInfoOffset; - uint16 _partsPerFrame; - Frame *_frames; - - Common::Array<ExtraData> _extraData; - - byte _soundBytesPerSample; - byte _soundStereo; // (0: mono, 1: old-style stereo, 2: new-style stereo) - - bool _externalCodec; - byte _blitMode; - byte _bytesPerPixel; - byte _preScaleX; - byte _postScaleX; - byte _scaleExternalX; - byte *_vidMemBuffer; - - bool _doubleMode; - - Graphics::PaletteLUT *_palLUT; - Indeo3 *_codecIndeo3; - - void clear(bool del = true); - - State processFrame(uint16 frame); - uint32 renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom); - - void deRLE(byte *&srcPtr, byte *&destPtr, int16 len); - - inline int32 preScaleX(int32 x) const; - inline int32 postScaleX(int32 x) const; - - void blit(byte *dest, byte *src, int16 width, int16 height); - void blit16(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height); - void blit24(byte *dest, byte *src, int16 srcPitch, int16 width, int16 height); - - void emptySoundSlice(uint32 size); - void soundSlice8bit(uint32 size); - void soundSlice16bit(uint32 size, int16 &init); - void filledSoundSlice(uint32 size); - void filledSoundSlices(uint32 size, uint32 mask); - void deADPCM(byte *soundBuf, byte *dataBuf, int16 &init, uint32 n); -}; - -} // End of namespace Gob - -#endif // GOB_COKTELVIDEO_H |