aboutsummaryrefslogtreecommitdiff
path: root/graphics/video/video_player.h
diff options
context:
space:
mode:
authorFilippos Karapetis2009-01-07 21:19:00 +0000
committerFilippos Karapetis2009-01-07 21:19:00 +0000
commit2772a7aaf13b83f8bdb5c27bd0b519127950de20 (patch)
treea451f67fafdf6641b601b281bf9088820f13e63e /graphics/video/video_player.h
parent1395d3ba639ac543dc8f982aafb99781cdb4afbb (diff)
downloadscummvm-rg350-2772a7aaf13b83f8bdb5c27bd0b519127950de20.tar.gz
scummvm-rg350-2772a7aaf13b83f8bdb5c27bd0b519127950de20.tar.bz2
scummvm-rg350-2772a7aaf13b83f8bdb5c27bd0b519127950de20.zip
Further merging of the SMK and DXA players (the FLIC player is not done yet):
- Added a new class, VideoPlayer(), from which both the SMK and the DXA player inherit. This class provides generic functions and public methods for the inherited video classes. Default implementations have been made for these public methods, and the virtual ones can be overriden in inherited classes - There is now a default implementation of the function that sets the video palette - A basic video player for inherited classes has been added with method playVideo(). This is able to play a fullscreen non-interactive video, which can be skipped with events set by the caller. Postprocessing methods, which draw upon each frame (e.g. subtitles) can be done by implementing performPostProcessing() - The FTA2 movie player now uses the new playVideo() method - The new video player code is compatible with the old one (i.e. no changes to the existing engine code are necessary), but it's now possible to reduce engine code for video playing considerably svn-id: r35772
Diffstat (limited to 'graphics/video/video_player.h')
-rw-r--r--graphics/video/video_player.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/graphics/video/video_player.h b/graphics/video/video_player.h
new file mode 100644
index 0000000000..6d346f398d
--- /dev/null
+++ b/graphics/video/video_player.h
@@ -0,0 +1,170 @@
+/* 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 GRAPHICS_VIDEO_PLAYER_H
+#define GRAPHICS_VIDEO_PLAYER_H
+
+#include "common/scummsys.h"
+#include "common/stream.h"
+#include "common/system.h"
+#include "common/list.h"
+#include "sound/mixer.h"
+#include "sound/audiostream.h"
+
+namespace Graphics {
+
+/**
+ * Implementation of a generic video decoder
+ */
+class VideoPlayer {
+public:
+ VideoPlayer();
+ virtual ~VideoPlayer();
+
+ /**
+ * Returns the width of the video
+ * @return the width of the video
+ */
+ virtual int getWidth();
+
+ /**
+ * Returns the height of the video
+ * @return the height of the video
+ */
+ virtual int getHeight();
+
+ /**
+ * Returns the current frame number of the video
+ * @return the current frame number of the video
+ */
+ virtual int32 getCurFrame();
+
+ /**
+ * Returns the amount of frames in the video
+ * @return the amount of frames in the video
+ */
+ virtual int32 getFrameCount();
+
+ /**
+ * Returns the frame rate of the video
+ * @return the frame rate of the video
+ */
+ virtual int32 getFrameRate();
+
+ /**
+ * Returns the time to wait for each frame in 1/100 ms
+ * @return the time to wait for each frame in 1/100 ms
+ */
+ virtual int32 getFrameDelay();
+
+ /**
+ * Returns the current A/V lag in 1/100 ms
+ * If > 0, audio lags behind
+ * If < 0, video lags behind
+ * @return the current A/V lag in 1/100 ms
+ */
+ virtual int32 getAudioLag();
+
+ /**
+ * Returns the time to wait until the next frame in ms, minding any lag
+ * @return the time to wait until the next frame in ms
+ */
+ virtual uint32 getFrameWaitTime();
+
+ /**
+ * Load a video file
+ * @param filename the filename to load
+ */
+ virtual bool loadFile(const char *filename);
+
+ /**
+ * Close a video file
+ */
+ virtual void closeFile();
+
+ /**
+ * Returns if a video file is loaded or not
+ */
+ bool videoIsLoaded() { return (_fileStream != NULL); }
+
+ /**
+ * Set RGB palette, based on current frame
+ * @param pal the RGB palette data
+ */
+ virtual void setPalette(byte *pal);
+
+ /**
+ * Copy current frame into the specified position of the destination
+ * buffer.
+ * @param dst the buffer
+ * @param x the x position of the buffer
+ * @param y the y position of the buffer
+ * @param pitch the pitch of buffer
+ */
+ void copyFrameToBuffer(byte *dst, uint x, uint y, uint pitch);
+
+ /**
+ * Decode the next frame
+ */
+ virtual bool decodeNextFrame();
+
+ /**
+ * A default implementation of a video player
+ * Plays a non-interactive full screen video till it's stopped by a
+ * specific event
+ * @param filename the name of the file to play
+ * @param stopEvents a list of events that can stop the video
+ */
+ bool playVideo(const char *filename, Common::List<Common::Event> *stopEvents);
+
+ /**
+ * Perform postprocessing once the frame data is copied to the screen,
+ * right before the frame is drawn. Called from playVideo()
+ */
+ virtual void performPostProcessing(byte *screen);
+
+protected:
+ struct {
+ uint32 width;
+ uint32 height;
+ uint32 frameCount;
+ int32 frameRate;
+ int32 frameDelay;
+ uint32 currentFrame;
+ uint32 startTime;
+ } _videoInfo;
+
+ Common::SeekableReadStream *_fileStream;
+ byte *_videoFrameBuffer;
+ byte _videoPalette[256 * 4];
+ bool _skipVideo;
+
+private:
+ void processVideoEvents(Common::List<Common::Event> *stopEvents);
+};
+
+} // End of namespace Graphics
+
+#endif