diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-15 13:07:18 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-03-15 13:07:18 +0300 |
commit | 647a4ea2f7a057159aae29d875e20db2809b563b (patch) | |
tree | 859184efa5655e441fa803ab273466afe28cf7c6 /source/blender/blenkernel/intern/movieclip.c | |
parent | 5879778c38112c7de9560e58a0ea9b901d014a96 (diff) |
Fix T47577: Movie clip uses too much memory with still image sequences
Diffstat (limited to 'source/blender/blenkernel/intern/movieclip.c')
-rw-r--r-- | source/blender/blenkernel/intern/movieclip.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c index 9b9838a3f76..a8d3c600817 100644 --- a/source/blender/blenkernel/intern/movieclip.c +++ b/source/blender/blenkernel/intern/movieclip.c @@ -367,6 +367,8 @@ typedef struct MovieClipCache { } stabilized; int sequence_offset; + + bool is_still_sequence; } MovieClipCache; typedef struct MovieClipImBufCacheKey { @@ -465,7 +467,12 @@ static ImBuf *get_imbuf_cache(MovieClip *clip, if (clip->cache) { MovieClipImBufCacheKey key; - key.framenr = user_frame_to_cache_frame(clip, user->framenr); + if (!clip->cache->is_still_sequence) { + key.framenr = user_frame_to_cache_frame(clip, user->framenr); + } + else { + key.framenr = 1; + } if (flag & MCLIP_USE_PROXY) { key.proxy = rendersize_to_proxy(user, flag); @@ -533,9 +540,19 @@ static bool put_imbuf_cache(MovieClip *clip, clip->cache->moviecache = moviecache; clip->cache->sequence_offset = -1; + if (clip->source == MCLIP_SRC_SEQUENCE) { + unsigned short numlen; + BLI_stringdec(clip->name, NULL, NULL, &numlen); + clip->cache->is_still_sequence = (numlen == 0); + } } - key.framenr = user_frame_to_cache_frame(clip, user->framenr); + if (!clip->cache->is_still_sequence) { + key.framenr = user_frame_to_cache_frame(clip, user->framenr); + } + else { + key.framenr = 1; + } if (flag & MCLIP_USE_PROXY) { key.proxy = rendersize_to_proxy(user, flag); |