[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