[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17264] trunk/blender/source/gameengine/ VideoTexture: BGE Video Texture: fix constant initializer problem with Exception description.
Benoit Bolsee
benoit.bolsee at online.be
Sat Nov 1 13:48:47 CET 2008
Revision: 17264
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17264
Author: ben2610
Date: 2008-11-01 13:48:46 +0100 (Sat, 01 Nov 2008)
Log Message:
-----------
BGE Video Texture: fix constant initializer problem with Exception description. Uniformized the line ending.
Modified Paths:
--------------
trunk/blender/source/gameengine/VideoTexture/Exception.cpp
trunk/blender/source/gameengine/VideoTexture/Exception.h
trunk/blender/source/gameengine/VideoTexture/ImageMix.cpp
trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp
trunk/blender/source/gameengine/VideoTexture/Texture.cpp
trunk/blender/source/gameengine/VideoTexture/Texture.h
trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.cpp
trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.h
trunk/blender/source/gameengine/VideoTexture/blendVideoTex.cpp
Modified: trunk/blender/source/gameengine/VideoTexture/Exception.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/Exception.cpp 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/Exception.cpp 2008-11-01 12:48:46 UTC (rev 17264)
@@ -44,7 +44,6 @@
ExpDesc::ExpDesc (ExceptionID & exp, char * desc, RESULT hres)
: m_expID(exp), m_hRslt(hres), m_description(desc)
{
- m_expDescs.push_back(this);
}
// destructor
@@ -196,3 +195,15 @@
m_fileName = xpt.m_fileName;
m_line = xpt.m_line;
}
+
+void registerAllExceptions(void)
+{
+ errGenerDesc.registerDesc();
+ errNFoundDesc.registerDesc();
+ MaterialNotAvailDesc.registerDesc();
+ ImageSizesNotMatchDesc.registerDesc();
+ SceneInvalidDesc.registerDesc();
+ CameraInvalidDesc.registerDesc();
+ SourceVideoEmptyDesc.registerDesc();
+ SourceVideoCreationDesc.registerDesc();
+}
Modified: trunk/blender/source/gameengine/VideoTexture/Exception.h
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/Exception.h 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/Exception.h 2008-11-01 12:48:46 UTC (rev 17264)
@@ -27,6 +27,7 @@
#include <exception>
#include <vector>
#include <string>
+#include <algorithm>
#include "Common.h"
@@ -117,6 +118,11 @@
desc = m_description;
}
+ void registerDesc(void)
+ {
+ if (std::find(m_expDescs.begin(), m_expDescs.end(), this) == m_expDescs.end())
+ m_expDescs.push_back(this);
+ }
// list of exception descriptions
static std::vector<ExpDesc*> m_expDescs;
@@ -192,4 +198,13 @@
};
+extern ExpDesc MaterialNotAvailDesc;
+extern ExpDesc ImageSizesNotMatchDesc;
+extern ExpDesc SceneInvalidDesc;
+extern ExpDesc CameraInvalidDesc;
+extern ExpDesc SourceVideoEmptyDesc;
+extern ExpDesc SourceVideoCreationDesc;
+
+
+void registerAllExceptions(void);
#endif
Modified: trunk/blender/source/gameengine/VideoTexture/ImageMix.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/ImageMix.cpp 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/ImageMix.cpp 2008-11-01 12:48:46 UTC (rev 17264)
@@ -58,9 +58,9 @@
return true;
}
-static ExceptionID ImageSizesNotMatch;
+ExceptionID ImageSizesNotMatch;
-static ExpDesc ImageSizesNotMatchDesc (ImageSizesNotMatch, "Image sizes of sources are different");
+ExpDesc ImageSizesNotMatchDesc (ImageSizesNotMatch, "Image sizes of sources are different");
// calculate image from sources and set its availability
void ImageMix::calcImage (unsigned int texId)
Modified: trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp 2008-11-01 12:48:46 UTC (rev 17264)
@@ -94,6 +94,10 @@
ImageViewport::calcImage(texId);
}
+void ImageRender::Render()
+{
+ //
+}
// refresh lights
void ImageRender::refreshLights (void)
@@ -120,9 +124,9 @@
BlendType<KX_Camera> cameraType ("KX_Camera");
-static ExceptionID SceneInvalid, CameraInvalid;
-static ExpDesc SceneInvalidDesc (SceneInvalid, "Scene object is invalid");
-static ExpDesc CameraInvalidDesc (CameraInvalid, "Camera object is invalid");
+ExceptionID SceneInvalid, CameraInvalid;
+ExpDesc SceneInvalidDesc (SceneInvalid, "Scene object is invalid");
+ExpDesc CameraInvalidDesc (CameraInvalid, "Camera object is invalid");
// object initialization
static int ImageRender_init (PyObject * pySelf, PyObject * args, PyObject * kwds)
Modified: trunk/blender/source/gameengine/VideoTexture/Texture.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/Texture.cpp 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/Texture.cpp 2008-11-01 12:48:46 UTC (rev 17264)
@@ -165,8 +165,8 @@
}
-static ExceptionID MaterialNotAvail;
-static ExpDesc MaterialNotAvailDesc (MaterialNotAvail, "Texture material is not available");
+ExceptionID MaterialNotAvail;
+ExpDesc MaterialNotAvailDesc (MaterialNotAvail, "Texture material is not available");
// Texture object initialization
int Texture_init (Texture *self, PyObject *args, PyObject *kwds)
@@ -272,13 +272,13 @@
PyErr_SetString(PyExc_TypeError, "The value must be a bool");
return NULL;
}
- // some trick here: we are in the business of loading a texture,
- // no use to do it if we are still in the same rendering frame.
- // We find this out by looking at the engine current clock time
- KX_KetsjiEngine* engine = KX_GetActiveEngine();
- if (engine->GetClockTime() != self->m_lastClock)
- {
- self->m_lastClock = engine->GetClockTime();
+ // some trick here: we are in the business of loading a texture,
+ // no use to do it if we are still in the same rendering frame.
+ // We find this out by looking at the engine current clock time
+ KX_KetsjiEngine* engine = KX_GetActiveEngine();
+ if (engine->GetClockTime() != self->m_lastClock)
+ {
+ self->m_lastClock = engine->GetClockTime();
// set source refresh
bool refreshSource = (param == Py_True);
// try to proces texture from source
Modified: trunk/blender/source/gameengine/VideoTexture/Texture.h
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/Texture.h 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/Texture.h 2008-11-01 12:48:46 UTC (rev 17264)
@@ -60,7 +60,7 @@
// scaled image buffer size
unsigned int m_scaledImgSize;
// last refresh
- double m_lastClock;
+ double m_lastClock;
// image source
PyImage * m_source;
Modified: trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.cpp
===================================================================
--- trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2008-11-01 12:45:19 UTC (rev 17263)
+++ trunk/blender/source/gameengine/VideoTexture/VideoFFmpeg.cpp 2008-11-01 12:48:46 UTC (rev 17264)
@@ -51,11 +51,11 @@
m_lastFrame(-1), m_curPosition(-1), m_startTime(0),
m_captWidth(0), m_captHeight(0), m_captRate(0.f)
{
- // set video format
- m_format = RGB24;
- // force flip because ffmpeg always return the image in the wrong orientation for texture
- setFlip(true);
- // construction is OK
+ // set video format
+ m_format = RGB24;
+ // force flip because ffmpeg always return the image in the wrong orientation for texture
+ setFlip(true);
+ // construction is OK
*hRslt = S_OK;
}
@@ -175,9 +175,9 @@
#else
m_baseFrameRate = av_q2d(formatCtx->streams[videoStream]->r_frame_rate);
#endif
- if (m_baseFrameRate <= 0.0)
- m_baseFrameRate = defFrameRate;
-
+ if (m_baseFrameRate <= 0.0)
+ m_baseFrameRate = defFrameRate;
+
m_codec = codec;
m_codecCtx = codecCtx;
m_formatCtx = formatCtx;
@@ -241,9 +241,9 @@
else
m_preseek = 0;
- // get video time range
+ // get video time range
m_range[0] = 0.0;
- m_range[1] = (double)m_formatCtx->duration / AV_TIME_BASE;
+ m_range[1] = (double)m_formatCtx->duration / AV_TIME_BASE;
// open base class
VideoBase::openFile(filename);
@@ -265,7 +265,7 @@
AVInputFormat *inputFormat;
AVFormatParameters formatParams;
AVRational frameRate;
- char *p, filename[28], rateStr[20];
+ char filename[28], rateStr[20];
do_init_ffmpeg();
@@ -333,8 +333,8 @@
// for video capture it is important to do non blocking read
m_formatCtx->flags |= AVFMT_FLAG_NONBLOCK;
- // open base class
- VideoBase::openCam(file, camIdx);
+ // open base class
+ VideoBase::openCam(file, camIdx);
}
@@ -346,7 +346,7 @@
// if object is able to play
if (VideoBase::play())
{
- // set video position
+ // set video position
setPositions();
// return success
return true;
@@ -372,92 +372,92 @@
}
-// set video range
-void VideoFFmpeg::setRange (double start, double stop)
-{
- try
- {
- // set range
- VideoBase::setRange(start, stop);
- // set range for video
- setPositions();
- }
- CATCH_EXCP;
-}
-
-// set framerate
-void VideoFFmpeg::setFrameRate (float rate)
-{
- VideoBase::setFrameRate(rate);
-}
-
-
-// image calculation
-void VideoFFmpeg::calcImage (unsigned int texId)
-{
- loadFrame();
-}
-
-
-// load frame from video
-void VideoFFmpeg::loadFrame (void)
-{
- // get actual time
- double actTime = PIL_check_seconds_timer() - m_startTime;
- // if video has ended
- if (m_isFile && actTime * m_frameRate >= m_range[1])
- {
- // if repeats are set, decrease them
- if (m_repeat > 0)
- --m_repeat;
- // if video has to be replayed
- if (m_repeat != 0)
- {
- // reset its position
- actTime -= (m_range[1] - m_range[0]) / m_frameRate;
- m_startTime += (m_range[1] - m_range[0]) / m_frameRate;
- }
- // if video has to be stopped, stop it
- else
- m_status = SourceStopped;
- }
- // if video is playing
- if (m_status == SourcePlaying)
- {
- // actual frame
- long actFrame = m_isFile ? long(actTime * actFrameRate()) : m_lastFrame + 1;
- // if actual frame differs from last frame
- if (actFrame != m_lastFrame)
- {
- // get image
- if(grabFrame(actFrame))
- {
- AVFrame* frame = getFrame();
- // save actual frame
- m_lastFrame = actFrame;
- // init image, if needed
- init(short(m_codecCtx->width), short(m_codecCtx->height));
- // process image
- process((BYTE*)(frame->data[0]));
- }
- }
- }
-}
-
-
-// set actual position
-void VideoFFmpeg::setPositions (void)
-{
- // set video start time
- m_startTime = PIL_check_seconds_timer();
- // if file is played and actual position is before end position
- if (m_isFile && m_lastFrame >= 0 && m_lastFrame < m_range[1] * actFrameRate())
- // continue from actual position
- m_startTime -= double(m_lastFrame) / actFrameRate();
- else
- m_startTime -= m_range[0];
-}
-
+// set video range
+void VideoFFmpeg::setRange (double start, double stop)
+{
+ try
+ {
+ // set range
+ VideoBase::setRange(start, stop);
+ // set range for video
+ setPositions();
+ }
+ CATCH_EXCP;
+}
+
+// set framerate
+void VideoFFmpeg::setFrameRate (float rate)
+{
+ VideoBase::setFrameRate(rate);
+}
+
+
+// image calculation
+void VideoFFmpeg::calcImage (unsigned int texId)
+{
+ loadFrame();
+}
+
+
+// load frame from video
+void VideoFFmpeg::loadFrame (void)
+{
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list