diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-09-03 18:26:53 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-09-03 18:26:53 +0400 |
commit | eff97a82f8aa7a847846275577b8e67559cfa7ea (patch) | |
tree | 2e28d815ab6b62e959411b089d8d82f99bf507e8 /source/blender/compositor | |
parent | bf395ff0b8b5a566d620eda3a65e928a9ba26f7a (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.cpp | 11 | ||||
-rw-r--r-- | source/blender/compositor/operations/COM_MovieClipOperation.cpp | 10 |
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; |