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>2016-03-15 13:07:18 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-03-15 13:07:18 +0300
commit647a4ea2f7a057159aae29d875e20db2809b563b (patch)
tree859184efa5655e441fa803ab273466afe28cf7c6 /source/blender/blenkernel/intern/movieclip.c
parent5879778c38112c7de9560e58a0ea9b901d014a96 (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.c21
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);