Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-09-03 18:26:53 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-09-03 18:26:53 +0400
commiteff97a82f8aa7a847846275577b8e67559cfa7ea (patch)
tree2e28d815ab6b62e959411b089d8d82f99bf507e8 /source/blender/compositor
parentbf395ff0b8b5a566d620eda3a65e928a9ba26f7a (diff)
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
Diffstat (limited to 'source/blender/compositor')
-rw-r--r--source/blender/compositor/nodes/COM_MovieClipNode.cpp11
-rw-r--r--source/blender/compositor/operations/COM_MovieClipOperation.cpp10
2 files changed, 11 insertions, 10 deletions
diff --git a/source/blender/compositor/nodes/COM_MovieClipNode.cpp b/source/blender/compositor/nodes/COM_MovieClipNode.cpp
index a250841b160..6d5b9bba8aa 100644
--- a/source/blender/compositor/nodes/COM_MovieClipNode.cpp
+++ b/source/blender/compositor/nodes/COM_MovieClipNode.cpp
@@ -49,10 +49,14 @@ void MovieClipNode::convertToOperations(ExecutionSystem *graph, CompositorContex
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 @@ void MovieClipNode::convertToOperations(ExecutionSystem *graph, CompositorContex
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;
diff --git a/source/blender/compositor/operations/COM_MovieClipOperation.cpp b/source/blender/compositor/operations/COM_MovieClipOperation.cpp
index b73db74b061..709e4b7d4b0 100644
--- a/source/blender/compositor/operations/COM_MovieClipOperation.cpp
+++ b/source/blender/compositor/operations/COM_MovieClipOperation.cpp
@@ -48,14 +48,10 @@ void MovieClipOperation::initExecution()
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;
-
- ibuf = BKE_movieclip_get_ibuf_flag(this->m_movieClip, this->m_movieClipUser, flag, MOVIECLIP_CACHE_SKIP);
- }
+ else
+ ibuf = BKE_movieclip_get_ibuf_flag(this->m_movieClip, this->m_movieClipUser, this->m_movieClip->flag, MOVIECLIP_CACHE_SKIP);
if (ibuf) {
this->m_movieClipBuffer = ibuf;