diff options
author | Richard Antalik <richardantalik@gmail.com> | 2019-05-23 21:52:28 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2019-05-23 21:52:28 +0300 |
commit | fd51d2f97cbe0117e8939396f196366a0043849e (patch) | |
tree | b0d1c8c41fa1cf0332cac64424b0b20191069411 /source/blender/blenkernel/intern/sequencer.c | |
parent | 1fd7b380f4cf8a0489b405de2819f228a4da5ea2 (diff) |
VSE: minimal cache invalidation
Diffstat (limited to 'source/blender/blenkernel/intern/sequencer.c')
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 29e9776407d..d6347f5e84d 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -279,7 +279,7 @@ static void BKE_sequence_free_ex(Scene *scene, */ if (do_cache) { if (scene) { - BKE_sequence_invalidate_cache(scene, seq); + BKE_sequence_invalidate_cache_raw(scene, seq); } } @@ -4307,7 +4307,8 @@ static void sequence_do_invalidate_dependent(Scene *scene, Sequence *seq, ListBa } if (BKE_sequence_check_depend(seq, cur)) { - BKE_sequencer_cache_cleanup_sequence(scene, cur); + BKE_sequencer_cache_cleanup_sequence( + scene, cur, seq, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT); } if (cur->seqbase.first) { @@ -4319,46 +4320,46 @@ static void sequence_do_invalidate_dependent(Scene *scene, Sequence *seq, ListBa static void sequence_invalidate_cache(Scene *scene, Sequence *seq, bool invalidate_self, - bool UNUSED(invalidate_preprocess)) + int invalidate_types) { Editing *ed = scene->ed; - /* invalidate cache for current sequence */ if (invalidate_self) { - /* Animation structure holds some buffers inside, - * so for proper cache invalidation we need to - * re-open the animation. - */ BKE_sequence_free_anim(seq); - BKE_sequencer_cache_cleanup_sequence(scene, seq); + BKE_sequencer_cache_cleanup_sequence(scene, seq, seq, invalidate_types); } - /* if invalidation is invoked from sequence free routine, effectdata would be NULL here */ if (seq->effectdata && seq->type == SEQ_TYPE_SPEED) { BKE_sequence_effect_speed_rebuild_map(scene, seq, true); } - /* invalidate cache for all dependent sequences */ - - /* NOTE: can not use SEQ_BEGIN/SEQ_END here because that macro will change sequence's depth, - * which makes transformation routines work incorrect - */ sequence_do_invalidate_dependent(scene, seq, &ed->seqbase); } -void BKE_sequence_invalidate_cache(Scene *scene, Sequence *seq) +void BKE_sequence_invalidate_cache_raw(Scene *scene, Sequence *seq) { - sequence_invalidate_cache(scene, seq, true, true); + sequence_invalidate_cache(scene, seq, true, SEQ_CACHE_ALL_TYPES); } -void BKE_sequence_invalidate_dependent(Scene *scene, Sequence *seq) +void BKE_sequence_invalidate_cache_preprocessed(Scene *scene, Sequence *seq) { - sequence_invalidate_cache(scene, seq, false, true); + sequence_invalidate_cache(scene, + seq, + true, + SEQ_CACHE_STORE_PREPROCESSED | SEQ_CACHE_STORE_COMPOSITE | + SEQ_CACHE_STORE_FINAL_OUT); } -void BKE_sequence_invalidate_cache_for_modifier(Scene *scene, Sequence *seq) +void BKE_sequence_invalidate_cache_composite(Scene *scene, Sequence *seq) +{ + sequence_invalidate_cache( + scene, seq, true, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT); +} + +void BKE_sequence_invalidate_dependent(Scene *scene, Sequence *seq) { - sequence_invalidate_cache(scene, seq, true, false); + sequence_invalidate_cache( + scene, seq, false, SEQ_CACHE_STORE_COMPOSITE | SEQ_CACHE_STORE_FINAL_OUT); } void BKE_sequencer_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render) |