[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50355] trunk/blender/source/blender/ compositor: Fix for compositor always cacheing frames when using Movie Clip input node
Sergey Sharybin
sergey.vfx at gmail.com
Mon Sep 3 16:26:54 CEST 2012
Revision: 50355
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50355
Author: nazgul
Date: 2012-09-03 14:26:53 +0000 (Mon, 03 Sep 2012)
Log Message:
-----------
Fix for compositor always cacheing frames when using Movie Clip input node
Issue was caused by getting image from compositor node conversion code,
now it'll check whether rendering happens and if so, frame wouldn't be
stored in the cache.
This possible fixes #32465: Memory leak when rendering
Modified Paths:
--------------
trunk/blender/source/blender/compositor/nodes/COM_MovieClipNode.cpp
trunk/blender/source/blender/compositor/operations/COM_MovieClipOperation.cpp
Modified: trunk/blender/source/blender/compositor/nodes/COM_MovieClipNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_MovieClipNode.cpp 2012-09-03 14:08:03 UTC (rev 50354)
+++ trunk/blender/source/blender/compositor/nodes/COM_MovieClipNode.cpp 2012-09-03 14:26:53 UTC (rev 50355)
@@ -49,10 +49,14 @@
bNode *editorNode = this->getbNode();
MovieClip *movieClip = (MovieClip *)editorNode->id;
MovieClipUser *movieClipUser = (MovieClipUser *)editorNode->storage;
-
+ bool cacheFrame = !context->isRendering();
+
ImBuf *ibuf = NULL;
if (movieClip) {
- ibuf = BKE_movieclip_get_ibuf(movieClip, movieClipUser);
+ if (cacheFrame)
+ ibuf = BKE_movieclip_get_ibuf(movieClip, movieClipUser);
+ else
+ ibuf = BKE_movieclip_get_ibuf_flag(movieClip, movieClipUser, movieClip->flag, MOVIECLIP_CACHE_SKIP);
}
// always connect the output image
@@ -78,10 +82,11 @@
outputMovieClip->relinkConnections(operation->getOutputSocket());
}
}
+
operation->setMovieClip(movieClip);
operation->setMovieClipUser(movieClipUser);
operation->setFramenumber(context->getFramenumber());
- operation->setCacheFrame(!context->isRendering());
+ operation->setCacheFrame(cacheFrame);
graph->addOperation(operation);
MovieTrackingStabilization *stab = &movieClip->tracking.stabilization;
Modified: trunk/blender/source/blender/compositor/operations/COM_MovieClipOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_MovieClipOperation.cpp 2012-09-03 14:08:03 UTC (rev 50354)
+++ trunk/blender/source/blender/compositor/operations/COM_MovieClipOperation.cpp 2012-09-03 14:26:53 UTC (rev 50355)
@@ -48,15 +48,11 @@
BKE_movieclip_user_set_frame(this->m_movieClipUser, this->m_framenumber);
ImBuf *ibuf;
- if (this->m_cacheFrame) {
+ if (this->m_cacheFrame)
ibuf = BKE_movieclip_get_ibuf(this->m_movieClip, this->m_movieClipUser);
- }
- else {
- int flag = this->m_movieClip->flag & MCLIP_TIMECODE_FLAGS;
+ else
+ ibuf = BKE_movieclip_get_ibuf_flag(this->m_movieClip, this->m_movieClipUser, this->m_movieClip->flag, MOVIECLIP_CACHE_SKIP);
- ibuf = BKE_movieclip_get_ibuf_flag(this->m_movieClip, this->m_movieClipUser, flag, MOVIECLIP_CACHE_SKIP);
- }
-
if (ibuf) {
this->m_movieClipBuffer = ibuf;
if (ibuf->rect_float == NULL || ibuf->userflags & IB_RECT_INVALID) {
More information about the Bf-blender-cvs
mailing list