aboutsummaryrefslogtreecommitdiffstats
path: root/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-11-25 11:05:44 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2010-11-25 11:05:44 +0000
commitf238d1fd97cb605da60bbad619baa215d4569c32 (patch)
tree1a953af7850e03227486bab2a7d6db6560f249d1 /mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
parentb84df627dc3910e8685de787ba7eb9541e8f2ae8 (diff)
downloadusdx-f238d1fd97cb605da60bbad619baa215d4569c32.tar.gz
usdx-f238d1fd97cb605da60bbad619baa215d4569c32.tar.xz
usdx-f238d1fd97cb605da60bbad619baa215d4569c32.zip
move /src/plugins/media to src/mediaplugins and /game/plugins/media to /game/mediaplugins
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2753 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h')
-rw-r--r--mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
new file mode 100644
index 00000000..9b0df889
--- /dev/null
+++ b/mediaplugin/src/mediaplugins/ffmpeg/ffmpeg_video_decode.h
@@ -0,0 +1,113 @@
+/* UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe 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; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ */
+#ifndef _FFMPEG_VIDEO_DECODE_H_
+#define _FFMPEG_VIDEO_DECODE_H_
+
+#include "ffmpeg_core.h"
+#include "core/plugin_video_decode.h"
+
+// uncomment if you want to see the debug stuff
+//#define DEBUG_DISPLAY
+//#define DEBUG_FRAMES
+
+// use BGR-format for accelerated colorspace conversion with swscale
+#ifdef USE_SWSCALE
+# define PIXEL_FMT_BGR
+#endif
+
+#define PIXEL_FMT_BGR
+
+#ifdef PIXEL_FMT_BGR
+# define PIXEL_FMT_FFMPEG PIX_FMT_BGR24
+# define PIXEL_FMT_SIZE 3
+// looks strange on linux
+//# define PIXEL_FMT_FFMPEG PIX_FMT_BGR32;
+//# define PIXEL_FMT_SIZE 4;
+#else
+// looks strange on linux:
+# define PIXEL_FMT_FFMPEG PIX_FMT_RGB24
+# define PIXEL_FMT_SIZE 3
+#endif
+
+extern const videoDecoderInfo_t videoDecoderInfo;
+
+class FFmpegVideoDecodeStream : public VideoDecodeStream {
+private:
+ bool _opened; //**< stream successfully opened
+ bool _eof; //**< end-of-file state
+
+ bool _loop; //**< looping enabled
+
+ AVStream *_stream;
+ int _streamIndex;
+ AVFormatContext *_formatContext;
+ AVCodecContext *_codecContext;
+ AVCodec *_codec;
+
+ AVFrame *_avFrame;
+ AVFrame *_avFrameRGB;
+
+ uint8_t *_frameBuffer; //**< stores a FFmpeg video frame
+ bool _frameTexValid; //**< if true, fFrameTex contains the current frame
+
+#ifdef USE_SWSCALE
+ SwsContext *_swScaleContext;
+#endif
+
+ double _aspect; //**< width/height ratio
+
+ long double _frameDuration; //**< duration of a video frame in seconds (= 1/fps)
+ long double _frameTime; //**< video time position (absolute)
+ long double _loopTime; //**< start time of the current loop
+
+ FFmpegVideoDecodeStream();
+
+ bool decodeFrame();
+ void synchronizeTime(AVFrame *frame, double &pts);
+
+ bool _open(const IPath &filename);
+ void close();
+
+public:
+ virtual ~FFmpegVideoDecodeStream() {
+ close();
+ }
+
+ static FFmpegVideoDecodeStream* open(const IPath &filename);
+
+ virtual void setLoop(bool enable);
+ virtual bool getLoop();
+
+ virtual void setPosition(double time);
+ virtual double getPosition();
+
+ virtual int getFrameWidth();
+ virtual int getFrameHeight();
+
+ virtual double getFrameAspect();
+ virtual uint8_t* getFrame(long double time);
+};
+
+#endif /* _FFMPEG_VIDEO_DECODE_H_ */