diff options
author | Peter Schlaile <peter@schlaile.de> | 2008-05-25 20:07:32 +0400 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2008-05-25 20:07:32 +0400 |
commit | 20b4bf4abaff8723421fb2fed96eff90e9ed1a00 (patch) | |
tree | 72111356447cac8c4534006dea6feac196e39681 /source/blender/src/sequence.c | |
parent | 03ccc38ddfad7a7156d9c0f4b30e4dfc8f32f72f (diff) |
== Sequencer ==
Fixes
[#12106] Memory leak in sequencer (>10MB/frame)
in parts: inner contents of meta strips are freed up after calculation
making more room for the cache.
Actually have to think of a mechanism, that remembers, which output
frames are asked for and caches only those.
Diffstat (limited to 'source/blender/src/sequence.c')
-rw-r--r-- | source/blender/src/sequence.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 1aca097e373..bf519dd6e9c 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -1632,6 +1632,36 @@ static void copy_to_ibuf_still(Sequence * seq, TStripElem * se) } } +static void free_metastrip_imbufs(ListBase *seqbasep, int cfra, int chanshown) +{ + Sequence* seq_arr[MAXSEQ+1]; + int i; + TStripElem* se = 0; + + evaluate_seq_frame_gen(seq_arr, seqbasep, cfra); + + for (i = 0; i < MAXSEQ; i++) { + if (!video_seq_is_rendered(seq_arr[i])) { + continue; + } + se = give_tstripelem(seq_arr[i], cfra); + if (se) { + if (se->ibuf) { + IMB_freeImBuf(se->ibuf); + + se->ibuf= 0; + se->ok= STRIPELEM_OK; + } + + if (se->ibuf_comp) { + IMB_freeImBuf(se->ibuf_comp); + + se->ibuf_comp = 0; + } + } + } + +} static TStripElem* do_build_seq_array_recursively( ListBase *seqbasep, int cfra, int chanshown); @@ -1682,6 +1712,10 @@ static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra, use_limiter = TRUE; } } + if (meta_se) { + free_metastrip_imbufs( + &seq->seqbase, seq->start + se->nr, 0); + } if (use_limiter) { input_preprocess(seq, se, cfra); |